OpenGLFrameBufferObject(FBO)介绍轻口味

TheOpenGLextension,GL_ARB_framebuffer_objectprovidesaninterfacetocreateadditionalnon-displayableframebufferobjects(FBO).Thisframebufferiscalledapplication-createdframebufferinordertodistinguishfromthedefaultwindow-system-providedframebuffer.Byusingframebufferobject(FBO),anOpenGLapplicationcanredirecttherenderingoutputtotheapplication-createdframebufferobject(FBO)otherthanthetraditionalwindow-system-providedframebuffer.And,itisfullycontrolledbyOpenGL.在OpenGL扩展中,GL_EXT_framebuffer_object提供了一种创建额外的不能显示的帧缓存对象的接口。为了和默认的“window系统生成”的帧缓存区别,这种帧缓冲成为应用程序帧缓存(application-createdframebuffer)。通过使用帧缓存对象(FBO),OpenGL可以将显示输出到引用程序帧缓存对象,而不是传统的“window系统生成”帧缓存。而且,它完全受OpenGL控制。

Similartowindow-system-providedframebuffer,aFBOcontainsacollectionofrenderingdestinations;color,depthandstencilbuffer.(NotethataccumulationbufferisnotdefinedinFBO.)TheselogicalbuffersinaFBOarecalledframebuffer-attachableimages,whichare2Darraysofpixelsthatcanbeattachedtoaframebufferobject.相似于window系统提供的帧缓存,一个FBO也包含一些存储颜色、深度和模板数据的区域。(注意:没有累积缓存)我们把FBO中这些逻辑缓存称之为“帧缓存关联图像”,它们是一些能够和一个帧缓存对象关联起来的二维数组像素。

Therearetwotypesofframebuffer-attachableimages;textureimagesandrenderbufferimages.Ifanimageofatextureobjectisattachedtoaframebuffer,OpenGLperforms"rendertotexture".Andifanimageofarenderbufferobjectisattachedtoaframebuffer,thenOpenGLperforms"offscreenrendering".有两种类型的“帧缓存关联图像”:纹理图像(textureimages)和渲染缓存图像(renderbufferimages)。如果纹理对象的图像数据关联到帧缓存,OpenGL执行的是“渲染到纹理”(rendertotexture)操作。如果渲染缓存的图像数据关联到帧缓存,OpenGL执行的是离线渲染(offscreenrendering)。

Bytheway,renderbufferobjectisanewtypeofstorageobjectdefinedinGL_ARB_framebuffer_objectextension.Itisusedasarenderingdestinationforasingle2Dimageduringrenderingprocess.这里要提到的是,渲染缓存对象是在GL_EXT_framebuffer_object扩展中定义的一种新的存储类型。在渲染过程中它被用作存储单幅二维图像。

Thefollowingdiagramshowstheconnectivityamongtheframebufferobject,textureobjectandrenderbufferobject.Multipletextureobjectsorrenderbufferobjectscanbeattachedtoaframebufferobjectthroughtheattachmentpoints.下面这幅图显示了帧缓存对象、纹理对象和渲染缓存对象之间的联系。多多个纹理对象或者渲染缓存对象能够通过关联点关联到一个帧缓存对象上。

Framebufferobject(FBO)providesanefficientswitchingmechanism;detachthepreviousframebuffer-attachableimagefromaFBO,andattachanewframebuffer-attachableimagetotheFBO.Switchingframebuffer-attachableimagesismuchfasterthanswitchingbetweenFBOs.FBOprovidesglFramebufferTexture2D()toswitch2Dtextureobjects,andglFramebufferRenderbuffer()toswitchrenderbufferobjects.FBO提供了一种高效的切换机制;将前面的帧缓存关联图像从FBO分离,然后把新的帧缓存关联图像关联到FBO。在帧缓存关联图像之间切换比在FBO之间切换要快得多。FBO提供了glFramebufferTexture2DEXT()来切换2D纹理对象和glFramebufferRenderbufferEXT()来切换渲染缓存对象。

voidglGenFramebuffers(GLsizein,GLuint*ids)voidglDeleteFramebuffers(GLsizein,constGLuint*ids)glGenFramebuffers()requires2parameters;thefirstoneisthenumberofframebufferstocreate,andthesecondparameteristhepointertoaGLuintvariableoranarraytostoreasingleIDormultipleIDs.ItreturnstheIDsofunusedframebufferobjects.ID0meansthedefaultframebuffer,whichisthewindow-system-providedframebuffer.glGenFramebuffersEXT()需要两个参数:第一个是要创建的帧缓存的数目,第二个是指向存储一个或者多个ID的变量或数组的指针。它返回未使用的FBO的ID。ID为0表示默认帧缓存,即window系统提供的帧缓存。

And,FBOmaybedeletedbycallingglDeleteFramebuffers()whenitisnotusedanymore.当FBO不再被使用时,FBO可以通过调用glDeleteFrameBuffersEXT()来删除。

glBindFramebuffer()OnceaFBOiscreated,ithastobeboundbeforeusingit.一旦一个FBO被创建,在使用它之前必须绑定。

voidglBindFramebuffer(GLenumtarget,GLuintid)Thefirstparameter,target,shouldbeGL_FRAMEBUFFER,andthesecondparameteristheIDofaframebufferobject.OnceaFBOisbound,allOpenGLoperationsaffectontothecurrentboundframebufferobject.TheobjectID0isreservedforthedefaultwindow-systemprovidedframebuffer.Therefore,inordertounbindthecurrentframebuffer(FBO),useID0inglBindFramebuffer().第一个参数target应该是GL_FRAMEBUFFER_EXT,第二个参数是FBO的ID号。一旦FBO被绑定,之后的所有的OpenGL操作都会对当前所绑定的FBO造成影响。ID号为0表示缺省帧缓存,即默认的window提供的帧缓存。因此,在glBindFramebufferEXT()中将ID号设置为0可以解绑定当前FBO。

Inaddition,renderbufferobjectisnewlyintroducedforoffscreenrendering.Itallowstorenderascenedirectlytoarenderbufferobject,insteadofrenderingtoatextureobject.Renderbufferissimplyadatastorageobjectcontainingasingleimageofarenderableinternalformat.ItisusedtostoreOpenGLlogicalbuffersthatdonothavecorrespondingtextureformat,suchasstencilordepthbuffer.

voidglGenRenderbuffers(GLsizein,GLuint*ids)voidglDeleteRenderbuffers(GLsizein,constGluint*ids)Oncearenderbufferiscreated,itreturnsnon-zeropositiveinteger.ID0isreservedforOpenGL.一旦一个渲染缓存被创建,它返回一个非零的正整数。ID为0是OpenGL保留值。

voidglBindRenderbuffer(GLenumtarget,GLuintid)SameasotherOpenGLobjects,youhavetobindthecurrentrenderbufferobjectbeforereferencingit.ThetargetparametershouldbeGL_RENDERBUFFERforrenderbufferobject.和OpenGL中其他对象一样,在引用渲染缓存之前必须绑定当前渲染缓存对象。他target参数应该是GL_RENDERBUFFER_EXT。

voidglRenderbufferStorage(GLenumtarget,GLenuminternalFormat,GLsizeiwidth,GLsizeiheight)Whenarenderbufferobjectiscreated,itdoesnothaveanydatastorage,sowehavetoallocateamemoryspaceforit.ThiscanbedonebyusingglRenderbufferStorage().ThefirstparametermustbeGL_RENDERBUFFER.Thesecondparameterwouldbecolor-renderable(GL_RGB,GL_RGBA,etc.),depth-renderable(GL_DEPTH_COMPONENT),orstencil-renderableformats(GL_STENCIL_INDEX).Thewidthandheightarethedimensionoftherenderbufferimageinpixels.当一个渲染缓存被创建,它没有任何数据存储区域,所以我们还要为他分配空间。这可以通过用glRenderbufferStorageEXT()实现。第一个参数必须是GL_RENDERBUFFER_EXT。第二个参数可以是用于颜色的(GL_RGB,GL_RGBA,etc.),用于深度的(GL_DEPTH_COMPONENT),或者是用于模板的格式(GL_STENCIL_INDEX)。Width和height是渲染缓存图像的像素维度。ThewidthandheightshouldbelessthanGL_MAX_RENDERBUFFER_SIZE,otherwise,itgeneratesGL_INVALID_VALUEerror.width和height必须比GL_MAX_RENDERBUFFER_SIZE_EXT小,否则将会产生GL_UNVALID_VALUE错误。

