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!\n"); 42 43 if (!init()) 44 { 45 printf("Failed to initialize!\n"); 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\n", 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\n", 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\n", 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 }