问题标签 [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 投票
2 回答
1255 浏览

c++ - OpenGL FBO 不渲染到纹理 (C++)

我一直在尝试将茶壶渲染到 FBO,然后将后续纹理用作纹理贴图。似乎什么都没有出现,所以我想知道我做错了什么。下面是主循环:

我尝试使用 glFramebufferStatus 并返回“成功”

然而,我得到的只是没有纹理映射的立方体。

0 投票
1 回答
1233 浏览

ios - 多采样渲染到纹理

我正在使用以下架构:

  • iOS 上的 OpenGL ES 2
  • 具有相同 ShareGroup 的两个 EAGL 上下文
  • 两个线程(服务器,客户端=主线程);服务器将内容渲染到纹理,客户端使用简单的纹理四边形显示纹理。

服务器线程的附加细节(工作代码)

在初始化期间创建一个 fbo:

服务器的渲染循环大致如下:

到目前为止,这一切都很好。

新的(错误的)代码

现在我想将多重采样添加到服务器线程,使用 GL_APPLE_framebuffer_multisample 扩展并修改初始化代码如下:

主循环已更改为:

我现在看到的是纹理包含来自多个 loop() 调用的数据,混合在一起。我想我要么错过了某种“解除绑定”,要么可能是一个glFinish()电话(我以前在不同的地方遇到过这样的问题,我设置了纹理数据glTexImage2D()并在之后使用它——这需要一个glFinish()调用来强制纹理要被更新)。

但是在绘图代码之后插入 aglFinish()并没有改变这里的任何内容..

0 投票
1 回答
853 浏览

opengl - 是否可以使用 LWJGL 以无头模式渲染到 FBO?

我需要为 OpenGL LWJGL使用 Java 包装器开发应用程序.该应用程序将以无头模式在远程服务器上运行。考虑到LWJGL(和其他API)中的GL上下文是通过Canvas等Java UI元素创建的事实,我试图了解是否以及如何可能。在我的情况下,我需要能够在不创建窗口的情况下初始化 GL 上下文,因为绘图目标将是像素缓冲区将从其渲染到纹理的 FBO。虽然已经在 LWJGL 中调用了 PBuffer(我猜是像素缓冲区)对象,但有一种可能的解决方案。它确实不需要通过窗口创建的 GL 上下文,因为它在内部创建它。我不想同时使用这种方法,因为它比较旧概念(并且更弱)比帧缓冲区对象,并且因为我使用的是 OGL 3.3 -> 。所以我真的不想与任何旧的管道遗留混合。

我基本上有两个问题:

1.我可以在不设置用于基于 FBO 的渲染的窗口的情况下创建上下文(无头模式)吗?

2.如果第一个问题的答案是否定的,那么我是否可以在远程服务器上运行这样一个为了上下文访问而仍在初始化窗口的应用程序?

更新:这个问题可以结束了。我通过使用 PBuffers 完成的第一次初始化测试它以设置上下文。然后 FBO 渲染按预期工作。

0 投票
1 回答
1082 浏览

c++ - OpenGL FBO - 白色像素显得透明

我正在使用 OpenGL 制作 2D 游戏。我最近尝试实现帧缓冲区对象,但在混合方面遇到了一些问题。

我正在创建一个 FBO(使用 GL_RGBA 作为格式)。当我渲染到 FBO 时,我首先将其清除为完全透明的黑色,然后禁用 GL_BLEND。然后我绘制我的纹理,然后我再次启用 GL_BLEND。当我绘制 FBO 纹理时,我分别使用 GL_SRC_ALPHA 和 GL_ONE_MINUS_SRC_ALPHA 作为源像素和目标像素,作为混合功能。我将其渲染为带纹理的四边形。这不能正常工作,因为白色像素看起来是透明的。我尝试过尝试不同的混合函数值,但我尝试过的所有方法都有问题。我不完全理解混合是如何工作的,所以我很难理解这一点。也许我在这里遗漏了一些明显的东西?

这是它现在的样子。当它被突出显示时,按钮周围应该会发光,但它周围的像素看起来是透明的:http: //i.snag.gy/RnV4s.jpg

您还可以在图像中看到两个文本框。顶部是正常绘制的,没有 FBO。纹理也可以在没有 FBO 的情况下正常渲染,所以我知道问题出在我的帧缓冲区代码中。

我已将我的“RenderTarget”类粘贴到 pastebin(我习惯将其称为渲染目标而不是 FBO):http ://pastebin.com/dBXgjrUX

这就是我使用它的方式:

有人能帮我吗?如果您需要有关我的问题的更多信息,请告诉我。

编辑:这是我在启动时设置的 OpenGL 属性:

0 投票
0 回答
496 浏览

opengl - 当片段输出为 vec3 时,glBlitFramebuffer() 呈现空屏幕

我正在使用 OpenGL 4.0,以前使用的是 3.3 我有一个带有 3 个输出的片段着色器 - 每个都是 vec3。我正在将这些输出写入一些 FBO,然后尝试使用 glBlitFramebuffer() 方法测试内容。我得到的是空的屏幕。现在,我发现将输出设置为 vec4 类型可以正常工作。我不明白为什么!我的 FBO 纹理设置为 RGB32F,因此它们应该能够接受来自片段的 vec3。这是我的 FBO 设置(这是 Java LWJGL 包装器,但在这里没关系):

0 投票
1 回答
1871 浏览

opengl - OpenGL:使用帧缓冲区对象的多通道渲染

在开发小型 2D 引擎时,我偶然发现了一个小设计问题,不幸的是,以我的知识水平,如果没有您的帮助,我无法解决。

让我解释一下:我正在为其开发 2D 引擎的游戏应该包含复杂的效果,这可能需要多次渲染。问题是,我不确定我是否正确理解了多通道渲染的概念。

在这个知识水平上,我会以这种方式实现它:

  1. 最初创建,设置(将其附加到纹理,...)并绑定帧缓冲区对象
  2. 现在渲染应该应用效果的东西到 FBO 的附加纹理
  3. 在第一遍使用着色器将该纹理渲染到相同的 FBO
  4. 取消绑定 FBO 并将附加的纹理渲染到标准 FBO,方法是使用最后一遍的着色器

现在的问题是这是否是解决我的问题的最有效方法,或者是否有更好的方法来解决这个问题。

0 投票
1 回答
1030 浏览

opengl - OpenGL FBO 多个纹理

我有一个附加两个纹理的 FBO。然后我想绑定 FBO,使用第一个纹理作为输入(绑定)到着色器并写入第二个纹理,两者都附加到 FBO。我尝试使用 glDrawBuffer 将 GL_COLOR_ATTACHMENT1 指定为绘图缓冲区,但没有成功。这可能吗?

编辑

这是我尝试这样做的方法:

但是 glReadPixels 的结果与我的预期不同。你能看出这里有什么问题吗?

0 投票
0 回答
1561 浏览

android - Mali-400 上 FBO 中的 OpenGL ES 2.0 伪影/抖动

在 gles 2.0 中渲染到帧缓冲区对象时,我在 Mali-400 gpu 上有一些奇怪的伪影。问题是即使我用相同的颜色填充整个屏幕,某些像素的颜色也与其他像素不同。但它在 Tegra2 gpu 上运行良好。Mali 默认情况下是否使用任何纹理压缩?我的 fbo 使用 GL_RGBA 作为内部格式。提前致谢!

----编辑---- 我想我解决了我自己的问题。问题只是在 Mali 上默认启用了 GL_DITHER,而 Tegra 上似乎没有。一个简单的 glDisable(GL_DITHER) 解决了这个问题。

0 投票
1 回答
4521 浏览

opengl - OpenGL 两遍着色器效果与 FBO 渲染到纹理仅在 Windows 上产生噪点

执行以下操作的正确方法是什么:

  1. 使用 FBO (fbo-a) 将场景渲染为纹理
  2. 然后使用纹理 (tex-a) 应用效果并使用相同的 fbo (fbo-a) 将其渲染到另一个纹理 (tex-b)
  3. 然后渲染第二个纹理,应用效果 (tex-b) 作为全屏四边形。

我的方法是这样,但这给了我一个在窗口上充满“噪声”的纹理+应用的效果(所有像素都是随机着色的红色、绿色、蓝白色、黑色)。

  • 我正在使用一个 FBO,两个纹理设置为 GL_COLOR_ATTACHENT0 (tex-a) 和 GL_COLOR_ATTACHMENT1 (tex-b)
  • 我绑定我的 fbo,确保它使用 glDrawBuffer(GL_COLOR_ATTACHMENT0) 渲染到 tex-a
  • 然后我将效果应用到带有 tex-a 边界的着色器中并设置为“sampler2D”。使用纹理单元 1,并切换到第二个颜色附件 (glDrawBuffer(GL_COLOR_ATTACHMENT1))。并渲染一个全屏四边形。现在一切都渲染成 tex-b
  • 然后我切换回默认的 FBO (0) 并使用带有全屏四边形的 tex-b 来渲染结果。

应用我的着色器时的结果示例 输入噪音

这是我正在使用的着色器。我不知道这可能是造成这种情况的原因,但也许噪音是由溢出引起的?

顶点着色器

片段着色器

我在 opengl.org 上阅读了这篇FBO 文章,他们在文章底部描述了一个反馈循环。描述对我来说并不完全清楚,我想知道我是否在做他们在那里描述的事情。

更新1:

链接到源代码

更新 2:

当我gl_FragColor.rgb = vec3(0.0, 0.0, 0.0);在开始采样循环(使用 NUM_SAMPLES)之前第一次设置时,它可以找到。不知道为什么。

0 投票
2 回答
1343 浏览

java - 设置 GL_RGBA16F 纹理格式时获取不完整的 FBO

我正在为 OpenGL 使用 Java 包装器(LWJGL)我得到

如果我将 FBO 纹理附件格式设置为 GL_RGBA16F,则状态。事实上,除了 GL_RGBA 之外的任何内容都会导致此错误。这是我的 FBO 纹理设置:

这是深度附件:

更新:

实际上,如果我像这样交换内部格式和格式的位置: GL_RGBA,GL_RGBA16F 比 FBO 完成就可以了。但是在我看到的示例中,使用的是 GL_RGBA16F 先行。

更新 1:到目前为止,LWJGL 论坛上没有任何人回答。也将此问题作为错误提交,但也没有得到开发团队的回答。如果其他人可以测试带有纹理附件的 FBO,它使用浮点格式并报告完整性实现的效果很好。目前我认为我的代码没有错误。另外我已经在 2 台机器上对其进行了测试并得到了相同的结果。