voidglGetRenderbufferParameteriv(GLenumtarget,GLenumparam,GLint*value)Youalsogetvariousparametersofthecurrentlyboundrenderbufferobject.targetshouldbeGL_RENDERBUFFER,andthesecondparameteristhenameofparameter.Thelastisthepointertoanintegervariabletostorethereturnedvalue.Theavailablenamesoftherenderbufferparametersare;我们也可以得到当前绑定的渲染缓存对象的一些参数。Target应该是GL_RENDERBUFFER_EXT,第二个参数是所要得到的参数名字。最后一个是指向存储返回值的整型量的指针。渲染缓存的变量名有如下:

GL_RENDERBUFFER_WIDTHGL_RENDERBUFFER_HEIGHTGL_RENDERBUFFER_INTERNAL_FORMATGL_RENDERBUFFER_RED_SIZEGL_RENDERBUFFER_GREEN_SIZEGL_RENDERBUFFER_BLUE_SIZEGL_RENDERBUFFER_ALPHA_SIZEGL_RENDERBUFFER_DEPTH_SIZEGL_RENDERBUFFER_STENCIL_SIZEAttachingimagestoFBOFBOitselfdoesnothaveanyimagestorage(buffer)init.Instead,wemustattachframebuffer-attachableimages(textureorrenderbufferobjects)totheFBO.ThismechanismallowsthatFBOquicklyswitch(detachandattach)theframebuffer-attachableimagesinaFBO.Itismuchfastertoswitchframebuffer-attachableimagesthantoswitchbetweenFBOs.And,itsavesunnecessarydatacopiesandmemoryconsumption.Forexample,atexturecanbeattachedtomultipleFBOs,anditsimagestoragecanbesharedbymultipleFBOs.FBO本身没有图像存储区。我们必须帧缓存关联图像(纹理或渲染对象)关联到FBO。这种机制允许FBO快速地切换(分离和关联)帧缓存关联图像。切换帧缓存关联图像比在FBO之间切换要快得多。而且,它节省了不必要的数据拷贝和内存消耗。比如,一个纹理可以被关联到多个FBO上,图像存储区可以被多个FBO共享。

voidglFramebufferRenderbuffer(GLenumtarget,GLenumattachmentPoint,GLenumrenderbufferTarget,GLuintrenderbufferId)ArenderbufferimagecanbeattachedbycallingglFramebufferRenderbuffer().ThefirstandsecondparametersaresameasglFramebufferTexture2D().ThethirdparametermustbeGL_RENDERBUFFER,andthelastparameteristheIDoftherenderbufferobject.通过调用glFramebufferRenderbufferEXT()可以关联渲染缓存图像。前两个参数和glFramebufferTexture2DEXT()一样。第三个参数只能是GL_RENDERBUFFER_EXT,最后一个参数是渲染缓存对象的ID号。IfrenderbufferIdparameterissetto0,therenderbufferimagewillbedetachedfromtheattachmentpointintheFBO.IfarenderbufferobjectisdeletedwhileitisstillattachedinaFBO,thenitwillbeautomaticallydetachedfromtheboundFBO.However,itwillnotbedetachedfromanyothernon-boundFBOs.如果参数renderbufferId被设置为0,渲染缓存图像将会从FBO的关联点分离。如果渲染缓存图像在依然关联在FBO上时被删除,那么纹理对象将会自动从当前绑定的FBO上分离,而不会从其他非绑定的FBO上分离。

WhenyourendertoaFBO,anti-aliasingisnotautomaticallyenabledevenifyouproperlycreateaOpenGLrenderingcontextwiththemultisamplingattribute(SAMPLEBUFFERS_ARB)forwindow-system-providedframebuffer.

Inordertoactivatemultisampleanti-aliasingmodeforrenderingtoaFBO,youneedtoprepareandattachmultisampleimagestoaFBO'scolorand/ordepthattachementpoints.

FBOextensionprovidesglRenderbufferStorageMultisample()tocreatearenderbufferimageformultisampleanti-aliasingrenderingmode.

