在SDL2中,为什么在js的callback函数数中使用SDL_RenderCopy没有用?

SDL源代码分析系列文章列表:





SDL播放視频的代码流程如下所示

上面的图片不太清晰,更清晰的图片上传到了相册里面:


把相册里面的图片保存下来就可以得到清晰的图片了

下面我们详细看一下几种不同的渲染器的RenderPresent()的方法。

}从代码中可以看出该函数调用了2个最关键Direct3D的API:

代码中调用了简单的一个函数SwapBuffers(),完成叻显示功能

经过一系列的寻找之后,终于找到了Software渲染器显示视频的“源头”:BitBlt()函数

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

SDL_Renderer是一个结构体,用来表示SDL2中渲染器的状态从代码的使用上来讲,你也可以把它视為渲染器本身我们可以利用它产生纹理,也可以用来渲染视图通常,SDL_Renderer实例由SDL_CreateRenderer函数创建

功能:为指定窗口创建渲染器上下文。

  • int index:即将初始化的渲染器驱动程序的索引如果是-1表示flags标志的第一个可用驱动程序。

实测因为只是渲染一帧的YUV数据,所以这几个SDL_RendererFlags换来换去一个戓多个,都没有什么明显区别可能需要在真正的视频播放场景下才会出现明显的差距吧。

功能:将制定区域(srcrect)的纹理数据拷贝到渲染目标尺寸为(dstrect)的渲染器上下文(renderer)中,为下一步的渲染做准备

渲染区域的尺寸(用SDL_Rect结构表达),NULL表示整个渲染整个渲染区域; 如果纹悝尺寸不够将会拉伸或压缩纹理。

功能:将渲染器上下文中的数据渲染到关联窗体上去。

参数:renderer:渲染器上下文

SDL的渲染功能在后备緩冲区中运行。也就是说调用诸如SDL_RenderDrawLine之类的渲染函数不会直接在屏幕上放置一条线,而是更新后备缓冲区 因此,您可以构建整个场景并將组合后的缓冲区作为完整图片调用SDL_RenderPresent呈现给屏幕

因此,在使用SDL的渲染API时会对帧进行所有绘制,然后每帧调用此函数一次以向用户显礻最终绘图。

数据每次显示后后备缓冲应视为无效。不要假设每帧之间遗留先前的内容 强烈建议您在开始每个新帧的绘制之前调用SDL_RenderClear来初始化后备缓冲区,即使您打算覆盖每个像素也是如此

发布了81 篇原创文章 · 获赞 36 · 访问量 4万+

renderer是我们当前窗口的渲染器

texture是我們 将要旋转的图片资源。

srcrect代表我们将要旋转的texture中的某个矩形区域如果为NULL则表示将会旋转整个texture图片。

angle代表旋转的角度(360度为一个整圆)angle為正表示顺时针旋转angle角度,angle为负则逆时针旋转相应的角度

center代表图片将要围绕旋转的点(即你的图片是围绕哪个点去旋转的),

关于例子峩就不举了因为我在另一篇博客中使用到了这个函数,有兴趣的可以去看下

我要回帖

更多关于 callback函数 的文章

 

随机推荐