草庐IT

Android Opengl FBO 离屏

coder 2023-12-05 原文

我正在开发一个 Android 应用程序类型的手指绘画。我正在使用 OpenGL ES 2.0。基本上我有一个图像,其中每个触摸屏都应该对应一个要应用的圆形 alpha,它显示在下方的其他图像。我尝试了不同的技术,但速度相当慢,因为它的功能类似于使用有机 glTexSubImage2D 来减慢渲染阶段。我试图了解 FBO 的使用,因为它们允许离屏渲染。谁能更好地解释离屏渲染的含义以及可以加快我的方法的哪些优势?

我想离屏意味着你可以改变我创建的帧缓冲区,不影响 onDrawFrame?在另一个线程中?

最佳答案

除了能够使用 OpenGL 渲染到屏幕上的窗口之外 ES 2.0,您还可以渲染到不可见的屏幕外表面,称为 pbuffers(像素缓冲区的缩写)。 Pbuffers 可以充分利用任何硬件 OpenGL ES 2.0 可用的加速,就像窗口一样。 Pbuffer 最常用于生成纹理贴图。如果你想 要做的是渲染到纹理,我们建议使用帧缓冲区对象(涵盖 在第 12 章,“帧缓冲区对象”中)而不是 pbuffers,因为它们是 更高效。但是,pbuffer 在某些情况下仍然有用 不能使用帧缓冲区对象,例如在渲染离屏时 使用 OpenGL ES 进行表面处理,然后将其用作另一个 API 中的纹理,例如 作为 OpenVG。

[来源:OpenGL ES 2.0 编程指南]

希望对您有所帮助。仔细阅读 - “pbuffer 仍然可以用于使用 OpenGL ES 渲染到屏幕外表面”

关于Android Opengl FBO 离屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14381798/

