gpt4 book ai didi

c++ - 使用glUniform1i函数无法加载均匀的纹理

转载 作者:行者123 更新时间:2023-12-02 10:03:19 24 4
gpt4 key购买 nike

我尝试遵循有关OpenGL的“The Cherno” channel 上YT的教程(您可以找到我的代码here)。我有两个制服u_Coloru_Texture,我使用从Shader.cpp文件调用的glUniform1i函数加载。对于u_Color,一切都很好,但是当我尝试加载u_Texture时,我获得了错误代码

0x502 (GL_INVALID_OPERATION; Qt debugging stops printing out "Illegal operation" error).



我试图在着色器和cpp代码中删除未使用的对“u_Color”统一的调用,我试图在GLCall宏和其他一些东西之外使用该函数,但它根本不想工作。我确定纹理的位置是正确的(无符号int),我认为我的代码与实际使用的教程中的代码完全相同!

我使用Intel图形卡在Linux系统(18.04)上工作,并且使用带有g++编译器(7.5.0)的Qt Creator(基于Qt 5.14.2的Qt Creator 4.11.2)。

如果有人可以检查出来,我将非常感激。

那是“Shader.cpp”中的代码中有问题的部分
GLuint uniformlocation = static_cast<GLuint>(glGetUniformLocation(m_rendererID, "u_Texture"));
glUniform1f(uniformLocation, value);

这是使用u_Texture的片段着色器
#version 330 core

layout(location = 0) out vec4 color;

in vec2 v_TexCoord;

uniform vec4 u_Color;
uniform sampler2D u_Texture;

void main()
{
vec4 texColor = texture2D(u_Texture, v_TexCoord);
color = texColor;
}

最佳答案

glUniform1f 设置当前安装程序的统一值,因此该程序必须由 glUseProgram 安装,然后再执行以下操作:

GLuint uniformlocation = static_cast<GLuint>(glGetUniformLocation(m_rendererID, "u_Texture"));
glUseProgram(m_rendererID);
glUniform1f(uniformLocation, value);

分别:

shader.bind();
shader.setUniform1i("u_Texture", 0);
GL_INVALID_OPERATION由以下事实引起:当前没有程序对象。

或者,您可以使用 glProgramUniform 为指定的程序对象指定统一变量的值

关于c++ - 使用glUniform1i函数无法加载均匀的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61474788/

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