From 76b9b286588803cf0f9d548e791b7a20a0683d11 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 16 Jan 2024 15:34:08 +0000 Subject: [PATCH] OpenGL: Update compatibility headers This also adds missing KHRONOS_APIENTRY qualifications to the debug callback type, which fixes potential crashes when running debug Win32 builds. --- modules/juce_opengl/opengl/juce_gl.cpp | 29 ++-- modules/juce_opengl/opengl/juce_gl.h | 76 ++++++--- modules/juce_opengl/opengl/juce_gles2.cpp | 23 ++- modules/juce_opengl/opengl/juce_gles2.h | 144 ++++++++++++++++-- modules/juce_opengl/opengl/juce_khrplatform.h | 27 +++- 5 files changed, 259 insertions(+), 40 deletions(-) diff --git a/modules/juce_opengl/opengl/juce_gl.cpp b/modules/juce_opengl/opengl/juce_gl.cpp index c15841a8a4..0b46ae7ded 100644 --- a/modules/juce_opengl/opengl/juce_gl.cpp +++ b/modules/juce_opengl/opengl/juce_gl.cpp @@ -1140,7 +1140,7 @@ X (void , glDebugMessageEnableAMD, (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled)) \ X (void , glDebugMessageInsertAMD, (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf)) \ X (void , glDebugMessageCallbackAMD, (GLDEBUGPROCAMD callback, void *userParam)) \ - X (GLuint , glGetDebugMessageLogAMD, (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message)) + X (GLuint , glGetDebugMessageLogAMD, (GLuint count, GLsizei bufSize, GLenum *categories, GLenum *severities, GLuint *ids, GLsizei *lengths, GLchar *message)) #define JUCE_GL_FUNCTIONS_GL_AMD_draw_buffers_blend \ X (void , glBlendFuncIndexedAMD, (GLuint buf, GLenum src, GLenum dst)) \ @@ -2189,6 +2189,10 @@ #define JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_blit \ X (void , glBlitFramebufferEXT, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)) +#define JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_blit_layers \ + X (void , glBlitFramebufferLayersEXT, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)) \ + X (void , glBlitFramebufferLayerEXT, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcLayer, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLint dstLayer, GLbitfield mask, GLenum filter)) + #define JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_multisample \ X (void , glRenderbufferStorageMultisampleEXT, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) @@ -2384,7 +2388,7 @@ X (GLuint , glCreateShaderProgramEXT, (GLenum type, const GLchar *string)) \ X (void , glActiveShaderProgramEXT, (GLuint pipeline, GLuint program)) \ X (void , glBindProgramPipelineEXT, (GLuint pipeline)) \ - X (GLuint , glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const GLchar **strings)) \ + X (GLuint , glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const GLchar *const*strings)) \ X (void , glDeleteProgramPipelinesEXT, (GLsizei n, const GLuint *pipelines)) \ X (void , glGenProgramPipelinesEXT, (GLsizei n, GLuint *pipelines)) \ X (void , glGetProgramPipelineInfoLogEXT, (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog)) \ @@ -2439,6 +2443,11 @@ #define JUCE_GL_FUNCTIONS_GL_EXT_texture_perturb_normal \ X (void , glTextureNormalEXT, (GLenum mode)) +#define JUCE_GL_FUNCTIONS_GL_EXT_texture_storage \ + X (void , glTexStorage1DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width)) \ + X (void , glTexStorage2DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)) \ + X (void , glTexStorage3DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)) + #define JUCE_GL_FUNCTIONS_GL_NV_timeline_semaphore \ X (void , glCreateSemaphoresNV, (GLsizei n, GLuint *semaphores)) \ X (void , glSemaphoreParameterivNV, (GLuint semaphore, GLenum pname, const GLint *params)) \ @@ -2850,12 +2859,6 @@ X (void , glMultiTexCoord3hvNV, (GLenum target, const GLhalfNV *v)) \ X (void , glMultiTexCoord4hNV, (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q)) \ X (void , glMultiTexCoord4hvNV, (GLenum target, const GLhalfNV *v)) \ - X (void , glFogCoordhNV, (GLhalfNV fog)) \ - X (void , glFogCoordhvNV, (const GLhalfNV *fog)) \ - X (void , glSecondaryColor3hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue)) \ - X (void , glSecondaryColor3hvNV, (const GLhalfNV *v)) \ - X (void , glVertexWeighthNV, (GLhalfNV weight)) \ - X (void , glVertexWeighthvNV, (const GLhalfNV *weight)) \ X (void , glVertexAttrib1hNV, (GLuint index, GLhalfNV x)) \ X (void , glVertexAttrib1hvNV, (GLuint index, const GLhalfNV *v)) \ X (void , glVertexAttrib2hNV, (GLuint index, GLhalfNV x, GLhalfNV y)) \ @@ -2867,7 +2870,13 @@ X (void , glVertexAttribs1hvNV, (GLuint index, GLsizei n, const GLhalfNV *v)) \ X (void , glVertexAttribs2hvNV, (GLuint index, GLsizei n, const GLhalfNV *v)) \ X (void , glVertexAttribs3hvNV, (GLuint index, GLsizei n, const GLhalfNV *v)) \ - X (void , glVertexAttribs4hvNV, (GLuint index, GLsizei n, const GLhalfNV *v)) + X (void , glVertexAttribs4hvNV, (GLuint index, GLsizei n, const GLhalfNV *v)) \ + X (void , glFogCoordhNV, (GLhalfNV fog)) \ + X (void , glFogCoordhvNV, (const GLhalfNV *fog)) \ + X (void , glSecondaryColor3hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue)) \ + X (void , glSecondaryColor3hvNV, (const GLhalfNV *v)) \ + X (void , glVertexWeighthNV, (GLhalfNV weight)) \ + X (void , glVertexWeighthvNV, (const GLhalfNV *weight)) #define JUCE_GL_FUNCTIONS_GL_NV_internalformat_sample_query \ X (void , glGetInternalformatSampleivNV, (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params)) @@ -3880,6 +3889,7 @@ JUCE_GL_FUNCTIONS_GL_EXT_external_buffer \ JUCE_GL_FUNCTIONS_GL_EXT_fog_coord \ JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_blit \ + JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_blit_layers \ JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_multisample \ JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_object \ JUCE_GL_FUNCTIONS_GL_EXT_geometry_shader4 \ @@ -3917,6 +3927,7 @@ JUCE_GL_FUNCTIONS_GL_EXT_texture_integer \ JUCE_GL_FUNCTIONS_GL_EXT_texture_object \ JUCE_GL_FUNCTIONS_GL_EXT_texture_perturb_normal \ + JUCE_GL_FUNCTIONS_GL_EXT_texture_storage \ JUCE_GL_FUNCTIONS_GL_NV_timeline_semaphore \ JUCE_GL_FUNCTIONS_GL_EXT_timer_query \ JUCE_GL_FUNCTIONS_GL_EXT_transform_feedback \ diff --git a/modules/juce_opengl/opengl/juce_gl.h b/modules/juce_opengl/opengl/juce_gl.h index 8a088c4df6..3c2e1ec6e8 100644 --- a/modules/juce_opengl/opengl/juce_gl.h +++ b/modules/juce_opengl/opengl/juce_gl.h @@ -192,13 +192,13 @@ typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; -typedef void ( *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void ( *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void ( *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void ( *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); typedef unsigned short GLhalfNV; typedef GLintptr GLvdpauSurfaceNV; -typedef void ( *GLVULKANPROCNV)(void); +typedef void (KHRONOS_APIENTRY *GLVULKANPROCNV)(void); JUCE_END_IGNORE_WARNINGS_GCC_LIKE @@ -3260,7 +3260,7 @@ enum : GLenum extern void (KHRONOS_APIENTRY* const& glDebugMessageEnableAMD) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); extern void (KHRONOS_APIENTRY* const& glDebugMessageInsertAMD) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); extern void (KHRONOS_APIENTRY* const& glDebugMessageCallbackAMD) (GLDEBUGPROCAMD callback, void *userParam); -extern GLuint (KHRONOS_APIENTRY* const& glGetDebugMessageLogAMD) (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +extern GLuint (KHRONOS_APIENTRY* const& glGetDebugMessageLogAMD) (GLuint count, GLsizei bufSize, GLenum *categories, GLenum *severities, GLuint *ids, GLsizei *lengths, GLchar *message); #endif #ifndef GL_AMD_depth_clamp_separate @@ -6589,6 +6589,12 @@ enum : GLenum extern void (KHRONOS_APIENTRY* const& glBlitFramebufferEXT) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); #endif +#ifndef GL_EXT_framebuffer_blit_layers +#define GL_EXT_framebuffer_blit_layers 1 +extern void (KHRONOS_APIENTRY* const& glBlitFramebufferLayersEXT) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +extern void (KHRONOS_APIENTRY* const& glBlitFramebufferLayerEXT) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcLayer, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLint dstLayer, GLbitfield mask, GLenum filter); +#endif + #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 enum : GLenum @@ -7244,7 +7250,7 @@ extern void (KHRONOS_APIENTRY* const& glActiveProgramEXT) (GLuint progra extern GLuint (KHRONOS_APIENTRY* const& glCreateShaderProgramEXT) (GLenum type, const GLchar *string); extern void (KHRONOS_APIENTRY* const& glActiveShaderProgramEXT) (GLuint pipeline, GLuint program); extern void (KHRONOS_APIENTRY* const& glBindProgramPipelineEXT) (GLuint pipeline); -extern GLuint (KHRONOS_APIENTRY* const& glCreateShaderProgramvEXT) (GLenum type, GLsizei count, const GLchar **strings); +extern GLuint (KHRONOS_APIENTRY* const& glCreateShaderProgramvEXT) (GLenum type, GLsizei count, const GLchar *const*strings); extern void (KHRONOS_APIENTRY* const& glDeleteProgramPipelinesEXT) (GLsizei n, const GLuint *pipelines); extern void (KHRONOS_APIENTRY* const& glGenProgramPipelinesEXT) (GLsizei n, GLuint *pipelines); extern void (KHRONOS_APIENTRY* const& glGetProgramPipelineInfoLogEXT) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); @@ -7349,6 +7355,10 @@ extern void (KHRONOS_APIENTRY* const& glMemoryBarrierEXT) (GLbitfield ba #define GL_EXT_shader_integer_mix 1 #endif +#ifndef GL_EXT_shader_samples_identical +#define GL_EXT_shader_samples_identical 1 +#endif + #ifndef GL_EXT_shadow_funcs #define GL_EXT_shadow_funcs 1 #endif @@ -7765,6 +7775,10 @@ enum : GLenum }; #endif +#ifndef GL_EXT_texture_shadow_lod +#define GL_EXT_texture_shadow_lod 1 +#endif + #ifndef GL_EXT_texture_shared_exponent #define GL_EXT_texture_shared_exponent 1 enum : GLenum @@ -7798,6 +7812,34 @@ enum : GLenum }; #endif +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +enum : GLenum +{ + GL_TEXTURE_IMMUTABLE_FORMAT_EXT = 0x912F, + GL_RGBA32F_EXT = 0x8814, + GL_RGB32F_EXT = 0x8815, + GL_ALPHA32F_EXT = 0x8816, + GL_LUMINANCE32F_EXT = 0x8818, + GL_LUMINANCE_ALPHA32F_EXT = 0x8819, + GL_RGBA16F_EXT = 0x881A, + GL_RGB16F_EXT = 0x881B, + GL_ALPHA16F_EXT = 0x881C, + GL_LUMINANCE16F_EXT = 0x881E, + GL_LUMINANCE_ALPHA16F_EXT = 0x881F, + GL_BGRA8_EXT = 0x93A1, + GL_R8_EXT = 0x8229, + GL_RG8_EXT = 0x822B, + GL_R32F_EXT = 0x822E, + GL_RG32F_EXT = 0x8230, + GL_R16F_EXT = 0x822D, + GL_RG16F_EXT = 0x822F, +}; +extern void (KHRONOS_APIENTRY* const& glTexStorage1DEXT) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +extern void (KHRONOS_APIENTRY* const& glTexStorage2DEXT) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +extern void (KHRONOS_APIENTRY* const& glTexStorage3DEXT) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif + #ifndef GL_EXT_texture_swizzle #define GL_EXT_texture_swizzle 1 enum : GLenum @@ -9379,12 +9421,6 @@ extern void (KHRONOS_APIENTRY* const& glMultiTexCoord3hNV) (GLenum targe extern void (KHRONOS_APIENTRY* const& glMultiTexCoord3hvNV) (GLenum target, const GLhalfNV *v); extern void (KHRONOS_APIENTRY* const& glMultiTexCoord4hNV) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); extern void (KHRONOS_APIENTRY* const& glMultiTexCoord4hvNV) (GLenum target, const GLhalfNV *v); -extern void (KHRONOS_APIENTRY* const& glFogCoordhNV) (GLhalfNV fog); -extern void (KHRONOS_APIENTRY* const& glFogCoordhvNV) (const GLhalfNV *fog); -extern void (KHRONOS_APIENTRY* const& glSecondaryColor3hNV) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -extern void (KHRONOS_APIENTRY* const& glSecondaryColor3hvNV) (const GLhalfNV *v); -extern void (KHRONOS_APIENTRY* const& glVertexWeighthNV) (GLhalfNV weight); -extern void (KHRONOS_APIENTRY* const& glVertexWeighthvNV) (const GLhalfNV *weight); extern void (KHRONOS_APIENTRY* const& glVertexAttrib1hNV) (GLuint index, GLhalfNV x); extern void (KHRONOS_APIENTRY* const& glVertexAttrib1hvNV) (GLuint index, const GLhalfNV *v); extern void (KHRONOS_APIENTRY* const& glVertexAttrib2hNV) (GLuint index, GLhalfNV x, GLhalfNV y); @@ -9397,6 +9433,12 @@ extern void (KHRONOS_APIENTRY* const& glVertexAttribs1hvNV) (GLuint inde extern void (KHRONOS_APIENTRY* const& glVertexAttribs2hvNV) (GLuint index, GLsizei n, const GLhalfNV *v); extern void (KHRONOS_APIENTRY* const& glVertexAttribs3hvNV) (GLuint index, GLsizei n, const GLhalfNV *v); extern void (KHRONOS_APIENTRY* const& glVertexAttribs4hvNV) (GLuint index, GLsizei n, const GLhalfNV *v); +extern void (KHRONOS_APIENTRY* const& glFogCoordhNV) (GLhalfNV fog); +extern void (KHRONOS_APIENTRY* const& glFogCoordhvNV) (const GLhalfNV *fog); +extern void (KHRONOS_APIENTRY* const& glSecondaryColor3hNV) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +extern void (KHRONOS_APIENTRY* const& glSecondaryColor3hvNV) (const GLhalfNV *v); +extern void (KHRONOS_APIENTRY* const& glVertexWeighthNV) (GLhalfNV weight); +extern void (KHRONOS_APIENTRY* const& glVertexWeighthvNV) (const GLhalfNV *weight); #endif #ifndef GL_NV_internalformat_sample_query @@ -10464,6 +10506,10 @@ extern void (KHRONOS_APIENTRY* const& glResumeTransformFeedbackNV) (); extern void (KHRONOS_APIENTRY* const& glDrawTransformFeedbackNV) (GLenum mode, GLuint id); #endif +#ifndef GL_NV_uniform_buffer_std430_layout +#define GL_NV_uniform_buffer_std430_layout 1 +#endif + #ifndef GL_NV_uniform_buffer_unified_memory #define GL_NV_uniform_buffer_unified_memory 1 enum : GLenum @@ -11983,10 +12029,6 @@ enum : GLenum }; #endif -#ifndef GL_EXT_texture_shadow_lod -#define GL_EXT_texture_shadow_lod 1 -#endif - /** Load all available functions from the OpenGL core API. diff --git a/modules/juce_opengl/opengl/juce_gles2.cpp b/modules/juce_opengl/opengl/juce_gles2.cpp index a03701d794..bfb3d7d865 100644 --- a/modules/juce_opengl/opengl/juce_gles2.cpp +++ b/modules/juce_opengl/opengl/juce_gles2.cpp @@ -460,6 +460,9 @@ X (void , glGetInteger64vAPPLE, (GLenum pname, GLint64 *params)) \ X (void , glGetSyncivAPPLE, (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values)) +#define JUCE_GL_FUNCTIONS_GL_ARM_shader_core_properties \ + X (void , glMaxActiveShaderCoresARM, (GLuint count)) + #define JUCE_GL_FUNCTIONS_GL_EXT_EGL_image_storage \ X (void , glEGLImageTargetTexStorageEXT, (GLenum target, GLeglImageOES image, const GLint* attrib_list)) \ X (void , glEGLImageTargetTextureStorageEXT, (GLuint texture, GLeglImageOES image, const GLint* attrib_list)) @@ -548,6 +551,16 @@ X (void , glBufferStorageExternalEXT, (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags)) \ X (void , glNamedBufferStorageExternalEXT, (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags)) +#define JUCE_GL_FUNCTIONS_GL_EXT_fragment_shading_rate \ + X (void , glGetFragmentShadingRatesEXT, (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates)) \ + X (void , glShadingRateEXT, (GLenum rate)) \ + X (void , glShadingRateCombinerOpsEXT, (GLenum combinerOp0, GLenum combinerOp1)) \ + X (void , glFramebufferShadingRateEXT, (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight)) + +#define JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_blit_layers \ + X (void , glBlitFramebufferLayersEXT, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)) \ + X (void , glBlitFramebufferLayerEXT, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcLayer, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLint dstLayer, GLbitfield mask, GLenum filter)) + #define JUCE_GL_FUNCTIONS_GL_EXT_geometry_shader \ X (void , glFramebufferTextureEXT, (GLenum target, GLenum attachment, GLuint texture, GLint level)) @@ -640,7 +653,7 @@ X (GLuint , glCreateShaderProgramEXT, (GLenum type, const GLchar *string)) \ X (void , glActiveShaderProgramEXT, (GLuint pipeline, GLuint program)) \ X (void , glBindProgramPipelineEXT, (GLuint pipeline)) \ - X (GLuint , glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const GLchar **strings)) \ + X (GLuint , glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const GLchar *const*strings)) \ X (void , glDeleteProgramPipelinesEXT, (GLsizei n, const GLuint *pipelines)) \ X (void , glGenProgramPipelinesEXT, (GLsizei n, GLuint *pipelines)) \ X (void , glGetProgramPipelineInfoLogEXT, (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog)) \ @@ -719,6 +732,10 @@ X (void , glTextureStorage2DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)) \ X (void , glTextureStorage3DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)) +#define JUCE_GL_FUNCTIONS_GL_EXT_texture_storage_compression \ + X (void , glTexStorageAttribs2DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, const GLint* attrib_list)) \ + X (void , glTexStorageAttribs3DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, const GLint* attrib_list)) + #define JUCE_GL_FUNCTIONS_GL_EXT_texture_view \ X (void , glTextureViewEXT, (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers)) @@ -1265,6 +1282,7 @@ JUCE_GL_FUNCTIONS_GL_APPLE_copy_texture_levels \ JUCE_GL_FUNCTIONS_GL_APPLE_framebuffer_multisample \ JUCE_GL_FUNCTIONS_GL_APPLE_sync \ + JUCE_GL_FUNCTIONS_GL_ARM_shader_core_properties \ JUCE_GL_FUNCTIONS_GL_EXT_EGL_image_storage \ JUCE_GL_FUNCTIONS_GL_EXT_base_instance \ JUCE_GL_FUNCTIONS_GL_EXT_blend_func_extended \ @@ -1283,6 +1301,8 @@ JUCE_GL_FUNCTIONS_GL_EXT_draw_instanced \ JUCE_GL_FUNCTIONS_GL_EXT_draw_transform_feedback \ JUCE_GL_FUNCTIONS_GL_EXT_external_buffer \ + JUCE_GL_FUNCTIONS_GL_EXT_fragment_shading_rate \ + JUCE_GL_FUNCTIONS_GL_EXT_framebuffer_blit_layers \ JUCE_GL_FUNCTIONS_GL_EXT_geometry_shader \ JUCE_GL_FUNCTIONS_GL_EXT_instanced_arrays \ JUCE_GL_FUNCTIONS_GL_EXT_map_buffer_range \ @@ -1308,6 +1328,7 @@ JUCE_GL_FUNCTIONS_GL_EXT_texture_border_clamp \ JUCE_GL_FUNCTIONS_GL_EXT_texture_buffer \ JUCE_GL_FUNCTIONS_GL_EXT_texture_storage \ + JUCE_GL_FUNCTIONS_GL_EXT_texture_storage_compression \ JUCE_GL_FUNCTIONS_GL_EXT_texture_view \ JUCE_GL_FUNCTIONS_GL_NV_timeline_semaphore \ JUCE_GL_FUNCTIONS_GL_EXT_win32_keyed_mutex \ diff --git a/modules/juce_opengl/opengl/juce_gles2.h b/modules/juce_opengl/opengl/juce_gles2.h index 5df7b54b4b..eaf4574bae 100644 --- a/modules/juce_opengl/opengl/juce_gles2.h +++ b/modules/juce_opengl/opengl/juce_gles2.h @@ -85,13 +85,13 @@ typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; -typedef void ( *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void ( *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void ( *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void ( *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (KHRONOS_APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); typedef unsigned short GLhalfNV; typedef GLintptr GLvdpauSurfaceNV; -typedef void ( *GLVULKANPROCNV)(void); +typedef void (KHRONOS_APIENTRY *GLVULKANPROCNV)(void); JUCE_END_IGNORE_WARNINGS_GCC_LIKE @@ -1790,6 +1790,21 @@ enum : GLenum #define GL_ARM_rgba8 1 #endif +#ifndef GL_ARM_shader_core_properties +#define GL_ARM_shader_core_properties 1 +enum : GLenum +{ + GL_SHADER_CORE_COUNT_ARM = 0x96F0, + GL_SHADER_CORE_ACTIVE_COUNT_ARM = 0x96F1, + GL_SHADER_CORE_PRESENT_MASK_ARM = 0x96F2, + GL_SHADER_CORE_MAX_WARP_COUNT_ARM = 0x96F3, + GL_SHADER_CORE_PIXEL_RATE_ARM = 0x96F4, + GL_SHADER_CORE_TEXEL_RATE_ARM = 0x96F5, + GL_SHADER_CORE_FMA_RATE_ARM = 0x96F6, +}; +extern void (KHRONOS_APIENTRY* const& glMaxActiveShaderCoresARM) (GLuint count); +#endif + #ifndef GL_ARM_shader_framebuffer_fetch #define GL_ARM_shader_framebuffer_fetch 1 enum : GLenum @@ -1839,6 +1854,16 @@ extern void (KHRONOS_APIENTRY* const& glEGLImageTargetTexStorageEXT) (GL extern void (KHRONOS_APIENTRY* const& glEGLImageTargetTextureStorageEXT) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); #endif +#ifndef GL_EXT_EGL_image_storage_compression +#define GL_EXT_EGL_image_storage_compression 1 +enum : GLenum +{ + GL_SURFACE_COMPRESSION_EXT = 0x96C0, + GL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT = 0x96C1, + GL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT = 0x96C2, +}; +#endif + #ifndef GL_EXT_YUV_target #define GL_EXT_YUV_target 1 enum : GLenum @@ -2117,6 +2142,49 @@ extern void (KHRONOS_APIENTRY* const& glNamedBufferStorageExternalEXT) ( #define GL_EXT_float_blend 1 #endif +#ifndef GL_EXT_fragment_shading_rate +#define GL_EXT_fragment_shading_rate 1 +enum : GLenum +{ + GL_SHADING_RATE_1X1_PIXELS_EXT = 0x96A6, + GL_SHADING_RATE_1X2_PIXELS_EXT = 0x96A7, + GL_SHADING_RATE_2X1_PIXELS_EXT = 0x96A8, + GL_SHADING_RATE_2X2_PIXELS_EXT = 0x96A9, + GL_SHADING_RATE_1X4_PIXELS_EXT = 0x96AA, + GL_SHADING_RATE_4X1_PIXELS_EXT = 0x96AB, + GL_SHADING_RATE_4X2_PIXELS_EXT = 0x96AC, + GL_SHADING_RATE_2X4_PIXELS_EXT = 0x96AD, + GL_SHADING_RATE_4X4_PIXELS_EXT = 0x96AE, + GL_SHADING_RATE_EXT = 0x96D0, + GL_SHADING_RATE_ATTACHMENT_EXT = 0x96D1, + GL_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_EXT = 0x96D2, + GL_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_EXT = 0x96D3, + GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_EXT = 0x96D4, + GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_EXT = 0x96D5, + GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_EXT = 0x96D6, + GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT = 0x96D7, + GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT = 0x96D8, + GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT = 0x96D9, + GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT = 0x96DA, + GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_ASPECT_RATIO_EXT = 0x96DB, + GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_LAYERS_EXT = 0x96DC, + GL_FRAGMENT_SHADING_RATE_WITH_SHADER_DEPTH_STENCIL_WRITES_SUPPORTED_EXT = 0x96DD, + GL_FRAGMENT_SHADING_RATE_WITH_SAMPLE_MASK_SUPPORTED_EXT = 0x96DE, + GL_FRAGMENT_SHADING_RATE_ATTACHMENT_WITH_DEFAULT_FRAMEBUFFER_SUPPORTED_EXT = 0x96DF, + GL_FRAGMENT_SHADING_RATE_NON_TRIVIAL_COMBINERS_SUPPORTED_EXT = 0x8F6F, +}; +extern void (KHRONOS_APIENTRY* const& glGetFragmentShadingRatesEXT) (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates); +extern void (KHRONOS_APIENTRY* const& glShadingRateEXT) (GLenum rate); +extern void (KHRONOS_APIENTRY* const& glShadingRateCombinerOpsEXT) (GLenum combinerOp0, GLenum combinerOp1); +extern void (KHRONOS_APIENTRY* const& glFramebufferShadingRateEXT) (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight); +#endif + +#ifndef GL_EXT_framebuffer_blit_layers +#define GL_EXT_framebuffer_blit_layers 1 +extern void (KHRONOS_APIENTRY* const& glBlitFramebufferLayersEXT) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +extern void (KHRONOS_APIENTRY* const& glBlitFramebufferLayerEXT) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint srcLayer, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLint dstLayer, GLbitfield mask, GLenum filter); +#endif + #ifndef GL_EXT_geometry_point_size #define GL_EXT_geometry_point_size 1 #endif @@ -2481,6 +2549,10 @@ enum : GLenum }; #endif +#ifndef GL_EXT_separate_depth_stencil +#define GL_EXT_separate_depth_stencil 1 +#endif + #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 enum : GLenum @@ -2497,7 +2569,7 @@ extern void (KHRONOS_APIENTRY* const& glActiveProgramEXT) (GLuint progra extern GLuint (KHRONOS_APIENTRY* const& glCreateShaderProgramEXT) (GLenum type, const GLchar *string); extern void (KHRONOS_APIENTRY* const& glActiveShaderProgramEXT) (GLuint pipeline, GLuint program); extern void (KHRONOS_APIENTRY* const& glBindProgramPipelineEXT) (GLuint pipeline); -extern GLuint (KHRONOS_APIENTRY* const& glCreateShaderProgramvEXT) (GLenum type, GLsizei count, const GLchar **strings); +extern GLuint (KHRONOS_APIENTRY* const& glCreateShaderProgramvEXT) (GLenum type, GLsizei count, const GLchar *const*strings); extern void (KHRONOS_APIENTRY* const& glDeleteProgramPipelinesEXT) (GLsizei n, const GLuint *pipelines); extern void (KHRONOS_APIENTRY* const& glGenProgramPipelinesEXT) (GLsizei n, GLuint *pipelines); extern void (KHRONOS_APIENTRY* const& glGetProgramPipelineInfoLogEXT) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); @@ -2597,6 +2669,10 @@ extern GLsizei (KHRONOS_APIENTRY* const& glGetFramebufferPixelLocalStorageS extern void (KHRONOS_APIENTRY* const& glClearPixelLocalStorageuiEXT) (GLsizei offset, GLsizei n, const GLuint *values); #endif +#ifndef GL_EXT_shader_samples_identical +#define GL_EXT_shader_samples_identical 1 +#endif + #ifndef GL_EXT_shader_texture_lod #define GL_EXT_shader_texture_lod 1 #endif @@ -2896,6 +2972,10 @@ enum : GLenum }; #endif +#ifndef GL_EXT_texture_shadow_lod +#define GL_EXT_texture_shadow_lod 1 +#endif + #ifndef GL_EXT_texture_storage #define GL_EXT_texture_storage 1 enum : GLenum @@ -2925,6 +3005,28 @@ extern void (KHRONOS_APIENTRY* const& glTextureStorage2DEXT) (GLuint tex extern void (KHRONOS_APIENTRY* const& glTextureStorage3DEXT) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif +#ifndef GL_EXT_texture_storage_compression +#define GL_EXT_texture_storage_compression 1 +enum : GLenum +{ + GL_NUM_SURFACE_COMPRESSION_FIXED_RATES_EXT = 0x8F6E, + GL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT = 0x96C4, + GL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT = 0x96C5, + GL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT = 0x96C6, + GL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT = 0x96C7, + GL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT = 0x96C8, + GL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT = 0x96C9, + GL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT = 0x96CA, + GL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT = 0x96CB, + GL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT = 0x96CC, + GL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT = 0x96CD, + GL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT = 0x96CE, + GL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT = 0x96CF, +}; +extern void (KHRONOS_APIENTRY* const& glTexStorageAttribs2DEXT) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, const GLint* attrib_list); +extern void (KHRONOS_APIENTRY* const& glTexStorageAttribs3DEXT) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, const GLint* attrib_list); +#endif + #ifndef GL_EXT_texture_type_2_10_10_10_REV #define GL_EXT_texture_type_2_10_10_10_REV 1 enum : GLenum @@ -3395,6 +3497,10 @@ enum : GLenum }; #endif +#ifndef GL_MESA_sampler_objects +#define GL_MESA_sampler_objects 1 +#endif + #ifndef GL_MESA_shader_integer_functions #define GL_MESA_shader_integer_functions 1 #endif @@ -4470,6 +4576,16 @@ enum : GLenum extern void (KHRONOS_APIENTRY* const& glViewportSwizzleNV) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); #endif +#ifndef GL_NV_pack_subimage +#define GL_NV_pack_subimage 1 +enum : GLenum +{ + GL_PACK_ROW_LENGTH_NV = 0x0D02, + GL_PACK_SKIP_ROWS_NV = 0x0D03, + GL_PACK_SKIP_PIXELS_NV = 0x0D04, +}; +#endif + #ifndef GL_OES_EGL_image #define GL_OES_EGL_image 1 extern void (KHRONOS_APIENTRY* const& glEGLImageTargetTexture2DOES) (GLenum target, GLeglImageOES image); @@ -5117,6 +5233,10 @@ extern void (KHRONOS_APIENTRY* const& glExtrapolateTex2DQCOM) (GLuint sr #define GL_QCOM_render_shared_exponent 1 #endif +#ifndef GL_QCOM_render_sRGB_R8_RG8 +#define GL_QCOM_render_sRGB_R8_RG8 1 +#endif + #ifndef GL_QCOM_texture_foveated #define GL_QCOM_texture_foveated 1 enum : GLenum @@ -5147,6 +5267,14 @@ enum : GLenum }; #endif +#ifndef GL_QCOM_texture_lod_bias +#define GL_QCOM_texture_lod_bias 1 +enum : GLenum +{ + GL_TEXTURE_LOD_BIAS_QCOM = 0x8C96, +}; +#endif + #ifndef GL_QCOM_perfmon_global_mode #define GL_QCOM_perfmon_global_mode 1 enum : GLenum @@ -5245,10 +5373,6 @@ enum : GLenum }; #endif -#ifndef GL_EXT_texture_shadow_lod -#define GL_EXT_texture_shadow_lod 1 -#endif - /** Load all available functions from the OpenGL core API. diff --git a/modules/juce_opengl/opengl/juce_khrplatform.h b/modules/juce_opengl/opengl/juce_khrplatform.h index 11209702f4..addd770d8b 100644 --- a/modules/juce_opengl/opengl/juce_khrplatform.h +++ b/modules/juce_opengl/opengl/juce_khrplatform.h @@ -153,6 +153,20 @@ typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif #elif defined(__VMS ) || defined(__sgi) @@ -235,14 +249,21 @@ typedef unsigned short int khronos_uint16_t; * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ -#ifdef _WIN64 +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif