为什么在 SDL 中渲染纹理时会出现虚假的白色像素?

问题描述

我正在使用 SDL2 在屏幕上绘制一些东西。这是一些代码

#include <SDL.h>

void main()
{
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_Window *window = SDL_CreateWindow("Test",SDL_WINDOWPOS_UNDEFINED,500,0);

    SDL_Renderer *renderer = SDL_CreateRenderer(window,-1,0);

    SDL_Texture *texture;
    {
        SDL_Surface *window_surface = SDL_GetwindowSurface(window);
        Uint32 pixel_format = window_surface->format->format;
        SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat(0,48,8,pixel_format);
        texture = SDL_CreateTextureFromSurface(renderer,surface);
        SDL_FreeSurface(surface);
        SDL_FreeSurface(window_surface);
    }

    SDL_Rect target_rectangle;
    target_rectangle.x = 100;
    target_rectangle.y = 100;
    target_rectangle.w = 48;
    target_rectangle.h = 48;

    SDL_SetRenderDrawColor(renderer,255,255);
    SDL_RenderDrawLine(renderer,50,0);

    SDL_Rendercopy(renderer,texture,&target_rectangle);

    SDL_RenderPresent(renderer);
        
    SDL_Event event;
    while(1)
    {
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
                case SDL_QUIT:
                return;
                break;
            }
        }

        SDL_Delay(10);
    }
}

代码创建了一些虚拟的空白纹理 texture。我对从位图文件加载的纹理得到了相同的行为。这些行是重要的:

SDL_SetRenderDrawColor(renderer,255);
SDL_RenderDrawLine(renderer,0);

SDL_Rendercopy(renderer,&target_rectangle);

SDL_RenderPresent(renderer);

所以在白色像素的某处画一条线,然后将虚拟纹理复制到屏幕上,并显示它。当我这样做时,我会在纹理的右下角看到一个白色像素。

enter image description here

正如我所说,当纹理来自位图时,我也使用如下代码得到了这一点:

SDL_Surface *bitmap_surface = SDL_LoadBMP("test.bmp");
SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer,bitmap_surface);
SDL_FreeSurface(bitmap_surface);

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)