SDL 2.0 - 空白屏幕

时间:2014-08-03 21:12:19

标签: c++ 2d rendering sprite sdl-2

我花了一些时间使用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);
}

1 个答案:

答案 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将绘制纹理全窗口大小)