8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141

SDL3_image - не отрисовывается текстура

23.02.2025, 17:23. Показов 30229. Ответов 166
Метки sdl (Все метки)

Студворк — интернет-сервис помощи студентам
Не отрисовывается текстура! Путь, формат img, установки и подключения dll - проверил трижды. При наложении текстуры, просто белое поле.
Участок кода (ошибок нет):
C++
1
2
3
4
5
6
7
8
SDL_Texture* player = IMG_LoadTexture(renderer, "2.png");
if (!player) {
    SDL_Log("IMG_LoadTexture: %s\n", SDL_GetError());
}
SDL_RenderTexture(renderer, player, NULL, &rect);
SDL_DestroyTexture(player);
 
SDL_RenderPresent(renderer);
Полный код. Может кто то взглянет опытным глазом где я накосячил?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#define SDL_MAIN_USE_CALLBACKS 1
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include<SDL3_image/SDL_image.h>
#include<iostream>
 
static SDL_Window* window = NULL;
static SDL_Renderer* renderer = NULL;
SDL_FRect rect = { 0, 0, 100, 100 }; // создаем квадрат
int speed = 10;
 
SDL_AppResult SDL_AppInit(void** appstate, int argc, char* argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_CreateWindowAndRenderer("SDL3 Game", 800, 640, 0, &window, &renderer);
    return(SDL_APP_CONTINUE);
}
 
 
SDL_AppResult SDL_AppIterate(void* appstate)
{
    SDL_SetRenderDrawColor(renderer, 30, 30, 30, 255);
    SDL_RenderClear(renderer);
 
    // Получаем массив нажатых клавиш
    const bool* keys = SDL_GetKeyboardState(NULL);
    if (keys[SDL_SCANCODE_W]) {
        rect.y -= speed;
    }
    if (keys[SDL_SCANCODE_S]) {
        rect.y += speed;
    }
    if (keys[SDL_SCANCODE_A]) {
        rect.x -= speed;
    }
    if (keys[SDL_SCANCODE_D]) {
        rect.x += speed;
    }
 
    // Отрисовка квадрата и движение вправо
    SDL_SetRenderDrawColor(renderer, 30, 200, 30, 255);
    SDL_RenderFillRect(renderer, &rect);
 
    SDL_Texture* player = IMG_LoadTexture(renderer, "2.png");
    if (!player) {
        SDL_Log("IMG_LoadTexture: %s\n", SDL_GetError());
    }
    SDL_RenderTexture(renderer, player, NULL, &rect);
    SDL_DestroyTexture(player);
 
    SDL_RenderPresent(renderer);
    SDL_Delay(16);
    return SDL_APP_CONTINUE;
}
 
SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
{
    switch (event->type)
    {
    case SDL_EVENT_QUIT:
        return SDL_APP_SUCCESS;
        break;
 
    default:
        break;
    }
    return SDL_APP_CONTINUE;
}
 
