问题标签 [fbo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
559 浏览

opengl - GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 错误

我在我的 OpenGL 代码中使用FBOGL\_FRAMEBUFFER\_INCOMPLETE\_DUPLICATE\_ATTACHMENT\_EXT并且在. 这是什么原因,我该如何解决?

0 投票
1 回答
19484 浏览

opengl - 渲染到立方体贴图

根据ARB_geometry_shader4,可以使用几何着色器将场景渲染到立方体贴图的 6 个面上,并将立方体贴图附加到帧缓冲区对象。我想用这种方式创建一个阴影贴图。但是,似乎有一个我无法解决的冲突:

  1. 我只能将 GL_DEPTH_COMPONENT 作为内部类型的纹理附加到 GL_DEPTH_ATTACHMENT_EXT。
  2. 深度纹理只能是 1D 或 2D。
  3. 如果我想附加一个立方体贴图,所有其他附加的纹理也必须是立方体贴图。

因此,当我想渲染到立方体贴图时,看起来我不能使用任何深度测试。或者我到底在这里想念什么?

编辑:看起来较新的 Nvidia 驱动程序 (180.48) 支持深度立方体贴图。

0 投票
2 回答
2237 浏览

c++ - 使用 GL_RGBA16F_ARB 纹理时,它只包含废话,但我没有收到错误消息

我生成这样的纹理:

我将它附加到帧缓冲区对象(FBO)以进行渲染。当我将内部格式设置为GL_RGBA16. 但是,我需要更高的动态范围,并且认为这GL_RGBA16F_ARB可能会奏效。

不幸的是,如果我在上面给出的代码中替换GL_RGBA16GL_RGBA16F_ARB,纹理似乎停止工作。我没有尝试渲染到 FBO/纹理棒,当我使用纹理时,它包含随机垃圾。(很多紫色,事实证明)如果我收到一条提示可能有问题的错误消息,这不会那么令人沮丧,但我似乎找不到。换句话说,在-call 之后返回,并glGetError()在我附加纹理时返回0glTexImage2DglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)GL_FRAMEBUFFER_COMPLETE_EXT

我还没有搞砸glClampColorARB(...)......但是:)

  1. 我是否忘记在我没有想到的地方/方式中检查错误?
  2. -textures 是否GL_RGBA16F_ARB需要我没有给予的任何特殊处理?
  3. 还有什么可能是错的吗?

