2016-09-22 16 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; 
関連する問題