问题标签 [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.
opengl - GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 错误
我在我的 OpenGL 代码中使用FBOGL\_FRAMEBUFFER\_INCOMPLETE\_DUPLICATE\_ATTACHMENT\_EXT
并且在. 这是什么原因,我该如何解决?
opengl - 渲染到立方体贴图
根据ARB_geometry_shader4,可以使用几何着色器将场景渲染到立方体贴图的 6 个面上,并将立方体贴图附加到帧缓冲区对象。我想用这种方式创建一个阴影贴图。但是,似乎有一个我无法解决的冲突:
- 我只能将 GL_DEPTH_COMPONENT 作为内部类型的纹理附加到 GL_DEPTH_ATTACHMENT_EXT。
- 深度纹理只能是 1D 或 2D。
- 如果我想附加一个立方体贴图,所有其他附加的纹理也必须是立方体贴图。
因此,当我想渲染到立方体贴图时,看起来我不能使用任何深度测试。或者我到底在这里想念什么?
编辑:看起来较新的 Nvidia 驱动程序 (180.48) 支持深度立方体贴图。
c++ - 使用 GL_RGBA16F_ARB 纹理时,它只包含废话,但我没有收到错误消息
我生成这样的纹理:
我将它附加到帧缓冲区对象(FBO)以进行渲染。当我将内部格式设置为GL_RGBA16
. 但是,我需要更高的动态范围,并且认为这GL_RGBA16F_ARB
可能会奏效。
不幸的是,如果我在上面给出的代码中替换GL_RGBA16
为GL_RGBA16F_ARB
,纹理似乎停止工作。我没有尝试渲染到 FBO/纹理棒,当我使用纹理时,它包含随机垃圾。(很多紫色,事实证明)如果我收到一条提示可能有问题的错误消息,这不会那么令人沮丧,但我似乎找不到。换句话说,在-call 之后返回,并glGetError()
在我附加纹理时返回0
glTexImage2D
glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
GL_FRAMEBUFFER_COMPLETE_EXT
我还没有搞砸glClampColorARB(...)
......但是:)
- 我是否忘记在我没有想到的地方/方式中检查错误?
- -textures 是否
GL_RGBA16F_ARB
需要我没有给予的任何特殊处理? - 还有什么可能是错的吗?
我很难过,因为一切都很顺利GL_RGBA16
...... :(
编辑:使用时GL_RGBA16F_ARB
,我尝试渲染到屏幕的第一帧没有成功。在我看来,我应该在某处收到错误消息..?
编辑:通过检查 ShadowIce 的工作代码示例,我发现如果我更改FBO 上的深度缓冲区glRenderBufferStorageEXT(...)
GL_DEPTH_COMPONENT24
,问题就会消失,并将其作为第二个参数,而不是GL_DEPTH_COMPONENT16
. 我不知道为什么会这样,但显然它确实有效。
此外,如果我在那里进行相反的替换,ShadowIce 的代码会像我的一样中断。
opengl - 保存大于窗口的openGL FBO的问题
我正在渲染到 OpenGL 屏幕外帧缓冲区对象,并希望将其保存为图像。请注意,FBO大于显示尺寸。我可以渲染到屏幕外缓冲区并将其用作纹理,这很有效。我可以使用偏移量在显示器上“滚动”这个更大的纹理,这让我确信我渲染到比窗口更大的上下文中。
如果我将屏幕外缓冲区保存到图像文件中,它总是会被裁剪。保存的代码片段是:
请注意,图像内容被裁剪,可见部分被正确保存(这意味着像素格式没有错误,GL_RGB 问题等),但剩余空间被一种颜色填充。
所以,我的问题是——我做错了什么?
opengl - 来自 FBO 的 glReadPixels 因多重采样而失败
我有一个带有颜色和深度附件的 FBO 对象,我渲染到它然后从使用中读取glReadPixels()
,我正在尝试向它添加多重采样支持。
而不是glRenderbufferStorage()
我要求glRenderbufferStorageMultisampleEXT()
颜色附件和深度附件。帧缓冲区对象似乎已成功创建并报告为完整。
渲染后,我尝试使用glReadPixels()
. 当样本数为 0 时,即多重采样禁用它可以完美地工作,我得到了我想要的图像。当我将样本数设置为其他值(例如 4)时,帧缓冲区仍然可以正常构建,但glReadPixels()
失败并出现INVALID_OPERATION
有人知道这里可能出了什么问题吗?
编辑: glReadPixels 的代码:
其中 ptr 指向宽度*高度单位的数组。
opengl - 使用 OpenGL 的帧缓冲对象 (FBO) 进行图像处理?
我读过 FBO 可用于使用 OpenGL 绘图操作进行快速图像处理。有谁知道如何做到这一点的基础知识?或者有一些非常简单的示例代码来说明它?
c++ - 带有 FBO RTT 的 OpenGL,在不应该的时候进行混合
这应该很简单,但它消耗了我几个小时的时间,我不知道发生了什么。
我正在将纯色全屏四边形渲染为纹理,然后使用 glGetTexImage 读取结果。它与 GPGPU 相关,所以我希望 alpha 值表现得好像它是其他三个中的任何一个。我在GL_RGBA32F_ARB
10.5 的 MacBook Pro 上使用 FBO、纹理格式、NVidia 卡,如果重要的话。
如果我指定的 alpha 为 1,我只会返回正确的颜色;使用任何其他值,它似乎与帧缓冲区中已有的内容混合,即使我已明确禁用GL_BLEND
. 我也尝试启用混合和使用glBlendFunc(GL_ONE, GL_ZERO)
,但最终结果是相同的。我可以在渲染之前将帧缓冲区清除为零,从而修复它,但我想了解为什么这是必要的。作为第二个测试,当我只想要原始的 4 通道颜色时,渲染两个重叠的四边形会产生混合结果。当然,纯色四边形应该完全覆盖帧缓冲区中的像素?我猜我误解了一些基本的东西。谢谢。
opengl - 在 OpenGL 中使用多种颜色附件对多采样 FBO 进行 Blitting
我在具有多个颜色附件的 OpenGL 程序中有一个帧缓冲区对象,并且正在尝试将其升级为多采样 FBO。
据我了解,多重采样 FBO 只能使用渲染缓冲区,特别是使用glRenderbufferStorageMultisampleEXT
. 如果我想要在纹理中渲染到这个 FBO,我需要创建第二个带有纹理的 FBO,然后使用glBlitFramebufferEXT
.
我见过的非常非常稀少的例子假设一个单一的颜色附件。当我想对多个颜色附件进行 blit 时该怎么办?
opengl - 使用 FBO 的问题:仅第一次渲染。设置渲染目标时可能出现问题?
我在使用 FBO 时遇到了很大的问题。
我有一个使用 FBO 和多纹理的多通道显示。在第一次执行显示结束之前,一切似乎都运行良好。
我在显示函数结束时使用 glBindFrameBufferEXT(GL_FRAMEBUFFER_EXT, 0) 将渲染目标设置回屏幕,但之后的传递不生效。画面好像卡住了。。
可能是什么原因?有什么猜测吗?
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.