具有多纹理的OpenGL渲染

具有多纹理的OpenGL渲染,opengl,Opengl,在OpenGL中,有没有一种方法可以在VRAM中使用多个独立的纹理渲染顶点缓冲区,而不必手动绑定它们(即将控制权返回CPU) 编辑:所以我目前正在使用多个纹理渲染对象,方法是使用单个纹理进行渲染,绑定一个新纹理,然后重复,直到完成所有操作。这很慢,需要将控制权返回给CPU,并对每个纹理进行系统调用。有没有办法避免这种切换,并使着色器可以基于顶点数据选择多个纹理?如问题注释中所述,glActiveTexture是关键-GLSL中的采样器绑定到纹理单元(例如GL_TEXTURE0),而不是特定的纹理

在OpenGL中,有没有一种方法可以在VRAM中使用多个独立的纹理渲染顶点缓冲区,而不必手动绑定它们(即将控制权返回CPU)


编辑:所以我目前正在使用多个纹理渲染对象,方法是使用单个纹理进行渲染,绑定一个新纹理,然后重复,直到完成所有操作。这很慢,需要将控制权返回给CPU,并对每个纹理进行系统调用。有没有办法避免这种切换,并使着色器可以基于顶点数据选择多个纹理?

如问题注释中所述,
glActiveTexture
是关键-GLSL中的采样器绑定到纹理单元(例如
GL_TEXTURE0
),而不是特定的纹理目标(例如,
GL\u TEXTURE2D
),因此您可以在
glActiveTexture(GL\u TEXTURE0)
下绑定一个
GL\u TEXTURE2D
纹理,在
glActiveTexture(GL\u TEXTURE1)
下绑定另一个
GLSL
sampler2D
值为0、1等。(注意:不要让你的
sampler2D
GL\u TEXTURE0
GL\u TEXTURE1
,等等-它们是从
GL\u TEXTURE0
偏移的).

你能澄清这个问题吗?你到底想做什么?你不能为一次绘制调用绑定多个纹理。你可能还想使用纹理图集或数组来减少切换纹理的需要。最后,在现代GPU上,也有无绑定纹理。很难说这是什么(如果有的话)你可能需要。完成,谢谢。纹理图集绝对是一个选项,但它看起来很粗略。最终,如果我的所有纹理都独立于VRAM中,为什么我不能独立使用它们呢?我对纹理数组的理解是,所有纹理都必须具有相同的大小,这在某种程度上违反了纹理之间的独立性。无绑定纹理听起来是目前为止最好的选择;我可能不得不开始使用非标准纹理=(.derhass不是在谈论纹理数组。他指的是
glActiveTexture
。一次将多个纹理绑定到不同的单元。它们之间不需要有任何关联,大小或其他。哎呀,我错了。我怎么能从着色器中引用多个活动纹理?据我所知,切换活动纹理时s与切换绑定纹理相同,否?*相同的是,我仍然必须将控制权返回到CPU并进行系统调用,以便引用不同的纹理。