我正在使用带有 SDL 版本 2.0.9+dfsg1-1ubuntu1 的 Ubuntu 19.0.4。该代码适用于 Visual Studio 和 MinGW 的 g++,如果我正确阅读其他人的评论,其他版本的 Unix。但是在我的版本 Ubuntu 中,它显示了在屏幕下方绘制了约 200 像素的矩形(应该在 0、0 处)。
有一个注释掉的部分似乎通过延迟来解决它,但是a)这很奇怪,b)我不完全相信它。难道我做错了什么?当然有一个有意义的修复。
#include <SDL.h>
#include <stdio.h>
using namespace std;
int main (int argc, char** argv)
{
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) return -1;
SDL_Window* window = SDL_CreateWindow("",0, 0,640, 480,0);
if (!window) return -1;
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
if (!renderer) return -1;
//Have to do this, or later SDL_GetWindowSize may give wrong results:
// the earlier dimensions, not the ones set by SDL_SetWindowSize
SDL_Event event; while (SDL_PollEvent(&event));
SDL_SetWindowSize(window, 600, 300);
printf("SetWindowSize\n");
//The next 3 lines, uncommented, fix the problem, usually
//SDL_RenderPresent(renderer);
//for (int i = 0; i < 6; ++i) //Must be 6 or more to be reliable
// SDL_Delay(10); //10 works; 1 doesn't
int w, h; SDL_GetWindowSize (window, &w, &h);
printf("%dx%d\n", w, h);
//Now let's draw something and see if it shows up in the right place. Nope -- it's offset down the screen 100 pixels, ish
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_Rect rect1 = {0, 0, 100, 100};
SDL_RenderFillRect(renderer, &rect1);
SDL_RenderPresent (renderer);
//Wait for key hit, so we can see rect
SDL_Event sdlEvent;
do
SDL_WaitEvent (&sdlEvent);
while (sdlEvent.type != SDL_KEYDOWN);
return 0;
}