c - 为什么在 SDL 中渲染纹理时会出现虚假的白色像素?
问题描述
我正在使用 SDL2 在屏幕上绘制一些东西。这是一些代码:
#include <SDL.h>
void main()
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 500, 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, 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, 255, 255);
SDL_RenderDrawLine(renderer, 0, 50, 50, 0);
SDL_RenderCopy(renderer, texture, 0, &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, 255, 255, 255);
SDL_RenderDrawLine(renderer, 0, 50, 50, 0);
SDL_RenderCopy(renderer, texture, 0, &target_rectangle);
SDL_RenderPresent(renderer);
所以在白色像素的某处画一条线,然后将虚拟纹理复制到屏幕上,并将其全部显示出来。当我这样做时,我在纹理的右下角得到一个白色像素。
正如我所说,当纹理来自使用如下代码的位图时,我也会得到这个:
SDL_Surface *bitmap_surface = SDL_LoadBMP("test.bmp");
SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, bitmap_surface);
SDL_FreeSurface(bitmap_surface);
解决方案
推荐阅读
- c# - 检查驱动是否卸载
- html - 404页面不显示
- javascript - 我的 js lib 问题中针对函数和元素的双重方法
- ios - 如何在ios中初始化我的ViewController扩展中的ui元素,swift
- c# - 输入数组长于此表中的列数
- angular - ag-grid中复选框的两种方式数据绑定
- html - My default option don't show in my select
- php - Get current directory name in htaccess and prevent redirection
- javascript - Why can't I retrieve a CSS style property for an element using JS?
- xamarin - MMP : error MM5109: Native linking failed with error code 1. 检查构建日志以获取详细信息