有关Android Opengl FBO 离屏的更多相关文章

  1. Cesium 中的离屏渲染 - 2

    Cesium中的离屏渲染本文参考了众多文章,均列在了最后。先感谢各位的分享精神,如觉有冒犯,请与我联系。部分内容来自个人理解,欢迎指正交流。为了达到更加真实的渲染效果或其他计算需求,很多时候需要利用被渲染物体在其他状态下(比如通过另一相机渲染)的中间渲染结果,处理到最终显示的渲染场景中。这种中间渲染结果,就保存在帧缓冲区对象(FrameBufferObject,FBO)中,包含颜色缓冲区和深度缓存区。由于其结果并不直接被显示出来,所以这种技术也被称为离屏渲染(Off-ScreenRendering)。在深入了解Cesium的离屏渲染前,需要先了解WebGL的渲染过程。WebGL渲染过程大家都知

  2. windows - 如何在 Windows 版 QuickTime 中进行高分辨率离屏渲染? - 2

    我需要在Windows上将QuickTime电影渲染到可能不是电影自然大小的GWorld中。当电影按比例放大时,比如放大1.5倍,我会看到一些锯齿。然而,如果我在QuickTimePlayer(WindowsVista上的版本7.6.6)中打开同一部电影并拉伸(stretch)窗口,我会在拉伸(stretch)时看到锯齿,但当我松开鼠标时,图像会变得平滑。它必须使用一些更智能的缩放算法或抗锯齿。除了SetMovieGWorld和SetMovieBox之外,我还需要做什么才能以更大的尺寸呈现?这里有一些流畅的版本:(来源:frameforge3d.com)这是略带锯齿的对应物:(来源:f

  3. java - 在 Java 中创建离屏框架(或当所有应用程序窗口关闭时为 : how to avoid a blank menu on a Mac,)? - 2

    我正在制作一个Mac应用程序,我希望我的菜单栏看起来正确。任何Mac用户都知道菜单栏应该位于顶部屏幕菜单中。在属性列表文件中将apple.laf.useScreenMenuBar设置为true可以摆脱框架内的菜单栏,并将当前聚焦窗口的菜单栏移动到屏幕菜单.但是,当所有窗口都隐藏或没有窗口时,没有菜单栏可以移动到顶部,你只会得到一个空白菜单。我听说解决这个问题的方法是创建一个屏幕外窗口,在没有其他窗口时聚焦。它的唯一目的是它的菜单,以便它可以在其他菜单消失时填写。但是,我遇到了很多问题。我似乎无法将窗口移出屏幕,因为Mac不允许您将坐标设置为超过屏幕大小的值;它只是将其切断并将其定位在边

  4. c++ - XRender 创建离屏图片 - 2

    我正在尝试创建一个合成窗口管理器。到目前为止它可以工作,但是当一个窗口覆盖另一个窗口时,它会像疯了似的闪烁。我发现是因为我在创建一个Picture,然后给它画画,导致它画到屏幕上。我想要的行为是有一个屏幕外的Picture我可以绘制,然后使用XComposite将其绘制到屏幕上的窗口。有什么方法可以让屏幕外的Picture与根窗口大小相同?到目前为止(这段代码在无限循环中运行):Windowroot,parent,*children;uintchildren_count;XQueryTree(disp,DefaultRootWindow(disp),&root,&parent,&chi

  5. c++ - 使用 Qt5 进行离屏渲染(openGL) - 2

    利用openGL做一些图像处理,第一个实验是将彩色图像转换为灰色,一切都很好,除了我不想显示小部件。如果我不调用“show()”,QGLWidget将不会开始渲染纹理我可以在不显示小部件的情况下渲染纹理吗?QGLWidget是一个合适的工具吗?部分代码#include#include"toGray.hpp"toGray::toGray(std::stringconst&vertex_file,std::stringconst&fragment_file,QWidget*parent):basicGLWidget(vertex_file,fragment_file,parent)//re

  6. c++ - 离屏绘图GDI+ - 2

    我有一个问题-我需要绘制两个png文件,一个放在另一个上。当我以通常的方式进行操作时,会出现“闪烁”效果(第一张图像在短时间内overdraw第二张图像)。我使用GDI+库,我的WM_PAINT处理看起来像这样:caseWM_PAINT:{PAINTSTRUCTps;HDChdc=BeginPaint(hwnd,&ps);displayImage(firstImage,hwnd);displayImage(secondImage,hwnd);EndPaint(hwnd,&ps);break;}显示图像函数:voiddisplayImage(HBITMAPmBmp,HWNDmHwnd){

  7. c++ - 在 Windows 上创建并行离屏 OpenGL 上下文 - 2

    我正在尝试设置并行多GPU离屏渲染上下文。我使用“OpenGLInsights”一书第27章“NVIDIAQuadro上的多GPU渲染”。我还研究了wglCreateAffinityDCNVdocs但仍然无法确定。我的机器有2个NVidiaQuadro4000卡(无SLI)。在Windows764位上运行。我的工作流程是这样的:使用GLFW创建默认窗口上下文。映射GPU设备。销毁默认的GLFW上下文。为每个设备创建新的GL上下文(目前只尝试一个)为每个上下文设置boost线程并使其在该线程中处于当前状态。分别在每个线程上运行渲染程序。(不共享资源)一切都是在没有错误的情况下创建和运行的

  8. c++ - QGLWidget 和快速离屏渲染 - 2

    是否可以使用Qt在QGLWidget中完全脱离屏幕进行渲染,而无需将场景重新绘制到屏幕,从而避免缓冲区在监视器上完全翻转?我需要保存在帧缓冲区上生成的每一帧,但是,由于序列由4000帧组成并且屏幕上的时间间隔为15ms我花费了4000*15ms=60s但我需要比60s快得多(计算不是这里的瓶颈,只是更新问题)。在帧缓冲区上进行离屏渲染可以更快吗?我可以避免QGLWidget中的显示器刷新率吗?如何在没有缓慢的paintGL()调用的情况下完全在帧缓冲区上渲染? 最佳答案 现在我假设我们正在谈论Qt4。Isitpossibletore

  9. ios - 与 iOS9 (OGLES2.0) 相比,iOS10/11 下的离屏渲染性能大幅下降 - 2

    背景:我们正在开发的游戏在更新到iOS10或11的设备上性能急剧下降。两台运行10.3.3的iPhone6s只能达到20-30fps,而仍在运行8.0的iPhone5s则轻松达到60帧/秒。最近,我将iPod6从ios9更新到ios11,在运行完全相同的游戏版本时它也从60fps下降到20-30fps。注意:最初GPU分析器让我相信这是一个与着色器相关的问题,但这是一个错误的线索。感谢所有在此基础上发表评论的人。以下是我缩小问题范围的方法:正常运行时,我们的游戏每帧生成以下屏幕外纹理:10个256x256的玩家阴影(不涉及alpha混合)11个128x256到256x256动画“电视屏

  10. java - 我应该依靠 Android 来丢弃离屏绘制吗? - 2

    我有一个函数,它采用无缝位图并使用世界坐标在屏幕上向任何方向滚动它。有4个绘制(播放区域小于整个位图大小。所以最多,您将看到4个位图副本,只是绘制了不同的部分以保持无缝效果)。我想知道的是,我是否应该对矩形边界进行修改,以便它只将应该显示在屏幕上的部分显示出来?或者我应该让Android处理吗?如果我自己做,我应该如何处理?就数学而言,世界坐标和翻译真的让我感到困惑。:/这是代码。publicvoiddraw(Canvascanvas){oCoords.x=(int)fX;oCoords.y=(int)fY;oTopLeft=gridContainingPoint(oCoords);o

随机推荐