// Sprite.
if(ImGui::CollapsingHeader("Sprite.")) {
// Preview texture allocations.
sf::Texture texture;
// ...
static char spritePath[MAX_OBJECTS_TEXT_SIZE / 2]; // (512 / 2)
// ...
if(ImGui::InputText("Sprite path.##sprite", spritePath, IM_ARRAYSIZE(spritePath))) {
texture.loadFromFile(spritePath); // <- загрузка
}
// ...
// Preview. (150, 150).
ImGui::Image(texture, sf::Vector2f(DEFAULT_TEXTURE_PREVIEW_WIDTH, DEFAULT_TEXTURE_PREVIEW_HEIGHT), sf::Color::Transparent, sf::Color::White);
}
В результате получается пустой квадрат:
example.png - точно существует и ошибок нету (о том что не удалось загрузить текстуру).
Из документации SFML -
Вы успешно загрузили текстуру, правильно построили спрайт, и... теперь все, что вы видите на своем экране, это белый квадрат. Что случилось?
Это распространенная ошибка. Когда вы устанавливаете текстуру спрайта, все, что он внутри делает, это сохраняет указатель на экземпляр текстуры. Поэтому, если текстура уничтожается или перемещается в другое место в памяти, спрайт оказывается с недопустимым указателем текстуры.
sf::Sprite loadSprite(std::string filename)
{
sf::Texture texture;
texture.loadFromFile(filename);
return sf::Sprite(texture);
} // error: the texture is destroyed here (ошибка: спрайт уничтожен сдесь)
Я не понимаю почему текстура уничтожается, если я ее создал в одном блоке if? и как сделать что бы она не уничтожалась?
UPD: Функция ImGui::Image - рисует изображение в следующием кадре, а уже в следущем кадре текстура удаляется