gpt4 book ai didi

c++ - SDL 2.0 - 空白屏幕

转载 作者:行者123 更新时间:2023-11-30 02:44:43 26 4
gpt4 key购买 nike

我花了一些时间使用 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 的纹理

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

关于c++ - SDL 2.0 - 空白屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25109165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com