Skip to content

Commit

Permalink
Internal changes for OpenGL version handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
mdparker committed Apr 9, 2012
1 parent d051fb1 commit 36a1c2e
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 64 deletions.
108 changes: 54 additions & 54 deletions import/derelict/opengl3/arb.d
Original file line number Diff line number Diff line change
Expand Up @@ -2278,38 +2278,38 @@ private void load_ARB_texture_storage()
}
}

package void loadARB()
package void loadARB(GLVersion glversion)
{
if(DerelictGL3_loadedVersion >= GLVersion.GL30)
if(glversion >= GLVersion.GL30)
{
_ARB_framebuffer_object = true;
_ARB_map_buffer_range = true;
_ARB_vertex_array_object = true;
}
else
{
_ARB_framebuffer_object = isExtSupported("GL_ARB_framebuffer_object");
_ARB_framebuffer_object = isExtSupported(glversion, "GL_ARB_framebuffer_object");
if(_ARB_framebuffer_object) load_ARB_framebuffer_object();
_ARB_map_buffer_range = isExtSupported("GL_ARB_map_buffer_range");
_ARB_map_buffer_range = isExtSupported(glversion, "GL_ARB_map_buffer_range");
if(_ARB_map_buffer_range) load_ARB_map_buffer_range();
_ARB_vertex_array_object = isExtSupported("GL_ARB_vertex_array_object");
_ARB_vertex_array_object = isExtSupported(glversion, "GL_ARB_vertex_array_object");
if(_ARB_vertex_array_object) load_ARB_vertex_array_object();
}

if(DerelictGL3_loadedVersion >= GLVersion.GL31)
if(glversion >= GLVersion.GL31)
{
_ARB_copy_buffer = true;
_ARB_uniform_buffer_object = true;
}
else
{
_ARB_copy_buffer = isExtSupported("GL_ARB_copy_buffer");
_ARB_copy_buffer = isExtSupported(glversion, "GL_ARB_copy_buffer");
if(_ARB_copy_buffer) load_ARB_copy_buffer();
_ARB_uniform_buffer_object = isExtSupported("GL_ARB_uniform_buffer_object");
_ARB_uniform_buffer_object = isExtSupported(glversion, "GL_ARB_uniform_buffer_object");
if(_ARB_uniform_buffer_object) load_ARB_uniform_buffer_object();
}

if(DerelictGL3_loadedVersion >= GLVersion.GL32)
if(glversion >= GLVersion.GL32)
{
_ARB_draw_elements_base_vertex = true;
_ARB_provoking_vertex = true;
Expand All @@ -2318,17 +2318,17 @@ package void loadARB()
}
else
{
_ARB_draw_elements_base_vertex = isExtSupported("GL_ARB_draw_elements_base_vertex");
_ARB_draw_elements_base_vertex = isExtSupported(glversion, "GL_ARB_draw_elements_base_vertex");
if(_ARB_draw_elements_base_vertex) load_ARB_draw_elements_base_vertex();
_ARB_provoking_vertex = isExtSupported("GL_ARB_provoking_vertex");
_ARB_provoking_vertex = isExtSupported(glversion, "GL_ARB_provoking_vertex");
if(_ARB_provoking_vertex) load_ARB_provoking_vertex();
_ARB_sync = isExtSupported("GL_ARB_sync");
_ARB_sync = isExtSupported(glversion, "GL_ARB_sync");
if(_ARB_sync) load_ARB_sync();
_ARB_texture_multisample = isExtSupported("GL_ARB_texture_multisample");
_ARB_texture_multisample = isExtSupported(glversion, "GL_ARB_texture_multisample");
if(_ARB_texture_multisample) load_ARB_texture_multisample();
}

if(DerelictGL3_loadedVersion >= GLVersion.GL33)
if(glversion >= GLVersion.GL33)
{
_ARB_blend_func_extended = true;
_ARB_sampler_objects = true;
Expand All @@ -2342,22 +2342,22 @@ package void loadARB()
}
else
{
_ARB_blend_func_extended = isExtSupported("GL_ARB_blend_func_extended");
_ARB_blend_func_extended = isExtSupported(glversion, "GL_ARB_blend_func_extended");
if(_ARB_blend_func_extended) load_ARB_blend_func_extended();
_ARB_sampler_objects = isExtSupported("GL_ARB_sampler_objects");
_ARB_sampler_objects = isExtSupported(glversion, "GL_ARB_sampler_objects");
if(_ARB_sampler_objects) load_ARB_sampler_objects();
_ARB_explicit_attrib_location = isExtSupported("GL_ARB_explicit_attrib_location");
_ARB_occlusion_query2 = isExtSupported("GL_ARB_occlusion_query2");
_ARB_shader_bit_encoding = isExtSupported("GL_ARB_shader_bit_encoding");
_ARB_texture_rgb10_a2ui = isExtSupported("GL_ARB_texture_rgb10_a2ui");
_ARB_texture_swizzle = isExtSupported("GL_ARB_texture_swizzle");
_ARB_timer_query = isExtSupported("GL_ARB_timer_query");
_ARB_explicit_attrib_location = isExtSupported(glversion, "GL_ARB_explicit_attrib_location");
_ARB_occlusion_query2 = isExtSupported(glversion, "GL_ARB_occlusion_query2");
_ARB_shader_bit_encoding = isExtSupported(glversion, "GL_ARB_shader_bit_encoding");
_ARB_texture_rgb10_a2ui = isExtSupported(glversion, "GL_ARB_texture_rgb10_a2ui");
_ARB_texture_swizzle = isExtSupported(glversion, "GL_ARB_texture_swizzle");
_ARB_timer_query = isExtSupported(glversion, "GL_ARB_timer_query");
if(_ARB_timer_query) load_ARB_timer_query();
_ARB_vertex_type_2_10_10_10_rev = isExtSupported("GL_ARB_vertex_type_2_10_10_10_rev");
_ARB_vertex_type_2_10_10_10_rev = isExtSupported(glversion, "GL_ARB_vertex_type_2_10_10_10_rev");
if(_ARB_vertex_type_2_10_10_10_rev) load_ARB_vertex_type_2_10_10_10_rev();
}

if(DerelictGL3_loadedVersion >= GLVersion.GL40)
if(glversion >= GLVersion.GL40)
{
_ARB_texture_query_lod = true;
_ARB_draw_indirect = true;
Expand All @@ -2373,26 +2373,26 @@ package void loadARB()
}
else
{
_ARB_texture_query_lod = isExtSupported("GL_ARB_texture_query_lod");
_ARB_draw_indirect = isExtSupported("GL_ARB_draw_indirect");
_ARB_texture_query_lod = isExtSupported(glversion, "GL_ARB_texture_query_lod");
_ARB_draw_indirect = isExtSupported(glversion, "GL_ARB_draw_indirect");
if(_ARB_draw_indirect) load_ARB_draw_indirect();
_ARB_gpu_shader5 = isExtSupported("GL_ARB_gpu_shader5");
_ARB_gpu_shader_fp64 = isExtSupported("GL_ARB_gpu_shader_fp64");
_ARB_gpu_shader5 = isExtSupported(glversion, "GL_ARB_gpu_shader5");
_ARB_gpu_shader_fp64 = isExtSupported(glversion, "GL_ARB_gpu_shader_fp64");
if(_ARB_gpu_shader_fp64) load_ARB_gpu_shader_fp64();
_ARB_shader_subroutine = isExtSupported("GL_ARB_shader_subroutine");
_ARB_shader_subroutine = isExtSupported(glversion, "GL_ARB_shader_subroutine");
if(_ARB_shader_subroutine) load_ARB_shader_subroutine();
_ARB_tessellation_shader = isExtSupported("GL_ARB_tessellation_shader");
_ARB_tessellation_shader = isExtSupported(glversion, "GL_ARB_tessellation_shader");
if(_ARB_tessellation_shader) load_ARB_tessellation_shader();
_ARB_texture_buffer_object_rgb32 = isExtSupported("GL_ARB_texture_buffer_object_rgb32");
_ARB_texture_cube_map_array = isExtSupported("GL_ARB_texture_cube_map_array");
_ARB_texture_gather = isExtSupported("GL_ARB_texture_gather");
_ARB_transform_feedback2 = isExtSupported("GL_ARB_transform_feedback2");
_ARB_texture_buffer_object_rgb32 = isExtSupported(glversion, "GL_ARB_texture_buffer_object_rgb32");
_ARB_texture_cube_map_array = isExtSupported(glversion, "GL_ARB_texture_cube_map_array");
_ARB_texture_gather = isExtSupported(glversion, "GL_ARB_texture_gather");
_ARB_transform_feedback2 = isExtSupported(glversion, "GL_ARB_transform_feedback2");
if(_ARB_transform_feedback2) load_ARB_transform_feedback2();
_ARB_transform_feedback3 = isExtSupported("GL_ARB_transform_feedback3");
_ARB_transform_feedback3 = isExtSupported(glversion, "GL_ARB_transform_feedback3");
if(_ARB_transform_feedback3) load_ARB_transform_feedback3();
}

if(DerelictGL3_loadedVersion >= GLVersion.GL41)
if(glversion >= GLVersion.GL41)
{
_ARB_ES2_compatibility = true;
_ARB_get_program_binary = true;
Expand All @@ -2403,20 +2403,20 @@ package void loadARB()
}
else
{
_ARB_ES2_compatibility = isExtSupported("GL_ARB_ES2_compatibility");
_ARB_ES2_compatibility = isExtSupported(glversion, "GL_ARB_ES2_compatibility");
if(_ARB_ES2_compatibility) load_ARB_ES2_compatibility();
_ARB_get_program_binary = isExtSupported("GL_ARB_get_program_binary");
_ARB_get_program_binary = isExtSupported(glversion, "GL_ARB_get_program_binary");
if(_ARB_get_program_binary) load_ARB_get_program_binary();
_ARB_separate_shader_objects = isExtSupported("GL_ARB_separate_shader_objects");
_ARB_separate_shader_objects = isExtSupported(glversion, "GL_ARB_separate_shader_objects");
if(_ARB_separate_shader_objects) load_ARB_separate_shader_objects();
_ARB_shader_precision = isExtSupported("GL_ARB_shader_precision");
_ARB_vertex_attrib_64bit = isExtSupported("GL_ARB_vertex_attrib_64bit");
_ARB_shader_precision = isExtSupported(glversion, "GL_ARB_shader_precision");
_ARB_vertex_attrib_64bit = isExtSupported(glversion, "GL_ARB_vertex_attrib_64bit");
if(_ARB_vertex_attrib_64bit) load_ARB_vertex_attrib_64bit();
_ARB_viewport_array = isExtSupported("GL_ARB_viewport_array");
_ARB_viewport_array = isExtSupported(glversion, "GL_ARB_viewport_array");
if(_ARB_viewport_array) load_ARB_viewport_array();
}

if(DerelictGL3_loadedVersion >= GLVersion.GL42)
if(glversion >= GLVersion.GL42)
{
_ARB_base_instance = true;
_ARB_shading_language_420pack = true;
Expand All @@ -2432,22 +2432,22 @@ package void loadARB()
}
else
{
_ARB_base_instance = isExtSupported("GL_ARB_base_instance");
_ARB_base_instance = isExtSupported(glversion, "GL_ARB_base_instance");
if(_ARB_base_instance) load_ARB_base_instance();
_ARB_shading_language_420pack = isExtSupported("GL_ARB_shading_language_420pack");
_ARB_transform_feedback_instanced = isExtSupported("GL_ARB_transform_feedback_instanced");
_ARB_shading_language_420pack = isExtSupported(glversion, "GL_ARB_shading_language_420pack");
_ARB_transform_feedback_instanced = isExtSupported(glversion, "GL_ARB_transform_feedback_instanced");
if(_ARB_transform_feedback_instanced) load_ARB_transform_feedback_instanced();
_ARB_compressed_texture_pixel_storage = isExtSupported("GL_ARB_compressed_texture_pixel_storage");
_ARB_conservative_depth = isExtSupported("GL_ARB_conservative_depth");
_ARB_internalformat_query = isExtSupported("GL_ARB_internalformat_query");
_ARB_compressed_texture_pixel_storage = isExtSupported(glversion, "GL_ARB_compressed_texture_pixel_storage");
_ARB_conservative_depth = isExtSupported(glversion, "GL_ARB_conservative_depth");
_ARB_internalformat_query = isExtSupported(glversion, "GL_ARB_internalformat_query");
if(_ARB_internalformat_query) load_ARB_internalformat_query();
_ARB_map_buffer_alignment = isExtSupported("GL_ARB_map_buffer_alignment");
_ARB_shader_atomic_counters = isExtSupported("GL_ARB_shader_atomic_counters");
_ARB_map_buffer_alignment = isExtSupported(glversion, "GL_ARB_map_buffer_alignment");
_ARB_shader_atomic_counters = isExtSupported(glversion, "GL_ARB_shader_atomic_counters");
if(_ARB_shader_atomic_counters) load_ARB_shader_atomic_counters();
_ARB_shader_image_load_store = isExtSupported("GL_ARB_shader_image_load_store");
_ARB_shader_image_load_store = isExtSupported(glversion, "GL_ARB_shader_image_load_store");
if(_ARB_shader_image_load_store) load_ARB_shader_image_load_store();
_ARB_shading_language_packing = isExtSupported("GL_ARB_shading_language_packing");
_ARB_texture_storage = isExtSupported("GL_ARB_texture_storage");
_ARB_shading_language_packing = isExtSupported(glversion, "GL_ARB_shading_language_packing");
_ARB_texture_storage = isExtSupported(glversion, "GL_ARB_texture_storage");
if(_ARB_texture_storage) load_ARB_texture_storage();
}
}
15 changes: 10 additions & 5 deletions import/derelict/opengl3/gl3.d
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class DerelictGL3Loader : SharedLibLoader
{
GLVersion loadedVersion() @property
{
return DerelictGL3_loadedVersion;
return _loadedVersion;
}

GLVersion reload()
Expand All @@ -81,7 +81,7 @@ class DerelictGL3Loader : SharedLibLoader

GLVersion glVer = GLVersion.GL11;
GLVersion maxVer = findMaxAvailable();

if(maxVer >= GLVersion.GL12)
{
bindGLFunc(cast(void**)&glBlendColor, "glBlendColor");
Expand Down Expand Up @@ -667,9 +667,9 @@ class DerelictGL3Loader : SharedLibLoader
glVer = GLVersion.GL42;
}

loadARB();
loadARB(glVer);

DerelictGL3_loadedVersion = glVer;
_loadedVersion = glVer;
return glVer;
}
}
Expand Down Expand Up @@ -742,7 +742,7 @@ class DerelictGL3Loader : SharedLibLoader
bindFunc(cast(void**)&glGenTextures, "glGenTextures");
bindFunc(cast(void**)&glIsTexture, "glIsTexture");

DerelictGL3_loadedVersion = GLVersion.GL11;
_loadedVersion = GLVersion.GL11;

loadPlatformGL(&bindFunc);
}
Expand Down Expand Up @@ -793,6 +793,11 @@ class DerelictGL3Loader : SharedLibLoader
return GLVersion.HighestSupported;
}
}

private
{
GLVersion _loadedVersion;
}
}

__gshared DerelictGL3Loader DerelictGL3;
Expand Down
7 changes: 2 additions & 5 deletions import/derelict/opengl3/internal.d
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ private

package
{
// I want to avoid importing gl3 into this module and others.
__gshared DerelictGL3_loadedVersion = GLVersion.None;

void bindGLFunc(void** ptr, string symName)
{
auto sym = loadGLFunc(symName);
Expand All @@ -56,10 +53,10 @@ package
*ptr = sym;
}

bool isExtSupported(string name)
bool isExtSupported(GLVersion glversion, string name)
{
// If OpenGL 3+ is loaded, use glGetStringi.
if(DerelictGL3_loadedVersion >= GLVersion.GL30)
if(glversion >= GLVersion.GL30)
{
auto cstr = name.toStringz();
int count;
Expand Down

0 comments on commit 36a1c2e

Please sign in to comment.