gpt4 book ai didi

opengl - 无法在片段着色器 opengl 中传递统一颜色

转载 作者:行者123 更新时间:2023-12-02 04:32:40 38 4
gpt4 key购买 nike

我正在使用 openGL 3.1 并使用 QGLfunctions 进行编程。我无法将统一的 vec4 mycolor 传递给片段着色器,我已经使用以下方法初始化了我的程序:

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 文档:

Specifies the number of elements that are to be modified. This should be 1 if the targeted uniform variable is not an array, and 1 or more if it is an array.

您的情况中的 count 参数应该为 1,因为您的 color[] 数组仍然只代表一个 vec4 条目。

您正在尝试填充uniform vec4 color[4]数组。

正确的版本:

glUniform4fv(m_mycolor, 1, color);

正如 @Bahbar 还指出的那样:“如果 count 大于 1 并且指示的统一变量不是数组变量,则会生成GL_INVALID_OPERATION”。所以..检查你的总帐错误!

关于opengl - 无法在片段着色器 opengl 中传递统一颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17202766/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com