Disable use of GL_NV_primitive_restart due to driver bugs

This commit is contained in:
rdb 2015-01-08 11:43:28 +01:00
parent 65f786c8ff
commit 75c1364373
2 changed files with 8 additions and 20 deletions

View File

@ -550,8 +550,7 @@ reset() {
} }
#ifndef OPENGLES #ifndef OPENGLES
_primitive_restart_gl3 = false; _explicit_primitive_restart = false;
_primitive_restart_nv = false;
_glPrimitiveRestartIndex = NULL; _glPrimitiveRestartIndex = NULL;
if (gl_support_primitive_restart_index) { if (gl_support_primitive_restart_index) {
@ -563,19 +562,16 @@ reset() {
_supported_geom_rendering |= Geom::GR_strip_cut_index; _supported_geom_rendering |= Geom::GR_strip_cut_index;
} else if (is_at_least_gl_version(3, 1)) { } else if (is_at_least_gl_version(3, 1)) {
_primitive_restart_gl3 = true; // We have to use an explicit primitive restart enable/index.
_explicit_primitive_restart = true;
_supported_geom_rendering |= Geom::GR_strip_cut_index; _supported_geom_rendering |= Geom::GR_strip_cut_index;
_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC) _glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)
get_extension_func("glPrimitiveRestartIndex"); get_extension_func("glPrimitiveRestartIndex");
} else if (has_extension("GL_NV_primitive_restart")) {
_primitive_restart_nv = true;
_supported_geom_rendering |= Geom::GR_strip_cut_index;
_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)
get_extension_func("glPrimitiveRestartIndexNV");
} }
// We used to have a case here for GL_NV_primitive_restart, but it
// seems to cause garbled geometry bugs on some drivers.
} }
#endif #endif
@ -3954,13 +3950,9 @@ draw_linestrips(const GeomPrimitivePipelineReader *reader, bool force) {
(_supported_geom_rendering & GeomEnums::GR_strip_cut_index) != 0) { (_supported_geom_rendering & GeomEnums::GR_strip_cut_index) != 0) {
// One long triangle strip, connected by strip cut indices. // One long triangle strip, connected by strip cut indices.
#ifndef OPENGLES #ifndef OPENGLES
if (_primitive_restart_gl3) { if (_explicit_primitive_restart) {
glEnable(GL_PRIMITIVE_RESTART); glEnable(GL_PRIMITIVE_RESTART);
_glPrimitiveRestartIndex(reader->get_strip_cut_index()); _glPrimitiveRestartIndex(reader->get_strip_cut_index());
} else if (_primitive_restart_nv) {
glEnableClientState(GL_PRIMITIVE_RESTART_NV);
_glPrimitiveRestartIndex(reader->get_strip_cut_index());
} }
#endif // !OPENGLES #endif // !OPENGLES
@ -3989,11 +3981,8 @@ draw_linestrips(const GeomPrimitivePipelineReader *reader, bool force) {
} }
#ifndef OPENGLES #ifndef OPENGLES
if (_primitive_restart_gl3) { if (_explicit_primitive_restart) {
glDisable(GL_PRIMITIVE_RESTART); glDisable(GL_PRIMITIVE_RESTART);
} else if (_primitive_restart_nv) {
glDisableClientState(GL_PRIMITIVE_RESTART_NV);
} }
#endif // !OPENGLES #endif // !OPENGLES
} else { } else {

View File

@ -616,8 +616,7 @@ public:
#ifndef OPENGLES #ifndef OPENGLES
PFNGLPRIMITIVERESTARTINDEXPROC _glPrimitiveRestartIndex; PFNGLPRIMITIVERESTARTINDEXPROC _glPrimitiveRestartIndex;
bool _primitive_restart_gl3; bool _explicit_primitive_restart;
bool _primitive_restart_nv;
#endif #endif
bool _supports_vertex_blend; bool _supports_vertex_blend;