首页 > 解决方案 > SDL_RenderDrawRect 少了一个像素

问题描述

我已经开始将我的旧项目移植到 SDL2 和 C 语言并注意到奇怪的问题。矩形缺少一个像素。当线穿过矩形时也有类似的问题。线条一端上方的矩形像素也丢失了。

操作系统:Arch Linux

初始化代码

//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
    printf( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() );
    success = false;
}
else
{
    //Set texture filtering to linear
    if( !SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" ) )
    {
        printf( "Warning: Linear texture filtering not enabled!" );
    }

    //Create window
    graphics.gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
    if( graphics.gWindow == NULL )
    {
        printf( "Window could not be created! SDL Error: %s\n", SDL_GetError() );
        success = false;
    }
    else
    {
        //Create renderer for window
        graphics.gRenderer = SDL_CreateRenderer( graphics.gWindow, -1, SDL_RENDERER_ACCELERATED );
        if( graphics.gRenderer == NULL )
        {
            printf( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() );
            success = false;
        }
    }
}

绘制这些形状的代码如下。

SDL_SetRenderDrawColor(graphics.gRenderer, 0x00, 0x00, 0x00, 0x00);
SDL_RenderClear(graphics.gRenderer);

SDL_Color color = { 51, 255, 255, 255 };
graphics_Rectangle(400 - 2, 2, (400 + MAXX + 1) - 400 - 2, 4 + MAXY + 3 - 2, color);

SDL_Color color2 = { 0, 127, 0, 255 }; // setcolor(green);
graphics_Rectangle(40*10+BEGX+1-2, 20*10+BEGY+1-2, 40*10+BEGX+9+2 - 40*10+BEGX+1-2, 20*10+BEGY+9+2 - 20*10+BEGY+1-2, color2);
graphics_Line(40*10+BEGX+1-44, 20*10+BEGY+1+5, 40*10+BEGX+1-2, 20*10+BEGY+1+5);

SDL_Color colorLine = { 0, 255, 0, 255 };
graphics_Line(40*10+BEGX+1-44, 20*10+BEGY+1+5, 40*10+BEGX+1-2, 20*10+BEGY+1+5, colorLine);

我如何解决它?

标签: csdl-2

解决方案


推荐阅读