问题标签 [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.
c++ - FBO 在 OSX 中无法正常工作
我有一段时间遇到这个问题,但我找不到解决方案。
这里我初始化Framebuffer:
我以这种方式在渲染函数中使用它:
这里应该发生的是“scene1”在附加的帧缓冲区纹理中呈现。并且“scene2”应该出现在屏幕上。“scene2”确实出现在屏幕上,但是当我使用渲染的帧缓冲区纹理时,会出现以下内容:
谁能告诉我怎么了?
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 并崩溃。有任何想法吗...?
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
opengl - 如何处理 glsl 中的深度
我对openGL中的FBO和深度有疑问。我将投影、视图和模型矩阵传递给写入 g 缓冲区的着色器。当我取消绑定 FBO 并写入 gl_FragColor 时,场景会按应有的方式显示。但是当我写入 gl_FragData[0] 然后将随附的纹理写入屏幕对齐的四边形时,对象是根据处理的相反顺序而不是深度绘制的......我可以看到首先处理的对象到之后处理的对象。有没有人遇到过同样的问题,他们知道解决方法吗?或者有人可以提供从顶点着色器读取深度值的语法,查询当前深度,然后根据比较写入深度缓冲区,即在片段着色器中手动处理操作。
opengl - 如何使用OpenGL渲染到帧缓冲区而不显示在屏幕上?
我知道可以离线渲染而不在屏幕上显示。
怎么办,也许
创建一个不可见的窗口然后绘制。
渲染时可以使用特定的 fbo 吗?
c++ - OpenGL 渲染到纹理 (FBO) 不起作用
我正在尝试使用 FBO 渲染纹理然后显示纹理,但我得到的只是一个黑色矩形。我的代码是:
初始化:
渲染到 FBO:
使用纹理(问题可能出在上面的代码中,因为如果我只是使用一些静态纹理,下面的代码可以工作):
你能帮我找出问题吗?
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 作为反照率(是的,非常浪费,但我稍后会优化)。
opengl - Opengl,DrawArrays 没有绑定 VBO
我正在使用自定义顶点着色器渲染点数组。着色器看起来像:
所以我唯一需要的是顶点ID。但是我需要很多顶点,我不想为它们存储假的 VBO(它需要大约 16mb 的内存)。
我试图在不绑定任何 VBO 的情况下运行我的代码。有用。所以我的渲染看起来像:
但是我可以确定没有绑定 VBO 的渲染是安全的吗?
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
是不是因为 这里应该使用哪一个?
objective-c - 两个 FBO 之间的乒乓渲染在第一帧后失败。
我正在尝试创建两个 FBO 并实现乒乓渲染。但是,我只能让第一帧正常工作。我正在尝试模拟人生游戏,在第一帧之后,我只得到一个黑屏。你能帮我检查一下吗?我在这个问题上花了几个小时。
编辑
可能我没有描述清楚。其实我想用textureB作为纹理渲染到textureA,然后用textureA渲染到屏幕,反之亦然。
编辑 我可以看到第一帧,这是纹理B。在它通过片段着色器后,它变成黑色。起初,我怀疑片段着色器,我将其更改为仅将黑色恢复为白色,将白色恢复为黑色。它仍然变得全黑。
设置 fbo 和纹理
渲染循环
片段着色器