问题标签 [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.
performance - 最快的 OpenCV 2 OpenGL 上下文
我已经在网上搜索了几天,寻找最快的方法来捕获 OpenCV 网络摄像头并将其显示在 OpenGL 上下文中。到目前为止,这似乎工作正常,直到我需要缩放。
我听说也许采用 FBO 方法会更快。关于以最快的方式将 OpenCV 网络摄像头捕获到 OpenGL 上下文的任何想法。我将测试我看到的所有内容并发布结果。
opengl - openGL FBO 复制到纹理导致黑色/深色图像
在我的程序中,我有必要进行离屏渲染。为此,我使用 FBO。为了查看我绘制的图像是否适合测试目的,我将其从 FBO 复制到纹理,然后将纹理渲染到四边形。问题是当我从 FBO 复制到纹理并渲染它时,图像看起来很暗/变成黑色,但形状是正确的。我尝试在 FBO 中使用纹理作为附件并直接渲染它(而不将其复制到另一个纹理中)并且颜色是正确的。下面是纹理创建的代码
现在在渲染功能中
我正在使用 glut 进行设置。在取消 FBO 并将纹理作为 glReadPixels(...) 的替代方案后,我尝试了其他功能,例如 glGetTexImage2D,但没有成功。
c++ - 在 OpenGL 中使用 FBO 绘画应用程序
我正在使用 C++ 和 OpenGL 开发一个应用程序(使用 Cinder 库)。
它只是简单地获取鼠标输入,并在 draw 方法中将鼠标位置上的圆圈绘制到 FBO。之后,FBO 被绘制到屏幕上。FBO不是每次都清零,所以之前的圈子还在里面。问题是,当我在 FBO 上绘制新圆时,它不是在其上绘制,而是在 FBO 的先前内容下绘制。FBO 仅使用宽度和高度参数创建,没有其他设置。它也在 setup() 中被清除。
opengl - 为什么 Derelict3 中的帧缓冲区会冻结?
我正在使用 Derelict3,它使用特定的 openGL3 标准,如果调用 glEnable(GL_DEPTH_TEST),我会遇到屏幕冻结(不更新)的问题,如果不是,深度缓冲区不起作用。我注意到设置清除颜色和启用深度测试的调用如果在设置 SDL_GL 上下文和重新加载 Derelict3 之前进行,则会被忽略。我必须按以下顺序制作它们:
虽然这在写入标准双缓冲区时解决了深度剔除,但当我使用 renderBuffer 作为新的深度缓冲区实现帧缓冲区对象时,我得到了冻结...程序编译并运行时没有警告,但渲染图像到屏幕对齐的四边形保持固定。如果我注释掉 glEnable(GL_DEPTH_TEST); 相机自由移动,但渲染图像不考虑深度测试,只是按顺序绘制对象。
帧缓冲初始化代码为:
在 draw() 中调用 fbo 的代码是:
我很茫然,因为相同的代码在 c# 中正常工作。
c++ - GLSL 和 FBO - glActiveTexture 不起作用?
我正在尝试编写一个简单的着色器,它将添加附加到 FBO 的纹理。FBO初始化等没有问题(我已经测试过了)。问题是我相信 glActiveTexture(GL_TEXTURE0)。它似乎没有做任何事情-这是我的碎片着色器:(但通常会调用着色器-我已经通过放置 gl_FragColor = vec4(0,1,0,1); 进行了测试
在 C++ 代码中,我有:
结果:黑屏(显示第二个纹理并使用着色器时(不使用着色器很好)。我知道这个着色器不应该做太多,但他甚至不显示第一个纹理。我在中间测试的东西,但想法是在渲染到第一个纹理后,我会将第一个纹理添加到第二个纹理。为此,我想这个片段着色器可以工作:
整个想法是在循环中 tex2 = tex2 + tex1 (我是否有可能在此着色器中使用 tex2 渲染到附加到 tex2 的 GL_COLOR_ATTACHMENT1_EXT ?)我已经测试了两个 xShader.bind(); 在初始化统一变量之前和之后。两种情况 - 黑屏。
无论如何,我很确定纹理采样器的初始化存在一些问题(可能是因为它们附加到 FBO)?
我检查了其余的,它工作正常。
还有一个愚蠢的问题:
如何在整个屏幕上渲染纹理?
我已经尝试过类似的方法,但它不起作用(我必须翻译一下这个四边形)
也不适用于 glVertex2f ..
编辑:我已经检查过了,我可以初始化一些统一变量,只有纹理有问题。
我改变了顺序,但它仍然不起作用。:(顺便说一句,其他制服值运行良好。我也显示了我想传递给着色器的纹理。它工作正常。但由于未知原因纹理采样器未初始化在片段着色器中。也许这个纹理是 glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB16F / GL_FLOAT_R32_NV /, OPT.m_nWidth, OPT.m_nHeight, 0, GL_RED, GL_FLOAT, NULL); (它不是 GL_TEXTURE_2D)?
opengl - 通过OpenGL编程访问整个显存
如何通过OpenGL编程访问显卡的显存,具体是获取显存的所有内容?
我尝试了以下两种方法,但都失败了。附上它们,希望您能指出我的程序或我对显存结构的理解中的错误。提前致谢!
我的基本想法是继续在显存中分配一个未初始化的区域,直到探索完显存的所有内容。
(1) 在 main 函数中,我创建了一个带有双缓冲区的窗口(参见下面的代码)。
然后,在“myDisplay”函数中,首先我调用 glReadPixels() 函数从后帧缓冲区中读出一个给定大小的像素矩形,将这些像素信息保存在一个数组“PixelData”中,最后将这些像素信息显示在通过调用 glDrawPixels() 函数来显示屏幕。执行此程序后,只出现一个黑色窗口。黑色是默认颜色。所以这意味着窗口不包含任何内容。然后我尝试从后面的帧缓冲区中读取其他区域,所有这些区域都没有包含任何内容。
从上面得出的结论是,后帧缓冲区中不包含任何内容。然而,这是不合理的,因为前缓冲区应该只包含当前屏幕内容/窗口,因此在屏幕底部打开和最小化的其他窗口应该在后帧缓冲区中有它们的内容,但后帧缓冲区是空的。那么这些窗口(由我在底部打开和最小化)存储在哪里?
我猜为我的程序分配的帧缓冲区(前后)只占整个视频内存的一小部分。因此,那些最小化的窗口内容应该存储在视频内存的其他位置。
过了一段时间,看了一篇OpenGL frameBuffer object (FBO)的介绍,里面有一句话:默认情况下,OpenGL使用framebuffer作为渲染目的地,完全由窗口系统创建和管理。此默认帧缓冲区称为窗口系统提供的帧缓冲区。这似乎验证了我的上述猜测。
(2) 然后我开始做FBO,希望FBO可以帮助我探索整个显存内容。
在下面的 main 函数中,我创建了一个 FBO 和 7 个渲染缓冲区对象(RBO),然后通过颜色附加点将这 7 个 RBO 附加到这个 FBO。
下面是我的显示回调函数的主要部分。它的作用是使用空格键控制读取哪个renderBuffer对象,然后将其内容显示在屏幕上。
最后的结果令人失望。所有 renderBuffer 对象的内容都是空的。我不知道这是什么原因,因为我认为所有这些 RBO 都从未初始化过,应该包含一些剩余的内容。
opengl - OpenGL 片段着色器未写入 fbo 颜色缓冲区
我无法从片段着色器写入 FBO 中的颜色缓冲区。这个想法是绘制到这个纹理,然后把这个纹理绘制成一个四边形。问题是,着色器在绘制到默认窗口缓冲区时起作用,因为如果我删除 FBO,则会显示场景。并且四边形的纹理也有效,我用导入的纹理尝试了它,它显示了。我得到的只是黑屏。可能出了什么问题?:(
创建 FBO 的代码:
渲染代码:
四边形代码:
最后,片段着色器,我只是将其设置为将所有内容绘制为纯色:
编辑:如果有任何帮助,整个事情都在 Qt GLWidget 中。
java - 使用 Android 上的 OpenGL ES 2.0,在帧缓冲区上渲染时是否可以保留多重采样?
我正在使用 OpenGL es 2.0 和 java 在 Android ICS 上开发 2d 游戏。我正在尝试使用照明系统,为此我在一个帧缓冲区上渲染所有灯光,在另一个上渲染场景,目的是使用片段着色器将它们混合以重新创建 Photoshop 叠加效果。
不过我遇到了一个问题,似乎 fbo 不适用于多重采样,所以如果我在 fbo 上绘图,我会得到锯齿状的线条。我注意到有一个针对使用 ios 的人的解决方案,但我在 Android 上没有找到任何东西。有没有比我解决这个问题的方式更好的方法来实现我想要做的事情?原谅,我对opengl有点陌生。
非常感谢你。
opengl - OpenGL渲染到多个纹理,结果是白色的
我已经开始切换我的渲染代码以支持着色器,并且在渲染到后台缓冲区时一切正常。所以现在我正在努力渲染到 FBO,但我得到的只是颜色和法线的白色纹理。
这是我的 FBO 创建代码:
我用来设置当前渲染目标的代码:
最后,我的实际绘图代码:
c++ - Android OpenGL ES 2.0:GL_FLOAT 纹理可以作为颜色附件分配给 FBO 吗?
我想通过 glReadPixels使用GL_FLOAT 纹理获取值。
我的 Android 设备支持OES_texture_float。但是,附加GL_FLOAT纹理成为错误。
在 Android 的 OpenGL ES 2.0 中,将GL_FLOAT纹理附加到 FBO 是不可能的?还是依赖硬件?
我的部分代码是:
在里面:
FBO 附加:
如果有人有一些见识,我会很感激。