这是我的顶点着色器代码
const GLchar* Vshader_source =
"#version 130 \n"
"in vec3 position; \n"
"uniform float moving = 0.0;\n"
"void main(){ \n"
"gl_Position = vec4(position.x,position.y - moving,position.z,1.0);\n"
"}";
这是我程序的窗口循环+统一选择函数,以及顶点格式化
GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
glVertexAttribPointer(posAttrib,3, GL_FLOAT,GL_FALSE,0,0);
glEnableVertexAttribArray(posAttrib );
GLint uniVex = glGetUniformLocation(shaderProgram,"moving");
time_t new = time(NULL) + 1;
char error_num = 0;
GLfloat vexnum = 0.1f;
while(!glfwWindowShouldClose(window)){
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (!error_num){
fprintf(stderr,"%d\n",glGetError());
error_num++;
}
if (time(NULL) == new){
new++;
glUniform1f(uniVex,vexnum += 0.1f);
}
glDrawArrays(GL_TRIANGLES,0,3);
glfwSwapBuffers(window);
glfwPollEvents();
}
之前有效,当“均匀浮动= 0.0”时,我可以看到三角形被删除,gl_position只是“gl_Position = vec4(position,1.0);”。但是当我为制服调整它时它不会绘制任何东西而glgeterror()返回1282.我抬起头但似乎找不到1282错误的答案。
答案 0 :(得分:0)
在glUniform
手册页中,GL_INVALID_OPERATION
出现在以下情况中:
。
。
此函数用于加载int,ivec2,ivec3或ivec4类型的统一变量,或者这些变量的数组。
。
。
。
。
从您的代码摘录中,在我看来问题可能出在第1项或第4项