为什么这个程序不能改变制服?

时间:2017-05-17 22:14:11

标签: c opengl opengl-3

这是我的顶点着色器代码

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错误的答案。

1 个答案:

答案 0 :(得分:0)

glUniform手册页中,GL_INVALID_OPERATION出现在以下情况中:

    如果没有当前程序对象,则生成
  1. 如果在着色器中声明的统一变量的大小与glUniform命令指示的大小不匹配,则生成
  2. 如果使用此函数的整数变体之一来加载float,vec2,vec3,vec4或其数组的统一变量,或者如果其中一个浮点变量,则会生成
  3. 此函数用于加载int,ivec2,ivec3或ivec4类型的统一变量,或者这些变量的数组。

  4. 如果location是当前程序对象的无效统一位置且位置不等于-1,则会生成
  5. 如果count大于1且指示的统一变量不是数组变量,则生成
  6. 如果使用glUniform1i和glUniform1iv以外的命令加载采样器,则会生成
  7. 如果在执行glBegin()和相应执行glEnd()之间执行glUniform,则会生成
  8. 从您的代码摘录中,在我看来问题可能出在第1项或第4项