Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不带纹理图像单元的Opengl纹理_C++_Opengl_3d_Textures - Fatal编程技术网

C++ 不带纹理图像单元的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

最近我发现了一个Opengl示例,该示例应用了单个纹理,而没有指定纹理图像单位,也没有将相应的单位整数均匀发送到着色器中,是否可以应用纹理而不使用纹理单位??或者它只是为活动纹理单元及其着色器采样器值使用默认值

我的代码块(纹理相关):

我的片段着色器:

#version 410

in vec2 texCoordout;

uniform sampler2D mysampler;

out vec4 Fcolor;

void main()
{
Fcolor = texture (mysampler, texCoordout);
}

这将起作用,并且在规范范围内:

  • 默认的纹理单元是
    GL_TEXTURE0
    ,因此如果只使用纹理单元0,则无需调用
    glActiveTexture()
  • 制服的默认值为0,这是引用纹理单元0的采样器的正确值

我仍然会设置统一的值,只是为了让它显式。如果在这种情况下不设置统一,则如果使用的纹理单位不是0,则更可能无法设置统一。

这是可能的,但需要扩展。这个概念被称为无黏结纹理。纹理图像单元是GL中的一个人工构造,硬件实际上总是通过传递对纹理内存本身的引用来工作,并且没有实际的绑定机制。TIU本质上只是状态容器;它们使纹理驻留和验证更简单,但它们不是必需的。
#version 410

in vec2 texCoordout;

uniform sampler2D mysampler;

out vec4 Fcolor;

void main()
{
Fcolor = texture (mysampler, texCoordout);
}