使用PainterEngine绘制图片纹理

制作纹理

PainterEngine支持BMP(不带透明通道)traw(带透明通道)格式的图像作为纹理,其中traw格式可以由png图片转换而成,转换工具你可以在PainterEngine.com的下载中找到

打开程序,选择需要转换的png图片即可完成转换

加载纹理

在绘制图片纹理前PainterEngine需要先将纹理加载到内存中

PainterEngine_startup.c,默认提供了一系列从文件加载资源的函数实现,当然这需要对应平台提供文件系统的支持.

 

在加载纹理之前,先定义px_texture用于存储纹理信息,为此,打开PainterEngine_Application.hPX_Application中定义一个px_texture的实例MyTexture

typedef struct

{

    px_texture MyTexture;

    PX_Runtime runtime;

}PX_Application;

(当然,这个MyTexture你也可以声明在其它地方,比如把它定义为全局变量,这里仅仅是作为一个例子)

 

现在,我们需要加载纹理,PainterEngine默认支持bmptraw两种格式的文件,其中,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:纹理文件的路径(windowsD盘下的test.traw)为例

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

{

    PX_ApplicationInitializeDefault(&pApp->runtimescreen_widthscreen_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->runtimescreen_widthscreen_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需要渲染的纹理

 xy偏移量(该坐标以纹理左上角为参照)

refPoint 参考中心点,用于表示纹理绘制的相对位置

blend blend类型结构体,用于调整绘制纹理的alphahdr

当它为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->runtimescreen_widthscreen_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);

}