diff --git a/meson.build b/meson.build index b95f215a..5b7dc6b7 100644 --- a/meson.build +++ b/meson.build @@ -39,8 +39,10 @@ config = configuration_data() taisei_c_args = [ '-Wall', '-Wpedantic', + '-Werror=assume', '-Werror=implicit-function-declaration', + '-Werror=incompatible-pointer-types', # # Keep the rest sorted diff --git a/src/renderer/api.c b/src/renderer/api.c index f3f0844e..8bdf4a0d 100644 --- a/src/renderer/api.c +++ b/src/renderer/api.c @@ -460,17 +460,17 @@ void r_framebuffer_clear(Framebuffer *fb, ClearBufferFlags flags, const Color *c B.framebuffer_clear(fb, flags, colorval, depthval); } -void r_framebuffer_viewport(Framebuffer *fb, int x, int y, int w, int h) { - r_framebuffer_viewport_rect(fb, (IntRect) { x, y, w, h }); +void r_framebuffer_viewport(Framebuffer *fb, float x, float y, float w, float h) { + r_framebuffer_viewport_rect(fb, (FloatRect) { x, y, w, h }); } -void r_framebuffer_viewport_rect(Framebuffer *fb, IntRect viewport) { +void r_framebuffer_viewport_rect(Framebuffer *fb, FloatRect viewport) { assert(viewport.h > 0); assert(viewport.w > 0); B.framebuffer_viewport(fb, viewport); } -void r_framebuffer_viewport_current(Framebuffer *fb, IntRect *viewport) { +void r_framebuffer_viewport_current(Framebuffer *fb, FloatRect *viewport) { B.framebuffer_viewport_current(fb, viewport); } diff --git a/src/renderer/api.h b/src/renderer/api.h index 33411091..a3d9de45 100644 --- a/src/renderer/api.h +++ b/src/renderer/api.h @@ -636,9 +636,9 @@ void r_framebuffer_set_debug_label(Framebuffer *fb, const char* label) attr_nonn void r_framebuffer_attach(Framebuffer *fb, Texture *tex, uint mipmap, FramebufferAttachment attachment) attr_nonnull(1); Texture* r_framebuffer_get_attachment(Framebuffer *fb, FramebufferAttachment attachment) attr_nonnull(1); uint r_framebuffer_get_attachment_mipmap(Framebuffer *fb, FramebufferAttachment attachment) attr_nonnull(1); -void r_framebuffer_viewport(Framebuffer *fb, int x, int y, int w, int h); -void r_framebuffer_viewport_rect(Framebuffer *fb, IntRect viewport); -void r_framebuffer_viewport_current(Framebuffer *fb, IntRect *viewport) attr_nonnull(2); +void r_framebuffer_viewport(Framebuffer *fb, float x, float y, float w, float h); +void r_framebuffer_viewport_rect(Framebuffer *fb, FloatRect viewport); +void r_framebuffer_viewport_current(Framebuffer *fb, FloatRect *viewport) attr_nonnull(2); void r_framebuffer_destroy(Framebuffer *fb) attr_nonnull(1); void r_framebuffer_clear(Framebuffer *fb, ClearBufferFlags flags, const Color *colorval, float depthval); diff --git a/src/renderer/common/backend.h b/src/renderer/common/backend.h index d4fb4623..14d81f13 100644 --- a/src/renderer/common/backend.h +++ b/src/renderer/common/backend.h @@ -77,8 +77,8 @@ typedef struct RendererFuncs { void (*framebuffer_set_debug_label)(Framebuffer *framebuffer, const char *label); void (*framebuffer_destroy)(Framebuffer *framebuffer); void (*framebuffer_attach)(Framebuffer *framebuffer, Texture *tex, uint mipmap, FramebufferAttachment attachment); - void (*framebuffer_viewport)(Framebuffer *framebuffer, IntRect vp); - void (*framebuffer_viewport_current)(Framebuffer *framebuffer, IntRect *vp); + void (*framebuffer_viewport)(Framebuffer *framebuffer, FloatRect vp); + void (*framebuffer_viewport_current)(Framebuffer *framebuffer, FloatRect *vp); Texture* (*framebuffer_get_attachment)(Framebuffer *framebuffer, FramebufferAttachment attachment); uint (*framebuffer_get_attachment_mipmap)(Framebuffer *framebuffer, FramebufferAttachment attachment); void (*framebuffer_clear)(Framebuffer *framebuffer, ClearBufferFlags flags, const Color *colorval, float depthval); diff --git a/src/renderer/gl33/framebuffer.h b/src/renderer/gl33/framebuffer.h index b6c057e7..f2f6f894 100644 --- a/src/renderer/gl33/framebuffer.h +++ b/src/renderer/gl33/framebuffer.h @@ -18,7 +18,7 @@ struct Framebuffer { Texture *attachments[FRAMEBUFFER_MAX_ATTACHMENTS]; uint attachment_mipmaps[FRAMEBUFFER_MAX_ATTACHMENTS]; - IntRect viewport; + FloatRect viewport; GLuint gl_fbo; bool initialized; char debug_label[R_DEBUG_LABEL_SIZE]; diff --git a/src/renderer/gl33/gl33.c b/src/renderer/gl33/gl33.c index fecf6421..414df5a2 100644 --- a/src/renderer/gl33/gl33.c +++ b/src/renderer/gl33/gl33.c @@ -99,8 +99,8 @@ static struct { } capabilities; struct { - IntRect active; - IntRect default_framebuffer; + FloatRect active; + FloatRect default_framebuffer; } viewport; Color color; @@ -223,6 +223,27 @@ static void gl33_init_texunits(void) { log_info("Using %i texturing units (%i available)", R.texunits.limit, texunits_available); } +static void gl33_get_viewport(FloatRect *vp) { + IntRect vp_int; + glGetIntegerv(GL_VIEWPORT, &vp_int.x); + vp->x = vp_int.x; + vp->y = vp_int.y; + vp->w = vp_int.w; + vp->h = vp_int.h; +} + +static void gl33_set_viewport(const FloatRect *vp) { + glViewport(vp->x, vp->y, vp->w, vp->h); +} + +static void gl41_get_viewport(FloatRect *vp) { + glGetFloati_v(GL_VIEWPORT, 0, &vp->x); +} + +static void gl41_set_viewport(const FloatRect *vp) { + glViewportIndexedfv(0, &vp->x); +} + static void gl33_init_context(SDL_Window *window) { R.gl_context = SDL_GL_CreateContext(window); @@ -241,9 +262,17 @@ static void gl33_init_context(SDL_Window *window) { gl33_set_clear_depth(1); gl33_set_clear_color(RGBA(0, 0, 0, 0)); + if(glext.viewport_array) { + GLVT.get_viewport = gl41_get_viewport; + GLVT.set_viewport = gl41_set_viewport; + } else { + GLVT.get_viewport = gl33_get_viewport; + GLVT.set_viewport = gl33_set_viewport; + } + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_ALIGNMENT, 1); - glGetIntegerv(GL_VIEWPORT, &R.viewport.default_framebuffer.x); + GLVT.get_viewport(&R.viewport.default_framebuffer); if(glReadBuffer != NULL) { glReadBuffer(GL_BACK); @@ -292,7 +321,7 @@ static void gl33_apply_capability(RendererCapability cap, bool value) { } } -static inline IntRect* get_framebuffer_viewport(Framebuffer *fb) { +static inline FloatRect* get_framebuffer_viewport(Framebuffer *fb) { if(fb == NULL) { return &R.viewport.default_framebuffer; } @@ -301,11 +330,11 @@ static inline IntRect* get_framebuffer_viewport(Framebuffer *fb) { } static void gl33_sync_viewport(void) { - IntRect *vp = get_framebuffer_viewport(R.framebuffer.pending); + FloatRect *vp = get_framebuffer_viewport(R.framebuffer.pending); - if(memcmp(&R.viewport.active, vp, sizeof(IntRect))) { + if(memcmp(&R.viewport.active, vp, sizeof(R.viewport.active))) { R.viewport.active = *vp; - glViewport(vp->x, vp->y, vp->w, vp->h); + GLVT.set_viewport(vp); } } @@ -934,11 +963,11 @@ static Framebuffer *gl33_framebuffer_current(void) { return R.framebuffer.pending; } -static void gl33_framebuffer_viewport(Framebuffer *fb, IntRect vp) { +static void gl33_framebuffer_viewport(Framebuffer *fb, FloatRect vp) { memcpy(get_framebuffer_viewport(fb), &vp, sizeof(vp)); } -static void gl33_framebuffer_viewport_current(Framebuffer *fb, IntRect *out_rect) { +static void gl33_framebuffer_viewport_current(Framebuffer *fb, FloatRect *out_rect) { *out_rect = *get_framebuffer_viewport(fb); } @@ -1006,7 +1035,7 @@ static DepthTestFunc gl33_depth_func_current(void) { } static bool gl33_screenshot(Pixmap *out) { - IntRect *vp = &R.viewport.default_framebuffer; + FloatRect *vp = &R.viewport.default_framebuffer; out->width = vp->w; out->height = vp->h; out->format = PIXMAP_FORMAT_RGB8; diff --git a/src/renderer/glcommon/opengl.c b/src/renderer/glcommon/opengl.c index 681f9968..9ede575b 100644 --- a/src/renderer/glcommon/opengl.c +++ b/src/renderer/glcommon/opengl.c @@ -479,6 +479,36 @@ static void glcommon_ext_vertex_array_object(void) { log_warn("Extension not supported"); } +static void glcommon_ext_viewport_array(void) { + if((GL_ATLEAST(4, 1)) + && (glext.GetFloati_v = glad_glGetFloati_v) + && (glext.ViewportIndexedfv = glad_glViewportIndexedfv) + ) { + glext.viewport_array = TSGL_EXTFLAG_NATIVE; + log_info("Using core functionality"); + return; + } + + if((glext.viewport_array = glcommon_check_extension("GL_ARB_viewport_array")) + && (glext.GetFloati_v = glad_glGetFloati_v) + && (glext.ViewportIndexedfv = glad_glViewportIndexedfv) + ) { + log_info("Using GL_ARB_viewport_array"); + return; + } + + if((glext.viewport_array = glcommon_check_extension("GL_OES_viewport_array")) + && (glext.GetFloati_v = glad_glGetFloati_vOES) + && (glext.ViewportIndexedfv = glad_glViewportIndexedfvOES) + ) { + log_info("Using GL_OES_viewport_array"); + return; + } + + glext.viewport_array = 0; + log_warn("Extension not supported"); +} + static APIENTRY GLvoid shim_glClearDepth(GLdouble depthval) { glClearDepthf(depthval); } @@ -548,6 +578,7 @@ void glcommon_check_extensions(void) { glcommon_ext_texture_norm16(); glcommon_ext_texture_rg(); glcommon_ext_vertex_array_object(); + glcommon_ext_viewport_array(); // GLES has only glClearDepthf // Core has only glClearDepth until GL 4.1 diff --git a/src/renderer/glcommon/opengl.h b/src/renderer/glcommon/opengl.h index e0fa9e68..2cc1da09 100644 --- a/src/renderer/glcommon/opengl.h +++ b/src/renderer/glcommon/opengl.h @@ -89,6 +89,7 @@ struct glext_s { ext_flag_t texture_norm16; ext_flag_t texture_rg; ext_flag_t vertex_array_object; + ext_flag_t viewport_array; // // debug_output @@ -173,6 +174,19 @@ struct glext_s { PFNGLISVERTEXARRAYPROC IsVertexArray; #undef glIsVertexArray #define glIsVertexArray (glext.IsVertexArray) + + // + // viewport_array + // NOTE: only the subset we actually use is defined here + // + + PFNGLGETFLOATI_VPROC GetFloati_v; + #undef glGetFloati_v + #define glGetFloati_v (glext.GetFloati_v) + + PFNGLVIEWPORTINDEXEDFVPROC ViewportIndexedfv; + #undef glViewportIndexedfv + #define glViewportIndexedfv (glext.ViewportIndexedfv) }; #define GL_VERSION_INT(mjr, mnr) (((mjr) << 8) + (mnr)) diff --git a/src/renderer/glcommon/vtable.h b/src/renderer/glcommon/vtable.h index 0e1c2705..5ac56788 100644 --- a/src/renderer/glcommon/vtable.h +++ b/src/renderer/glcommon/vtable.h @@ -25,6 +25,8 @@ typedef struct GLVTable { GLTextureTypeInfo* (*texture_type_info)(TextureType type); GLTexFormatCapabilities (*texture_format_caps)(GLenum internal_fmt); void (*init_context)(SDL_Window *window); + void (*get_viewport)(FloatRect *vp); + void (*set_viewport)(const FloatRect *vp); } GLVTable; typedef struct GLBackendData { diff --git a/src/renderer/glescommon/gles.c b/src/renderer/glescommon/gles.c index 4f1cc0e5..e41a832b 100644 --- a/src/renderer/glescommon/gles.c +++ b/src/renderer/glescommon/gles.c @@ -25,7 +25,7 @@ void gles_init_context(SDL_Window *w) { } bool gles_screenshot(Pixmap *out) { - IntRect vp; + FloatRect vp; r_framebuffer_viewport_current(NULL, &vp); out->width = vp.w; out->height = vp.h; diff --git a/src/renderer/null/null.c b/src/renderer/null/null.c index 264695c6..55d0a480 100644 --- a/src/renderer/null/null.c +++ b/src/renderer/null/null.c @@ -93,7 +93,7 @@ static void null_texture_invalidate(Texture *tex) { } static void null_texture_destroy(Texture *tex) { } static void null_texture_clear(Texture *tex, const Color *color) { } -static IntRect default_fb_viewport; +static FloatRect default_fb_viewport; static Framebuffer* null_framebuffer_create(void) { return (void*)&placeholder; } static void null_framebuffer_set_debug_label(Framebuffer *fb, const char *label) { } @@ -102,8 +102,8 @@ static void null_framebuffer_attach(Framebuffer *framebuffer, Texture *tex, uint static Texture* null_framebuffer_attachment(Framebuffer *framebuffer, FramebufferAttachment attachment) { return (void*)&placeholder; } static uint null_framebuffer_attachment_mipmap(Framebuffer *framebuffer, FramebufferAttachment attachment) { return 0; } static void null_framebuffer_destroy(Framebuffer *framebuffer) { } -static void null_framebuffer_viewport(Framebuffer *framebuffer, IntRect vp) { } -static void null_framebuffer_viewport_current(Framebuffer *framebuffer, IntRect *vp) { *vp = default_fb_viewport; } +static void null_framebuffer_viewport(Framebuffer *framebuffer, FloatRect vp) { } +static void null_framebuffer_viewport_current(Framebuffer *framebuffer, FloatRect *vp) { *vp = default_fb_viewport; } static void null_framebuffer(Framebuffer *framebuffer) { } static Framebuffer* null_framebuffer_current(void) { return (void*)&placeholder; } static void null_framebuffer_clear(Framebuffer *framebuffer, ClearBufferFlags flags, const Color *colorval, float depthval) { } diff --git a/src/resource/font.c b/src/resource/font.c index e8a74ebe..8bf8a1a2 100644 --- a/src/resource/font.c +++ b/src/resource/font.c @@ -124,7 +124,7 @@ static struct { } globals; static double global_font_scale(void) { - int w, h; + float w, h; video_get_viewport_size(&w, &h); return sanitize_scale(((double)h / SCREEN_H) * config_get_float(CONFIG_TEXT_QUALITY)); } diff --git a/src/stagedraw.c b/src/stagedraw.c index 6992e233..bd0aa9e1 100644 --- a/src/stagedraw.c +++ b/src/stagedraw.c @@ -87,7 +87,7 @@ static struct { }; static double fb_scale(void) { - int vp_width, vp_height; + float vp_width, vp_height; video_get_viewport_size(&vp_width, &vp_height); return (double)vp_height / SCREEN_H; } @@ -941,29 +941,41 @@ static void postprocess_prepare(Framebuffer *fb, ShaderProgram *s) { } void stage_draw_foreground(void) { - int vw, vh; + float vw, vh; video_get_viewport_size(&vw, &vh); // CAUTION: Very intricate pixel perfect scaling that will ruin your day. float facw = (float)vw/SCREEN_W; float fach = (float)vh/SCREEN_H; - // confer video_update_quality to understand why this is fach. fach is equal to facw up to roundoff error. + // fach is equal to facw up to roundoff error. float scale = fach; // draw the foreground Framebuffer r_mat_push(); - r_mat_scale(1/facw,1/fach,1); - r_mat_translate(floorf(facw*VIEWPORT_X), floorf(fach*VIEWPORT_Y), 0); - r_mat_scale(floorf(scale*VIEWPORT_W)/VIEWPORT_W,floorf(scale*VIEWPORT_H)/VIEWPORT_H,1); + r_mat_scale(1/facw, 1/fach,1); + r_mat_translate(roundf(facw*VIEWPORT_X), roundf(fach*VIEWPORT_Y), 0); + r_mat_scale(roundf(scale*VIEWPORT_W), roundf(scale*VIEWPORT_H), 1); // apply the screenshake effect if(global.shake_view) { - r_mat_translate(global.shake_view*sin(global.frames),global.shake_view*sin(global.frames*1.1+3),0); - r_mat_scale(1+2*global.shake_view/VIEWPORT_W,1+2*global.shake_view/VIEWPORT_H,1); - r_mat_translate(-global.shake_view,-global.shake_view,0); + r_mat_translate( + global.shake_view * sin(global.frames) / VIEWPORT_W, + global.shake_view * sin(global.frames * 1.1 + 3) / VIEWPORT_H, + 0 + ); + r_mat_scale( + 1 + 2 * global.shake_view / VIEWPORT_W, + 1 + 2 * global.shake_view / VIEWPORT_H, + 1 + ); + r_mat_translate( + -global.shake_view / VIEWPORT_W, + -global.shake_view / VIEWPORT_H, + 0 + ); } - draw_framebuffer_tex(stage_get_fbpair(FBPAIR_FG)->front, VIEWPORT_W, VIEWPORT_H); + draw_framebuffer_tex(stage_get_fbpair(FBPAIR_FG)->front, 1, 1); r_mat_pop(); } diff --git a/src/util/fbpair.c b/src/util/fbpair.c index 7171c63f..bfa06518 100644 --- a/src/util/fbpair.c +++ b/src/util/fbpair.c @@ -70,12 +70,12 @@ void fbpair_resize_all(FBPair *pair, uint width, uint height) { fbpair_clear(pair); } -void fbpair_viewport(FBPair *pair, int x, int y, int w, int h) { +void fbpair_viewport(FBPair *pair, float x, float y, float w, float h) { r_framebuffer_viewport(pair->front, x, y, w, h); r_framebuffer_viewport(pair->back, x, y, w, h); } -void fbpair_viewport_rect(FBPair *pair, IntRect vp) { +void fbpair_viewport_rect(FBPair *pair, FloatRect vp) { r_framebuffer_viewport_rect(pair->front, vp); r_framebuffer_viewport_rect(pair->back, vp); } diff --git a/src/util/fbpair.h b/src/util/fbpair.h index 7b54e647..0996ae14 100644 --- a/src/util/fbpair.h +++ b/src/util/fbpair.h @@ -36,7 +36,7 @@ void fbpair_resize(FBPair *pair, FramebufferAttachment attachment, uint width, u void fbpair_resize_all(FBPair *pair, uint width, uint height) attr_nonnull(1); void fbpair_destroy(FBPair *pair) attr_nonnull(1); void fbpair_swap(FBPair *pair) attr_nonnull(1); -void fbpair_viewport(FBPair *pair, int x, int y, int w, int h) attr_nonnull(1); -void fbpair_viewport_rect(FBPair *pair, IntRect vp) attr_nonnull(1); +void fbpair_viewport(FBPair *pair, float x, float y, float w, float h) attr_nonnull(1); +void fbpair_viewport_rect(FBPair *pair, FloatRect vp) attr_nonnull(1); #endif // IGUARD_util_fbpair_h diff --git a/src/video.c b/src/video.c index c55dab1e..222dfca2 100644 --- a/src/video.c +++ b/src/video.c @@ -101,7 +101,7 @@ static int video_compare_modes(const void *a, const void *b) { return va->width * va->height - vb->width * vb->height; } -void video_get_viewport_size(int *width, int *height) { +void video_get_viewport_size(float *width, float *height) { float w = video.current.width; float h = video.current.height; float r = w / h; @@ -116,14 +116,14 @@ void video_get_viewport_size(int *width, int *height) { *height = h; } -void video_get_viewport(IntRect *vp) { +void video_get_viewport(FloatRect *vp) { video_get_viewport_size(&vp->w, &vp->h); - vp->x = (video.current.width - vp->w) / 2; - vp->y = (video.current.height - vp->h) / 2; + vp->x = (int)((video.current.width - vp->w) / 2); + vp->y = (int)((video.current.height - vp->h) / 2); } static void video_set_viewport(void) { - IntRect vp; + FloatRect vp; video_get_viewport(&vp); r_framebuffer_viewport_rect(NULL, vp); } diff --git a/src/video.h b/src/video.h index af45e5c5..6d07fd6d 100644 --- a/src/video.h +++ b/src/video.h @@ -70,8 +70,8 @@ void video_init(void); void video_shutdown(void); void video_set_mode(int w, int h, bool fs, bool resizable); void video_set_fullscreen(bool fullscreen); -void video_get_viewport(IntRect *vp); -void video_get_viewport_size(int *width, int *height); +void video_get_viewport(FloatRect *vp); +void video_get_viewport_size(float *width, float *height); bool video_is_fullscreen(void); bool video_is_resizable(void); extern VideoCapabilityState (*video_query_capability)(VideoCapability cap); diff --git a/subprojects/glad/include/glad/glad.h b/subprojects/glad/include/glad/glad.h index 86675dc2..d3bb6815 100644 --- a/subprojects/glad/include/glad/glad.h +++ b/subprojects/glad/include/glad/glad.h @@ -1,6 +1,6 @@ /* - OpenGL, OpenGL ES loader generated by glad 0.1.28 on Tue Oct 23 09:36:37 2018. + OpenGL, OpenGL ES loader generated by glad 0.1.29 on Wed Apr 3 23:58:33 2019. Language/Generator: C/C++ Specification: gl @@ -21,6 +21,7 @@ GL_ARB_pixel_buffer_object, GL_ARB_texture_filter_anisotropic, GL_ARB_vertex_array_object, + GL_ARB_viewport_array, GL_ATI_draw_buffers, GL_EXT_base_instance, GL_EXT_color_buffer_float, @@ -40,6 +41,7 @@ GL_OES_texture_float_linear, GL_OES_texture_half_float_linear, GL_OES_vertex_array_object, + GL_OES_viewport_array, GL_SGIX_depth_texture Loader: False Local files: False @@ -47,9 +49,9 @@ Reproducible: False Commandline: - --profile="core" --api="gl=3.3,gles2=3.0" --generator="c" --spec="gl" --no-loader --extensions="GL_ANGLE_depth_texture,GL_ANGLE_instanced_arrays,GL_ANGLE_translated_shader_source,GL_APPLE_vertex_array_object,GL_ARB_base_instance,GL_ARB_clear_texture,GL_ARB_debug_output,GL_ARB_depth_texture,GL_ARB_draw_buffers,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_pixel_buffer_object,GL_ARB_texture_filter_anisotropic,GL_ARB_vertex_array_object,GL_ATI_draw_buffers,GL_EXT_base_instance,GL_EXT_color_buffer_float,GL_EXT_draw_buffers,GL_EXT_draw_instanced,GL_EXT_float_blend,GL_EXT_instanced_arrays,GL_EXT_pixel_buffer_object,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_norm16,GL_EXT_texture_rg,GL_KHR_debug,GL_NV_draw_instanced,GL_NV_instanced_arrays,GL_NV_pixel_buffer_object,GL_OES_depth_texture,GL_OES_texture_float_linear,GL_OES_texture_half_float_linear,GL_OES_vertex_array_object,GL_SGIX_depth_texture" + --profile="core" --api="gl=3.3,gles2=3.0" --generator="c" --spec="gl" --no-loader --extensions="GL_ANGLE_depth_texture,GL_ANGLE_instanced_arrays,GL_ANGLE_translated_shader_source,GL_APPLE_vertex_array_object,GL_ARB_base_instance,GL_ARB_clear_texture,GL_ARB_debug_output,GL_ARB_depth_texture,GL_ARB_draw_buffers,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_pixel_buffer_object,GL_ARB_texture_filter_anisotropic,GL_ARB_vertex_array_object,GL_ARB_viewport_array,GL_ATI_draw_buffers,GL_EXT_base_instance,GL_EXT_color_buffer_float,GL_EXT_draw_buffers,GL_EXT_draw_instanced,GL_EXT_float_blend,GL_EXT_instanced_arrays,GL_EXT_pixel_buffer_object,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_norm16,GL_EXT_texture_rg,GL_KHR_debug,GL_NV_draw_instanced,GL_NV_instanced_arrays,GL_NV_pixel_buffer_object,GL_OES_depth_texture,GL_OES_texture_float_linear,GL_OES_texture_half_float_linear,GL_OES_vertex_array_object,GL_OES_viewport_array,GL_SGIX_depth_texture" Online: - http://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.0&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_translated_shader_source&extensions=GL_APPLE_vertex_array_object&extensions=GL_ARB_base_instance&extensions=GL_ARB_clear_texture&extensions=GL_ARB_debug_output&extensions=GL_ARB_depth_texture&extensions=GL_ARB_draw_buffers&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_pixel_buffer_object&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_vertex_array_object&extensions=GL_ATI_draw_buffers&extensions=GL_EXT_base_instance&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_draw_buffers&extensions=GL_EXT_draw_instanced&extensions=GL_EXT_float_blend&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_pixel_buffer_object&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_norm16&extensions=GL_EXT_texture_rg&extensions=GL_KHR_debug&extensions=GL_NV_draw_instanced&extensions=GL_NV_instanced_arrays&extensions=GL_NV_pixel_buffer_object&extensions=GL_OES_depth_texture&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_array_object&extensions=GL_SGIX_depth_texture + https://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.0&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_translated_shader_source&extensions=GL_APPLE_vertex_array_object&extensions=GL_ARB_base_instance&extensions=GL_ARB_clear_texture&extensions=GL_ARB_debug_output&extensions=GL_ARB_depth_texture&extensions=GL_ARB_draw_buffers&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_pixel_buffer_object&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_vertex_array_object&extensions=GL_ARB_viewport_array&extensions=GL_ATI_draw_buffers&extensions=GL_EXT_base_instance&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_draw_buffers&extensions=GL_EXT_draw_instanced&extensions=GL_EXT_float_blend&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_pixel_buffer_object&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_norm16&extensions=GL_EXT_texture_rg&extensions=GL_KHR_debug&extensions=GL_NV_draw_instanced&extensions=GL_NV_instanced_arrays&extensions=GL_NV_pixel_buffer_object&extensions=GL_OES_depth_texture&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_array_object&extensions=GL_OES_viewport_array&extensions=GL_SGIX_depth_texture */ @@ -134,59 +136,21 @@ GLAPI int gladLoadGLLoader(GLADloadproc); GLAPI int gladLoadGLES2Loader(GLADloadproc); -#include #include -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef void GLvoid; -typedef signed char GLbyte; -typedef short GLshort; +typedef khronos_int8_t GLbyte; +typedef khronos_uint8_t GLubyte; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; typedef int GLint; -typedef int GLclampx; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; typedef unsigned int GLuint; +typedef khronos_int32_t GLclampx; typedef int GLsizei; -typedef float GLfloat; -typedef float GLclampf; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void *GLeglClientBufferEXT; @@ -198,25 +162,17 @@ typedef void *GLhandleARB; #else typedef unsigned int GLhandleARB; #endif -typedef unsigned short GLhalfARB; -typedef unsigned short GLhalf; -typedef GLint GLfixed; +typedef khronos_uint16_t GLhalf; +typedef khronos_uint16_t GLhalfARB; +typedef khronos_int32_t GLfixed; typedef khronos_intptr_t GLintptr; +typedef khronos_intptr_t GLintptrARB; typedef khronos_ssize_t GLsizeiptr; -typedef int64_t GLint64; -typedef uint64_t GLuint64; -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) -typedef long GLintptrARB; -#else -typedef ptrdiff_t GLintptrARB; -#endif -#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1060) -typedef long GLsizeiptrARB; -#else -typedef ptrdiff_t GLsizeiptrARB; -#endif -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; +typedef khronos_ssize_t GLsizeiptrARB; +typedef khronos_int64_t GLint64; +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64; +typedef khronos_uint64_t GLuint64EXT; typedef struct __GLsync *GLsync; struct _cl_context; struct _cl_event; @@ -2386,6 +2342,12 @@ GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF #define GL_TEXTURE_MAX_ANISOTROPY 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 #define GL_MAX_DRAW_BUFFERS_ATI 0x8824 #define GL_DRAW_BUFFER0_ATI 0x8825 #define GL_DRAW_BUFFER1_ATI 0x8826 @@ -2552,6 +2514,10 @@ GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; #define GL_PIXEL_PACK_BUFFER_BINDING_NV 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_NV 0x88EF #define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#define GL_MAX_VIEWPORTS_OES 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS_OES 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE_OES 0x825D +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_OES 0x825F #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 GLAPI int GLAD_GL_APPLE_vertex_array_object; @@ -2647,6 +2613,40 @@ GLAPI int GLAD_GL_ARB_texture_filter_anisotropic; #define GL_ARB_vertex_array_object 1 GLAPI int GLAD_GL_ARB_vertex_array_object; #endif +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +GLAPI int GLAD_GL_ARB_viewport_array; +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat *v); +GLAPI PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv; +#define glViewportArrayv glad_glViewportArrayv +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf; +#define glViewportIndexedf glad_glViewportIndexedf +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv; +#define glViewportIndexedfv glad_glViewportIndexedfv +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint *v); +GLAPI PFNGLSCISSORARRAYVPROC glad_glScissorArrayv; +#define glScissorArrayv glad_glScissorArrayv +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed; +#define glScissorIndexed glad_glScissorIndexed +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv; +#define glScissorIndexedv glad_glScissorIndexedv +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble *v); +GLAPI PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; +#define glDepthRangeArrayv glad_glDepthRangeArrayv +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); +GLAPI PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; +#define glDepthRangeIndexed glad_glDepthRangeIndexed +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat *data); +GLAPI PFNGLGETFLOATI_VPROC glad_glGetFloati_v; +#define glGetFloati_v glad_glGetFloati_v +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble *data); +GLAPI PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v; +#define glGetDoublei_v glad_glGetDoublei_v +#endif #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 GLAPI int GLAD_GL_ATI_draw_buffers; @@ -2874,6 +2874,46 @@ typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYOESPROC)(GLuint array); GLAPI PFNGLISVERTEXARRAYOESPROC glad_glIsVertexArrayOES; #define glIsVertexArrayOES glad_glIsVertexArrayOES #endif +#ifndef GL_OES_viewport_array +#define GL_OES_viewport_array 1 +GLAPI int GLAD_GL_OES_viewport_array; +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVOESPROC)(GLuint first, GLsizei count, const GLfloat *v); +GLAPI PFNGLVIEWPORTARRAYVOESPROC glad_glViewportArrayvOES; +#define glViewportArrayvOES glad_glViewportArrayvOES +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFOESPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI PFNGLVIEWPORTINDEXEDFOESPROC glad_glViewportIndexedfOES; +#define glViewportIndexedfOES glad_glViewportIndexedfOES +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVOESPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVIEWPORTINDEXEDFVOESPROC glad_glViewportIndexedfvOES; +#define glViewportIndexedfvOES glad_glViewportIndexedfvOES +typedef void (APIENTRYP PFNGLSCISSORARRAYVOESPROC)(GLuint first, GLsizei count, const GLint *v); +GLAPI PFNGLSCISSORARRAYVOESPROC glad_glScissorArrayvOES; +#define glScissorArrayvOES glad_glScissorArrayvOES +typedef void (APIENTRYP PFNGLSCISSORINDEXEDOESPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI PFNGLSCISSORINDEXEDOESPROC glad_glScissorIndexedOES; +#define glScissorIndexedOES glad_glScissorIndexedOES +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVOESPROC)(GLuint index, const GLint *v); +GLAPI PFNGLSCISSORINDEXEDVOESPROC glad_glScissorIndexedvOES; +#define glScissorIndexedvOES glad_glScissorIndexedvOES +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYFVOESPROC)(GLuint first, GLsizei count, const GLfloat *v); +GLAPI PFNGLDEPTHRANGEARRAYFVOESPROC glad_glDepthRangeArrayfvOES; +#define glDepthRangeArrayfvOES glad_glDepthRangeArrayfvOES +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDFOESPROC)(GLuint index, GLfloat n, GLfloat f); +GLAPI PFNGLDEPTHRANGEINDEXEDFOESPROC glad_glDepthRangeIndexedfOES; +#define glDepthRangeIndexedfOES glad_glDepthRangeIndexedfOES +typedef void (APIENTRYP PFNGLGETFLOATI_VOESPROC)(GLenum target, GLuint index, GLfloat *data); +GLAPI PFNGLGETFLOATI_VOESPROC glad_glGetFloati_vOES; +#define glGetFloati_vOES glad_glGetFloati_vOES +typedef void (APIENTRYP PFNGLENABLEIOESPROC)(GLenum target, GLuint index); +GLAPI PFNGLENABLEIOESPROC glad_glEnableiOES; +#define glEnableiOES glad_glEnableiOES +typedef void (APIENTRYP PFNGLDISABLEIOESPROC)(GLenum target, GLuint index); +GLAPI PFNGLDISABLEIOESPROC glad_glDisableiOES; +#define glDisableiOES glad_glDisableiOES +typedef GLboolean (APIENTRYP PFNGLISENABLEDIOESPROC)(GLenum target, GLuint index); +GLAPI PFNGLISENABLEDIOESPROC glad_glIsEnablediOES; +#define glIsEnablediOES glad_glIsEnablediOES +#endif #ifdef __cplusplus } diff --git a/subprojects/glad/meson.build b/subprojects/glad/meson.build index f1afca51..202632a4 100644 --- a/subprojects/glad/meson.build +++ b/subprojects/glad/meson.build @@ -17,6 +17,7 @@ glad_extensions = [ 'GL_ARB_pixel_buffer_object', 'GL_ARB_texture_filter_anisotropic', 'GL_ARB_vertex_array_object', + 'GL_ARB_viewport_array', 'GL_ATI_draw_buffers', 'GL_EXT_base_instance', 'GL_EXT_color_buffer_float', @@ -36,6 +37,7 @@ glad_extensions = [ 'GL_OES_texture_float_linear', 'GL_OES_texture_half_float_linear', 'GL_OES_vertex_array_object', + 'GL_OES_viewport_array', 'GL_SGIX_depth_texture', ] diff --git a/subprojects/glad/src/glad.c b/subprojects/glad/src/glad.c index 031ae0e1..88da13a3 100644 --- a/subprojects/glad/src/glad.c +++ b/subprojects/glad/src/glad.c @@ -1,6 +1,6 @@ /* - OpenGL, OpenGL ES loader generated by glad 0.1.28 on Tue Oct 23 09:36:37 2018. + OpenGL, OpenGL ES loader generated by glad 0.1.29 on Wed Apr 3 23:58:33 2019. Language/Generator: C/C++ Specification: gl @@ -21,6 +21,7 @@ GL_ARB_pixel_buffer_object, GL_ARB_texture_filter_anisotropic, GL_ARB_vertex_array_object, + GL_ARB_viewport_array, GL_ATI_draw_buffers, GL_EXT_base_instance, GL_EXT_color_buffer_float, @@ -40,6 +41,7 @@ GL_OES_texture_float_linear, GL_OES_texture_half_float_linear, GL_OES_vertex_array_object, + GL_OES_viewport_array, GL_SGIX_depth_texture Loader: False Local files: False @@ -47,9 +49,9 @@ Reproducible: False Commandline: - --profile="core" --api="gl=3.3,gles2=3.0" --generator="c" --spec="gl" --no-loader --extensions="GL_ANGLE_depth_texture,GL_ANGLE_instanced_arrays,GL_ANGLE_translated_shader_source,GL_APPLE_vertex_array_object,GL_ARB_base_instance,GL_ARB_clear_texture,GL_ARB_debug_output,GL_ARB_depth_texture,GL_ARB_draw_buffers,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_pixel_buffer_object,GL_ARB_texture_filter_anisotropic,GL_ARB_vertex_array_object,GL_ATI_draw_buffers,GL_EXT_base_instance,GL_EXT_color_buffer_float,GL_EXT_draw_buffers,GL_EXT_draw_instanced,GL_EXT_float_blend,GL_EXT_instanced_arrays,GL_EXT_pixel_buffer_object,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_norm16,GL_EXT_texture_rg,GL_KHR_debug,GL_NV_draw_instanced,GL_NV_instanced_arrays,GL_NV_pixel_buffer_object,GL_OES_depth_texture,GL_OES_texture_float_linear,GL_OES_texture_half_float_linear,GL_OES_vertex_array_object,GL_SGIX_depth_texture" + --profile="core" --api="gl=3.3,gles2=3.0" --generator="c" --spec="gl" --no-loader --extensions="GL_ANGLE_depth_texture,GL_ANGLE_instanced_arrays,GL_ANGLE_translated_shader_source,GL_APPLE_vertex_array_object,GL_ARB_base_instance,GL_ARB_clear_texture,GL_ARB_debug_output,GL_ARB_depth_texture,GL_ARB_draw_buffers,GL_ARB_draw_instanced,GL_ARB_instanced_arrays,GL_ARB_pixel_buffer_object,GL_ARB_texture_filter_anisotropic,GL_ARB_vertex_array_object,GL_ARB_viewport_array,GL_ATI_draw_buffers,GL_EXT_base_instance,GL_EXT_color_buffer_float,GL_EXT_draw_buffers,GL_EXT_draw_instanced,GL_EXT_float_blend,GL_EXT_instanced_arrays,GL_EXT_pixel_buffer_object,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_norm16,GL_EXT_texture_rg,GL_KHR_debug,GL_NV_draw_instanced,GL_NV_instanced_arrays,GL_NV_pixel_buffer_object,GL_OES_depth_texture,GL_OES_texture_float_linear,GL_OES_texture_half_float_linear,GL_OES_vertex_array_object,GL_OES_viewport_array,GL_SGIX_depth_texture" Online: - http://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.0&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_translated_shader_source&extensions=GL_APPLE_vertex_array_object&extensions=GL_ARB_base_instance&extensions=GL_ARB_clear_texture&extensions=GL_ARB_debug_output&extensions=GL_ARB_depth_texture&extensions=GL_ARB_draw_buffers&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_pixel_buffer_object&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_vertex_array_object&extensions=GL_ATI_draw_buffers&extensions=GL_EXT_base_instance&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_draw_buffers&extensions=GL_EXT_draw_instanced&extensions=GL_EXT_float_blend&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_pixel_buffer_object&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_norm16&extensions=GL_EXT_texture_rg&extensions=GL_KHR_debug&extensions=GL_NV_draw_instanced&extensions=GL_NV_instanced_arrays&extensions=GL_NV_pixel_buffer_object&extensions=GL_OES_depth_texture&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_array_object&extensions=GL_SGIX_depth_texture + https://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.0&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_translated_shader_source&extensions=GL_APPLE_vertex_array_object&extensions=GL_ARB_base_instance&extensions=GL_ARB_clear_texture&extensions=GL_ARB_debug_output&extensions=GL_ARB_depth_texture&extensions=GL_ARB_draw_buffers&extensions=GL_ARB_draw_instanced&extensions=GL_ARB_instanced_arrays&extensions=GL_ARB_pixel_buffer_object&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_vertex_array_object&extensions=GL_ARB_viewport_array&extensions=GL_ATI_draw_buffers&extensions=GL_EXT_base_instance&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_draw_buffers&extensions=GL_EXT_draw_instanced&extensions=GL_EXT_float_blend&extensions=GL_EXT_instanced_arrays&extensions=GL_EXT_pixel_buffer_object&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_norm16&extensions=GL_EXT_texture_rg&extensions=GL_KHR_debug&extensions=GL_NV_draw_instanced&extensions=GL_NV_instanced_arrays&extensions=GL_NV_pixel_buffer_object&extensions=GL_OES_depth_texture&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_array_object&extensions=GL_OES_viewport_array&extensions=GL_SGIX_depth_texture */ #include @@ -82,11 +84,7 @@ static int get_exts(void) { num_exts_i = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); if (num_exts_i > 0) { - char **tmp_exts_i = (char **)realloc((void *)exts_i, (size_t)num_exts_i * (sizeof *exts_i)); - if (tmp_exts_i == NULL) { - return 0; - } - exts_i = tmp_exts_i; + exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); } if (exts_i == NULL) { @@ -581,6 +579,7 @@ int GLAD_GL_ARB_instanced_arrays = 0; int GLAD_GL_ARB_pixel_buffer_object = 0; int GLAD_GL_ARB_texture_filter_anisotropic = 0; int GLAD_GL_ARB_vertex_array_object = 0; +int GLAD_GL_ARB_viewport_array = 0; int GLAD_GL_ATI_draw_buffers = 0; int GLAD_GL_EXT_base_instance = 0; int GLAD_GL_EXT_color_buffer_float = 0; @@ -600,6 +599,7 @@ int GLAD_GL_OES_depth_texture = 0; int GLAD_GL_OES_texture_float_linear = 0; int GLAD_GL_OES_texture_half_float_linear = 0; int GLAD_GL_OES_vertex_array_object = 0; +int GLAD_GL_OES_viewport_array = 0; int GLAD_GL_SGIX_depth_texture = 0; PFNGLBINDVERTEXARRAYAPPLEPROC glad_glBindVertexArrayAPPLE = NULL; PFNGLDELETEVERTEXARRAYSAPPLEPROC glad_glDeleteVertexArraysAPPLE = NULL; @@ -618,6 +618,16 @@ PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB = NULL; PFNGLDRAWARRAYSINSTANCEDARBPROC glad_glDrawArraysInstancedARB = NULL; PFNGLDRAWELEMENTSINSTANCEDARBPROC glad_glDrawElementsInstancedARB = NULL; PFNGLVERTEXATTRIBDIVISORARBPROC glad_glVertexAttribDivisorARB = NULL; +PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv = NULL; +PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf = NULL; +PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv = NULL; +PFNGLSCISSORARRAYVPROC glad_glScissorArrayv = NULL; +PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed = NULL; +PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv = NULL; +PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv = NULL; +PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed = NULL; +PFNGLGETFLOATI_VPROC glad_glGetFloati_v = NULL; +PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v = NULL; PFNGLDRAWBUFFERSATIPROC glad_glDrawBuffersATI = NULL; PFNGLDRAWARRAYSINSTANCEDEXTPROC glad_glDrawArraysInstancedEXT = NULL; PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT = NULL; @@ -659,6 +669,18 @@ PFNGLBINDVERTEXARRAYOESPROC glad_glBindVertexArrayOES = NULL; PFNGLDELETEVERTEXARRAYSOESPROC glad_glDeleteVertexArraysOES = NULL; PFNGLGENVERTEXARRAYSOESPROC glad_glGenVertexArraysOES = NULL; PFNGLISVERTEXARRAYOESPROC glad_glIsVertexArrayOES = NULL; +PFNGLVIEWPORTARRAYVOESPROC glad_glViewportArrayvOES = NULL; +PFNGLVIEWPORTINDEXEDFOESPROC glad_glViewportIndexedfOES = NULL; +PFNGLVIEWPORTINDEXEDFVOESPROC glad_glViewportIndexedfvOES = NULL; +PFNGLSCISSORARRAYVOESPROC glad_glScissorArrayvOES = NULL; +PFNGLSCISSORINDEXEDOESPROC glad_glScissorIndexedOES = NULL; +PFNGLSCISSORINDEXEDVOESPROC glad_glScissorIndexedvOES = NULL; +PFNGLDEPTHRANGEARRAYFVOESPROC glad_glDepthRangeArrayfvOES = NULL; +PFNGLDEPTHRANGEINDEXEDFOESPROC glad_glDepthRangeIndexedfOES = NULL; +PFNGLGETFLOATI_VOESPROC glad_glGetFloati_vOES = NULL; +PFNGLENABLEIOESPROC glad_glEnableiOES = NULL; +PFNGLDISABLEIOESPROC glad_glDisableiOES = NULL; +PFNGLISENABLEDIOESPROC glad_glIsEnablediOES = NULL; static void load_GL_VERSION_1_0(GLADloadproc load) { if(!GLAD_GL_VERSION_1_0) return; glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); @@ -1117,6 +1139,19 @@ static void load_GL_ARB_vertex_array_object(GLADloadproc load) { glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); } +static void load_GL_ARB_viewport_array(GLADloadproc load) { + if(!GLAD_GL_ARB_viewport_array) return; + glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)load("glViewportArrayv"); + glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)load("glViewportIndexedf"); + glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)load("glViewportIndexedfv"); + glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC)load("glScissorArrayv"); + glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)load("glScissorIndexed"); + glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)load("glScissorIndexedv"); + glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)load("glDepthRangeArrayv"); + glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)load("glDepthRangeIndexed"); + glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC)load("glGetFloati_v"); + glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)load("glGetDoublei_v"); +} static void load_GL_ATI_draw_buffers(GLADloadproc load) { if(!GLAD_GL_ATI_draw_buffers) return; glad_glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)load("glDrawBuffersATI"); @@ -1164,6 +1199,7 @@ static int find_extensionsGL(void) { GLAD_GL_ARB_pixel_buffer_object = has_ext("GL_ARB_pixel_buffer_object"); GLAD_GL_ARB_texture_filter_anisotropic = has_ext("GL_ARB_texture_filter_anisotropic"); GLAD_GL_ARB_vertex_array_object = has_ext("GL_ARB_vertex_array_object"); + GLAD_GL_ARB_viewport_array = has_ext("GL_ARB_viewport_array"); GLAD_GL_ATI_draw_buffers = has_ext("GL_ATI_draw_buffers"); GLAD_GL_EXT_draw_instanced = has_ext("GL_EXT_draw_instanced"); GLAD_GL_EXT_pixel_buffer_object = has_ext("GL_EXT_pixel_buffer_object"); @@ -1256,6 +1292,7 @@ int gladLoadGLLoader(GLADloadproc load) { load_GL_ARB_draw_instanced(load); load_GL_ARB_instanced_arrays(load); load_GL_ARB_vertex_array_object(load); + load_GL_ARB_viewport_array(load); load_GL_ATI_draw_buffers(load); load_GL_EXT_draw_instanced(load); load_GL_KHR_debug(load); @@ -1556,6 +1593,21 @@ static void load_GL_OES_vertex_array_object(GLADloadproc load) { glad_glGenVertexArraysOES = (PFNGLGENVERTEXARRAYSOESPROC)load("glGenVertexArraysOES"); glad_glIsVertexArrayOES = (PFNGLISVERTEXARRAYOESPROC)load("glIsVertexArrayOES"); } +static void load_GL_OES_viewport_array(GLADloadproc load) { + if(!GLAD_GL_OES_viewport_array) return; + glad_glViewportArrayvOES = (PFNGLVIEWPORTARRAYVOESPROC)load("glViewportArrayvOES"); + glad_glViewportIndexedfOES = (PFNGLVIEWPORTINDEXEDFOESPROC)load("glViewportIndexedfOES"); + glad_glViewportIndexedfvOES = (PFNGLVIEWPORTINDEXEDFVOESPROC)load("glViewportIndexedfvOES"); + glad_glScissorArrayvOES = (PFNGLSCISSORARRAYVOESPROC)load("glScissorArrayvOES"); + glad_glScissorIndexedOES = (PFNGLSCISSORINDEXEDOESPROC)load("glScissorIndexedOES"); + glad_glScissorIndexedvOES = (PFNGLSCISSORINDEXEDVOESPROC)load("glScissorIndexedvOES"); + glad_glDepthRangeArrayfvOES = (PFNGLDEPTHRANGEARRAYFVOESPROC)load("glDepthRangeArrayfvOES"); + glad_glDepthRangeIndexedfOES = (PFNGLDEPTHRANGEINDEXEDFOESPROC)load("glDepthRangeIndexedfOES"); + glad_glGetFloati_vOES = (PFNGLGETFLOATI_VOESPROC)load("glGetFloati_vOES"); + glad_glEnableiOES = (PFNGLENABLEIOESPROC)load("glEnableiOES"); + glad_glDisableiOES = (PFNGLDISABLEIOESPROC)load("glDisableiOES"); + glad_glIsEnablediOES = (PFNGLISENABLEDIOESPROC)load("glIsEnablediOES"); +} static int find_extensionsGLES2(void) { if (!get_exts()) return 0; GLAD_GL_ANGLE_depth_texture = has_ext("GL_ANGLE_depth_texture"); @@ -1578,6 +1630,7 @@ static int find_extensionsGLES2(void) { GLAD_GL_OES_texture_float_linear = has_ext("GL_OES_texture_float_linear"); GLAD_GL_OES_texture_half_float_linear = has_ext("GL_OES_texture_half_float_linear"); GLAD_GL_OES_vertex_array_object = has_ext("GL_OES_vertex_array_object"); + GLAD_GL_OES_viewport_array = has_ext("GL_OES_viewport_array"); free_exts(); return 1; } @@ -1646,6 +1699,7 @@ int gladLoadGLES2Loader(GLADloadproc load) { load_GL_NV_draw_instanced(load); load_GL_NV_instanced_arrays(load); load_GL_OES_vertex_array_object(load); + load_GL_OES_viewport_array(load); return GLVersion.major != 0 || GLVersion.minor != 0; }