问题标签 [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 回答
516 浏览

c++ - FBO 在 OSX 中无法正常工作

我有一段时间遇到这个问题,但我找不到解决方案。

这里我初始化Framebuffer:

我以这种方式在渲染函数中使用它:

这里应该发生的是“scene1”在附加的帧缓冲区纹理中呈现。并且“scene2”应该出现在屏幕上。“scene2”确实出现在屏幕上,但是当我使用渲染的帧缓冲区纹理时,会出现以下内容: 看起来像一些 GPU 内存垃圾! :)

谁能告诉我怎么了?

0 投票
2 回答
14432 浏览

c++ - glGenFramebuffers 还是 glGenFramebuffersEXT?

我很困惑。要在 Windows 上使用 OpenGL 1.x 中的帧缓冲区对象扩展 (FBO),我应该使用哪些?:

据我从使用不同硬件的用户的报告中可以看出,一些驱动程序不支持任何一种、两者之一或两者的所有组合。

哪个是正确的使用?某些驱动程序真的支持其中一个而不支持另一个吗?如果找不到,尝试从一个退回到另一个是否正确?


编辑: 我仍然对 ATI Radeon 卡和围绕此的代码有严重的问题。我们刚刚使用此代码 (www.scirra.com) 推出了一个商业编辑器。似乎无论我使用什么代码组合来使用 FBO,一些不同的用户组合都报告说他们根本看不到任何东西(即没有渲染)。

这是我检测是否使用 ARB 函数(无后缀)或 EXT 后缀函数的代码。这在启动时运行:

然后稍后在启动期间它会创建一个 FBO 以预期渲染到纹理:

我经历了这段代码的许多变体,我根本无法让它适用于所有人。总有一群用户报告根本没有渲染。ATI Radeon HD 卡似乎特别成问题。我不确定是否涉及驱动程序错误,但我想我上面的代码更有可能做出了不正确的假设。

500 代表赏金,​​我将向任何知道出了什么问题的人发送免费的营业执照!(价值 99 英镑)


编辑2:更多细节。以下是已知会失败的卡列表:

ATI 移动 Radeon HD 5650

ATI Radeon X1600 Pro

ATI 移动 Radeon HD 4200

实际上没有渲染到纹理。看来glGenFramebuffers仅调用就完全停止了在这些卡上的渲染。我可以将 FBO 的创建推迟到第一次实际完成渲染到纹理时,但随后大概它会再次停止渲染。

我可以使用 GLEW,但我的代码没有做什么?我查看了源代码,它似乎使用了类似的wglGetProcAddress. 在我的情况下,方法正在返回,否则glGenFramebuffers将为 NULL 并崩溃。有任何想法吗...?

0 投票
1 回答
490 浏览

lwjgl - 尝试将场景渲染到 FBO 返回白色

所以这就是我想要做的。我正在尝试使用 LWJGL 制作一个 2d 游戏,该游戏具有使用图像作为图块的动态生成的地形。它工作得很好,但是当我尝试进行缩放时,图块的边缘会出现深色阴影,并且我会在图块之间得到一个额外的像素。这是缩放前后的屏幕截图:

缩放前后截图: http: //postimage.org/image/rhuc9744/

我看了又看,从我在互联网上收集到的信息来看,我认为主要是缩放导致像素精度问题,在混合后会变得更糟。我看到一个博客说我可以在图块之间重叠一些像素,但这似乎太复杂了。我已经尝试了所有的混合选项,但都没有奏效。所以我想,我应该把所有的图块渲染到一个缓冲区,一个 FBO,然后将它应用为一个大纹理,所以即使我放大,我也不会看到暗边,因为它只是一张巨大的图片。所以我已经阅读了很多关于 FBO 的教程,但大多数(如果不是全部)都是针对 3D 的,而我实际上已经开始工作了。问题是当我将它应用于二维正交时。代码中断,我得到的只是一个白框。我已经被这个问题困扰了好几天了,我似乎无法使用谷歌找到答案。这里'

该代码在 resource/lamp.png 中加载图像,该图像可以是任何 .png 文件,并尝试将其渲染到 FBO,然后将其作为 2d 四边形中的纹理应用。出于某种原因,当我尝试将 FBO 绑定为纹理时,我只会得到一个白色的空白四边形。我不确定我是否没有正确渲染到 FBO,或者我没有正确绑定它。您可以检查方法 draw() 以便您知道我在说什么。就像我说的那样,我已经被这个问题困住了一天,所以非常感谢任何帮助。

资源/lamp.png:http://s3.postimage.org/rhpdn5ms/lamp.png?noCache=1315464566

0 投票
1 回答
1028 浏览

opengl - 如何处理 glsl 中的深度

我对openGL中的FBO和深度有疑问。我将投影、视图和模型矩阵传递给写入 g 缓冲区的着色器。当我取消绑定 FBO 并写入 gl_FragColor 时,场景会按应有的方式显示。但是当我写入 gl_FragData[0] 然后将随附的纹理写入屏幕对齐的四边形时,对象是根据处理的相反顺序而不是深度绘制的......我可以看到首先处理的对象到之后处理的对象。有没有人遇到过同样的问题,他们知道解决方法吗?或者有人可以提供从顶点着色器读取深度值的语法,查询当前深度,然​​后根据比较写入深度缓冲区,即在片段着色器中手动处理操作。

