From b9ba82ec03e5d66a0121565402cfd4ead93f0173 Mon Sep 17 00:00:00 2001 From: degasus Date: Wed, 10 Apr 2013 12:58:52 +0200 Subject: [PATCH] proper ogl primitive restart code --- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 29 ++++++++++--------- Source/Plugins/Plugin_VideoOGL/Src/Render.h | 1 + 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index ff5c3d1171..d6c161614e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -338,7 +338,7 @@ Renderer::Renderer() g_Config.backend_info.bSupportsDualSourceBlend = GLEW_ARB_blend_func_extended; g_Config.backend_info.bSupportsGLSLUBO = GLEW_ARB_uniform_buffer_object; - g_Config.backend_info.bSupportsPrimitiveRestart = GLEW_VERSION_3_1; + g_Config.backend_info.bSupportsPrimitiveRestart = GLEW_VERSION_3_1 || GLEW_NV_primitive_restart; g_ogl_config.bSupportsGLSLCache = GLEW_ARB_get_program_binary; g_ogl_config.bSupportsGLPinnedMemory = GLEW_AMD_pinned_memory; @@ -346,6 +346,7 @@ Renderer::Renderer() g_ogl_config.bSupportsGLBaseVertex = GLEW_ARB_draw_elements_base_vertex; g_ogl_config.bSupportCoverageMSAA = GLEW_NV_framebuffer_multisample_coverage; g_ogl_config.bSupportSampleShading = GLEW_ARB_sample_shading; + g_ogl_config.bSupportOGL31 = GLEW_VERSION_3_1; g_ogl_config.gl_vendor = (const char*)glGetString(GL_VENDOR); g_ogl_config.gl_renderer = (const char*)glGetString(GL_RENDERER); @@ -477,6 +478,20 @@ Renderer::Renderer() glScissor(0, 0, GetTargetWidth(), GetTargetHeight()); glBlendColor(0, 0, 0, 0.5f); glClearDepth(1.0f); + + if(g_ActiveConfig.backend_info.bSupportsPrimitiveRestart) + { + if(g_ogl_config.bSupportOGL31) + { + glEnable(GL_PRIMITIVE_RESTART); + glPrimitiveRestartIndex(65535); + } + else + { + glEnableClientState(GL_PRIMITIVE_RESTART_NV); + glPrimitiveRestartIndexNV(65535); + } + } UpdateActiveConfig(); } @@ -1466,12 +1481,6 @@ void Renderer::ResetAPIState() glDisable(GL_BLEND); glDepthMask(GL_FALSE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - - - if(g_ActiveConfig.backend_info.bSupportsPrimitiveRestart) - { - glDisable(GL_PRIMITIVE_RESTART); - } } void Renderer::RestoreAPIState() @@ -1492,12 +1501,6 @@ void Renderer::RestoreAPIState() vm->m_last_vao = 0; TextureCache::SetStage(); - - if(g_ActiveConfig.backend_info.bSupportsPrimitiveRestart) - { - glEnable(GL_PRIMITIVE_RESTART); - glPrimitiveRestartIndex(65535); - } } void Renderer::SetGenerationMode() diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.h b/Source/Plugins/Plugin_VideoOGL/Src/Render.h index 963c267b19..61e820dad4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.h @@ -24,6 +24,7 @@ extern struct VideoConfig { bool bSupportCoverageMSAA; bool bSupportSampleShading; GLSL_VERSION eSupportedGLSLVersion; + bool bSupportOGL31; const char *gl_vendor; const char *gl_renderer;