PainterEngine基础框架结构

Application 基础架构

打开工程目录painterengine/project

 

PainterEngine_Startup  PainterEngine运行时框架,在当中定义了内存池大小,运行平台,窗体大小等应用的基本参数.

PainterEngine_Application 为功能逻辑运行框架,是编写用户代码的主要地方.

 

打开PainterEngine_Application.c,你可以看到三个函数

PX_ApplicationInitialize

px_bool PX_ApplicationInitialize(PX_Application *pApp,px_int screen_width,px_int screen_height)

 

PainterEngine初始化函数,在该函数中,完成应用的一系列初始化操作,例如,在这个函数中将会先初始化PainterEngine的运行时环境,创建的PainterEngine应用的窗口,或者如果你有对音频播放的需求你可以你加上对音频的支持。

 

其中

pApp 是应用的描述结构

Screen_width 是当前屏幕的像素宽度

Screen_height是当前屏幕的像素高度

 

当然为了减少PainterEngine部署难度,你可以看到在这个函数已经调用了一个默认的初始化函数

PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height);

 

这个函数将初始化一个最初默认的运行时环境,并依据当前的屏幕创建了一个窗口。你可以在PainterEngine_Startup.c找到这个函数的详细实现,但在入门阶段和之后开发应用的大部分情况,你都可以直接使用这个默认的初始化函数或对其进行少量的修改,这个部分将在之后的章节详细介绍。

 

 

PX_ApplicationUpdate

px_void PX_ApplicationUpdate(PX_Application *pApp,px_dword elpased)

 

PainterEngine的更新函数,在大部分的情况下,PainterEngine的运行环境会循环调用这个函数。

 

其中

pApp 是应用的描述结构

elapsed 是上次更新后经历的时间,单位是毫秒

 

对于其详细应用将在之后详细介绍

 

PX_ApplicationRender

px_void PX_ApplicationRender(PX_Application *pApp,px_dword elpased)

 

PainterEngine的渲染函数,在大部分的情况下,PainterEngine的运行环境会循环调用这个函数(实时渲染),这个函数的主要作用是绘制图像,当然,为了让显示和动画看起来尽可能流畅,你应该保证这个函数在每秒钟能被执行60次以上。但如果你对渲染没有非常高的实时性要求,你可以降低其帧率以实现更低的渲染功耗。

 

在这个函数中,你可以看到两行已经写好的代码

px_surface *pRenderSurface=&pApp->runtime.RenderSurface;

PX_RuntimeRenderClear(&pApp->runtime,PX_COLOR(255,255,255,255));

其中,第一句中的pRenderSurface表示渲染表面

PX_RuntimeRenderClear表示用某种颜色清空当前的渲染表面(或者绘制背景色),在上面PX_COLOR是一个颜色生成函数,四个参数分别表示argb颜色分量

 

简单来说,PainterEngine的绘制流程是,先将surface成背景色,然后在上面绘制图像,在下一帧,再将这个surface重新刷成背景色,再画下一帧的图像。

 

其中

pApp 是应用的描述结构

elapsed 是上次更新后经历的时间,单位是毫秒

 

对于其详细应用将在之后详细介绍

PX_ApplicationPostEvent

这个函数用户响应用户输入事件,最常见的是鼠标移动,键盘按键,触摸屏按键等事件

px_void PX_ApplicationPostEvent(PX_Application *pApp,PX_Object_Event e)

其中:

pApp是应用的描述结构

e是事件类型,

e.event有以下几种常用事件类型

 

#define PX_OBJECT_EVENT_ANY                 0  //任意类型

#define PX_OBJECT_EVENT_CURSORMOVE          1 //光标移动

#define PX_OBJECT_EVENT_CURSORUP            2 //光标抬起

#define PX_OBJECT_EVENT_CURSORRDOWN         3  //光有右键按下

#define PX_OBJECT_EVENT_CURSORDOWN          4  //光标按下(触摸屏按下)

#define PX_OBJECT_EVENT_CURSORRUP           5  //光标抬起(触摸屏抬起)

#define PX_OBJECT_EVENT_CURSOROVER          6  //光标移动到区域*

#define PX_OBJECT_EVENT_CURSOROUT           7  //光标移出区域*

#define PX_OBJECT_EVENT_CURSORWHEEL         8  //光标滚轮*

#define PX_OBJECT_EVENT_STRING              9  //输入法字符串*

#define PX_OBJECT_EVENT_EXECUTE             10 //按钮按下

#define PX_OBJECT_EVENT_CURSORCLICK         11 //光标单击*

#define PX_OBJECT_EVENT_CURSORDRAG          12 //光标拖拽(触摸屏手指滑动)

#define PX_OBJECT_EVENT_VALUECHANGED        13 //值改变*

#define PX_OBJECT_EVENT_DRAGFILE            14 //文件拖进

#define PX_OBJECT_EVENT_KEYDOWN             15 //键盘按键按下

#define PX_OBJECT_EVENT_IMPACT              16 //对象碰撞(PX_World事件)

#define PX_OBJECT_EVENT_ONFOCUSCHANGED      17 //焦点改变

#define PX_OBJECT_EVENT_SCALE               18 //缩放

#define PX_OBJECT_EVENT_WINDOWRESIZE        19 //窗体尺寸改变

 

详细内容将在之后讨论

获取PainterEngine绘制表面基础信息

PainterEngine的所有绘制是基于px_surface(渲染表面)

PX_ApplicationRenderpApp->runtime.RenderSurface是默认的渲染表面,在这个渲染表面绘制的图像会被直接显示在渲染结果中

 

因为显示设备的不一样,或者用户调整显示窗口的大小,默认渲染表面的长度和宽度可能会发生变化

 

你可以使用

pApp->runtime.surface_width 来获取当前渲染表面的像素宽度

pApp->runtime.surface_height来获取当前渲染表面的像素高度