PainterEngine支持BMP(不带透明通道)和traw(带透明通道)格式的图像作为纹理,其中traw格式可以由png图片转换而成,转换工具你可以在PainterEngine.com的下载中找到
打开程序,选择需要转换的png图片即可完成转换
在绘制图片纹理前PainterEngine需要先将纹理加载到内存中
PainterEngine_startup.c中,默认提供了一系列从文件加载资源的函数实现,当然这需要对应平台提供文件系统的支持.
在加载纹理之前,先定义px_texture用于存储纹理信息,为此,打开PainterEngine_Application.h在PX_Application中定义一个px_texture的实例MyTexture
typedef struct
{
px_texture MyTexture;
PX_Runtime runtime;
}PX_Application;
(当然,这个MyTexture你也可以声明在其它地方,比如把它定义为全局变量,这里仅仅是作为一个例子)
现在,我们需要加载纹理,PainterEngine默认支持bmp和traw两种格式的文件,其中,traw格式文件可以由png文件转换,转换工具你可以在PainterEngine.com的下载中找到(PngToTraw)
然后你可以使用PX_LoadTextureFromFile完成纹理的加载
px_bool PX_LoadTextureFromFile(px_memorypool *mp,px_texture *tex,const px_char path[]);
其中:
Mp:表示将纹理加载后存储到的内存池,一般情况下,静态资源可以存储在pApp->runtime.mp_resources中
Tex:px_texture实例
Path:纹理文件的路径(windows以D盘下的test.traw)为例
px_bool PX_ApplicationInitialize(PX_Application *pApp,px_int screen_width,px_int screen_height)
{
PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height);
if(PX_LoadTextureFromFile(&pApp->runtime.mp_resources,&pApp->MyTexture,"D:/test.traw"))
{
//加载成功
}
else
{
//加载失败
}
return PX_TRUE;
}
如果的你的程序使用Android平台,你可以将图片资源放在assets目录下,然后通过assets/图片名访问这个资源例如:
px_bool PX_ApplicationInitialize(PX_Application *pApp,px_int screen_width,px_int screen_height)
{
PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height);
if(PX_LoadTextureFromFile(&pApp->runtime.mp_resources,&pApp->MyTexture,"asssets/test.traw"))
{
//加载成功
}
else
{
//加载失败
}
return PX_TRUE;
}
现在,纹理资源加载完成了
PainterEngine提供多种纹理绘制函数
函数名 |
px_void PX_TextureRender(px_surface *psurface,px_texture *tex,px_int x,px_int y ,PX_ALIGN refPoint,PX_TEXTURERENDER_BLEND *blend); |
说明 |
渲染一个纹理到表面 |
参数 |
psurface 渲染到的表面 px_texture需要渲染的纹理 x,y偏移量(该坐标以纹理左上角为参照) refPoint 参考中心点,用于表示纹理绘制的相对位置 blend blend类型结构体,用于调整绘制纹理的alpha,hdr值 当它为PX_NULL时,表示采用默认blend值 typedef struct { float hdr_R; //HDR of Red float hdr_G; //HDR of Green float hdr_B; //HDR of Blue float alpha; //Blend of alpha }PX_TEXTURERENDER_BLEND;
|
返回值 |
- |
在PX_ApplicationInitialize,PX_ApplicationRender中添加代码(如下所示),绘制一个纹理
px_bool PX_ApplicationInitialize(PX_Application *pApp,px_int screen_width,px_int screen_height)
{
PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height);
if(PX_LoadTextureFromFile(&pApp->runtime.mp_resources,&pApp->MyTexture,"D:/test.traw"))
{
//加载成功
}
else
{
//加载失败
}
return PX_TRUE;
}
px_void PX_ApplicationRender(PX_Application *pApp,px_dword elpased)
{
px_surface *pRenderSurface=&pApp->runtime.RenderSurface;
PX_RuntimeRenderClear(&pApp->runtime, PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR);
PX_TextureRender(pRenderSurface,&pApp->MyTexture,pApp->runtime.surface_width/2,pApp->runtime.window_height/2,PX_ALIGN_CENTER,PX_NULL);
}