GLSL纹理映射,最大纹理数
GLSL Texture Mapping, Max number of textures
我正在处理C GLSL渲染器。我想出了如何在GLSL中映射多个纹理。使用" glActiveTexture(GL_TEXTURE0)
",我可以告诉我的着色器要加载哪种纹理。唯一的问题是常数GL_TEXTURE0
,GL_TEXTURE1
,...,仅适用于GL_TEXTURE31
。这是否意味着您只能为您的场景加载32个纹理?肯定不是。
示例:
unsigned int textureIDs[2];
glGenTextures(2, textureIDs);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureIDs[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image1.x, image1.y, 0, GL_RGB, GL_UNSIGNED_BYTE, image1.data);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textureIDs[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image2.x, image2.y, 0, GL_RGB, GL_UNSIGNED_BYTE, image2.data);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
...后来在我的抽奖功能中...
int handle_loc = glGetUniformLocation( ProgramHandle, "Tex1" );
glUniform1i( handle_loc, val );
...如果将变量" Val"设置为0,则来自Image1的纹理数据将映射到我的着色器,如果将其设置为1,则来自Image2的纹理数据将映射到我的着色器。...
我在做什么错,我如何加载32多个纹理?
常数仅升至GL_TEXTURE31
,因为这就是GL3所需的一切。每个着色器阶段需要16个纹理图像单元,而GL3只有2个阶段(顶点和片段)。
后来在GL(3.2)上将几何形状着色器推向核心,因此纹理图像单元的最小数量变为48(因此GL_TEXTURE47
将是实现必须定义的最高数字)。
GL4添加了Tessellation评估/控制阶段,该阶段的最小值最高为80 (16 x 5阶段)。但是,此时,大多数人停止使用常数,而只使用GL_TEXTURE0
n 来描述N'th纹理图像单元。
就可以加载的纹理数量而言,这完全独立于实现支持的纹理图像单元的数量。纹理图像单元是绑定位置,它们与您可以在着色器的单个调用中应用的最大纹理数(换句话说)。
,如果您在着色器阶段需要超过16个纹理,则可以始终诉诸多个通过,但我认为您将"加载"纹理混淆,使它们绑定到纹理图像单元。
相关文章:
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 为什么OpenSceneGraph将所有Sampler2D映射到第一个纹理
- 为什么我的纹理加载到OpenGL中,未正确映射
- OpenGL 透视投影裁剪多边形与顶点在视锥体之外 = 错误的纹理映射?
- 尝试将纹理映射到 GLSL 中的三角形时出现访问冲突
- GPU驱动程序中的Vulkan纹理映射不准确
- GLSL纹理映射,最大纹理数
- 使用 OpenGL 和 QT 进行纹理映射 - C++
- 使用 openGL 进行多纹理映射
- 用不同的纹理纹理多个对象
- 如何将纹理映射到 3D 对象
- 将2D图像映射到3D纹理
- OpengGl 4.2 纹理映射未显示
- openGL中的Does纹理映射遵循反向方法的正向纹理映射
- QOpenGLWidget纹理映射结果为黑屏
- 如何制作映射纹理的立方体,在内部和外部显示不同的纹理
- 在 Android NDK 上创建映射/直接 OpenGL ES 纹理
- 在OpenGL中将纹理映射到顶点
- OpenGL 3.3纹理映射三角形
- opencl/opengl interop using clCreateFromGLTexture 无法绘制到纹理(纹理