The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
9.0KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE 6 technical preview.
  4. Copyright (c) 2020 - Raw Material Software Limited
  5. You may use this code under the terms of the GPL v3
  6. (see www.gnu.org/licenses).
  7. For this technical preview, this file is not subject to commercial licensing.
  8. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
  9. EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
  10. DISCLAIMED.
  11. ==============================================================================
  12. */
  13. namespace juce
  14. {
  15. /** @internal This macro contains a list of GL extension functions that need to be dynamically loaded on Windows/Linux.
  16. @see OpenGLExtensionFunctions
  17. */
  18. #define JUCE_GL_BASE_FUNCTIONS(USE_FUNCTION) \
  19. USE_FUNCTION (glActiveTexture, void, (GLenum p1), (p1))\
  20. USE_FUNCTION (glBindBuffer, void, (GLenum p1, GLuint p2), (p1, p2))\
  21. USE_FUNCTION (glDeleteBuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\
  22. USE_FUNCTION (glGenBuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\
  23. USE_FUNCTION (glBufferData, void, (GLenum p1, GLsizeiptr p2, const GLvoid* p3, GLenum p4), (p1, p2, p3, p4))\
  24. USE_FUNCTION (glBufferSubData, void, (GLenum p1, GLintptr p2, GLsizeiptr p3, const GLvoid* p4), (p1, p2, p3, p4))\
  25. USE_FUNCTION (glCreateProgram, GLuint, (), ())\
  26. USE_FUNCTION (glDeleteProgram, void, (GLuint p1), (p1))\
  27. USE_FUNCTION (glCreateShader, GLuint, (GLenum p1), (p1))\
  28. USE_FUNCTION (glDeleteShader, void, (GLuint p1), (p1))\
  29. USE_FUNCTION (glShaderSource, void, (GLuint p1, GLsizei p2, const GLchar** p3, const GLint* p4), (p1, p2, p3, p4))\
  30. USE_FUNCTION (glCompileShader, void, (GLuint p1), (p1))\
  31. USE_FUNCTION (glAttachShader, void, (GLuint p1, GLuint p2), (p1, p2))\
  32. USE_FUNCTION (glLinkProgram, void, (GLuint p1), (p1))\
  33. USE_FUNCTION (glUseProgram, void, (GLuint p1), (p1))\
  34. USE_FUNCTION (glGetShaderiv, void, (GLuint p1, GLenum p2, GLint* p3), (p1, p2, p3))\
  35. USE_FUNCTION (glGetShaderInfoLog, void, (GLuint p1, GLsizei p2, GLsizei* p3, GLchar* p4), (p1, p2, p3, p4))\
  36. USE_FUNCTION (glGetProgramInfoLog, void, (GLuint p1, GLsizei p2, GLsizei* p3, GLchar* p4), (p1, p2, p3, p4))\
  37. USE_FUNCTION (glGetProgramiv, void, (GLuint p1, GLenum p2, GLint* p3), (p1, p2, p3))\
  38. USE_FUNCTION (glGetUniformLocation, GLint, (GLuint p1, const GLchar* p2), (p1, p2))\
  39. USE_FUNCTION (glGetAttribLocation, GLint, (GLuint p1, const GLchar* p2), (p1, p2))\
  40. USE_FUNCTION (glVertexAttribPointer, void, (GLuint p1, GLint p2, GLenum p3, GLboolean p4, GLsizei p5, const GLvoid* p6), (p1, p2, p3, p4, p5, p6))\
  41. USE_FUNCTION (glEnableVertexAttribArray, void, (GLuint p1), (p1))\
  42. USE_FUNCTION (glDisableVertexAttribArray, void, (GLuint p1), (p1))\
  43. USE_FUNCTION (glUniform1f, void, (GLint p1, GLfloat p2), (p1, p2))\
  44. USE_FUNCTION (glUniform1i, void, (GLint p1, GLint p2), (p1, p2))\
  45. USE_FUNCTION (glUniform2f, void, (GLint p1, GLfloat p2, GLfloat p3), (p1, p2, p3))\
  46. USE_FUNCTION (glUniform3f, void, (GLint p1, GLfloat p2, GLfloat p3, GLfloat p4), (p1, p2, p3, p4))\
  47. USE_FUNCTION (glUniform4f, void, (GLint p1, GLfloat p2, GLfloat p3, GLfloat p4, GLfloat p5), (p1, p2, p3, p4, p5))\
  48. USE_FUNCTION (glUniform4i, void, (GLint p1, GLint p2, GLint p3, GLint p4, GLint p5), (p1, p2, p3, p4, p5))\
  49. USE_FUNCTION (glUniform1fv, void, (GLint p1, GLsizei p2, const GLfloat* p3), (p1, p2, p3))\
  50. USE_FUNCTION (glUniformMatrix2fv, void, (GLint p1, GLsizei p2, GLboolean p3, const GLfloat* p4), (p1, p2, p3, p4))\
  51. USE_FUNCTION (glUniformMatrix3fv, void, (GLint p1, GLsizei p2, GLboolean p3, const GLfloat* p4), (p1, p2, p3, p4))\
  52. USE_FUNCTION (glUniformMatrix4fv, void, (GLint p1, GLsizei p2, GLboolean p3, const GLfloat* p4), (p1, p2, p3, p4))\
  53. USE_FUNCTION (glBindAttribLocation, void, (GLuint p1, GLuint p2, const GLchar* p3), (p1, p2, p3))
  54. /** @internal This macro contains a list of GL extension functions that need to be dynamically loaded on Windows/Linux.
  55. @see OpenGLExtensionFunctions
  56. */
  57. #define JUCE_GL_EXTENSION_FUNCTIONS(USE_FUNCTION) \
  58. USE_FUNCTION (glIsRenderbuffer, GLboolean, (GLuint p1), (p1))\
  59. USE_FUNCTION (glBindRenderbuffer, void, (GLenum p1, GLuint p2), (p1, p2))\
  60. USE_FUNCTION (glDeleteRenderbuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\
  61. USE_FUNCTION (glGenRenderbuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\
  62. USE_FUNCTION (glRenderbufferStorage, void, (GLenum p1, GLenum p2, GLsizei p3, GLsizei p4), (p1, p2, p3, p4))\
  63. USE_FUNCTION (glGetRenderbufferParameteriv, void, (GLenum p1, GLenum p2, GLint* p3), (p1, p2, p3))\
  64. USE_FUNCTION (glIsFramebuffer, GLboolean, (GLuint p1), (p1))\
  65. USE_FUNCTION (glBindFramebuffer, void, (GLenum p1, GLuint p2), (p1, p2))\
  66. USE_FUNCTION (glDeleteFramebuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\
  67. USE_FUNCTION (glGenFramebuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\
  68. USE_FUNCTION (glCheckFramebufferStatus, GLenum, (GLenum p1), (p1))\
  69. USE_FUNCTION (glFramebufferTexture2D, void, (GLenum p1, GLenum p2, GLenum p3, GLuint p4, GLint p5), (p1, p2, p3, p4, p5))\
  70. USE_FUNCTION (glFramebufferRenderbuffer, void, (GLenum p1, GLenum p2, GLenum p3, GLuint p4), (p1, p2, p3, p4))\
  71. USE_FUNCTION (glGetFramebufferAttachmentParameteriv, void, (GLenum p1, GLenum p2, GLenum p3, GLint* p4), (p1, p2, p3, p4))
  72. /** @internal This macro contains a list of GL extension functions that need to be dynamically loaded on Windows/Linux.
  73. @see OpenGLExtensionFunctions
  74. */
  75. #define JUCE_GL_VERTEXBUFFER_FUNCTIONS(USE_FUNCTION) \
  76. USE_FUNCTION (glGenVertexArrays, void, (GLsizei p1, GLuint* p2), (p1, p2))\
  77. USE_FUNCTION (glDeleteVertexArrays, void, (GLsizei p1, const GLuint* p2), (p1, p2))\
  78. USE_FUNCTION (glBindVertexArray, void, (GLuint p1), (p1))
  79. /** This class contains a generated list of OpenGL extension functions, which are either dynamically loaded
  80. for a specific GL context, or simply call-through to the appropriate OS function where available.
  81. @tags{OpenGL}
  82. */
  83. struct OpenGLExtensionFunctions
  84. {
  85. void initialise();
  86. #if JUCE_WINDOWS && ! DOXYGEN
  87. typedef char GLchar;
  88. typedef pointer_sized_int GLsizeiptr;
  89. typedef pointer_sized_int GLintptr;
  90. #endif
  91. //==============================================================================
  92. #if JUCE_WINDOWS
  93. #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) typedef returnType (__stdcall *type_ ## name) params; type_ ## name name;
  94. JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  95. JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  96. #if JUCE_OPENGL3
  97. JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  98. #endif
  99. //==============================================================================
  100. #elif JUCE_LINUX
  101. #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) typedef returnType (*type_ ## name) params; type_ ## name name;
  102. JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  103. JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  104. #if JUCE_OPENGL3
  105. JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  106. #endif
  107. //==============================================================================
  108. #elif JUCE_OPENGL_ES
  109. #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) static returnType name params noexcept;
  110. JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  111. JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  112. JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  113. //==============================================================================
  114. #else
  115. #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) static returnType name params noexcept { return ::name callparams; }
  116. JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  117. #ifndef GL3_PROTOTYPES
  118. #undef JUCE_DECLARE_GL_FUNCTION
  119. #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) static returnType name params noexcept { return ::name ## EXT callparams; }
  120. #endif
  121. JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  122. #if JUCE_OPENGL3
  123. #ifndef GL3_PROTOTYPES
  124. #undef JUCE_DECLARE_GL_FUNCTION
  125. #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) static returnType name params noexcept { return ::name ## APPLE callparams; }
  126. #endif
  127. JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION)
  128. #endif
  129. #endif
  130. #undef JUCE_DECLARE_GL_FUNCTION
  131. };
  132. } // namespace juce