2

我正在使用带有 SDL 版本 2.0.9+dfsg1-1ubuntu1 的 Ubuntu 19.0.4。该代码适用于 Visual Studio 和 MinGW 的 g++,如果我正确阅读其他人的评论,其他版本的 Unix。但是在我的版本 Ubuntu 中,它显示了在屏幕下方绘制了约 200 像素的矩形(应该在 0、0 处)。

带有矩形的 SDL2 窗口应该在 0,0,但在 ~ 0, 200

有一个注释掉的部分似乎通过延迟来解决它,但是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;
}
4

0 回答 0