我在做一个复古像素游戏,所以我想让我的窗口是一个非常低的分辨率(256x256)。 但是,当我尝试使其全屏时,整个窗口只是呈现在左上角,而所有其他区域都是黑色的。
我想知道一种方法来全局设置窗口中每个像素的大小,以便使其适合全屏,或者,一种方法来拉伸整个窗口(还是呈现器?) 在SDL_CreateWindow中参数2和3中的(w,h)不变的情况下,并且大小成比例(因此,如果它是一个方形窗口,那么它在拉伸后应该是一个方形窗口,而不是在拉伸到一个矩形显示器后是一个矩形)。
首先,将你的游戏渲染成256x256的纹理。 这个要旨有一个例子,我会在下面内联它。
接下来,计算出你的游戏纹理在实际窗口上的正确大小和位置,并在那里渲染纹理。 这将需要修改SDL_rendercopyex
调用,因为gist只是将其拉伸到屏幕上。
#include <iostream>
#ifdef __linux__
#include <SDL2/SDL.h>
#elif defined(_WIN32)
#include <SDL.h>
#endif
const int WIN_WIDTH = 640;
const int WIN_HEIGHT = 480;
int main(int argc, char **argv){
if (SDL_Init(SDL_INIT_EVERYTHING) != 0){
std::cerr << "SDL_Init failed: " << SDL_GetError() << "\n";
return 1;
}
SDL_Window *win = SDL_CreateWindow("Rendering to a texture!", SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, WIN_WIDTH, WIN_HEIGHT, 0);
SDL_Renderer *renderer = SDL_CreateRenderer(win, -1,
SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
//Put your own bmp image here
SDL_Surface *bmpSurf = SDL_LoadBMP("../res/image.bmp");
SDL_Texture *bmpTex = SDL_CreateTextureFromSurface(renderer, bmpSurf);
SDL_FreeSurface(bmpSurf);
//Make a target texture to render too
SDL_Texture *texTarget = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,
SDL_TEXTUREACCESS_TARGET, WIN_WIDTH, WIN_HEIGHT);
//Now render to the texture
SDL_SetRenderTarget(renderer, texTarget);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, bmpTex, NULL, NULL);
//Detach the texture
SDL_SetRenderTarget(renderer, NULL);
//Now render the texture target to our screen, but upside down
SDL_RenderClear(renderer);
SDL_RenderCopyEx(renderer, texTarget, NULL, NULL, 0, NULL, SDL_FLIP_VERTICAL);
SDL_RenderPresent(renderer);
SDL_Delay(1000);
SDL_DestroyTexture(texTarget);
SDL_DestroyTexture(bmpTex);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}