示例代码
/**
* Title: 纹理加载和渲染
*
* SDL 2的主要新增功能是纹理渲染API。这为您提供了快速、灵活的基于硬件的渲染。
* 在本教程中,我们将使用这种新的渲染技术。
*/
#include <SDL2/SDL_image.h>
#include <SDL2/SDL.h>
#include <stdio.h>
#define sdlerror() {printf("error in line %d %s\n", __LINE__, SDL_GetError()); exit(-1);}
int main(int argc, char *argv[])
{
// 初始化
if(SDL_Init(SDL_INIT_VIDEO) < 0) sdlerror();
// 创建窗口
SDL_Window *window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN );
// 初始化 IMG 为 支持 PNG
if(IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG)
sdlerror();
// 加载 png 图片得到一个图层
SDL_Surface *pngSurface = IMG_Load("texture.png");
if(pngSurface == NULL)
sdlerror();
// SDL中的纹理有其自己的数据类型,直观地称为SDL_Texture。
// 当我们处理SDL纹理时,您需要一个SDL_Renender来将其呈现到屏幕上
// 在我们创建我们的窗口之后,我们必须为我们的窗口创建一个渲染器,这样我们就可以在上面渲染纹理。
// 幸运的是,通过调用SDL_CreateRenender很容易做到这一点
// 创建渲染器后,我们希望使用SDL_SetRenderDrawColor初始化渲染颜色。该选项控制用于各种渲染操作的颜色
SDL_Renderer* render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
// 此函数从现有图层创建新纹理,和 SDL_ConvertSurface 类似,
// 这意味着内存中存在两个 png 数据副本, 我们可以释放 pngSurface
SDL_Texture *texture = SDL_CreateTextureFromSurface(render , pngSurface );
SDL_FreeSurface( pngSurface );
pngSurface = NULL;
// 清空当前渲染目标
SDL_RenderClear(render);
// 将纹理复制到渲染目标
SDL_RenderCopy( render, texture, NULL, NULL );
// 更新屏幕
SDL_RenderPresent( render );
SDL_Event event;
while( SDL_PollEvent( &event ) != 0 || event.type != SDL_QUIT);
SDL_DestroyTexture( texture );
SDL_DestroyRenderer( render );
SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();
return 0;
}
运行结果
运行结果.png程序中用到的图片
texture.png
网友评论