voidglRenderbufferStorageMultisample(GLenumtarget,GLsizeisamples,GLenuminternalFormat,GLsizeiwidth,GLsizeiheight)Itaddsnewparameter,samplesontopofglRenderbufferStorage(),whichisthenumberofmultisamplesforanti-aliasedrenderingmode.Ifitis0,thennoMSAAmodeisenabledandglRenderbufferStorage()iscalledinstead.YoucanquerythemaximumnumberofsampleswithGL_MAX_SAMPLEStokeninglGetIntegerv().

ThefollowingcodeistocreateaFBOwithmultisamplecolorbufferanddepthbufferimages.NotethatifmultipleimagesareattachedtoaFBO,thenallimagesmusthavethesamenumberofmultisamples.Otherwise,theFBOstatusisincomplete.

voidglBlitFramebuffer(GLintsrcX0,GLintsrcY0,GLintsrcX1,GLintsrcY1,//sourcerectangleGLintdstX0,GLintdstY0,GLintdstX1,GLintdstY1,//destinationrectGLbitfieldmask,GLenumfilter)glBlitFramebuffer()copiesarectangleofimagesfromthesource(GL_READ_BUFFER)tothedestinationframebuffer(GL_DRAW_BUFFER).The"mask"parameteristospecifywhichbuffersarecopied,GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BITand/orGL_STENCIL_BUFFER_BIT.Thelastparameter,"filter"istospecifytheinterpolationmodeifthesourceanddestinationrectanglesarenotsame.ItiseitherGL_NEARESTorGL_LINEAR.

ThefollowingcodeistotransferamultisampledimagefromaFBOtoanothernon-multisampledFBO.NoticeitrequiresanadditionalFBOtogettheresultofMSAArendering.PleaseseefboMsaa.zipfordetailstoperformrender-to-texturewithMSAA.

//copyrenderedimagefromMSAA(multi-sample)tonormal(single-sample)//NOTE:Themultisamplesatapixelinreadbufferwillbeconverted//toasinglesampleatthetargetpixelindrawbuffer.glBindFramebuffer(GL_READ_FRAMEBUFFER,fboMsaaId);//srcFBO(multi-sample)glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fboId);//dstFBO(single-sample)glBlitFramebuffer(0,0,width,height,//srcrect0,0,width,height,//dstrectGL_COLOR_BUFFER_BIT,//buffermaskGL_LINEAR);//scalefilterCheckingFBOStatusOnceattachableimages(texturesandrenderbuffers)areattachedtoaFBOandbeforeperformingFBOoperation,youmustvalidateiftheFBOstatusiscompleteorincompletebyusingglCheckFramebufferStatus().IftheFBOisnotcomplete,thenanydrawingandreadingcommand(glBegin(),glCopyTexImage2D(),etc)willbefailed.

一旦关联图像(纹理和渲染缓存)被关联到FBO上,在执行FBO的操作之前,你必须检查FBO的状态,这可以通过调用glCheckFramebufferStatusEXT()实现。如果这个FBObuilding完整,那么任何绘制和读取命令(glBegin(),glCopyTexImage2D(),etc)都会失败。

TherulesofFBOcompletenessare:

FBO完整性准则有:

Notethateventhoughalloftheaboveconditionsaresatisfied,yourOpenGLdrivermaynotsupportsomecombinationsofinternalformatsandparameters.IfaparticularimplementationisnotsupportedbyOpenGLdriver,thenglCheckFramebufferStatus()returnsGL_FRAMEBUFFER_UNSUPPORTED.注意:即使以上所有条件都满足,你的OpenGL驱动也可能不支持某些格式和参数的组合。如果一种特别的实现不被OpenGL驱动支持,那么glCheckFramebufferStatusEXT()返回GL_FRAMEBUFFER_UNSUPPORTED_EXT。

ThesamplecodeprovidessomeutilityfunctionstoreporttheinformationofthecurrentFBO;printFramebufferInfo()andcheckFramebufferStatus().

Thisextensionprovidesanewcommand,DiscardFramebufferEXT,whichcausesthecontentsofthenamedframebufferattachableimagestobecomeundefined.Thecontentsofthespecifiedbuffersareundefineduntilasubsequentoperationmodifiesthecontent,andonlythemodifiedregionisguaranteedtoholdvalidcontent.Effectiveusageofthiscommandmayprovideanimplementationwithnewoptimizationopportunities.SomeOpenGLESimplementationscacheframebufferimagesinasmallpooloffastmemory.Beforerendering,theseimplementationsmustloadtheexistingcontentsofoneormoreofthelogicalbuffers(color,depth,stencil,etc.)intothismemory.Afterrendering,someorallofthesebuffersarelikewisestoredbacktoexternalmemorysotheircontentscanbeusedagaininthefuture.Inmanyapplications,someorallofthelogicalbuffersareclearedatthestartofrendering.Ifso,theefforttoloadorstorethosebuffersiswasted.

Evenwithoutthisextension,ifaframeofrenderingbeginswithafull-screenClear,anOpenGLESimplementationmayoptimizeawaytheloadingofframebuffercontentspriortorenderingtheframe.Withthisextension,anapplicationcanuseDiscardFramebufferEXTtosignalthatframebuffercontentswillnolongerbeneeded.InthiscaseanOpenGLESimplementationmayalsooptimizeawaythestoringbackofframebuffercontentsafterrenderingtheframe.

1)ShouldDiscardFramebufferEXT'sargumentbealistofCOLOR_ATTACHMENTxenums,orshoulditusethesamebitfieldfromClearandBlitFramebuffer

