gpt4 book ai didi

OpenGL 3.3、GLSL 1.5 : How to setup a Texture Buffer Object containing various texture2D?

转载 作者:行者123 更新时间:2023-12-03 03:49:37 25 4
gpt4 key购买 nike

我一直想知道是否可以在 GLSL 1.5 顶点着色器中拥有一个sampler2D 数组。

我需要从我的顶点着色器访问 30 种不同的 2d 纹理。我读到不可能有这样的结构:

uniform sampler2d texture[30];

但是,拥有 30 种不同的制服有点夸张,而且相当难以管理......

所以,这让我想到了拥有一个纹理缓冲区对象的想法。从 OpenGL 3.0 开始支持 TBO。但是,我找不到一个好的教程或示例来分别展示如何不仅使用一个纹理,而且还使用多个纹理来初始化 TBO。

This网站展示了如何使用单个纹理初始化 TBO 的示例。没什么大不了的。我认为最重要的方法是

void createTBO(GLuint* tbo, GLuint* tex)

通过执行方法

glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, GL_RGBA32F_ARB, *tbo);  

实际上可以将纹理附加到缓冲区。这也提到了here 。我假设依次调用 glTexBuffer 30 次不会成功。

所以,我一直在想是否有另一种方法可以获得完全相同的结果。我想出了两个想法:

  • 将 30 个 2d 纹理添加到 3d 纹理并将其直接附加到顶点着色器。然而,这会造成很大的内存浪费,因为大多数 3D 纹理层都不会被使用。
  • 使用名为sampler2DArray的结构。规范中提到了这一点。但是,我在网络上进行了搜索,但找不到任何有关如何实现该功能的有值(value)的信息。

所以,我的问题是:

  • 如何设置包含不止 1 个纹理的 TBO?
  • 这可能吗?
  • 您知道我可以在哪些来源找到有关将 2d 纹理添加到 3d 纹理的信息吗?
  • 您知道我可以在哪些网站上找到有关sampler2DArray 的初始化、绑定(bind)和使用的信息吗?

如果您能给我建议,我将不胜感激。我在 OpenGL 方面确实是个新手。

谢谢沃尔特

最佳答案

我相信您误解了纹理缓冲区对象(TBO)是什么。 TBO 用于访问着色器内的缓冲区对象,仅此而已。它不包含多个纹理或类似的东西。

如果纹理大小相同,则可以使用 3D 纹理或纹理数组。 TBO 对您的问题没有任何用处。

关于OpenGL 3.3、GLSL 1.5 : How to setup a Texture Buffer Object containing various texture2D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com