jjzjj

Opengl ES之PBO

FlyerGo 2023-09-04 原文

叨叨一句几句

关于Opengl的系列已经有较长的一段时间没有更新了,然而这个系列还远没有到完毕地步,后续至少还有关于Opengl矩阵变换、YUV与RGB互转、Opengl水印贴图、Opengl转场动画等主题文章。

断更的主要原因如果给自己找个借口的话可以说是工作比价忙,如果说的比较现实一点就是自己懒且没啥动力,毕竟写技术博客文章是一件时间成本投入很大,而收益产出极小的一件事情…

进入正题…

了解过Opengl的童鞋们都知道,在Opengl中存在这个各种O,例如VAO、VBO、FBO等,而出现各种各样的O一般都是因为考虑到性能的原因。

今天我们要介绍的主角PBO,它和之前我们介绍VBO很像,了解完PBO之后童鞋们可以对比一下PBO与VBO的差异点。

下面从两个方面介绍PBO,什么是PBO以及如何使用PBO。

更多关于音视频、FFmpeg、Opengl、C++的原创文章请关注微信公众号:思想觉悟

什么是PBO

PBO(Pixel Buffer Object像素缓冲对象)。在了解什么是PBO之前,我们先来了解一下为什么会出现PBO这么一个东西?

所谓存在即合理,用发展的眼光看问题,PBO的出现肯定是为了替代某种东西,或者是为了解决某个问题。

在使用Opengl的时候经常需要在GPU和CPU之间传递数据,例如在使用Opengl将YUV数据转换成RGB数据时就需要先将YUV数据上传到GPU,一般使用函数glTexImage2D,处理完毕后再将RGB结果数据读取到CPU,
这时使用函数glReadPixels即可