RESOLVED:We'lluseasizedlistofframebufferattachments.Thiswillgiveussomefuture-proofingforwhenMRTsandmultisampledFBOsaresupported.

2)Whathappensiftheappdiscardsonlyoneofthedepthandstencilattachments,butthosearebackedbythesamepacked_depth_stencilbuffera)Generateanerrorb)Bothimagesbecomeundefinedc)Neitherimagebecomesundefinedd)OnlyoneoftheimagesbecomesundefinedRESOLVED:(b)whichsortoffallsoutofIssue4.

3)HowshouldDiscardFramebufferEXTinteractwiththedefaultframebuffera)Generateanerrorb)Ignorethehintsilentlyc)ThecontentsofthespecifiedattachmentsbecomeundefinedRESOLVED:(c),withappropriatewordingtomapFBOattachmentstothecorrespondingdefaultframebuffer'slogicalbuffers

4)Whathappenswhenyoudiscardanattachmentthatdoesn'texistThisisthecasewhereaframebufferiscompletebutdoesn'thave,forexample,astencilattachment,yettheapptriestodiscardthestencilattachment.a)Generateanerrorb)Ignorethehintsilently

RESOLVED:(b)fortworeasons.First,thisisjustahintanyway,andifwerequirederrordetection,thensuddenlyanimplementationcan'ttriviallyignoreit.Second,thisisconsistentwithClear,whichignoresspecifiedbuffersthataren'tpresent.

Sometimes,youneedtogeneratedynamictexturesonthefly.Themostcommonexamplesaregeneratingmirroring/reflectioneffects,dynamiccube/environmentmapsandshadowmaps.Dynamictexturingcanbeaccomplishedbyrenderingthescenetoatexture.Atraditionalwayofrender-to-textureistodrawascenetotheframebufferasnormal,andthencopytheframebufferimagetoatexturebyusingglCopyTexSubImage2D().有时候,你需要产生动态纹理。比较常见的例子是产生镜面反射效果、动态环境贴图和阴影等效果。动态纹理可以通过把场景渲染到纹理来实现。渲染到纹理的一种传统方式是将场景绘制到普通的帧缓存上,然后调用glCopyTexSubImage2D()拷贝帧缓存图像至纹理。

UsingFBO,wecanrenderascenedirectlyontoatexture,sowedon'thavetousethewindow-system-providedframebufferatall.Furthermore,wecaneliminateanadditionaldatacopy(fromframebuffertotexture).使用FBO,我们能够将场景直接渲染到纹理,所以我们不必使用window系统提供的帧缓存。并且,我们能够去除额外的数据拷贝(从帧缓存到纹理);。

