2016-11-19 45 views
1

我想在我的片段着色器的OpenGL glUniform1ui()拋出GLError GL_INVALID_OPERATION

uniform vec3 lightColor; 

uniform usampler2D texSampler;/////////// 

uniform vec3 ambientLight; 
uniform vec3 lightPosition; 
uniform vec3 cameraPosition; 


in Vertex{ 
    vec4 rawPosition; 
    vec2 uv; 
    vec4 normal; 
}vertexIn; 

in InstanceData{ 
    unsigned int textureUnitIndex; 
}instance; 
out vec4 color; 

void main(){ 

    vec3 normal = normalize(vec3(vertexIn.normal.x, vertexIn.normal.y, vertexIn.normal.z)); 
    vec3 worldPosition = vec3(vertexIn.rawPosition.x, vertexIn.rawPosition.y, vertexIn.rawPosition.z); 

    vec3 lightVector = normalize(lightPosition - worldPosition); 
    vec3 cameraVector = normalize(cameraPosition - worldPosition); 
    vec3 halfVec = normalize(lightVector + cameraVector); 

    float lightAngle = clamp(dot(lightVector, normal), 0.0f, 1.0f); 
    float specAngle = clamp(dot(halfVec, normal), 0.0f, PI); 
    float specular = clamp(pow(specAngle, 128), 0.0f, 1.0f); 
    unsigned int index = instance.textureUnitIndex; 

    vec4 actColor = texture2D(texSampler, vec2(vertexIn.uv)); ////////////////////// 
    vec4 diffuseLight = sqrt(actColor * vec4(lightColor, 1.0)) * lightAngle; 
    vec4 specularLight = 1.0f - (cos(vec4(lightColor, 1.0f) * specular)); 

    color = actColor * (vec4(ambientLight, 1.0) + diffuseLight) + specularLight;// + vec4(ambientLight, 1.0f); 
    } 

初始化usampler2D喜歡這個

void ShaderProgram::addUniform(std::string uniformName, unsigned int uniformValue) 
{ 
    unsigned int loc = glGetUniformLocation(_programID, uniformName.c_str()); 
    Graphic::checkOpenGLErrors("addUniform() - 1"); 
    glUniform1ui(loc, (GLuint)uniformValue); 
    Graphic::checkOpenGLErrors("addUniform - 2"); 
} 

祿原來是6和uniformValue等於2,但checkOpenGLErrors( )仍然拋出

"OpenGL ERROR: GL_INVALID_OPERATION - At: addUniform - 2"

是有什麼你需要知道關於初始化採樣器制服?因爲這個功能通常不會在這個GLSL程序拋出錯誤

感謝

回答

2

必須使用glUniform1i1iv上傳時制服opaque types(包括採樣)。僅僅因爲採樣器使用無符號整數格式並不意味着統一調用更改匹配。

+0

嗯..它沒有解決這個錯誤,但現在我的模型是白色的而不是黑色的,之前我通過修改vertexShader中的矩陣來修改矩陣,並且現在已經消失了...爲什麼會這樣呢? 要清除:http://i.imgur.com/VTFb0Rk.gifv – stimulate

+0

好吧,我現在固定與擺動的東西,純白色似乎來自這樣的事實,我的圖像數據未被正確加載和價值只是巨大的。 感謝您的幫助! – stimulate

相關問題