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

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

23.02.2025, 17:23. Показов 30501. Ответов 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
Сообщений: 147
06.03.2025, 08:24  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Есть идея проверить может ли SDL нарисовать что-либо, например, линию или прямоугольник на вашем компьютере. Можно попробовать скопировать и запустить какой-нибудь учебный пример из официальных примеров
Проверял - рисует.
0
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 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
Просмотров: 119

Размер: 5.3 Кб

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

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

Размер: 3.1 Кб

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

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

Размер: 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
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 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
Сообщений: 147
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
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 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
Сообщений: 147
06.03.2025, 21:13  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Попробовали бы не самую последнюю версию SDL_Image.
Последние версии продуктов часто содержать различные баги.
Пробовал разные и да же самые первые - результат ноль. Может быть спец сел бы за мой системник и разобрался, что к чему. Но я к нему не отношусь - я только учусь

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Старайтесь для каждого отдельного вопроса создавать отдельную тему, тогда будет проще искать что-то из прошлого по списку ваших тем в профиле. Я периодически буду поглядывать в ваш профиль - в список ваших тем и сообщений на форуме.
Хорошо, я понял. Спасибо!!
0
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 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
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 242
07.03.2025, 18:23
cosmos44, вы не могли бы запустить EXE с выводом текста из сообщения выше?
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
07.03.2025, 20:03  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
cosmos44, вы не могли бы запустить EXE с выводом текста из сообщения выше?
Если вы имели ввиду - text-sdl3-ttf-exe.zip - скрин ниже

1
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 242
07.03.2025, 20:15
Если нечего не менять в путях, а просто попробовать запустить в VS прикреплённый проект, заработает ли у вас с первого раза:
Вложения
Тип файла: zip text-sdl3-ttf.zip (10.39 Мб, 6 просмотров)
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
07.03.2025, 21:03  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если нечего не менять в путях, а просто попробовать запустить в VS прикреплённый проект, заработает ли у вас с первого раза:
Ошибка - скрин ниже
1
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 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
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 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
Сообщений: 147
10.03.2025, 06:41  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
cosmos44, практикуйтесь лучше с raylib, вместо SDL
Спасибо за инфо!
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
11.03.2025, 18:37  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
cosmos44, практикуйтесь лучше
Проблема с отображением "Средства диагностики". Может что то нужно подгрузить в VS?
Ответ - "Служба не ответила на запрос своевременно.
(HRESULT: 0xe1110002)
Не удается запустить "SDL3_game". Выдано исключение типа "Microsoft.DiagnosticsHub.Diagnostics.Co llectionStartFailedHubException
"."

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

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

0
9951 / 2952 / 497
Регистрация: 05.10.2013
Сообщений: 8,042
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru