Opengl 类型不匹配的顶点属性
我写glsl包装是为了教育目的,但我停下来了,因为我有一些误解。当我想将变量插入到特定位置时,我有不匹配警告。因为位置是闪烁的,但glVertexAttrib位置必须是GLuint 这是我的代码示例Opengl 类型不匹配的顶点属性,opengl,glsl,opengl-4,Opengl,Glsl,Opengl 4,我写glsl包装是为了教育目的,但我停下来了,因为我有一些误解。当我想将变量插入到特定位置时,我有不匹配警告。因为位置是闪烁的,但glVertexAttrib位置必须是GLuint 这是我的代码示例 bool Material::AddAttrib(GLchar *variable, std::vector<GLdouble> values) { GLint location = glGetAttribLocation(program,variable); GLenum error
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;
}
bool Material::AddAttrib(GLchar*变量,std::向量值){
闪烁位置=GLGetAttriblLocation(程序,变量);
GLenum error=glGetError();
布尔isNor=打印错误(错误);
如果(!isNor)返回isNor;
开关(values.size()){
案例1:
glVertexAttrib1d(位置,在(0)处的值);
打破
案例2:
glVertexAttrib2d(位置,在(0)处的值,在(1)处的值);
打破
案例3:
glVertexAttrib3d(位置,在(0)处的值,在(1)处的值,在(2)处的值);
打破
案例4:
glVertexAttrib4d(位置,在(0)处的值,在(1)处的值,在(2)处的值,在(3)处的值);
打破
违约:
PrintErrorSize();
返回false;
}
error=glGetError();
isNor=打印错误(错误);
返回isNor;
}
glGetAttriblLocation()
在发生错误时可能返回负索引。当然,如果用于glVertexAttrib…()
,则负索引无效。这就是类型不匹配的原因。您可以通过简单的强制转换来解决此问题:
GLint retrievedLocation = glGetAttribLocation(program,variable);
if(retrievedLocation < 0)
return ...; //there is no variable with this name
GLuint location = (GLuint) retrievedLocation;
GLint retrievedLocation=GLGetAttriblLocation(程序,变量);
如果(检索位置<0)
返回//没有具有此名称的变量
GLuint位置=(GLuint)retrievedLocation;