С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141

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

23.02.2025, 17:23. Показов 28246. Ответов 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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
Просмотров: 115

Размер: 5.3 Кб

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

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

Размер: 3.1 Кб

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

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

Размер: 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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
11.03.2025, 18:45
У меня такого не было. Возможно, что не выбран EXE. На панели инструментов VS есть выпадающий список: "Локальный отладчик Windows". Надо кликнуть на эту строку и выбрать EXE.
Я забыл обновить страницу перед ответом.
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 141
11.03.2025, 18:55  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я забыл обновить страницу перед ответом.
Вы имели ввиду это? (скрин ниже)

0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru