use*_*496 2 opengl-es glteximage2d opengl-es-2.0
我遇到了一些关于使用 gl_luminance 定义 FBO 的问题。这是我使用的代码,
generateRenderToTexture(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, _maskTexture, _imageWidth, _imageHeight, false);
Run Code Online (Sandbox Code Playgroud)
相关代码如下,
TextureBuffer _maskTexture;
class TextureBuffer {
public:
GLuint texture;
GLuint frameBuffer;
GLenum internalformat;
GLenum format;
GLenum type;
int w,h;
TextureBuffer() : texture(0), frameBuffer(0) {}
void release()
{
if(texture)
{
glDeleteTextures(1, &texture);
texture = 0;
}
if(frameBuffer)
{
glDeleteFramebuffers(1, &frameBuffer);
frameBuffer = 0;
}
}
};
void generateRenderToTexture(GLint internalformat, GLenum format, GLenum type,
TextureBuffer &tb, int w, int h, bool linearInterp)
{
glGenTextures(1, &tb.texture);
glBindTexture(GL_TEXTURE_2D, tb.texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, linearInterp ? GL_LINEAR : GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, linearInterp ? GL_LINEAR : GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, internalformat, w, h, 0, format, type, NULL);
glGenFramebuffers(1, &tb.frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, tb.frameBuffer);
glClear(_glClearBits);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tb.texture, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status != GL_FRAMEBUFFER_COMPLETE)
printf("Framebuffer status: %x", (int)status);
tb.internalformat = internalformat;
tb.format = format;
tb.type = type;
tb.w = w;
tb.h = h;
}
Run Code Online (Sandbox Code Playgroud)
问题是当我使用时,
generateRenderToTexture(GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, _maskTexture, _imageWidth, _imageHeight, false);
Run Code Online (Sandbox Code Playgroud)
代码进展顺利。但如果使用 gl_luminance 代替,
generateRenderToTexture(GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE, _maskTexture, _imageWidthOriginal,
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我不能使用 GL_LUMINANCE 来定义 FBO。有人有一些有用的建议来解决这个问题吗?
根据规范文档中的表 4.5,保证在 ES 2.0 中用作彩色 FBO 附件的唯一格式是:
GL_RGBA4GL_RGB5_A1GL_RGB565标准并不要求支持渲染到适合您的 GL_RGBA。不过,许多实现都支持它。OES_rgb8_rgba8扩展添加了对渲染目标的支持GL_RGB8和GL_RGBA8格式。
GL_LUMINANCE标准不支持将其作为可渲染颜色的格式,而且我也找不到它的扩展名。某些实现可能会支持它,但您当然不能指望它。
ES 3.0 列为GL_R8可颜色渲染的格式。在 ES 3.0 中,RED/R格式替换了ES 2.0 中的LUMINANCE/ALPHA格式。因此,如果您可以迁移到 ES 3.0,则可以支持渲染为 1 分量纹理格式。
| 归档时间: |
|
| 查看次数: |
3357 次 |
| 最近记录: |