2016-09-22 4 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;