美文网首页
SDL 教程 07 : 纹理加载和渲染

SDL 教程 07 : 纹理加载和渲染

作者: wjundong | 来源:发表于2020-02-19 00:52 被阅读0次

    示例代码

    
    /**
     * 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

    相关文章

      网友评论

          本文标题:SDL 教程 07 : 纹理加载和渲染

          本文链接:https://www.haomeiwen.com/subject/wmrofhtx.html