- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将代码从 Windows 移植到 Android,但 Opengl ES 2.0 中不存在一些 GL 方法。
目的是将所有渲染到将使用特定着色器渲染的纹理。
第一行:
window 版本
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, renderedTexture, 0);
ES 2.0 版本?我不确定
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, renderedTexture, 0, 0);
第二行:
window 版
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);
最佳答案
而不是 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 版本相似。
进一步注意,为了满足帧缓冲区完整性的规则,附加图像的内部格式必须是可渲染格式。
有关详细信息,请参阅 OpenGL ES 2.0 Full Specification - 4.4.5 帧缓冲区完整性(第 117/118 页)。
The framebuffer object target is said to be framebuffer complete if it is the window-system-provided framebuffer, or if all the following conditons are true:
[...]
- The combination of internal formats of the attached images does not violate an implementation-dependent set of restrictions.
关于c++ - opengl es 2.0 c++ 中的 glDrawBuffers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54826074/
当我遇到这两种方法时,我正在阅读红皮书 OpenGL 编程指南,这让我觉得没有必要,因为我们已经可以使用 layout (location = )< 指定输出将转到哪个颜色缓冲区 或 glBindFr
OpenGL 函数 glDrawBuffers(GLsizei n, const GLenum *bufs) 在 Qt 中可用吗? 我正在尝试将多个渲染目标传递给我的片段着色器,QtCreator 说
您可以指定使用哪些缓冲区绘制 glDrawBuffer() 例子 GLenum 缓冲区[] = { GL_COLOR_ATTACHMENT0 }; glDrawBuffers( 1, 缓冲区 ); 好
如果我理解正确,您可以将纹理附加到 FBO,然后使用 glDrawBuffers 将这些附加点链接到(片段)着色器输出索引。 glDrawBuffers 调用后后一种状态存储在哪里?当前绑定(bind
我有以下代码: IntBuffer DrawBuffers = Utils.createIntBuffer(2); int bfs[] = {GL30.GL_COLOR_ATTACHMENT0
我还是 opengl3 的新手,我正在尝试创建多 channel 渲染。 为此,我创建了 FBO,生成了多个纹理并使用 将它们附加到它上面 unsigned index_col = 0;
我总共有 5 个渲染目标。我使用相同的着色器写入前 4 个,然后在单独的 channel 中写入最后一个。 在对前 4 个目标调用渲染之前,我调用: GLenum drawBuffers[] = {
我尝试创建一个带有 2 个纹理的 FrameBuffer(多渲染目标)。然后在每个时间步中,两个纹理都被清除和绘制,如下代码。 (某些部分将被替换为伪代码以使其更短。) 版本 1 //beginnin
我的多渲染目标代码出现了一些非常奇怪的行为,并且开始怀疑我是否灾难性地误解了它的工作方式。 我正在 2.1 版上下文中运行。这是我正在执行的渲染设置代码的核心部分: glBindFramebuffer
我无法理解如何将 glReadBuffer() 和 glDrawBuffer() 调用移植到 Open GL ES 1.1。互联网上的各种论坛帖子只是说“使用 VBO”,而没有深入探讨。 你能帮我理解
我正在将代码从 Windows 移植到 Android,但 Opengl ES 2.0 中不存在一些 GL 方法。 目的是将所有渲染到将使用特定着色器渲染的纹理。 第一行: window 版本 glF
在 iOS 上使用 OpengGL ES 3.0,我想使用一个片段着色器使用一个帧缓冲区对象绘制到 2 个不同颜色的附件(不是同时)(总部)。但是,调用时出现 GL_INVALID_OPERATION
我是一名优秀的程序员,十分优秀!