C++ 不带纹理图像单元的Opengl纹理
最近我发现了一个Opengl示例,该示例应用了单个纹理,而没有指定纹理图像单位,也没有将相应的单位整数均匀发送到着色器中,是否可以应用纹理而不使用纹理单位??或者它只是为活动纹理单元及其着色器采样器值使用默认值 我的代码块(纹理相关): 我的片段着色器:C++ 不带纹理图像单元的Opengl纹理,c++,opengl,3d,textures,C++,Opengl,3d,Textures,最近我发现了一个Opengl示例,该示例应用了单个纹理,而没有指定纹理图像单位,也没有将相应的单位整数均匀发送到着色器中,是否可以应用纹理而不使用纹理单位??或者它只是为活动纹理单元及其着色器采样器值使用默认值 我的代码块(纹理相关): 我的片段着色器: #version 410 in vec2 texCoordout; uniform sampler2D mysampler; out vec4 Fcolor; void main() { Fcolor = texture (mysamp
#version 410
in vec2 texCoordout;
uniform sampler2D mysampler;
out vec4 Fcolor;
void main()
{
Fcolor = texture (mysampler, texCoordout);
}
这将起作用,并且在规范范围内:
- 默认的纹理单元是
,因此如果只使用纹理单元0,则无需调用GL_TEXTURE0
glActiveTexture()
- 制服的默认值为0,这是引用纹理单元0的采样器的正确值
我仍然会设置统一的值,只是为了让它显式。如果在这种情况下不设置统一,则如果使用的纹理单位不是0,则更可能无法设置统一。这是可能的,但需要扩展。这个概念被称为无黏结纹理。纹理图像单元是GL中的一个人工构造,硬件实际上总是通过传递对纹理内存本身的引用来工作,并且没有实际的绑定机制。TIU本质上只是状态容器;它们使纹理驻留和验证更简单,但它们不是必需的。
#version 410
in vec2 texCoordout;
uniform sampler2D mysampler;
out vec4 Fcolor;
void main()
{
Fcolor = texture (mysampler, texCoordout);
}