Wal*_*ter 2 opengl buffer textures glsl
我一直想知道是否有可能在GLSL 1.5顶点着色器中有一个sampler2D数组.
我需要从顶点着色器访问30种不同的2d纹理.我读到不可能有这样的结构:
uniform sampler2d texture[30];
Run Code Online (Sandbox Code Playgroud)
然而,有30种不同的制服有点夸张,相当难以管理......
所以,这让我想到了一个纹理缓冲对象.自OpenGL 3.0以来支持TBO.但是,我找不到一个好的教程或示例,分别展示了如何使用一个纹理而不是几个纹理来初始化TBO.
该网站显示了如何使用单个纹理初始化TBO的示例.没什么大不了的.我认为最重要的方法是
void createTBO(GLuint* tbo, GLuint* tex)
Run Code Online (Sandbox Code Playgroud)
通过执行该方法
glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, GL_RGBA32F_ARB, *tbo);
Run Code Online (Sandbox Code Playgroud)
一个人实际上可以将纹理附加到缓冲区.这也在这里提到.我假设一个接一个地调用glTexBuffer 30次之后就不会这么做了.
所以,我一直在想是否有另一种方法可以获得相同的结果.我提出了两个想法:
所以,我的问题是:
如果你能给我建议,我将不胜感激.就OpenGL而言,我真的是一个新手.
谢谢沃尔特
Mat*_*gro 10
我相信你误解了纹理缓冲对象(TBO)是什么.TBO用于访问着色器内的缓冲区对象,仅此而已.它不包含多个纹理或类似的东西.
如果纹理大小相同,则可以使用3D纹理或纹理数组.TBO对您的问题毫无用处.