void SDL_AppQuit(void* appstate, SDL_AppResult result)
{
    /* SDL will clean up the window/renderer for us. */
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2025, 17:23
Ответы с готовыми решениями:

Использование opengl. Не отрисовывается квадрат
Начал изучать opengl и столкнулся с трудностью уже на 1 примере, согласно которому должен просто отрисовываться белый квадрат, а у меня как...

Удаление текстур OpenGL
Ребята подскажите как удалить текстуру? Через метод glDeleteTextures, если да то какие параметры она принимает? И есть ли другой способ...

SDL : Неадекватная загрузка текстур
Есть следующее приложение: Programm.h #include &lt;windows.h&gt; #include &lt;SDL.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; #pragma...

166
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
06.03.2025, 08:24  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Есть идея проверить может ли SDL нарисовать что-либо, например, линию или прямоугольник на вашем компьютере. Можно попробовать скопировать и запустить какой-нибудь учебный пример из официальных примеров
Проверял - рисует.
0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
06.03.2025, 14:05
Как странно получается. У вас не водится изображение с использованием SDL3_image 3.2.4 с драйвером с OpenGL 3.3, а у меня драйвер с более младшей версий OpenGL 3.1 - изображение выводится. При рисовании на чистом шейдерном OpenGL 2.1 в окне на SDL3 у вас изображение выводится.

Интересно, будет ли на вашем компьютере выводиться текст при использовании библиотеки SDL3_ttf? Я включил в состав проекта релиз SDL3_ttf 3.2.0 и включил новую версию SDL 3.2.8, которая вышла вчера в релизе:

Название: 3fdc146f8b9554677d1f3ea52789526b8dd013a6.png
Просмотров: 117

Размер: 5.3 Кб

P.S. Вы можете скачать утилиту Dependency Walker. Нажать File > Open... и выбрать собранный в релиз EXE. Утилита покажет от каких .dll зависит EXE. Прикреплённый EXE зависит от следующих .dll:

Название: d2aff811d15703b61fef30eee497c73d8d632b3f.png
Просмотров: 120

Размер: 3.1 Кб

SDL3.dll и SDL3_ttf.dll нужно скопировать к EXE, чтобы запускалось на других компьютерах.
kernel32.dll и msvcrt.dll присутствуют в Windows, поэтому их не нужно передавать пользователям.

Название: b626d008b26e34520342b162e3713cf4b66c9951.png
Просмотров: 114

Размер: 2.5 Кб

P.S.S При повторной сборки EXE можно обновить отображение в DW на F5.
Вложения
Тип файла: zip text-sdl3-ttf.zip (10.48 Мб, 0 просмотров)
Тип файла: zip text-sdl3-ttf-exe.zip (2.49 Мб, 2 просмотров)
0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
06.03.2025, 14:30
Цитата Сообщение от cosmos44 Посмотреть сообщение
Относительный путь - дает ошибку - не верный путь.
Ещё один странный момент. Вы писали, что относительные пути не работают в VS:
JSON
1
2
3
4
5
6
7
8
"SDL3_DIR": {
    "value": ".\\libs\\SDL3-3.2.8\\cmake",
    "type": "PATH"
},
"SDL3_ttf_DIR": {
    "value": ".\\libs\\SDL3_ttf-3.2.0\\cmake",
    "type": "PATH"
}
Но при сборке с помощью MinGW GCC 11.2 (взятого из комплекта Qt) относительные пути у меня работают:

config-mingw.bat

Bash
1
2
3
4
cmake -G "MinGW Makefiles" -S . -B dist\win ^
-DSDL3_DIR=./libs/SDL3-3.2.8/cmake ^
-DSDL3_ttf_DIR=./libs/SDL3_ttf-3.2.0/cmake ^
-DCMAKE_BUILD_TYPE=Release
На MinGW можно собирать то же самые проекты, что работают в VS на CMake.

EXE сообщением выше я собрал из консоли в Release двумя командами, запустив батник выше и команду сборки:
Bash
1
2
3
> config-mingw
> cd dist\win
> cmake --build .
Мне очень удобно запускать программы из CMD. Например, если надо быстро что-то исправить и не хочется ждать несколько десятков секунд, когда запустится VS. Можно быстро запустить легковесный редактор кода Sublime Text 4 или открыть файл в Far Manager, исправить код и быстренько собрать из консоли. Особенно если много мелких примеров требующих правки и пересборки. VS можно запустить, если нужно отладить программу, то есть найти логическую ошибку - поставить точки останова, выполнять по шагам, либо когда хочется использовать IntelliSense, то есть Code completion - автозавершение кода при наборе. Code completion может быть как полезным при обучении - можно описание функций читать, но может быть и вредным, потому что может быть полезным для обучения набирать код самому, а документацию описания функций читать на официальном сайте.

Добавлено через 4 минуты
cosmos44, вы не могли бы в примере с текстом выше попробовать заменить обратные слеши на прямые? Может относительные пути заработают:
JSON
1
2
3
4
5
6
7
8
"SDL3_DIR": {
    "value": "./libs/SDL3-3.2.8/cmake",
    "type": "PATH"
},
"SDL3_ttf_DIR": {
    "value": "./libs/SDL3_ttf-3.2.0/cmake",
    "type": "PATH"
}
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
06.03.2025, 16:31  [ТС]
Лучший ответ Сообщение было отмечено 8Observer8 как решение

Решение

Цитата Сообщение от 8Observer8 Посмотреть сообщение
cosmos44, вы не могли бы в примере с текстом выше попробовать заменить обратные слеши на прямые? Может относительные пути заработают:
В данном случае ошибка синтаксиса. Запустил другой системник, все установил и прописал. Запустил свой же проект где не отображалась текстура. Результат - все работает и отрисовывается.
Остальное попробую позднее. Спасибо за помощь.
С вашего позволения в дальнейшем буду обращаться с вопросами.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
06.03.2025, 16:39
Попробовали бы не самую последнюю версию SDL_Image.
Последние версии продуктов часто содержать различные баги.
0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
06.03.2025, 18:20
Цитата Сообщение от cosmos44 Посмотреть сообщение
С вашего позволения в дальнейшем буду обращаться с вопросами.
Старайтесь для каждого отдельного вопроса создавать отдельную тему, тогда будет проще искать что-то из прошлого по списку ваших тем в профиле. Я периодически буду поглядывать в ваш профиль - в список ваших тем и сообщений на форуме.

Я бы на вашем месте подключил бы Box2D к VS, как SDL3. Я когда собирал эту библиотеку из исходников, то записал каждый шаг: How to install Box2D 2.4.2. А так же записал каждый шаг, как подключить Box2D к VS: Setting up Box2D 2.4.2 Есть новая версия Box2D v3, но она, скорее всего, сырая и по ней мало туториалов.
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
06.03.2025, 21:13  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Попробовали бы не самую последнюю версию SDL_Image.
Последние версии продуктов часто содержать различные баги.
Пробовал разные и да же самые первые - результат ноль. Может быть спец сел бы за мой системник и разобрался, что к чему. Но я к нему не отношусь - я только учусь

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Старайтесь для каждого отдельного вопроса создавать отдельную тему, тогда будет проще искать что-то из прошлого по списку ваших тем в профиле. Я периодически буду поглядывать в ваш профиль - в список ваших тем и сообщений на форуме.
Хорошо, я понял. Спасибо!!
0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
07.03.2025, 13:58
В этом проекте обнаружилось две проблемы. Во первых, у меня текст не отображается при использовании крайней версии SDL 3.2.6. Я прикрепил короткое видео без звука. Правильно написал SmallEvil, что в крайние версии могут внести новые ошибки, исправив старые. Текст отображается на SDL 3.1.10 без проблем. У меня в PATH путь к 3.1.10/bin, поэтому работало. А в отдельной папке с EXE перестало работать с 3.2.6. Прикрепил версию с 3.1.10 с отображением текста на русском и английском. Создал issue по данной проблеме: https://github.com/libsdl-org/SDL_ttf/issues/513

Во-вторых, возникла проблема с отображением кириллицы при запуске из VS:



Я решил эту проблему путём добавления этих срок кода, найденных через гугл, для переключение локали на UTF-8:

C++
1
2
3
4
5
6
7
#include <locale>
 
// This function runs once at startup
SDL_AppResult SDL_AppInit(void** appstate, int argc, char* argv[])
{
    std::locale utf8_locale("en_US.UTF-8"); // Or your desired UTF-8 locale
    std::locale::global(utf8_locale); // Set the global locale.
Локаль - набор параметров, включая набор символов, язык пользователя, страну, часовой пояс, а также другие предустановки, которые пользователь ожидает видеть в пользовательском интерфейсе. (Википедия)


Миниатюры
Вложения
Тип файла: zip text-sdl3-ttf.zip (529.8 Кб, 6 просмотров)
Тип файла: zip text-sdl3-ttf-exe.zip (2.76 Мб, 3 просмотров)
Тип файла: mp4 sdl-does-not-show-text.mp4 (286.3 Кб, 0 просмотров)
0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
07.03.2025, 18:23
cosmos44, вы не могли бы запустить EXE с выводом текста из сообщения выше?
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
07.03.2025, 20:03  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
cosmos44, вы не могли бы запустить EXE с выводом текста из сообщения выше?
Если вы имели ввиду - text-sdl3-ttf-exe.zip - скрин ниже

1
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
07.03.2025, 20:15
Если нечего не менять в путях, а просто попробовать запустить в VS прикреплённый проект, заработает ли у вас с первого раза:
Вложения
Тип файла: zip text-sdl3-ttf.zip (10.39 Мб, 6 просмотров)
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
07.03.2025, 21:03  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если нечего не менять в путях, а просто попробовать запустить в VS прикреплённый проект, заработает ли у вас с первого раза:
Ошибка - скрин ниже
1
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
07.03.2025, 22:22
Ошибок при компиляции нет. Относительные пути теперь работают. Значит, нужно было раньше использовать прямой слеш в CMakePresent.json, а не два обратных. У вас на скриншоте ошибка времени выполнения. Не найдена динамическая библиотека SDL3_ttf.dll Её можно найти в том же архиве в папке libs/SDL3_ttf-3.2.0/lib/x64 Эту библиотеку нужно скопировать рядом с EXE, то есть в папку out/build/x64-debug Потом тоже самое нужно проделать с SDL3.dll, которая тоже находится в архиве выше в папке libs/SDL3-3.1.10/lib/x64
0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
08.03.2025, 20:17
cosmos44, практикуйтесь лучше с raylib, вместо SDL. Я начал её пробовать первый раз в жизни сегодня полтора часа назад. Она вам больше понравится. С ней намного проще работать, чем с SDL. На официальном сайте есть раздел с примерами. В этом разделе представлены примеры простые - одна звезда и более подвинутые - от двух до четырёх звёзд. Пример запускается в браузере и здесь же можно изучить и скопировать код. Я запускал разные пример - вывод текстуры, обработка нажатий клавиш, вывод текста и т.д.

В отличие от SDL, у raylib есть не только 2D API, а ещё и 3D API. Тоже есть сборка приложений для Windows в EXE, для Android в APK, для Web в WASM и т.д. На мой взгляд она лучше, чем SFML, так как есть сборка в WASM - это субъективно для меня, потому что для меня сборка в WASM важна. В отличие от SDL, у raylib сразу всё доступно из одной библиотеки, то есть работа с текстурами, текстом, звуками и т.д.

На странице Release можно скачать готовую сборку библиотеки raylib для VS и MinGW: https://github.com/raysan5/raylib/releases



Подключить можно в CMakeLists.txt командами:

Code
1
2
3
target_include_directories(app PRIVATE ./libs/raylib-5.5_win64_msvc16/include)
target_link_directories(app PRIVATE ./libs/raylib-5.5_win64_msvc16/lib)
target_link_libraries(app PRIVATE raylib winmm)
Это подключение по относительным путям, как у меня в прикреплённом примере, где raylib лежит в папке libs. Вы можете открыть проект в VS 2022: File > Open > CMake > выбрать файл CMakeLists.txt в папке прикреплённого примера. Должно заработать без каких либо дополнительных настроек. У меня работает. Пример выводит изображение и текст.


Миниатюры
Вложения
Тип файла: zip show-image-raylib.zip (2.46 Мб, 0 просмотров)
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
10.03.2025, 06:41  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
cosmos44, практикуйтесь лучше с raylib, вместо SDL
Спасибо за инфо!
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
11.03.2025, 18:37  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
cosmos44, практикуйтесь лучше
Проблема с отображением "Средства диагностики". Может что то нужно подгрузить в VS?
Ответ - "Служба не ответила на запрос своевременно.
(HRESULT: 0xe1110002)
Не удается запустить "SDL3_game". Выдано исключение типа "Microsoft.DiagnosticsHub.Diagnostics.Co llectionStartFailedHubException
"."

0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
11.03.2025, 18:39  [ТС]
Прочитал тут - https://learn.microsoft.com/ru... age-dotnet

0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
11.03.2025, 18:45
У меня такого не было. Возможно, что не выбран EXE. На панели инструментов VS есть выпадающий список: "Локальный отладчик Windows". Надо кликнуть на эту строку и выбрать EXE.
Я забыл обновить страницу перед ответом.
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
11.03.2025, 18:55  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я забыл обновить страницу перед ответом.
Вы имели ввиду это? (скрин ниже)

0
9949 / 2949 / 497
Регистрация: 05.10.2013
Сообщений: 8,028
Записей в блоге: 242
11.03.2025, 19:20
Цитата Сообщение от cosmos44 Посмотреть сообщение
Вы имели ввиду это? (скрин ниже)
Я имел ввиду, что мне надо было обновить страницу форума перед ответом. Я начал отвечать, отвлёкся, дописал ответ, ответил, но потом только увидел, что вы уже решили проблему.

Добавлено через 10 минут
Цитата Сообщение от cosmos44 Посмотреть сообщение
Прочитал тут
Прочитали, как решить проблему? Я всё правильно понял? Или проблема осталась? Я плохо разбираюсь в Visual Studio. Мне больше нравится Sublime Text 4 и сборка через консоль.

Цитата Сообщение от cosmos44 Посмотреть сообщение
Проблема с отображением "Средства диагностики"
Никогда не пользовался. Надо было вам создать новую тему. По правилам, новый вопрос - новая тема. Этот вопрос не связан с отображением текстур. С новой темой больше шансов на ответ, как как эта затянулась и мало кто захочет отвечать в в текущей теме, чтобы не получать уведомления в списке "Темы с моими ответами"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2025, 19:20
Помогаю со студенческими работами здесь

Неправильная отрисовка текстур в OpenGL
Всем доброго дня, недавно начал изучать как работать с графикой и решил повторить пример из урока, а именно - вращающийся кубик. Но...

QRubberBand медленно отрисовывается
С помощью QRubberBand выделяю участок наследника QGraphicsView для последующего сохранения, решил поставить ограничение на мышь чтобы если...

Не отрисовывается график
учусь делать оконное приложение вот по этому уроку. http://doc.qt.io/Qt-5/Qtqml-tutorials-extending-qml-example.html получилось...

Генератор текстур( с чего начать)
Всем привет, решил для своего 3д проекта написать генератор текстур, пока что необходима текстура булыжника. Никто не подскажет с помощью...

Qt с++ картинка постоянно отрисовывается
Ребята помогите пожалуйста, картинки один раз перемешивались и орисовывались и всё... а у меня эти действии повторяются каждый раз когда я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Опции темы

Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru