improve viewport scaling and positioning
This commit is contained in:
parent
bfea580ce1
commit
52388df53f
20 changed files with 305 additions and 119 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) { }
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
10
src/video.c
10
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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
]
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue