我正在将代码从Windows移植到Android,Opengl ES 2.0中不存在一些GL方法。
目的是将所有内容渲染到将使用特定的着色器进行渲染的纹理。
第一行:
Windows版本
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, renderedTexture, 0);
ES 2.0版本?我不确定
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, renderedTexture, 0, 0);
第二行:
Windows版本
GLenum DrawBuffers[1] = { GL_COLOR_ATTACHMENT0 };
glDrawBuffers(1, DrawBuffers);
ES 2.0版本?
丢失
代码:
glGenFramebuffers(1, &FramebufferName);
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName);
glGenTextures(1, &renderedTexture);
glBindTexture(GL_TEXTURE_2D, renderedTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 768, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, renderedTexture, 0);
GLenum DrawBuffers[1] = { GL_COLOR_ATTACHMENT0 };
glDrawBuffers(1, DrawBuffers);
编辑:
调整后,应用程序运行但崩溃,logcat提示:
D/libGLESv2: DTS_GLAPI : DTS is not allowed for Package : xxx.xxx
和声明:
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
是真的
当前代码为:
glGenFramebuffers(1, &FramebufferName);
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName);
glGenTextures(1, &renderedTexture);
glBindTexture(GL_TEXTURE_2D, renderedTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 768, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, renderedTexture, 0, 0);
答案 0 :(得分:1)
它可以代替glFramebufferTexture
在(台式机)OpenGL中使用,glFramebufferTexture2D
在OpenGL ES 2.0中使用。
glFramebufferTexture2D
的第三个参数是纹理目标,在您的情况下为GL_TEXTURE_2D
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, renderedTexture, 0, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, renderedTexture, 0);
不需要将调用移植到glDrawBuffers
,因为在初始状态下,片段颜色零的绘制缓冲区是COLOR_ATTACHMENT0
,而在OpenGL ES 2.0中,唯一可能的颜色附件是COLOR_ATTACHMENT0
。
在OpenGL ES 3.0中,此行为会更改,并且与您使用的(桌面)OpenGL版本相似。
另外,要满足帧缓冲区完整性的规则,附加图像的内部格式必须为 Color-renderable 格式。
有关详细信息,请参见OpenGL ES 2.0 Full Specification-4.4.5帧缓冲区完整性(第117/118页)。
如果framebuffer对象目标是 窗口系统提供的帧缓冲区,或者如果以下所有条件都为真:
[...]
- 附加图像的内部格式的组合不违反依赖于实现的一组限制。