我花了一些时间使用SDL 1.2并制作了一个好的系统。我正在尝试将其转换为2.0,但我很难让它主要用于渲染纹理。我的屏幕永远是黑色的,据我所知,没有错误,但纹理没有呈现在我的屏幕上。有人能指出问题是什么吗?图像确实被识别但只是不呈现。
以下是相关的源代码:
m_window = SDL_CreateWindow
(NAME, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
w, h, 0);
m_renderer = SDL_CreateRenderer(m_window, -1, 0);
SDL_SetRenderDrawColor(m_renderer, 0, 0, 0, 255);
SDL_RenderClear(m_renderer);
SDL_RenderPresent(m_renderer);
bool Image::Load(const std::string& filename)
{
m_surface = IMG_Load(filename.c_str());
assert(m_surface);
m_texture = SDL_CreateTextureFromSurface(
m_renderer, m_surface);
SDL_FreeSurface(m_surface);
return(m_texture != 0);
}
void Image::Draw(const Vec2f& pos)
{
SDL_Rect dest;
dest.h = 0;
dest.w = 0;
dest.x = (int)pos.GetX();
dest.y = (int)pos.GetY();
SDL_RenderCopy(m_renderer, m_texture, NULL, &dest);
}
答案 0 :(得分:3)
您正在绘制高度和宽度为0
的纹理void Image::Draw(const Vec2f& pos)
{
SDL_Rect dest;
dest.h = 0; <------ Needs a valid size
dest.w = 0; <------ Needs a valid size
dest.x = (int)pos.GetX();
dest.y = (int)pos.GetY();
SDL_RenderCopy(m_renderer, m_texture, NULL, &dest);
}
您需要为纹理提供一个有效的大小,以确定是否是您决定的内容,或者是否是在加载时存储在某处的纹理的实际大小。
要测试,只需为宽度和高度赋予100个任意值,或者只传递NULL
而不是&dest
(传递NULL将绘制纹理全窗口大小)