SDL2 - VSYNC有效,但在特定窗口高度处撕裂

时间:2015-04-06 10:22:45

标签: c++ windows sdl-2

我在Windows 7 64bit的窗口模式下使用SDL2来创建一个小游戏。

尽管VSYNC处于活动状态,但我仍然在窗户的同一高度撕裂。奇怪的是,运动本身就是流动的,但是这条线距离底部大约50px,撕裂很明显。它总是呆在那里,没有移动或任何东西。

奇怪的是,如果我把一个较小的窗户装箱,我会从底部撕​​开完全相同的高度。

我尝试过屏幕,但它没有显示撕裂。

我不知道这是SDL2的问题,Windows的问题,我的电脑有问题或我的源文件有问题。我试过在线寻找解决方案,但我找不到类似这个问题。

这对我来说是第一次,因为我过去在窗口模式下玩过很多SDL游戏而且没有人遇到过这个问题。

以下是我一直使用的源代码片段:

#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>

const int SCREEN_WIDTH = 400;
const int  SCREEN_HEIGHT = 300;

bool init( SDL_Window** window, SDL_Renderer** renderer ) {

    SDL_Init(SDL_INIT_VIDEO);
    *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);

    *renderer = SDL_CreateRenderer(*window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);

    int flags = IMG_INIT_PNG;
    IMG_Init(flags);

    return true;
}

void close( SDL_Texture** image, SDL_Window** window ) {
    SDL_DestroyTexture( *image );
    *image = NULL;

    SDL_DestroyWindow( *window );
    *window = NULL;

    SDL_Quit();
}

int main(int argc, char* argv[]) {
    SDL_Window* window = NULL;
    SDL_Renderer* renderer = NULL;
    SDL_Texture* image = NULL;
    const SDL_Rect rect = { 0, 0, SCREEN_WIDTH, 200 };
    SDL_Rect rectImage, rectImageOriginal;
    int w, h;

    SDL_QueryTexture(image, NULL, NULL, &w, &h);
    rectImage = { 0, 0, w, h };
    rectImageOriginal = rectImage;

    init( window, renderer );
    image = IMG_LoadTexture( renderer, path );

    while (running) {

        [... here I move rectImage ...]

        SDL_RenderClear(renderer);
        SDL_SetRenderDrawColor(renderer, 200, 0, 0, 255);

        SDL_RenderFillRect(renderer, NULL);

        SDL_RenderCopy(renderer, image, &rectImageOriginal, &rectImage);
        SDL_RenderPresent(renderer);
    }

    close(&image, &window);
}

0 个答案:

没有答案