2016-09-22 76 views
-1

我为教育目的编写glsl包装器,但由于存在一些误解,我停下来了。当我想要插入变量到特定位置时,我有不匹配的警告。由于位置是GLint,但glVertexAttrib位置必须是GLuint。类型不匹配顶点属性

这里是我的代码示例

bool Material::AddAttrib(GLchar *variable, std::vector<GLdouble> values) { 
GLint location = glGetAttribLocation(program,variable); 
GLenum error = glGetError(); 
bool isNor = PrintError(error); 
if(!isNor) return isNor; 
switch (values.size()) { 
    case 1: 
     glVertexAttrib1d(location, values.at(0)); 
     break; 
    case 2: 
     glVertexAttrib2d(location, values.at(0), values.at(1)); 
     break; 
    case 3: 
     glVertexAttrib3d(location, values.at(0), values.at(1), values.at(2)); 
     break; 
    case 4: 
     glVertexAttrib4d(location, values.at(0), values.at(1), values.at(2), values.at(3)); 
     break; 
    default: 
     PrintErrorSize(); 
     return false; 
} 
error = glGetError(); 
isNor = PrintError(error); 
return isNor; 
} 

回答

1

glGetAttribLocation()可能在错误的情况下返回负指数。当然,如果用于glVertexAttrib...(),则负指数无效。这就是为什么类型不匹配。您可以通过简单演员解决此问题:

GLint retrievedLocation = glGetAttribLocation(program,variable); 
if(retrievedLocation < 0) 
    return ...; //there is no variable with this name 
GLuint location = (GLuint) retrievedLocation;