我面临SDL库和分辨率与1920x1080不同的问题。
我要在分辨率为1080x1920 (肖像)的屏幕的中央复制一个尺寸为1080x608 的图像。
我的显示器屏幕只有一个。
我使用以下命令将屏幕从 1920x1080 切换到 1080x1920 :
data
我正在使用以下代码初始化SDL渲染器:
xrandr --output DP-1 --mode 1920x1080 --rotate left --primary
然后,我调用/**
* initialize everything so we are ready to display
*/
int SdlHandler::initialize(
unsigned int positionX,
unsigned int positionY,
unsigned int width,
unsigned int height,
bool showWindow,
std::string name) {
// Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL could not initialize! SDL_Error: " << SDL_GetError() << std::endl;
return -1;
}
// Size if the window
this->width = width;
this->height = height;
this->positionX = positionX;
this->positionY = positionY;
// Create the SDL window
// 0 and 0 are the position in X and Y
unsigned int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS;
if (showWindow) {
flags |= SDL_WINDOW_SHOWN;
} else {
flags |= SDL_WINDOW_HIDDEN;
}
this->window = SDL_CreateWindow(name.c_str(), this->positionX, this->positionY, this->width, this->height, flags);
// If there had been a problem, leave
if (!this->window) {
return -1;
}
// Create a new renderer
this->renderer = SDL_CreateRenderer(this->window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
// If there is an error creating it, just leave
if (!this->renderer) {
return -1;
}
// Setup the best for the SDL render quality
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2");
return 0;
}
函数以显示图像。我将上面的代码中用SDL_RenderCopy
创建的renderer
传递给了它:
SDL_CreateRenderer
这是一个与窗口管理器Compton有关的错误,没有Compton的话,一切运行良好...
答案 0 :(得分:2)
由于您使用xrandr
旋转显示,因此我们可以认为这是一个后处理步骤,它将在渲染每个帧缓冲区后旋转所有内容。
由于此后处理步骤将1920x1080图像分辨率作为输入,因此您应该以该分辨率使用SDL。
如果您将代码更改为:
// Create a window at 0,0 of dimension 1920x1080
this->initialize(0, 0, 1920, 1080, true, SDL_BASE_DISPLAY_WINDOW);
编辑:我也了解您希望图像从窗口的中心开始,但是您将图像的中间位置放在窗口的中心。
您还应该尝试以下操作:
howToDraw->x = this->positionX + this->imageWidth / 2;