【问题标题】:Type mismatch vertex attribute类型不匹配的顶点属性
【发布时间】:2016-09-22 11:16:22
【问题描述】:

我出于教育目的编写 glsl 包装器,但因为我有一些误解而停止了。当我想将变量插入特定位置时,我会收到不匹配警告。因为location是GLint,但是glVertexAttrib location必须是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;
}

【问题讨论】:

    标签: opengl glsl opengl-4


    【解决方案1】:

    glGetAttribLocation() 可能会在出现错误时返回负索引。当然,如果用于glVertexAttrib...(),负索引是无效的。这就是类型不匹配的原因。你可以通过一个简单的演员来解决这个问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 2013-12-22
      • 1970-01-01
      • 2013-03-22
      • 2021-11-06
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多