gpt4 book ai didi

opengl - 为什么我必须 "use"着色器程序才能设置它的制服?

转载 作者:行者123 更新时间:2023-12-04 16:08:31 24 4
gpt4 key购买 nike

我在 C++ 和 GLSL 410 中使用 OpenGL 4.5。

我最近遇到了一个问题,我试图设置着色器程序的统一变量,而没有先使用 glUseProgram 着色器程序。 .我有一个带有统一变量的片段着色器,名为 input_color (我会将输出颜色设置为 vec4)附加到我的 shader_program .请注意我 调用 glUseProgram(shader_program)在绘制任何应该使用它的东西之前,在我的主绘制循环中。

// set uniforms
GLint input_color = glGetUniformLocation(shader_program, "input_color");
glUniform4f(input_color, 0.5f, 0.3f, 0.2f, 1.0f);

用这个程序绘制的三角形全黑,不是我期望的结果。经过一些实验,我意识到我需要在设置制服之前使用该程序。
// set uniforms
glUseProgram(shader_program); // my change
GLint input_color = glGetUniformLocation(shader_program, "input_color");
glUniform4f(input_color, 0.5f, 0.3f, 0.2f, 1.0f);

绘图会产生正确颜色的三角形。

我的问题是为什么我需要先开始使用该程序?我知道 OpenGL 作为 工作状态机 ,但在这种情况下,为什么需要当前的着色器程序状态?毕竟,我明确地传递了 shader_program索引作为 glGetUniformLocation 的参数为了得到 input_color的内存指数。

我希望这个答案能帮助我更好地理解 OpenGL 中的状态,以及如何利用或管理表示 GPU 上着色器程序的内存块。

最佳答案

你不必。 GL 4.1 及以上给你 glProgramUniform() ,它接受您要修改的程序对象。

关于opengl - 为什么我必须 "use"着色器程序才能设置它的制服?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42357380/

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