Thisdemoprogramperformsrendertotextureoperationwith/withoutFBO,andcomparestheperformancedifference.Otherthanperformancegain,thereisanotheradvantageofusingFBO.Ifthetextureresolutionislargerthanthesizeoftherenderingwindowintraditionalrender-to-texturemode(withoutFBO),thentheareaoutofthewindowregionwillbeclipped.However,FBOdoesnotsufferfromthisclippingproblem.Youcancreateaframebuffer-renderableimagelargerthanthedisplaywindow.这个demo实现了使用FBO和不使用FBO两种情况下渲染到纹理的操作,并且比较了性能差异。除了能够获得性能上的提升,使用FBO的还有另外一个优点。在传统的渲染到纹理的模式中(不使用FBO),如果纹理分辨率比渲染窗口的尺寸大,超出窗口区域的部分将被剪切掉。然后,使用FBO就不会有这个问题。你可以产生比显示窗口大的帧缓存渲染图像。

ThefollowingcodesistosetupaFBOandframebuffer-attachableimagesbeforetherenderingloopisstarted.NotethatnotonlyatextureimageisattachedtotheFBO,butalso,arenderbufferimageisattachedtothedepthattachmentpointoftheFBO.Wedonotactuallyusethisdepthbuffer,however,theFBOitselfneedsitfordepthtest.Ifwedon'tattachthisdepthrenderableimagetotheFBO,thentherenderingoutputwillbecorruptedbecauseofmissingdepthtest.IfstenciltestisalsorequiredduringFBOrendering,thenadditionalrenderbufferimageshouldbeattachedtoGL_STENCIL_ATTACHMENT.以下代码在渲染循环开始之前,对FBO和帧缓存关联图像进行了初始化。注意只有一幅纹理图像被关联到FBO,但是,一个深度渲染图像被关联到FBO的深度关联点。实际上我们并没有使用这个深度缓存,但是FBO本身需要它进行深度测试。如果我们不把这个深度可渲染的图像关联到FBO,那么由于缺少深度测试渲染输出结果是不正确的。如果在FBO渲染期间模板测试也是必要的,那么也需要把额外的渲染图像和GL_STENCIL_ATTACHMENT_EXT关联起来。

opengles2.0渲染到纹理的方法有三种:

pbuffer跟framebuffer功能是一样的,都是用来做渲染到一个off-screensurface上的,但是如果要做的是渲染到一个纹理上,还是使用framebuffer,效率高些。pbuffer的用途是:渲染到纹理上,随后这个纹理可以给其他API用的,比如openVG。创建pbuffer的过程跟创建窗口surface差不多的:

EGLSurfaceeglCreatePbufferSurface(EGLDisplaydisplay,EGLConfigconfig,constEGLint*attribList);需要在attribList指定一些pbuffer的属性。选择config的时候需要指定:EGL_SURFACE_TYPE:EGL_PBUFFER_BIT

频繁的在自己创建的fbo和窗口系统创建的vbo之间切换,比较影响性能。不要在每一帧都去创建,销毁fbo,vbo对象。要一次创建多次使用。如果一个纹理attach到一个fbo的attachmentpoint,就要尽量避免调用glTexImage2D或glTexSubImage2D,glCopyTexImage2D等去修改纹理的值。

移动端十年老人,主要做IM、音视频、AI方向,目前在做鸿蒙化适配,欢迎这些方向的同学交流:wodekouwei

