|
|
|
@@ -36,6 +36,11 @@ QGL_1_3_PROCS;
|
|
|
|
|
QGL_1_4_PROCS;
|
|
|
|
|
QGL_1_5_PROCS;
|
|
|
|
|
QGL_2_0_PROCS;
|
|
|
|
|
QGL_EXT_framebuffer_object_PROCS;
|
|
|
|
|
QGL_EXT_framebuffer_blit_PROCS;
|
|
|
|
|
QGL_EXT_framebuffer_multisample_PROCS;
|
|
|
|
|
QGL_ARB_vertex_array_object_PROCS;
|
|
|
|
|
QGL_EXT_direct_state_access_PROCS;
|
|
|
|
|
#undef GLE
|
|
|
|
|
|
|
|
|
|
// GL_EXT_framebuffer_object
|
|
|
|
@@ -142,18 +147,23 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
char *extension;
|
|
|
|
|
const char* result[3] = { "...ignoring %s\n", "...using %s\n", "...%s not found\n" };
|
|
|
|
|
|
|
|
|
|
// Check OpenGL version
|
|
|
|
|
sscanf(glConfig.version_string, "%d.%d", &glRefConfig.openglMajorVersion, &glRefConfig.openglMinorVersion);
|
|
|
|
|
if (glRefConfig.openglMajorVersion < 2)
|
|
|
|
|
ri.Error(ERR_FATAL, "OpenGL 2.0 required!");
|
|
|
|
|
ri.Printf(PRINT_ALL, "...using OpenGL %s\n", glConfig.version_string);
|
|
|
|
|
|
|
|
|
|
// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
|
|
|
|
|
// set DSA fallbacks
|
|
|
|
|
#define GLE(ret, name, ...) qgl##name = GLDSA_##name;
|
|
|
|
|
QGL_EXT_direct_state_access_PROCS;
|
|
|
|
|
#undef GLE
|
|
|
|
|
|
|
|
|
|
// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a
|
|
|
|
|
#define GLE(ret, name, ...) qgl##name = (name##proc *) SDL_GL_GetProcAddress("gl" #name);
|
|
|
|
|
|
|
|
|
|
// OpenGL 1.2, was GL_EXT_draw_range_elements
|
|
|
|
|
QGL_1_2_PROCS;
|
|
|
|
|
glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse;
|
|
|
|
|
glRefConfig.drawRangeElements = !!r_ext_draw_range_elements->integer;
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()");
|
|
|
|
|
|
|
|
|
|
// OpenGL 1.3, was GL_ARB_texture_compression
|
|
|
|
@@ -161,8 +171,8 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
|
|
|
|
|
// OpenGL 1.4, was GL_EXT_multi_draw_arrays
|
|
|
|
|
QGL_1_4_PROCS;
|
|
|
|
|
glRefConfig.drawRangeElements = r_ext_multi_draw_arrays->integer ? qtrue : qfalse;
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glMultiDrawElements()");
|
|
|
|
|
glRefConfig.multiDrawArrays = !!r_ext_multi_draw_arrays->integer;
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.multiDrawArrays], "glMultiDrawElements()");
|
|
|
|
|
|
|
|
|
|
// OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query
|
|
|
|
|
QGL_1_5_PROCS;
|
|
|
|
@@ -171,8 +181,7 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
// OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader
|
|
|
|
|
QGL_2_0_PROCS;
|
|
|
|
|
|
|
|
|
|
#undef GLE
|
|
|
|
|
|
|
|
|
|
// Determine GLSL version
|
|
|
|
|
if (1)
|
|
|
|
|
{
|
|
|
|
|
char version[256];
|
|
|
|
@@ -186,23 +195,45 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
|
|
|
|
|
glRefConfig.memInfo = MI_NONE;
|
|
|
|
|
|
|
|
|
|
if( GLimp_HaveExtension( "GL_NVX_gpu_memory_info" ) )
|
|
|
|
|
// GL_NVX_gpu_memory_info
|
|
|
|
|
extension = "GL_NVX_gpu_memory_info";
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.memInfo = MI_NVX;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[1], extension);
|
|
|
|
|
}
|
|
|
|
|
else if( GLimp_HaveExtension( "GL_ATI_meminfo" ) )
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.memInfo = MI_ATI;
|
|
|
|
|
ri.Printf(PRINT_ALL, result[2], extension);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GL_ATI_meminfo
|
|
|
|
|
extension = "GL_ATI_meminfo";
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
if (glRefConfig.memInfo == MI_NONE)
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.memInfo = MI_ATI;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[1], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ri.Printf(PRINT_ALL, result[0], extension);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ri.Printf(PRINT_ALL, result[2], extension);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GL_ARB_texture_non_power_of_two
|
|
|
|
|
extension = "GL_ARB_texture_non_power_of_two";
|
|
|
|
|
glRefConfig.textureNonPowerOfTwo = qfalse;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
if(1) //(r_ext_texture_non_power_of_two->integer)
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.textureNonPowerOfTwo = qtrue;
|
|
|
|
|
}
|
|
|
|
|
glRefConfig.textureNonPowerOfTwo = qtrue; // !!r_ext_texture_non_power_of_two->integer
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.textureNonPowerOfTwo], extension);
|
|
|
|
|
}
|
|
|
|
@@ -216,10 +247,7 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.textureFloat = qfalse;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
if( r_ext_texture_float->integer )
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.textureFloat = qtrue;
|
|
|
|
|
}
|
|
|
|
|
glRefConfig.textureFloat = !!r_ext_texture_float->integer;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.textureFloat], extension);
|
|
|
|
|
}
|
|
|
|
@@ -233,8 +261,7 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.halfFloatPixel = qfalse;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
if( r_arb_half_float_pixel->integer )
|
|
|
|
|
glRefConfig.halfFloatPixel = qtrue;
|
|
|
|
|
glRefConfig.halfFloatPixel = !!r_arb_half_float_pixel->integer;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.halfFloatPixel], extension);
|
|
|
|
|
}
|
|
|
|
@@ -248,29 +275,12 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.framebufferObject = qfalse;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.framebufferObject = !!r_ext_framebuffer_object->integer;
|
|
|
|
|
|
|
|
|
|
glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &glRefConfig.maxRenderbufferSize);
|
|
|
|
|
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &glRefConfig.maxColorAttachments);
|
|
|
|
|
|
|
|
|
|
qglIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glIsRenderbufferEXT");
|
|
|
|
|
qglBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindRenderbufferEXT");
|
|
|
|
|
qglDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) SDL_GL_GetProcAddress("glDeleteRenderbuffersEXT");
|
|
|
|
|
qglGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) SDL_GL_GetProcAddress("glGenRenderbuffersEXT");
|
|
|
|
|
qglRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) SDL_GL_GetProcAddress("glRenderbufferStorageEXT");
|
|
|
|
|
qglGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) SDL_GL_GetProcAddress("glGetRenderbufferParameterivEXT");
|
|
|
|
|
qglIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC) SDL_GL_GetProcAddress("glIsFramebufferEXT");
|
|
|
|
|
qglBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindFramebufferEXT");
|
|
|
|
|
qglDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) SDL_GL_GetProcAddress("glDeleteFramebuffersEXT");
|
|
|
|
|
qglGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) SDL_GL_GetProcAddress("glGenFramebuffersEXT");
|
|
|
|
|
qglCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) SDL_GL_GetProcAddress("glCheckFramebufferStatusEXT");
|
|
|
|
|
qglFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture1DEXT");
|
|
|
|
|
qglFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture2DEXT");
|
|
|
|
|
qglFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture3DEXT");
|
|
|
|
|
qglFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glFramebufferRenderbufferEXT");
|
|
|
|
|
qglGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) SDL_GL_GetProcAddress("glGetFramebufferAttachmentParameterivEXT");
|
|
|
|
|
qglGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) SDL_GL_GetProcAddress("glGenerateMipmapEXT");
|
|
|
|
|
|
|
|
|
|
if(r_ext_framebuffer_object->value)
|
|
|
|
|
glRefConfig.framebufferObject = qtrue;
|
|
|
|
|
QGL_EXT_framebuffer_object_PROCS;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.framebufferObject], extension);
|
|
|
|
|
}
|
|
|
|
@@ -279,26 +289,15 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
ri.Printf(PRINT_ALL, result[2], extension);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GL_EXT_packed_depth_stencil
|
|
|
|
|
extension = "GL_EXT_packed_depth_stencil";
|
|
|
|
|
glRefConfig.packedDepthStencil = qfalse;
|
|
|
|
|
if( GLimp_HaveExtension(extension))
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.packedDepthStencil = qtrue;
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.packedDepthStencil], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ri.Printf(PRINT_ALL, result[2], extension);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GL_EXT_framebuffer_blit
|
|
|
|
|
extension = "GL_EXT_framebuffer_blit";
|
|
|
|
|
glRefConfig.framebufferBlit = qfalse;
|
|
|
|
|
if (GLimp_HaveExtension(extension))
|
|
|
|
|
{
|
|
|
|
|
qglBlitFramebufferEXT = (void *)SDL_GL_GetProcAddress("glBlitFramebufferEXT");
|
|
|
|
|
glRefConfig.framebufferBlit = qtrue;
|
|
|
|
|
|
|
|
|
|
QGL_EXT_framebuffer_blit_PROCS;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.framebufferBlit], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@@ -311,8 +310,10 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.framebufferMultisample = qfalse;
|
|
|
|
|
if (GLimp_HaveExtension(extension))
|
|
|
|
|
{
|
|
|
|
|
qglRenderbufferStorageMultisampleEXT = (void *)SDL_GL_GetProcAddress("glRenderbufferStorageMultisampleEXT");
|
|
|
|
|
glRefConfig.framebufferMultisample = qtrue;
|
|
|
|
|
|
|
|
|
|
QGL_EXT_framebuffer_multisample_PROCS;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.framebufferMultisample], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@@ -326,10 +327,12 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
extension = "GL_ARB_texture_compression_rgtc";
|
|
|
|
|
if (GLimp_HaveExtension(extension))
|
|
|
|
|
{
|
|
|
|
|
if (r_ext_compressed_textures->integer)
|
|
|
|
|
qboolean useRgtc = r_ext_compressed_textures->integer >= 1;
|
|
|
|
|
|
|
|
|
|
if (useRgtc)
|
|
|
|
|
glRefConfig.textureCompression |= TCR_RGTC;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[r_ext_compressed_textures->integer ? 1 : 0], extension);
|
|
|
|
|
ri.Printf(PRINT_ALL, result[useRgtc], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -342,10 +345,12 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
extension = "GL_ARB_texture_compression_bptc";
|
|
|
|
|
if (GLimp_HaveExtension(extension))
|
|
|
|
|
{
|
|
|
|
|
if (r_ext_compressed_textures->integer >= 2)
|
|
|
|
|
qboolean useBptc = r_ext_compressed_textures->integer >= 2;
|
|
|
|
|
|
|
|
|
|
if (useBptc)
|
|
|
|
|
glRefConfig.textureCompression |= TCR_BPTC;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[(r_ext_compressed_textures->integer >= 2) ? 1 : 0], extension);
|
|
|
|
|
ri.Printf(PRINT_ALL, result[useBptc], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -358,7 +363,8 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.depthClamp = qtrue;
|
|
|
|
|
ri.Printf(PRINT_ALL, result[1], extension);
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.depthClamp], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -370,8 +376,7 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.seamlessCubeMap = qfalse;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
if (r_arb_seamless_cube_map->integer)
|
|
|
|
|
glRefConfig.seamlessCubeMap = qtrue;
|
|
|
|
|
glRefConfig.seamlessCubeMap = !!r_arb_seamless_cube_map->integer;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.seamlessCubeMap], extension);
|
|
|
|
|
}
|
|
|
|
@@ -385,10 +390,12 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.packedNormalDataType = GL_BYTE;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
if (r_arb_vertex_type_2_10_10_10_rev->integer)
|
|
|
|
|
qboolean useExt = !!r_arb_vertex_type_2_10_10_10_rev->integer;
|
|
|
|
|
|
|
|
|
|
if (useExt)
|
|
|
|
|
glRefConfig.packedNormalDataType = GL_INT_2_10_10_10_REV;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[r_arb_vertex_type_2_10_10_10_rev->integer ? 1 : 0], extension);
|
|
|
|
|
ri.Printf(PRINT_ALL, result[useExt], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -403,15 +410,11 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.vertexArrayObject = qfalse;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
qglBindVertexArrayARB = (void *) SDL_GL_GetProcAddress("glBindVertexArray");
|
|
|
|
|
qglDeleteVertexArraysARB = (void *) SDL_GL_GetProcAddress("glDeleteVertexArrays");
|
|
|
|
|
qglGenVertexArraysARB = (void *) SDL_GL_GetProcAddress("glGenVertexArrays");
|
|
|
|
|
qglIsVertexArrayARB = (void *) SDL_GL_GetProcAddress("glIsVertexArray");
|
|
|
|
|
glRefConfig.vertexArrayObject = !!r_arb_vertex_array_object->integer;
|
|
|
|
|
|
|
|
|
|
if (r_arb_vertex_array_object->integer)
|
|
|
|
|
glRefConfig.vertexArrayObject = qtrue;
|
|
|
|
|
QGL_ARB_vertex_array_object_PROCS;
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.vertexArrayObject ? 1 : 0], extension);
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.vertexArrayObject], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -426,7 +429,9 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.packedColorDataSize = sizeof(float) * 4;
|
|
|
|
|
if( GLimp_HaveExtension( extension ) )
|
|
|
|
|
{
|
|
|
|
|
if (r_arb_half_float_vertex->integer)
|
|
|
|
|
qboolean useExt = !!r_arb_half_float_vertex->integer;
|
|
|
|
|
|
|
|
|
|
if (useExt)
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.packedTexcoordDataType = GL_HALF_FLOAT;
|
|
|
|
|
glRefConfig.packedTexcoordDataSize = sizeof(uint16_t) * 2;
|
|
|
|
@@ -434,7 +439,7 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
glRefConfig.packedColorDataSize = sizeof(uint16_t) * 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[r_arb_half_float_vertex->integer ? 1 : 0], extension);
|
|
|
|
|
ri.Printf(PRINT_ALL, result[useExt], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@@ -443,66 +448,23 @@ void GLimp_InitExtraExtensions()
|
|
|
|
|
|
|
|
|
|
// GL_EXT_direct_state_access
|
|
|
|
|
extension = "GL_EXT_direct_state_access";
|
|
|
|
|
|
|
|
|
|
qglBindMultiTexture = GLDSA_BindMultiTexture;
|
|
|
|
|
qglTextureParameterf = GLDSA_TextureParameterf;
|
|
|
|
|
qglTextureParameteri = GLDSA_TextureParameteri;
|
|
|
|
|
qglTextureImage2D = GLDSA_TextureImage2D;
|
|
|
|
|
qglTextureSubImage2D = GLDSA_TextureSubImage2D;
|
|
|
|
|
qglCopyTextureImage2D = GLDSA_CopyTextureImage2D;
|
|
|
|
|
qglCompressedTextureImage2D = GLDSA_CompressedTextureImage2D;
|
|
|
|
|
qglCompressedTextureSubImage2D = GLDSA_CompressedTextureSubImage2D;
|
|
|
|
|
qglGenerateTextureMipmap = GLDSA_GenerateTextureMipmap;
|
|
|
|
|
|
|
|
|
|
qglProgramUniform1i = GLDSA_ProgramUniform1i;
|
|
|
|
|
qglProgramUniform1f = GLDSA_ProgramUniform1f;
|
|
|
|
|
qglProgramUniform2f = GLDSA_ProgramUniform2f;
|
|
|
|
|
qglProgramUniform3f = GLDSA_ProgramUniform3f;
|
|
|
|
|
qglProgramUniform4f = GLDSA_ProgramUniform4f;
|
|
|
|
|
qglProgramUniform1fv = GLDSA_ProgramUniform1fv;
|
|
|
|
|
qglProgramUniformMatrix4fv = GLDSA_ProgramUniformMatrix4fv;
|
|
|
|
|
|
|
|
|
|
qglNamedRenderbufferStorage = GLDSA_NamedRenderbufferStorage;
|
|
|
|
|
qglNamedRenderbufferStorageMultisample = GLDSA_NamedRenderbufferStorageMultisample;
|
|
|
|
|
qglCheckNamedFramebufferStatus = GLDSA_CheckNamedFramebufferStatus;
|
|
|
|
|
qglNamedFramebufferTexture2D = GLDSA_NamedFramebufferTexture2D;
|
|
|
|
|
qglNamedFramebufferRenderbuffer = GLDSA_NamedFramebufferRenderbuffer;
|
|
|
|
|
|
|
|
|
|
glRefConfig.directStateAccess = qfalse;
|
|
|
|
|
if (GLimp_HaveExtension(extension))
|
|
|
|
|
{
|
|
|
|
|
if (r_ext_direct_state_access->integer)
|
|
|
|
|
glRefConfig.directStateAccess = !!r_ext_direct_state_access->integer;
|
|
|
|
|
|
|
|
|
|
// QGL_*_PROCS becomes several functions, do not remove {}
|
|
|
|
|
if (glRefConfig.directStateAccess)
|
|
|
|
|
{
|
|
|
|
|
glRefConfig.directStateAccess = qtrue;
|
|
|
|
|
qglBindMultiTexture = (void *)SDL_GL_GetProcAddress("glBindMultiTextureEXT");
|
|
|
|
|
qglTextureParameterf = (void *)SDL_GL_GetProcAddress("glTextureParameterfEXT");
|
|
|
|
|
qglTextureParameteri = (void *)SDL_GL_GetProcAddress("glTextureParameteriEXT");
|
|
|
|
|
qglTextureImage2D = (void *)SDL_GL_GetProcAddress("glTextureImage2DEXT");
|
|
|
|
|
qglTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glTextureSubImage2DEXT");
|
|
|
|
|
qglCopyTextureImage2D = (void *)SDL_GL_GetProcAddress("glCopyTextureImage2DEXT");
|
|
|
|
|
qglCompressedTextureImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureImage2DEXT");
|
|
|
|
|
qglCompressedTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureSubImage2DEXT");
|
|
|
|
|
qglGenerateTextureMipmap = (void *)SDL_GL_GetProcAddress("glGenerateTextureMipmapEXT");
|
|
|
|
|
|
|
|
|
|
qglProgramUniform1i = (void *)SDL_GL_GetProcAddress("glProgramUniform1iEXT");
|
|
|
|
|
qglProgramUniform1f = (void *)SDL_GL_GetProcAddress("glProgramUniform1fEXT");
|
|
|
|
|
qglProgramUniform2f = (void *)SDL_GL_GetProcAddress("glProgramUniform2fEXT");
|
|
|
|
|
qglProgramUniform3f = (void *)SDL_GL_GetProcAddress("glProgramUniform3fEXT");
|
|
|
|
|
qglProgramUniform4f = (void *)SDL_GL_GetProcAddress("glProgramUniform4fEXT");
|
|
|
|
|
qglProgramUniform1fv = (void *)SDL_GL_GetProcAddress("glProgramUniform1fvEXT");
|
|
|
|
|
qglProgramUniformMatrix4fv = (void *)SDL_GL_GetProcAddress("glProgramUniformMatrix4fvEXT");
|
|
|
|
|
|
|
|
|
|
qglNamedRenderbufferStorage = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageEXT");
|
|
|
|
|
qglNamedRenderbufferStorageMultisample = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageMultisampleEXT");
|
|
|
|
|
qglCheckNamedFramebufferStatus = (void *)SDL_GL_GetProcAddress("glCheckNamedFramebufferStatusEXT");
|
|
|
|
|
qglNamedFramebufferTexture2D = (void *)SDL_GL_GetProcAddress("glNamedFramebufferTexture2DEXT");
|
|
|
|
|
qglNamedFramebufferRenderbuffer = (void *)SDL_GL_GetProcAddress("glNamedFramebufferRenderbufferEXT");
|
|
|
|
|
QGL_EXT_direct_state_access_PROCS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess ? 1 : 0], extension);
|
|
|
|
|
ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess], extension);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ri.Printf(PRINT_ALL, result[2], extension);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#undef GLE
|
|
|
|
|
}
|