位置: 编程技术 - 正文
推荐整理分享SDL2源代码分析7:显示(SDL_RenderPresent())(srslte源码分析),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:sdwebimage源码,sdrsharp源码,sscom源代码,stl源代码剖析,sdr 开源,sdr 开源,sdwebimage源码解析,sdwebimage源码解析,内容如对您有帮助,希望把文章链接给更多的朋友!
=====================================================
SDL源代码分析系列文章列表:
SDL2源代码分析1:初始化(SDL_Init())
SDL2源代码分析2:窗口(SDL_Window)
SDL2源代码分析3:渲染器(SDL_Renderer)
SDL2源代码分析4:纹理(SDL_Texture)
SDL2源代码分析5:更新纹理(SDL_UpdateTexture())
SDL2源代码分析6:复制到渲染器(SDL_RenderCopy())
SDL2源代码分析7:显示(SDL_RenderPresent())
SDL2源代码分析8:视频显示总结
=====================================================
上一篇文章分析了SDL纹理赋值给渲染目标的函数SDL_RenderCopy()。这篇文章分析SDL显示视频最后的一个函数:SDL_RenderPresent()。
SDL播放视频的代码流程如下所示。初始化: SDL_Init(): 初始化SDL。 SDL_CreateWindow(): 创建窗口(Window)。 SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。 SDL_CreateTexture(): 创建纹理(Texture)。 循环渲染数据: SDL_UpdateTexture(): 设置纹理的数据。 SDL_RenderCopy(): 纹理复制给渲染器。 SDL_RenderPresent(): 显示。上篇文章分析了该流程中的第6个函数SDL_RenderCopy()。本文继续分析该流程中的最后一个函数SDL_RenderPresent()。
SDL_RenderPresent()函数简介SDL使用SDL_RenderPresent()显示画面。SDL_RenderPresent()的原型如下。
参数renderer用于指定渲染器。函数调用关系图SDL_RenderPresent()关键函数的调用关系可以用下图表示。
上面的图片不太清晰,更清晰的图片上传到了相册里面:
渲染器中对应RenderPresent()的函数是D3D_RenderPresent(),它的源代码如下所示(位于renderdirect3dSDL_render_d3d.c)。
从代码中可以看出,该函数调用了2个最关键Direct3D的API:IDirect3DDevice9_EndScene():结束一个场景。IDirect3DDevice9_Present():显示。2.OpenGLOpenGL渲染器中对应RenderPresent()的函数是GL_RenderPresent(),它的源代码如下所示(位于renderopenglSDL_render_gl.c)。
代码比较简单,只有两行。关键的显示函数位于SDL_GL_SwapWindow()函数中。下面看一下SDL_GL_SwapWindow()的代码(位于videoSDL_video.c。感觉这里调用关系稍微有点乱…)。从上述代码中可以看出,SDL_GL_SwapWindow()调用了SDL_VideoDevice的GL_SwapWindow()函数。我们看一下在“Windows视频驱动”的情况下,该函数的代码。在“Windows视频驱动”的情况下,调用GL_SwapWindow()实际上是调用了WIN_GL_SwapWindow()函数。看一下WIN_GL_SwapWindow()函数的代码(位于videowindowsSDL_windowsopengl.c)。代码中调用了简单的一个函数SwapBuffers(),完成了显示功能。
3.SoftwareSoftware渲染器中对应RenderPresent()的函数是SW_RenderPresent(),它的源代码如下所示(位于rendersoftwareSDL_render_sw.c)。
从代码中可以看出,SW_RenderPresent()调用了一个函数SDL_UpdateWindowSurface()。我们看一下SDL_UpdateWindowSurface()的代码(位于videoSDL_video.c)。
SDL_UpdateWindowSurface()又调用了另一个函数SDL_UpdateWindowSurfaceRects()。继续看SDL_UpdateWindowSurfaceRects()的代码。
SDL_UpdateWindowSurfaceRects()调用了SDL_VideoDevice的UpdateWindowFramebuffer()函数。在“Windows视频驱动”的情况下,相当于调用了WIN_UpdateWindowFramebuffer()。我们看一下该函数的代码(位于videowindowsSDL_windowsframebuffer.c)
经过一系列的寻找之后,终于找到了Software渲染器显示视频的“源头”:BitBlt()函数。在Xcode中使用GLUT开发OpenGL应用程序 Xcode是MacOSX中自带的开发环境。GLUT提供了跨越平台的OpenGL实用工具。本文讲述如何在Xcode3.2中使用GLUT来开发OpenGL应用程序。在Xcode的启动面板中,选Create
Qt环境下利用OpenGL显示三维模型 最近在做一个利用Qt开发的小程序,其中一项功能是读取三维点云数据式(如PLY、OBJ)数据,并利用OpenGL显示在程序窗口中。由于博主对OpenGL不太了解,
Ubuntu下QtOpenGL无法正常使用GLU库的解决方法 本文来自
标签: srslte源码分析
本文链接地址:https://www.jiuchutong.com/biancheng/373126.html 转载请保留说明!友情链接: 武汉网站建设