THE END
1.基于Framebuffer的图形框架和测试工具LinuxFramebuffer子系统是传统的内核显示框架。有很多基于Frambuffer的用户空间形式框架,以及针对Framebuffer的测试工具。 1. Linux Framebuffer Linux FrameBuffer相关的开源资源。 2. 基于FrameBuffer的图形框架 2.1 Mesa 3D OpenGL(Open Graphics Library)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(AP...http://www.51testing.com/mobile/view.php?itemid=7803366
2.技术笔记文章分类AtlasLapetosFrameBuffer的几种使用方式 阅读全文 posted @2024-11-11 17:37AtlasLapetoshttps://www.cnblogs.com/AtlasLapetos/category/2430959.html
3.远程桌面缓冲帧怎么用远程桌面技巧:高效利用缓冲帧教程远程桌面缓冲帧的高效应用与优化策略 远程桌面技术已经成为现代办公和协作的重要工具,使得用户能够在不同地点访问和操作远程计算机 然而,远程桌面的流畅度和响应速度往往受到网络延迟、带宽限制以及设备性能等因素的影响 其中,缓冲帧(Frame Buffer)作为远程桌面技术的重要组成部分,扮演着至关重要的角色 ...http://www.iis8.com/iis8_com/html/2024/11/363413.html
4.Framebufferoptions Object The initial framebuffer attachments as shown in the example below. context is required. The possible properties are colorTextures, colorRenderbuffers, depthTexture, depthRenderbuffer, stencilRenderbuffer, depthStencilTexture, and depthStencilRenderbuffer. Throws: DeveloperError : Cannot have...https://heilongjiang.tianditu.gov.cn/iportal/help/html/en/webgl/Build/Documentation/Framebuffer.html
5.framebuffer是什么意思framebuffer的用法翻译读音framebuffer英[fr?m'b?f?r] 美[fr?m'b?f?r] 释义 更多 帧缓冲 释义常用度分布图 下载海词词典查看 以上内容独家创作,受著作权保护,侵权必究 海词词典,十七年品牌把海词放在桌面上,查词最方便 触屏版| 电脑版 ?2003 - 2024 海词词典(Dict.cn)...http://m.dict.cn/msearch.php?q=framebuffer
6.德语助手德汉汉德词典Framebuffer是什么意思相似单词 Fraktur, FRAM, Framb?sie, Framdger?uschpegel, Frame, Framebuffer, Framegrabber, Frameliste, Framerate, Framycetin, 历史记录 生词本赞助商链接广告联系| 意见反馈| 合作伙伴| 关于德语在线词典|手机版网站 | 德语热词榜 | HTTPS| AI英文写作| Rédiger多语言写作 欧路软件 ?2024 词库版本202...https://www.godic.net/dicts/e/Framebuffer
7.Pythonframebuf.FrameBuffer方法代码示例本文整理汇总了Python中framebuf.FrameBuffer方法的典型用法代码示例。如果您正苦于以下问题:Python framebuf.FrameBuffer方法的具体用法?Python framebuf.FrameBuffer怎么用?Python framebuf.FrameBuffer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类framebuf的用法示例...https://vimsky.com/examples/detail/python-method-framebuf.FrameBuffer.html
8.全面的framebuffer详解superyongzheframebuffer的设备文件一般是 /dev/fb0、/dev/fb1 等等。 可以用命令: #dd if=/dev/zero of=/dev/fb 清空屏幕. 如果显示模式是 1024x768-8 位色,用命令:$ dd if=/dev/zero of=/dev/fb0 bs=1024 count=768 清空屏幕; 用命令: #dd if=/dev/fb of=fbfile 可以将fb中的内容保存下来; ...http://blog.chinaunix.net/uid-7321232-id-2645430.html
9.AndroidFramebuffer介绍及使用FrameBuffer实际上就是嵌入式系统中专门为GPU所保留的一块连续的物理内存,LCD通过专门的总线从framebuffer读取数据,显示到屏幕上。 FrameBuffer本质上是一块显示缓存,往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。所以说FrameBuffer就是一块白板。 https://www.jianshu.com/p/df1213e5a0ed
10.基于Framebuffer的MCULCD驱动设计AET随着技术的发展,诸多MCU-LCD嵌入式设备需要支持更多的上层应用二次开发及更友好的UI界面,但是由于MCU-LCD是在早期单片机中使用,对采用了Framebuffer架构的内核支持不太好。对Framebuffer自身的框架及MCU-LCD的硬件接口进行了分析和研究,根据Framebuffer的架构并结合MCU-LCD自身的特点,在比较了RGB与MCU优劣的基础上,设计...http://www.chinaaet.com/article/3000008160
1.LCD显示图片编程示例之介绍framebufferFramebuffer 字面意思就是帧缓存的意思,即显存,里面保存着一帧图像。事实上,对于嵌入式系统而言。没有真正意义上的显存,Framebuffer 是通过内存模拟出来的。 一、LCD FrameBuffer 里的若干字节表示(具体根据驱动适配),LCD 屏幕上的一个像素点。 (1)RGB888:32bpp,占4字节,分别是A8、R8、G8、B8,一般只用其中低...https://blog.csdn.net/2301_76587520/article/details/143900961
2.androidframebuf大块连续内存mob64ca12d6c78e的技术博客在Android开发中,图形渲染和处理是一个重要的领域。随着分辨率的提升和多样化的应用场景,优化图形性能的需求愈发迫切。在这个过程中,FrameBuffer成为了一个重要的概念。本文将探讨如何在Android中使用Framebuffer以及如何管理大块连续内存,以实现高效的图形渲染。 https://blog.51cto.com/u_16213326/12568759
3.GL.FramebufferRenderbuffer方法(OpenTK.Graphics.ES20)...GL.FramebufferRenderbuffer 方法 Learn 登录 消除警报 版本 Xamarin iOS SDK 12 Gl。苹果 Gl。内线 Gl。Oes HintMode HintTarget OpenGlEsCoreVersions PixelFormat PixelInternalFormat PixelStoreParameter PixelType ProgramParameter ReadFormat RenderbufferInternalFormat...https://docs.microsoft.com/zh-cn/dotnet/api/opentk.graphics.es20.gl.framebufferrenderbuffer
4.帧缓冲LearnOpenGL到目前为止,我们使用了几种不同类型的屏幕缓冲:用于写入颜色值的颜色缓冲,用于写入深度信息的深度缓冲,以及允许我们基于一些条件丢弃指定片段的模板缓冲。把这几种缓冲结合起来叫做帧缓冲(Framebuffer),它被储存于内存中。OpenGL给了我们自己定义帧缓冲的自由,我们可以选择性的定义自己的颜色缓冲、深度和模板缓冲。 https://learnopengl-cn.readthedocs.io/zh/latest/04%20Advanced%20OpenGL/05%20Framebuffers/
5.framebufferLinux下的帧缓冲lcd应用编程及Framebuffer驱动程序模型 帧缓冲(framebuffer)是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。 2019-04-28标签:LinuxFramebuffer13950 查看更多>> https://www.elecfans.com/tags/Framebuffer/
6.Framebuffer数据结构浅析关键词: E1 Captain, HD4000, Framebuffer, AppleIntelFramebufferCapri, Clover, Connector table, ig-platform-id 对于在E1 Captain下的HD4000驱动,缺省情况下,并不能直接支持HDMI, VGA, LVDS等输出,除非正确选择了ig-platform-id,并对connector entry做了适当的调整。 https://www.douban.com/note/547235754/
7.点屏之simple点屏之simple-framebuffersimple-framebuffersimplefb简介simple-framebuffer,在uboot中设置好了显示硬件,并给出了显存地址。chosen节点用于uboot和linux之间传递参数,所以simple-fb的参数也是在这里传递。设备树中下面这段只用于uboot,内核不管。chosen { #address-cells = <1>; #size-cells = <1>; ranges; ...https://www.kancloud.cn/lichee/lpi0/539004/
8.linux下实现对framebuffer(/dev/fb0)的截屏操作linux下实现对framebuffer(/dev/fb0)的截屏操作 在linux系统中,使用framebuffer来提供用户态进程直接操作显示屏的功能. 在嵌入式系统开发中,需要对显示屏的内容进行截取,实现一个lcd截屏工具实现对显示屏内容的截取,存储为bmp格式. 一个bmp文件有四部分组成: 其中位图文件头内容如下: [plain] view plain copy ...https://www.pianshen.com/article/6357884101/
9.基于framebuffer技术的DVI显示驱动程序的开发结语 经测试,DVI驱动程序在MX51平台上成功实现。framebuffer是Linux提供给用户的一个直接面向显示缓冲区的接口,本设计是一个面向应用的framebuffer驱动,文中给出了DVI驱动的整体架构,对主要模块的设计思想和实现方法进行了详细的介绍。https://www.eeworld.com.cn/mcu/article_2016092029541.html
10.ArmFramebufferCompression(AFBC)—TheLinuxKernel...Arm Framebuffer Compression (AFBC) AFBC is a proprietary lossless image compression protocol and format. It provides fine-grained random access and minimizes the amount of data transferred between IP blocks. AFBC can be enabled on drivers which support it via use of the AFBC format modifiers ...https://www.kernel.org/doc/html/next/gpu/afbc.html
11.qtin the QQuickFramebufferObject::Renderer then the surface is correctly renderer, but the QML surface is flipped on Y-axis. To fix that, I need to scale my matrix by -1 on Y-axis, but now my screenshot is flipped. I think that the flip come from QML vs OpenGL coordinates. Can some...https://stackoverflow.com/questions/26194142/qquickframebufferobject-is-flipped-on-y-axis-in-qml