zoukankan      html  css  js  c++  java
  • SDL 渲染纹理

      1 #include <windows.h>   // include important windows stuff
      2 
      3 #include "SDL.h"
      4 
      5 #include <cstdio>
      6 
      7 #pragma comment(lib,"SDL2.lib")
      8 #pragma comment(lib,"SDL2main.lib")
      9 
     10 #pragma warning(disable:4244) //全部关掉
     11 
     12 #define SCREEN_WIDTH 640            //窗口尺寸
     13 #define SCREEN_HEIGHT 480
     14 
     15                                  
     16 SDL_Window* gWindow = nullptr;//渲染的窗口
     17 
     18 
     19 SDL_Surface* gScreenSurface = nullptr;//窗口包含的表面
     20 
     21 SDL_Renderer* gRenderer = nullptr;
     22 
     23 
     24 SDL_Texture* gTexture = nullptr;//加载和显示到屏幕的图像
     25 
     26 
     27 UINT pixels[SCREEN_WIDTH * SCREEN_HEIGHT];
     28 
     29                                     
     30 bool init();//启动sdl,创建窗口
     31 
     32 void close();
     33 
     34 int Game_Main();
     35 
     36 
     37 void setPixels(int x, int y, UINT color);
     38 
     39 int main(int argc, char *argv[])
     40 {
     41     printf("Start Game!
    ");
     42 
     43     if (!init())
     44     {
     45         printf("Failed to initialize!
    ");
     46     }
     47     else
     48     {
     49         bool quit = false;
     50 
     51         SDL_Event e;
     52 
     53         while (!quit)
     54         {
     55             while (SDL_PollEvent(&e) != 0)
     56             {
     57                 if (e.type == SDL_QUIT)
     58                 {
     59                     quit = true;
     60                 }
     61             }
     63 
     64             Game_Main();
     66         }
     67     }
     68 
     69     close();
     70 
     71     return 0;
     72 }
     73 
     74 bool init()
     75 {
     76     bool success = true;
     77 
     78     if (SDL_Init(SDL_INIT_VIDEO) < 0)
     79     {
     80         printf("SDL could not initialize! SDL_Error: %s
    ", SDL_GetError());
     81         success = false;
     82     }
     83     else
     84     {
     85         gWindow = SDL_CreateWindow("sdl test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
     86         if (gWindow == nullptr)
     87         {
     88             printf("Window could not be created! SDL_Error: %s
    ", SDL_GetError());
     89             success = false;
     90         }
     91         else
     92         {
     93             gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
     94             if (gRenderer == nullptr)
     95             {
     96                 printf("Renderer could not be created! SDL_Error: %s
    ", SDL_GetError());
     97                 success = false;
     98             }
     99             else
    100             {
    101                 gScreenSurface = SDL_GetWindowSurface(gWindow);
    102 
    103                 gTexture = SDL_CreateTexture(gRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, SCREEN_WIDTH, SCREEN_HEIGHT);
    105             }
    106         }
    107     }
    108 
    109     return success;
    110 }
    111 
    112 
    113 void close()
    114 {
    115     SDL_DestroyTexture(gTexture);
    116     gTexture = nullptr;
    117 
    118     SDL_DestroyRenderer(gRenderer);
    119     SDL_DestroyWindow(gWindow);
    120     gWindow = nullptr;
    121     gRenderer = nullptr;
    122 
    123     SDL_Quit();
    124 }
    125 
    126 void setPixels(int x, int y, UINT color) 
    127 {
    128     int index = (int)(SCREEN_WIDTH * y + x);
    129 
    130     pixels[index] = color;
    131 }
    132 
    133 
    134 //游戏循环
    135 int Game_Main()
    136 {
    137     //清屏
    138     SDL_SetRenderDrawColor(gRenderer, 0xFF, 0xFF, 0xFF, 0xFF);
    139     SDL_RenderClear(gRenderer);
    140 
    141     //清空像素
    142     memset(pixels, 0xFF0000, SCREEN_WIDTH * SCREEN_HEIGHT * sizeof(Uint32));
    143 
    144     //设置像素点
    145     setPixels(10, 10, 0xFF0000);
    146     setPixels(20, 20, 0x00FF00);
    147 
    148     SDL_UpdateTexture(gTexture, NULL, pixels, 640 * sizeof(Uint32));
    149 
    150     //渲染贴图到屏幕
    151     SDL_RenderCopy(gRenderer, gTexture, nullptr, nullptr);
    152 
    153     //显示
    154     SDL_RenderPresent(gRenderer);
    155 
    156     return 1;
    157 }
  • 相关阅读:
    [色彩校正] Gamma Correction
    需要齐次坐标的原因之二 所有的变换运算(平移、旋转、缩放)都可以用矩阵乘法来搞定
    需要齐次坐标的原因之一
    数据库连接类
    简单的数组排序
    OfficePage封装代码
    新闻管理数据模板
    最新page页码生成控件代码
    新闻管理cs页面
    快速收录新域名网站
  • 原文地址:https://www.cnblogs.com/riaol/p/5443369.html
Copyright © 2011-2022 走看看