Browse Source

Fix crash if Cg is supported but GLSL is not

rdb 10 years ago
parent
commit
c80fd20208

+ 1 - 1
panda/src/glstuff/glCgShaderContext_src.cxx

@@ -108,7 +108,7 @@ CLP(CgShaderContext)(CLP(GraphicsStateGuardian) *glgsg, Shader *s) : ShaderConte
     }
   }
 
-  if (_cg_program != 0) {
+  if (_cg_program != 0 && _glgsg->_supports_glsl) {
     if (cgGetProgramProfile(_cg_program) == CG_PROFILE_GLSLC) {
       _glsl_program = cgGLGetProgramID(_cg_program);
 

+ 16 - 0
panda/src/glstuff/glGraphicsStateGuardian_src.cxx

@@ -1562,6 +1562,22 @@ reset() {
       _glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)
          get_extension_func("glPatchParameteri");
     }
+  } else if (_supports_basic_shaders) {
+    // We don't support GLSL, but we support ARB programs.
+    _glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)
+      get_extension_func("glDisableVertexAttribArrayARB");
+    _glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)
+      get_extension_func("glEnableVertexAttribArrayARB");
+
+    _glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)
+       get_extension_func("glVertexAttrib4fvARB");
+    _glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)
+       get_extension_func("glVertexAttrib4dvARB");
+    _glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)
+       get_extension_func("glVertexAttribPointerARB");
+
+    _glVertexAttribIPointer = NULL;
+    _glVertexAttribLPointer = NULL;
   }
 #endif