0

我想创建一个带有字节缓冲区的单通道 2d 纹理,其中包含每个像素的每个浮点数(假设它是一个 alpha 值),以便在着色器中进一步使用

顺便说一句,我试过这个

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, GL_FLOAT, null)
// Then I call below when I want to change value in those texture
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_ALPHA, GL_FLOAT, buffer)

tex.a在着色器中一样访问 alpha 值它只能在某些设备上正常工作,并且正如您可以从doc中看到的那样,它会INVALID_OPERATION在其他设备上发生这种情况,但在我之前提到的某些设备上不会发生这种情况。

所以问题是我如何才能做到这一点?

我也试过这个

glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, width, height, 0, GL_RED, GL_FLOAT, null)
// Then I call below when I want to change value in those texture
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RED, GL_FLOAT, buffer)

我认为它应该做同样的事情,但将值放在红色通道中,但似乎每个像素上的值都是 rgba (0, 0, 0, 1)。

另一个问题是那些工作的设备发生了什么?

PS。我想做的就是将该缓冲区用作纹理的 alpha 值,因此如果可以将其直接发送到纹理,请告诉我。

4

0 回答 0