int defaultframebufferobject; // deal with platforms that use a non-zero default fbo
qboolean pointer_color_enabled;
+ // GL3.2 Core requires that we have a GL_VERTEX_ARRAY_OBJECT, but... just one.
+ unsigned int defaultvao;
+
int pointer_vertex_components;
int pointer_vertex_gltype;
size_t pointer_vertex_stride;
CHECKGLERROR
- GL_Backend_ResetState();
-
switch(vid.renderpath)
{
case RENDERPATH_GL32:
+ // GL3.2 Core requires that we have a VAO bound - but using more than one has no performance benefit so this is just placeholder
+ qglGenVertexArrays(1, &gl_state.defaultvao);
+ qglBindVertexArray(gl_state.defaultvao);
+ // fall through
case RENDERPATH_GLES2:
// fetch current fbo here (default fbo is not 0 on some GLES devices)
CHECKGLERROR
qglGetIntegerv(GL_FRAMEBUFFER_BINDING, &gl_state.defaultframebufferobject);CHECKGLERROR
break;
}
+
+ GL_Backend_ResetState();
}
static void gl_backend_shutdown(void)
{
int glshaderversion; // this is at least 150 (GL 3.2)
qboolean amd_texture_texture4;
- qboolean arb_draw_buffers;
- qboolean arb_occlusion_query;
- qboolean arb_query_buffer_object;
- qboolean arb_texture_compression;
qboolean arb_texture_gather;
- qboolean ext_blend_minmax;
- qboolean ext_blend_subtract;
- qboolean ext_blend_func_separate;
- qboolean ext_packed_depth_stencil;
qboolean ext_texture_compression_s3tc;
qboolean ext_texture_filter_anisotropic;
qboolean ext_texture_srgb;
- qboolean arb_texture_float;
- qboolean arb_half_float_pixel;
- qboolean arb_half_float_vertex;
- qboolean arb_multisample;
qboolean arb_debug_output;
}
viddef_support_t;
#endif
vid.support.amd_texture_texture4 = GL_CheckExtension("GL_AMD_texture_texture4", "-notexture4", false);
- vid.support.arb_draw_buffers = true;
- vid.support.arb_occlusion_query = true;
- vid.support.arb_query_buffer_object = true;
- vid.support.arb_texture_compression = true;
vid.support.arb_texture_gather = GL_CheckExtension("GL_ARB_texture_gather", "-notexturegather", false);
- vid.support.ext_blend_minmax = true;
- vid.support.ext_blend_subtract = true;
- vid.support.ext_blend_func_separate = true;
- vid.support.ext_packed_depth_stencil = true;
vid.support.ext_texture_compression_s3tc = GL_CheckExtension("GL_EXT_texture_compression_s3tc", "-nos3tc", false);
vid.support.ext_texture_filter_anisotropic = GL_CheckExtension("GL_EXT_texture_filter_anisotropic", "-noanisotropy", false);
#ifndef USE_GLES2
// COMMANDLINEOPTION: GL: -notexturegather disables GL_ARB_texture_gather (which provides fetch4 sampling)
// COMMANDLINEOPTION: GL: -nogldebugoutput disables GL_ARB_debug_output (which provides the gl_debug feature, if enabled)
- if (vid.support.arb_draw_buffers)
- qglGetIntegerv(GL_MAX_DRAW_BUFFERS, (GLint*)&vid.maxdrawbuffers);
-
+#ifdef GL_MAX_DRAW_BUFFERS
+ qglGetIntegerv(GL_MAX_DRAW_BUFFERS, (GLint*)&vid.maxdrawbuffers);
+ CHECKGLERROR
+#endif
qglGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint*)&vid.maxtexturesize_2d);
- qglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, (GLint*)&vid.max_anisotropy);
- qglGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, (GLint*)&vid.maxtexturesize_cubemap);
- qglGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, (GLint*)&vid.maxtexturesize_3d);
+ CHECKGLERROR
+#ifdef GL_MAX_CUBE_MAP_TEXTURE_SIZE
+#ifdef USE_GLES2
+ if (GL_CheckExtension("GL_ARB_texture_cube_map", "-nocubemap", false))
+#endif
+ {
+ qglGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, (GLint*)&vid.maxtexturesize_cubemap);
+ Con_DPrintf("GL_MAX_CUBE_MAP_TEXTURE_SIZE = %i\n", vid.maxtexturesize_cubemap);
+ }
+ CHECKGLERROR
+#endif
+#ifdef GL_MAX_3D_TEXTURE_SIZE
+#ifdef USE_GLES2
+ if (GL_CheckExtension("GL_EXT_texture3D", "-notexture3d", false)
+ || GL_CheckExtension("GL_OES_texture3D", "-notexture3d", false))
+#endif
+ {
+ qglGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, (GLint*)&vid.maxtexturesize_3d);
+ Con_DPrintf("GL_MAX_3D_TEXTURE_SIZE = %i\n", vid.maxtexturesize_3d);
+ }
+#endif
+ CHECKGLERROR
#ifdef USE_GLES2
Con_DPrint("Using GLES2 rendering path\n");