improve viewport scaling and positioning

This commit is contained in:
Andrei Alexeyev 2019-04-04 02:43:03 +03:00
parent bfea580ce1
commit 52388df53f
No known key found for this signature in database
GPG key ID: 363707CD4C7FE8A4
20 changed files with 305 additions and 119 deletions

View file

@ -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

View file

@ -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);
}

View file

@ -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);

View file

@ -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);

View file

@ -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];

View file

@ -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;

View file

@ -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

View file

@ -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))

View file

@ -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 {

View file

@ -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;

View file

@ -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) { }

View file

@ -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));
}

View file

@ -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();
}

View file

@ -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);
}

View file

@ -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

View file

@ -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);
}

View file

@ -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);

View file

@ -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 <stddef.h>
#include <KHR/khrplatform.h>
#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 <inttypes.h>
#elif defined(__sun__) || defined(__digital__)
#include <inttypes.h>
#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 <inttypes.h>
#elif defined(__SCO__) || defined(__USLC__)
#include <stdint.h>
#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 <stdint.h>
#elif defined(_WIN32)
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
/* Fallback if nothing above works */
#include <inttypes.h>
#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
}

View file

@ -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',
]

View file

@ -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 <stdio.h>
@ -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;
}