我很难过,因为一切都很顺利GL_RGBA16...... :(

编辑:使用时GL_RGBA16F_ARB,我尝试渲染到屏幕的第一帧没有成功。在我看来,我应该在某处收到错误消息..?

编辑:通过检查 ShadowIce 的工作代码示例,我发现如果我更改FBO 上的深度缓冲区glRenderBufferStorageEXT(...) GL_DEPTH_COMPONENT24,问题就会消失,并将其作为第二个参数,而不是GL_DEPTH_COMPONENT16. 我不知道为什么会这样,但显然它确实有效。

此外,如果我在那里进行相反的替换,ShadowIce 的代码会像我的一样中断。

0 投票
4 回答
3744 浏览

opengl - 保存大于窗口的openGL FBO的问题

我正在渲染到 OpenGL 屏幕外帧缓冲区对象,并希望将其保存为图像。请注意,FBO大于显示尺寸。我可以渲染到屏幕外缓冲区并将其用作纹理,这很有效。我可以使用偏移量在显示器上“滚动”这个更大的纹理,这让我确信我渲染到比窗口更大的上下文中。

如果我将屏幕外缓冲区保存到图像文件中,它总是会被裁剪。保存的代码片段是:

请注意,图像内容被裁剪,可见部分被正确保存(这意味着像素格式没有错误,GL_RGB 问题等),但剩余空间被一种颜色填充。

所以,我的问题是——我做错了什么?

0 投票
2 回答
9048 浏览

opengl - 来自 FBO 的 glReadPixels 因多重采样而失败

我有一个带有颜色和深度附件的 FBO 对象,我渲染到它然后从使用中读取glReadPixels(),我正在尝试向它添加多重采样支持。
而不是glRenderbufferStorage()我要求glRenderbufferStorageMultisampleEXT()颜色附件和深度附件。帧缓冲区对象似乎已成功创建并报告为完整。
渲染后,我尝试使用glReadPixels(). 当样本数为 0 时,即多重采样禁用它可以完美地工作,我得到了我想要的图像。当我将样本数设置为其他值(例如 4)时,帧缓冲区仍然可以正常构建,但glReadPixels()失败并出现INVALID_OPERATION

有人知道这里可能出了什么问题吗?

编辑: glReadPixels 的代码:

其中 ptr 指向宽度*高度单位的数组。

0 投票
2 回答
1941 浏览

opengl - 使用 OpenGL 的帧缓冲对象 (FBO) 进行图像处理?

我读过 FBO 可用于使用 OpenGL 绘图操作进行快速图像处理。有谁知道如何做到这一点的基础知识?或者有一些非常简单的示例代码来说明它?

0 投票
1 回答
1139 浏览

c++ - 带有 FBO RTT 的 OpenGL,在不应该的时候进行混合

这应该很简单,但它消耗了我几个小时的时间,我不知道发生了什么。

我正在将纯色全屏四边形渲染为纹理,然后使用 glGetTexImage 读取结果。它与 GPGPU 相关,所以我希望 alpha 值表现得好像它是其他三个中的任何一个。我在GL_RGBA32F_ARB10.5 的 MacBook Pro 上使用 FBO、纹理格式、NVidia 卡,如果重要的话。

如果我指定的 alpha 为 1,我只会返回正确的颜色;使用任何其他值,它似乎与帧缓冲区中已有的内容混合,即使我已明确禁用GL_BLEND. 我也尝试启用混合和使用glBlendFunc(GL_ONE, GL_ZERO),但最终结果是相同的。我可以在渲染之前将帧缓冲区清除为零,从而修复它,但我想了解为什么这是必要的。作为第二个测试,当我只想要原始的 4 通道颜色时,渲染两个重叠的四边形会产生混合结果。当然,纯色四边形应该完全覆盖帧缓冲区中的像素?我猜我误解了一些基本的东西。谢谢。

0 投票
2 回答
2526 浏览

opengl - 在 OpenGL 中使用多种颜色附件对多采样 FBO 进行 Blitting

我在具有多个颜色附件的 OpenGL 程序中有一个帧缓冲区对象,并且正在尝试将其升级为多采样 FBO。

据我了解,多重采样 FBO 只能使用渲染缓冲区,特别是使用glRenderbufferStorageMultisampleEXT. 如果我想要在纹理中渲染到这个 FBO,我需要创建第二个带有纹理的 FBO,然后使用glBlitFramebufferEXT.

我见过的非常非常稀少的例子假设一个单一的颜色附件。当我想对多个颜色附件进行 blit 时该怎么办?

0 投票
1 回答
289 浏览

opengl - 使用 FBO 的问题:仅第一次渲染。设置渲染目标时可能出现问题?

我在使用 FBO 时遇到了很大的问题。

我有一个使用 FBO 和多纹理的多通道显示。在第一次执行显示结束之前,一切似乎都运行良好。

我在显示函数结束时使用 glBindFrameBufferEXT(GL_FRAMEBUFFER_EXT, 0) 将渲染目标设置回屏幕,但之后的传递不生效。画面好像卡住了。。

可能是什么原因?有什么猜测吗?

0 投票
1 回答
2116 浏览

iphone - OpenGL ES Framebuffer weird mirroring when drawing

I really can't wrap my mind around this:

Previously I couldn't get Framebuffers to work, but I've got it going now. However, there is this incredibly weird mirroring going on with the texture generated from the framebuffer, and I have no idea why. Basically, I will try to draw a texture at 0,0 using GL_TRIANGLE_FAN, and the texture appears as normal (more or less) in the top right corner, but also appears in the bottom left corner, mirrored. If I fill up most or all of my viewport area with the same texture, the result is an ugly z-fighting overlap.

Screenshots will do this more justice.

Original image:

Original http://img301.imageshack.us/img301/1518/testsprite.png

Drawn 80x80 at (0,0)

80x80 http://img407.imageshack.us/img407/8339/screenshot20100106at315.png

Drawn 100x180 at (0,0)

100x180 http://img503.imageshack.us/img503/2584/screenshot20100106at316.png

Drawn 320x480 at (0,0)

320x480 http://img85.imageshack.us/img85/9172/screenshot20100106at317.png

And here is my code:

Set up the view:

Create the texture buffer.

Run the render loop.

On the first pass, the render loop will draw the image into the FBO.