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程序抛出错误
感谢
嗯..它没有解决这个错误,但现在我的模型是白色的而不是黑色的,之前我通过修改vertexShader中的矩阵来修改矩阵,并且现在已经消失了...为什么会这样呢? 要清除:http://i.imgur.com/VTFb0Rk.gifv – stimulate
好吧,我现在固定与摆动的东西,纯白色似乎来自这样的事实,我的图像数据未被正确加载和价值只是巨大的。 感谢您的帮助! – stimulate