无法在片段着色器opengl中传递统一颜色
我正在使用OpenGL3.1和QGL3函数编程。我无法将uniform vec4 mycolor传递给已使用以下方法初始化程序的片段着色器:无法在片段着色器opengl中传递统一颜色,opengl,fragment-shader,Opengl,Fragment Shader,我正在使用OpenGL3.1和QGL3函数编程。我无法将uniform vec4 mycolor传递给已使用以下方法初始化程序的片段着色器: m_program = new QOpenGLShaderProgram(this); m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource); m_program->addShaderFromSourceCode(QOpenGLShader::
m_program = new QOpenGLShaderProgram(this);
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
m_program->link();
m_posAttr = m_program->attributeLocation("posAttr");
m_mycolor = m_program->uniformLocation("mycolor");
m_matrixUniform = m_program->uniformLocation("matrix");
然后我尝试发送颜色
GLfloat color[] = {
0.0f, 1.0f, 0.0f, 1.0f };
glUniform4fv(m_mycolor, 4, color);
到我的片段着色器,它是:
static const char *fragmentShaderSource =
"uniform vec4 mycolor;\n"
"void main() {\n"
" gl_FragColor = mycolor;\n"
"}\n";
我什么也没看到
glUniform4fv(m_mycolor, 4, color);
从有关计数参数的glUniform
文档中:
指定要修改的图元数。这应该
如果目标统一变量不是数组,则为1,并且为1或更多
如果它是一个数组
案例中的count参数应为1,因为color[]
数组仍然只表示一个vec4
条目
您正在尝试填充统一的vec4颜色[4]
数组
正确版本:
glUniform4fv(m_mycolor, 1, color);
正如@Bahbar还指出的那样:“
GL\u INVALID\u OPERATION
是在计数大于1且指示的统一变量不是数组变量时生成的。”因此。。检查您的总账错误 如果四个组件都使用0.5f会怎么样?有时很容易混淆RGBA BGRA顺序,最终得到0 alphachannel@M_global:我想补充一句:“如果计数大于1,并且指示的统一变量不是数组变量,则生成GL_INVALID_操作。”因此。。检查您的总账错误!