Explorar o código

allow arbitrarily named vertex attribs in OpenGL

rdb %!s(int64=14) %!d(string=hai) anos
pai
achega
14d7c7093a
Modificáronse 1 ficheiros con 11 adicións e 4 borrados
  1. 11 4
      panda/src/glstuff/glShaderContext_src.cxx

+ 11 - 4
panda/src/glstuff/glShaderContext_src.cxx

@@ -354,13 +354,14 @@ CLP(ShaderContext)(Shader *s, GSG *gsg) : ShaderContext(s) {
       for (int i = 0; i < param_count; ++i) {
       for (int i = 0; i < param_count; ++i) {
         gsg->_glGetActiveAttrib(_glsl_program, i, param_maxlength, NULL, &param_size, &param_type, param_name);
         gsg->_glGetActiveAttrib(_glsl_program, i, param_maxlength, NULL, &param_size, &param_type, param_name);
         PT(InternalName) inputname = InternalName::make(param_name);
         PT(InternalName) inputname = InternalName::make(param_name);
-        if (inputname->get_name().substr(0, 4) == "p3d_") {
+
+        if (inputname->get_name().substr(0, 4) == "gl_") {
+          // We shouldn't bind anything to these.
+        } else if (inputname->get_name().substr(0, 4) == "p3d_") {
           noprefix = inputname->get_name().substr(4);
           noprefix = inputname->get_name().substr(4);
           Shader::ShaderVarSpec bind;
           Shader::ShaderVarSpec bind;
-          Shader::ShaderArgId arg_id;
-          arg_id._name  = param_name;
-          arg_id._seqno = -1;
           bind._append_uv = -1;
           bind._append_uv = -1;
+
           if (noprefix == "Vertex") {
           if (noprefix == "Vertex") {
             bind._name = InternalName::get_vertex();
             bind._name = InternalName::get_vertex();
             s->_var_spec.push_back(bind);
             s->_var_spec.push_back(bind);
@@ -406,6 +407,12 @@ CLP(ShaderContext)(Shader *s, GSG *gsg) : ShaderContext(s) {
           }
           }
           GLCAT.error() << "Unrecognized vertex attrib '" << param_name << "'!\n";
           GLCAT.error() << "Unrecognized vertex attrib '" << param_name << "'!\n";
           continue;
           continue;
+        } else {
+          Shader::ShaderVarSpec bind;
+          bind._name = inputname;
+          bind._append_uv = -1;
+          s->_var_spec.push_back(bind);
+          gsg->_glBindAttribLocation(_glsl_program, i, param_name);
         }
         }
       }
       }
       delete[] param_name;
       delete[] param_name;