0 投票
2 回答
3179 浏览

opengl - 如何使用OpenGL渲染到帧缓冲区而不显示在屏幕上?

我知道可以离线渲染而不在屏幕上显示。

怎么办,也许

创建一个不可见的窗口然后绘制。

渲染时可以使用特定的 fbo 吗?

0 投票
2 回答
3430 浏览

c++ - OpenGL 渲染到纹理 (FBO) 不起作用

我正在尝试使用 FBO 渲染纹理然后显示纹理,但我得到的只是一个黑色矩形。我的代码是:

初始化:

渲染到 FBO:

使用纹理(问题可能出在上面的代码中,因为如果我只是使用一些静态纹理,下面的代码可以工作):

你能帮我找出问题吗?

0 投票
1 回答
579 浏览

opengl - 纹理中未初始化/未保留的 GPU 内存,OpenGL

(这实际上是来自 gamedev 的交叉帖子但我认为你们也可能会有所帮助!)

编辑:我详细说明了叠加的含义。经过一番睡眠后,我发现我对 glGenerateMipmaps 的调用毫无用处,因为我使用 null 作为指向 glTexImage2D 的指针。

在 OpenGL 3.3、Ubuntu 11.04、nVidia 驱动程序 280.13、GeForce GT240 上。

我正在制作一个延迟着色器,并希望在屏幕下部的小叠加层中显示我的 G 缓冲区。在这种情况下,叠加意味着没有 z 测试,纹理屏幕对齐四边形,最后渲染。

在全窗口渲染(一次一个)G 缓冲区(FBO 纹理)时,它们会正确显示。当渲染到这些叠加层时,我得到了垃圾(看似随机的 GPU 内存作为静态干扰,但在运行之间有所不同,有时是清晰的画面)。

如果我创建一个不同的纹理,比如从文件中,它会在叠加层中显示没有垃圾,所以代码应该没问题。谁能解释为什么?我已经为 G 缓冲区中的纹理使用了 glGenerateMipmap。

我知道这可能没有足够的信息,但从这个开始。请询问任何相关信息。问题是否与 FBO 渲染和 mipmapping 有关?当然我的代码想要显示未保留/未初始化的内存,但我不知道为什么。 下面的四个纹理中有垃圾数据。


全窗口绿色图片是我当前在光照阶段的结果,分辨率为 (256*256),以节省 GPU 内存,因为 G-buffer 很厚。此外,在材质着色器(生成 G 缓冲区)中,我使用“out vec4 fragment[3]”,并且纹理具有不同的内部格式。这会是个问题吗?

PS。灯光在 (-30,0,0) 和 (30,0,0) 处,但似乎“更近”。这可能是一个精度问题吗?我使用 GL_RGBA16F 作为法线,使用 GL_RGBA32F 作为位置,使用 GL_DEPTH_COMPONENT24 作为深度,使用 GL_RGBA 作为反照率(是的,非常浪费,但我稍后会优化)。

0 投票
1 回答
3165 浏览

opengl - Opengl,DrawArrays 没有绑定 VBO

我正在使用自定义顶点着色器渲染点数组。着色器看起来像:

所以我唯一需要的是顶点ID。但是我需要很多顶点,我不想为它们存储假的 VBO(它需要大约 16mb 的内存)。

我试图在不绑定任何 VBO 的情况下运行我的代码。有用。所以我的渲染看起来像:

但是我可以确定没有绑定 VBO 的渲染是安全的吗?

0 投票
1 回答
2219 浏览

ios - iOS5 是否同时支持 GL_STENCIL_INDEX 和 GL_STENCIL_INDEX8?

使用以下代码:

有了GL_STENCIL_INDEX,我得到了GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT错误。有了GL_STENCIL_INDEX8,我得到了GL_FRAMEBUFFER_UNSUPPORTED错误。两者都是由最后一个 glFramebufferRenderbuffer() 函数引起的,该函数应该将模板缓冲区绑定到 FBO。

此外,当我检查GL_RENDERBUFFER_STENCIL_SIZE值时,我得到了正确的值 (8) GL_STENCIL_INDEX8,但我得到了 0 GL_STENCIL_INDEX

有了这个,我就无法获得带有模板缓冲区的功能完整的 FBO。GL_STENCIL_INDEX是不是因为 这里应该使用哪一个?

0 投票
2 回答
1149 浏览

objective-c - 两个 FBO 之间的乒乓渲染在第一帧后失败。

我正在尝试创建两个 FBO 并实现乒乓渲染。但是,我只能让第一帧正常工作。我正在尝试模拟人生游戏,在第一帧之后,我只得到一个黑屏。你能帮我检查一下吗?我在这个问题上花了几个小时。

编辑

可能我没有描述清楚。其实我想用textureB作为纹理渲染到textureA,然后用textureA渲染到屏幕,反之亦然。

编辑 我可以看到第一帧,这是纹理B。在它通过片段着色器后,它变成黑色。起初,我怀疑片段着色器,我将其更改为仅将黑色恢复为白色,将白色恢复为黑色。它仍然变得全黑。

设置 fbo 和纹理

渲染循环

片段着色器