有关Opengl ES之PBO的更多相关文章

  1. java - OpenGL 和 OpenGLES 中的 glVertexAttribPointer - 2

    我正在阅读有关OpenGL和OpenGLES的教程,我对函数glVertexAttribPointer在这两个API中的使用有点困惑。在OpenGL教程中,此函数将数字偏移量用作最后一个参数(转换为constGLVoid*),我假设顶点直接取自当前数组缓冲区。glVertexAttribPointer(vs_position,2,GL_FLOAT,GL_TRUE,5*sizeof(GLfloat),(constGLvoid*)(3*sizeof(GLfloat)));在OpenGLES教程中,最后一个参数直接指向表示顶点的结构:GLFloatvertices[]={...definit

  2. c++ - 我什么时候可以发布源 PBO? - 2

    我正在使用PBO在我的cpu和gpu之间异步移动数据。当从GPU移动时,我知道在PBO上调用glMapBuffer后我可以删除源纹理。但是,反过来呢?我什么时候知道从PBO到纹理(glTexSubImage2D(...,NULL))的传输已经完成并且我可以安全地释放或重新使用PBO?是在我绑定(bind)纹理后还是其他什么时候? 最佳答案 我认为在调用glTexImage之后,您可以安全地删除或重新使用缓冲区而不会出错,因为驱动程序会为您处理所有事情,包括延迟销毁(这是缓冲区对象的优势)。但这意味着,对glMapBuffer的调用可

  3. c++ - Android ndk 上 OpenGLES 1.1 中具有 GLSurfaceView 模式的 FrameBuffers - 2

    在AndroidNDK中,是否可以使OpenGLES1.1使用典型的Java端GLSurfaceView模式(覆盖GLSurfaceView.RendereronDrawFrame、onSurfaceCreated等方法),同时在C++端使用框架、颜色和深度缓冲区和VBO?我正在尝试使用这个创建它们:voidES1Renderer::on_surface_created(){//Createdefaultframebufferobject.Thebackingwillbeallocatedforthecurrentlayerin-resizeFromLayerglGenFramebuf

  4. opengl-es - 在带有 OpenGLES 的 iOS 上如何拥有多个 View ? - 2

    在iOS上,如果我想叠加两个View,然后从一个场景混合到另一个场景。例如:从游戏菜单到实际游戏。首先有菜单,然后单击(“开始游戏”)加载游戏View,并从菜单到游戏阶段进行很好的混合/转换。这不是混合的具体问题,而是关于如何在OpenGL应用程序中处理多个View的问题。我已经阅读并尝试了一些关于如何绘制线条、对象、闪电、颜色和类似内容的基础知识,但是当涉及到将它们全部放在一个真实的(不仅仅是一个静态View)OpenGLES应用程序中时,我完全是绿色的。我的意思是你必须使用不同的观点,对吧?或者我们在日常UIKit编程中都习惯的具有不同ViewController和View的设计模

  5. iphone - 使用多个顶点和索引缓冲区对象进行渲染(ios - OpenGLES 2.0) - 2

    我无法使用一对以上的顶点和索引缓冲区对象来渲染我的所有对象。为了检查所有内容,我只初始化了3个对象并渲染它们。这会导致前两个对象的几何形状变形,而第三个对象的几何形状渲染得很好(不完美)。当我刚刚初始化所有3个但只是首先渲染时,它再次显示扭曲的几何体并且第三个几何体以某种方式更加可见(即使我没有渲染它)。但是,如果我正在初始化和渲染它们中的任何一个,它就会渲染得很好(完美)。这是我的代码:floattempAngles[4]={0,60,180,360};pieOne=[[IVNodealloc]initWithPieGeometry:0.75thickness:0.20startAn

  6. ios - 从父类中混合 OpenGLES 和 UIKIT 获取 iOS 屏幕截图 - 2

    我知道这个问题得到了很多回答,但我的情况似乎有所不同。我正在尝试编写一个顶层函数,我可以随时截取我的应用程序的屏幕截图,无论是openGLES还是UIKit,我都无法访问底层类来进行任何更改。我一直在尝试的代码适用于UIKit,但返回OpenGLES部分的黑屏CGSizeimageSize=[[UIScreenmainScreen]bounds].size;if(NULL!=UIGraphicsBeginImageContextWithOptions)UIGraphicsBeginImageContextWithOptions(imageSize,NO,0);elseUIGraphic

  7. ios - 适用于 iOS 的 OpenGLES - glBufferData() - GLuint 不适用于数据字段 - 2

    我花了半天时间试图解决这个问题,但到目前为止我没有运气,所以我正在寻找一些建议和指导。我正在我的32位iPad3(iOS8)上渲染一个球体。-(void)bufferVBO:(objectVertex[])objVertices:(int)objectVerticesSize:(GLubyte[])vertexIndices:(int)vertexIndicesSize{...glBufferData(GL_ELEMENT_ARRAY_BUFFER,vertexIndicesSize,vertexIndices,GL_STATIC_DRAW);...}这很好用。但是,这最多只能渲染25

  8. ios - 在 iOS 上使用具有多个 VBO 和 IBO(多个对象)OpenGLES 2 的 VAO 进行绘制 - 2

    我对多个对象(大约200个对象,其中15个对象一次可见,每个对象都有自己的顶点和索引缓冲区)使用VAO(顶点数组对象)感到有些困惑。下面是我的渲染函数-(void)glkView:(GLKView*)viewdrawInRect:(CGRect)rect{glClearColor(0.50f,0.50f,0.50f,1.0f);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);[superdrawLines];for(inti=0;i0){self.paused=NO;}else{self.paused=YES;}}这工作得很好。在Ope

  9. iphone - 如何在 iPhone 的 OpenGLES 中获取中点值? - 2

    我是游戏开发新手。目前我在简单的游戏应用程序中工作,使用GL_Line绘制一条线,使用GL_Trianglestrip绘制一个(球)图像。通常球图像从左向右移动。当用户在屏幕上点击时,然后在屏幕内绘制线条(从上到下)并触摸球图像。所以我尝试从线和球图像中获取中点值,但我不知道如何开始? 最佳答案 如果你有一条从(ax,ay)到(bx,by)的直线,直线的中点就是((ax+bx)/2.0,(ay+by)/2.0)). 关于iphone-如何在iPhone的OpenGLES中获取中点值?,我

  10. android - 在 Z 轴上旋转纹理时 Opengles 图像倾斜 - 2

    您好,我正在开发一个基于OpenGLES的安卓应用程序,我需要在z轴上实时旋转纹理。但是当我向模型矩阵添加旋转时,图像发生了倾斜。下图第一张是原图,第二张是z轴旋转后的歪斜图这是我的着色器:privatefinalStringmVertexShader=""+"attributevec4position;\n"+"attributevec2textureCoordinate;\n"+"varyingvec2textureCoordinateVarying;\n"+"uniformmat4modelMat;\n"+"uniformmat4viewMat;\n"+"uniformmat4p

随机推荐