【问题标题】:OpenGL uniform samplerBuffer: what does it point to?OpenGL统一的samplerBuffer:它指向什么?
【发布时间】:2014-06-10 13:30:13
【问题描述】:

我试图弄清楚是什么决定了uniform samplerBuffer 指向的缓冲区对象。

假设我们有uniform samplerBuffer aBuffer,它的值为0aBuffer 指向什么?

【问题讨论】:

  • 纹理图像单元 0;我最近回答了一个类似的问题,我会指出你there。但基本上它引用绑定到该图像单元的纹理。
  • @Andon 换句话说它指向GL_TEXTURE0?
  • 是的,samplerBuffer 与任何其他类型的采样器没有什么不同。真正唯一的独特之处在于,您在此示例中将绑定到GL_TEXTURE0 的事物分配为glTexBuffer (...),而不是glTexImage2D (...)(在sampler2D 的情况下)。好吧,当然,你必须使用texelFetch (...)
  • @Andon 等等,我不知道。如果您确实使用glTexImage2d() 绑定了一些东西怎么办?
  • 那么它就不是缓冲纹理了。这就是这个问题的意义所在,对吧? glTexImage2D (...) 用于 GL_TEXTURE_2D / sampler2DglTexBuffer (...) 代表GL_TEXTURE_BUFFER / samplerBuffer

标签: opengl glsl opengl-3


【解决方案1】:

如果我正确理解您的问题,您是在问aBuffer 如何知道从哪个缓冲区对象获取纹素内存?

aBuffer 是一个采样器(更准确地说,是一个缓冲采样器),在这个例子中它的值为0,所以它指的是当前绑定到GL_TEXTURE0的缓冲区纹理(GL_TEXTURE_BUFFER)。

绑定到GL_TEXTURE_BUFFER 的缓冲区纹理与后备存储之间的关联来自对glTexBuffer (...) 的调用中的最后一个参数。最后一个参数是缓冲区对象的名称。

【讨论】:

  • 好的,只有一个问题。如果我们先glActiveTexture(GL_TEXTURE0) 然后glBindTexture(GL_TEXTURE_2D, x)(或除GL_TEXTURE_BUFFER 之外的任何其他目标)然后尝试通过uniform sampleBuffer 访问它怎么办?
  • 每个纹理图像单元存储与一组单独目标的绑定:GL_TEXTURE_1DGL_TEXTURE_2DGL_TEXTURE_3DGL_TEXTURE_1D_ARRAYGL_TEXTURE_2D_ARRAYGL_TEXTURE_RECTANGLEGL_TEXTURE_BUFFERGL_TEXTURE_CUBE_MAPGL_TEXTURE_CUBE_MAP_ARRAYGL_TEXTURE_2D_MULTISAMPLEGL_TEXTURE_2D_MULTISAMPLE_ARRAY。在GL_TEXTURE0 上将某些东西绑定到GL_TEXTURE_2D 只会影响使用纹理图像单元0 的2D 纹理的采样器(例如sampler2D)。 samplerBuffer 使用绑定到目标 GL_TEXTURE_BUFFER 的纹理,因此不受影响。
  • 好吧,太棒了,我就是这么想的。我希望我不会太过分,但GL_TEXTURE_BUFFER_DATA_STORE_BINDINGGL_TEXTURE_BINDING_BUFFER 有什么区别(关于纹理图像单元)?
  • 第一个是当前绑定的缓冲区纹理使用的缓冲区对象(记住glTexBuffer (...)中的最后一个参数),第二个是当前绑定到活动纹理图像的缓冲区纹理单位(例如glBindTexture (GL_TEXTURE_BUFFER, ...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多