前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SDL系列讲解(十二)创建窗口流程

SDL系列讲解(十二)创建窗口流程

作者头像
用户1263308
发布2018-02-02 11:10:55
1.2K0
发布2018-02-02 11:10:55
举报
文章被收录于专栏:代码GG之家代码GG之家

SDL系列讲解(一) 简介

SDL系列讲解(二) 环境搭建

SDL系列讲解(三) 工具安装

SDL是什么,能干什么,为什么我们要学习它?

SDL系列讲解(四) demo讲解

SDL系列讲解(五) 调试c代码

SDL系列讲解(六) SDL_Activity流程

SDL系列讲解(七) SDL_image教程

SDL系列讲解(八) SDL_ttf教程

SDL系列讲解(九) 异常退出分析

SDL系列讲解(十) 按键处理流程

SDL系列讲解(十一) SDL_QUIT流程

创建窗口时序图

时序图细节

看下创建窗口的流程图,我们简单说下过程。窗口创建,会先判断是否进行了SDL_VideoInit,如果没有,需要初始化。

完成了VideoInit的初始化后,我们使用LoadLibrary将android平台的opengl es动态库进行加载,同时将动态库里面的一些方法进行保存,作为我们适配android的实质方法,完成对接任务。SDL平台调用绘制,用的是SDL的一套标准,但是具体真正具体到每个平台是需要具体平台的实现,这里就是完成这个对接,使得SDL的方法,最终能操作到android平台上。

完成了opengl es的方法赋值之后,我们需要完成真正的窗口创建。在讲解这个之前,我们讲下android的绘制流程。我们知道,android使用activity进行承载界面,我们普通的View,比如button ,Textview这些,都是在ondraw进行绘制,使用传递的一个参数canvas,这个叫画布。是作用在一个绘制表面上的一套封装,使用canvas的一些api,可以简化我们直接绘制的难度,直接使用写好的画线,画圆,画一个弧度等等。当我们在canvas画好之后,系统会根据当前窗口耳朵层叠关系,透明度,缩放等等,进行将多个窗口排序,混合之后,使用驱动操作,将最终的一屏数据,刷入显卡,然后我们便看到了效果。

使用canvas,有个瓶颈便是,性能问题。ondraw属于主线程,于是乎就不能长时间频繁绘制,这样子会导致手机卡顿,出现anr,为了规避这种情况(特别是游戏,用canvas绘制,只能做比如五子棋,简单的连连看游戏,因为不会大量更新界面),大型的游戏开发,都是使用opengl es,android为了配合opengl es的硬件加速渲染,在上层配置了一个SurfaceView,这个是直接申请了一块绘制表面,独立于activity的其他View,自己独占一份,因此我们不需要使用ondraw绘制,这样子我们就可以单独开启一个绘制线程,单独作用在这个绘制表面,而直接操作绘制表面,会让我们开发效率大大降低。于是,我们将这个绘制表面进行封装,提供一套接口,而这套接口是配合硬件加速开发出来,于是我们的绘制速度会大幅度提升。而我们此处的封装,就是使用eglCreateWindowSurface,如此之后

我们就可以使用gl的一系列方法进行绘制,最后使用gl的swap-buffer将数据刷入绘制表面,然后进行和其他窗口混合,最终显示到屏幕。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码GG之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建窗口时序图
  • 时序图细节
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档