#include #include using namespace std; const int screen_width = 640; const int scren_height = 480; SDL_Window* win = NULL; SDL_Renderer* ren = NULL; SDL_Texture* LoadImage(const char* path) { SDL_Surface* loadedImage = NULL; SDL_Texture* texture = NULL; loadedImage = SDL_LoadBMP(path); if (loadedImage != 0) { texture = SDL_CreateTextureFromSurface(ren, loadedImage); SDL_FreeSurface(loadedImage); } else cout << SDL_GetError() << endl; return texture; } void ApplySurfaces(int x, int y, SDL_Texture* tex, SDL_Renderer* ren) { SDL_Rect pos; pos.x = x; pos.y = y; SDL_QueryTexture(tex, NULL, NULL, &pos.w, &pos.h); //Функция заполнит pos.w и pos.h для формата текстуры 1:1 SDL_RenderCopy(ren, tex, NULL, &pos); //В нужной точке рисуем текстуру с оригинальной высотой и шириной } int main() { if (SDL_Init(SDL_INIT_EVERYTHING) == -1) { cout << SDL_GetError() << endl; return 1; } win = SDL_CreateWindow("Lesson 2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, screen_width, scren_height, SDL_WINDOW_SHOWN); if (win == NULL) { cout << SDL_GetError() << endl; return 2; } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (ren == NULL) { cout << SDL_GetError() << endl; return 3; } SDL_Texture *background = NULL, *image = nullptr; image = LoadImage("./image.bmp"); background = LoadImage("./background.bmp"); if (image == NULL || background == NULL) { cout << "bad LoadImage\n"; return 4; } SDL_RenderClear(ren); int bW, bH; SDL_QueryTexture(background, NULL, NULL, &bW, &bH); cout << bW << " " << bH << endl; ApplySurfaces( 0, 0, background, ren); ApplySurfaces( bW, 0, background, ren); ApplySurfaces( 0, bH, background, ren); ApplySurfaces( bW, bH, background, ren); int iW, iH; SDL_QueryTexture(image, NULL, NULL, &iW, &iH); int x = (screen_width - iW) / 2; int y = (scren_height - iH) / 2; ApplySurfaces(x, y, image, ren); SDL_RenderPresent(ren); SDL_Delay(10000); SDL_DestroyTexture(background); SDL_DestroyTexture(image); SDL_DestroyRenderer(ren); SDL_DestroyWindow(win); SDL_Quit(); return 0; }