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

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

23.02.2025, 17:23. Показов 31108. Ответов 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
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
27.02.2025, 21:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от cosmos44 Посмотреть сообщение
show-image-source.zip
У меня работает даже без добавления путей в CMakePresents.json. Надо установить по моим инструкциями добавить пути к bin-папкам, где лежат DLL, в Windows PATH, примерно как у меня:

Тогда точно всё должно работать. Вам даже не надо будет добавлять пути в CMakePresents.json в каждом проекте. Вам нужно будет только в новых проектах в файле CMakeLists.txt дописывать три строки:
Code
1
2
3
find_package(SDL3)
find_package(SDL3_image)
target_link_libraries(show-image PRIVATE SDL3_image::SDL3_image SDL3::SDL3)
Здесь находится две библиотеки через find_package(), а потом они линкуются с именами SDL3_image::SDL3_image и SDL3::SDL3. Только нужно, чтобы SDL3::SDL3 было в конце, а остальные SDL-библиотеки шли до SDL3::SDL3.
Миниатюры
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
28.02.2025, 18:33  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
У меня работает даже без добавления путей в CMakePresents.json. Надо установить по моим инструкциям
Я уже создал проект CMake, но нужно разбираться. Я впервые работаю в VS и изучаю C

Спасибо! Буду мучать через пару дней.
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
28.02.2025, 20:40
У меня появилась идея. Надо вам попробовать запустить этот пример на SDL3 без подключения SDL3_image, чтобы убедиться, что хотя бы SDL3 работает или нет. Какие ошибки выдаёт прикреплённый пример?
Вложения
Тип файла: zip hello-sdl3.zip (2.1 Кб, 3 просмотров)
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
01.03.2025, 06:36  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Какие ошибки выдаёт прикреплённый пример?
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
01.03.2025, 14:04
Надо два момента уточнить. В примере выше в файле CMakePresents.json выставлен путь к SDL3: C:\\SDL3-3.1.10\\cmake

JSON
1
2
3
4
5
6
7
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "SDL3": {
                    "value": "C:\\SDL3-3.1.10\\cmake",
                    "type": "PATH"
                }
            }
У вас должен существовать этот путь. Проверьте, чтобы номера версии совпадали:



Я скачал сборку SDL3-3.1.10 по ссылке: https://github.com/libsdl-org/... ase-3.1.10



И добавьте путь к bin в PATH:



Миниатюры
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
01.03.2025, 15:54
Всё, скорее всего, проблема должна решиться, но если опять ошибка, то сообщите об этом. Я описал проблему на официальном Discord* сервере SDL (* - Discord запрещён на территории РФ). Там ответили, что нужно использовать имя "SDL3_DIR" вместо "SDL3". То есть замените "SDL3" на "SDL3_DIR" в файле CMakePresets.json таким образом:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        {
            "name": "x64-debug",
            "displayName": "x64 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x64",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "SDL3_DIR": {
                    "value": "C:\\SDL3-3.1.10\\cmake",
                    "type": "PATH"
                }
            }
        },
Точно так же надо заменить имя "SDL3_image" на "SDL3_image_DIR" в проекте с выводом текстуры. Проверьте это обязательно, должно сработать.
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
02.03.2025, 12:39
Сегодня вышли официальные релизы SDL3_image и SDL3_ttf. SDL3_ttf - библиотека для работы с текстом.
Скачайте официальный архив релиза SDL3_image:



Разархивируйте, например, в папку "libs" на диске C и скопируйте путь:



Используйте переменную "SDL3_image_DIR" вместо "SDL3_image" в файле CMakePresets.json:

JSON
1
2
3
4
5
6
7
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "SDL3_image_DIR": {
                    "value": "C:\\libs\\SDL3_image-3.2.2\\cmake",
                    "type": "PATH"
                }
            }
Скоро должен выйти релиз SDL3_mixer - это библиотека для воспроизведения звуков из аудио файлов. На мой взгляд можно какое-то время уделять использованию этих библиотек, но, по-моему, намного полезнее для изучения основ компьютерной графики использовать шейдерный OpenGL вместо SDL3_image. На OpenGL не очень сложно сделать спрайтовую анимации и выводить выводить текст с помощью BMFont. Но для начала лучше всего использовать SDL3_image и SDL3_ttf и сделать на них несколько небольших игровых демок, типа: Змейку, Арканойд, Тетрис, Сапёр и т.д. На шейдерном OpenGL легко увидеть, как матрица действует на вектор и вершинном шейдере и прочие основы компьютерной графики и базовой линейной алгебры.

Запустите следующий пример, чтобы проверить будет ли он у вас работать. Не забудьте в файле CMakePresets.json подправить пути к SDL3 и SDL3_image, если это необходимо. Не забывайте использовать "_DIR" в именах переменных путей:

JSON
1
2
3
4
5
6
7
8
9
10
11
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "SDL3_DIR": {
                    "value": "C:\\libs\\SDL3-3.1.10\\cmake",
                    "type": "PATH"
                },
                "SDL3_image_DIR": {
                    "value": "C:\\libs\\SDL3_image-3.2.2\\cmake",
                    "type": "PATH"
                }
            }
Миниатюры
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
02.03.2025, 12:51
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Запустите следующий пример, чтобы проверить будет ли он у вас работать.
Забыл прикрепить пример со спрайтовой анимацией на SDL3 API к предыдущему сообщению. Может вам пригодится.

Миниатюры
Вложения
Тип файла: zip sprite-animation.zip (70.0 Кб, 10 просмотров)
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
04.03.2025, 16:39  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Забыл прикрепить пример со спрайтовой анимацией на SDL3 API к предыдущему сообщению. Может вам пригодится.
Скачал, проверил пути - ошибка та же - target_link_libraries(app PRIVATE SDL3::SDL3)
Пока не буду парить мозги. Завтра на системник поставлю 11 винду и попробую все заново.
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
04.03.2025, 16:50  [ТС]
Ошибок нет! Но и спрайта так же нет.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Забыл прикрепить пример со спрайтовой анимацией на SDL3 API к предыдущему сообщению. Может вам пригодится.

Миниатюры
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
04.03.2025, 17:50
Цитата Сообщение от cosmos44 Посмотреть сообщение
Ошибок нет! Но и спрайта так же нет.
Можно попробовать скопировать эту строку кода после разных функций SDL:
C++
1
SDL_Log("%s", SDL_GetError());
Например, добавить её после создания окна и рисовальщика:
C++
1
2
3
4
5
6
7
    if (!SDL_CreateWindowAndRenderer("Sprite animation using SDL3 and C++",
        350, 350, 0, &window, &renderer)) //
    {
        SDL_Log("Couldn't create window/renderer: %s", SDL_GetError());
        return SDL_APP_FAILURE;
    }
    SDL_Log("%s", SDL_GetError());
И после загрузки текстуры:
C++
1
2
3
4
5
6
7
    const char* texturePath = "./assets/sprites/spritesheet.png";
    texture = IMG_LoadTexture(renderer, texturePath);
    if (!texture) {
        SDL_Log("Couldn't load %s: %s\n", texturePath, SDL_GetError());
        return SDL_APP_FAILURE;
    }
    SDL_Log("%s", SDL_GetError());
SDL_GetError() возвращает строку описывающую ошибку, если ошибка происходит.
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
04.03.2025, 20:35  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Можно попробовать скопировать эту строку кода после разных функций SDL:
В main.cpp условия прописаны. Но как и с первого скрипта (ящик) ошибка вылазит только после сборки в файл exe.

0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
04.03.2025, 20:42  [ТС]
Выполнил сборку повторно. Сейчас выдает ошибку

>------ Сборка запущено: проект: CMakeLists, конфигурация: Debug ------
[1/2] Building CXX object CMakeFiles\app.dir\src\main.cpp.obj
FAILED: CMakeFiles/app.dir/src/main.cpp.obj
C:\PROGRA~1\MICROS~1\2022\COMMUN~1\VC\To ols\MSVC\1443~1.348\bin\Hostx64\x64\cl.e xe /nologo /TP -external:IC:\SDL3_image-3.2.2\cmake\..\include -external:IC:\SDL3-3.1.10\include -external:W0 /DWIN32 /D_WINDOWS /EHsc /Zi /Ob0 /Od /RTC1 -MDd /showIncludes /FoCMakeFiles\app.dir\src\main.cpp.obj /FdCMakeFiles\app.dir\ /FS -c C:\Users\ut0md\Downloads\sprite-animation\sprite-animation\src\main.cpp
C:\SDL3-3.1.10\include\SDL3\SDL_stdinc.h(51): fatal error C1083: Не удается открыть файл включение: stdarg.h: No such file or directory,
ninja: build stopped: subcommand failed.


0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
04.03.2025, 20:56
Цитата Сообщение от cosmos44 Посмотреть сообщение
Выполнил сборку повторно. Сейчас выдает ошибку
Если удалить папку "out", то после Ctrl+F5 ошибка появляется снова? Получается, вы ничего не делали. Сначала проект собрался, а при повторной сборки выдал ошибку?
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
04.03.2025, 21:33  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если удалить папку "out", то после Ctrl+F5 ошибка появляется снова
Нет! Дело в том что ошибок из условий нет. Не знаю, запустится ли у вас app.exe ?????????
x64-debug.zip
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
04.03.2025, 21:58
Цитата Сообщение от cosmos44 Посмотреть сообщение
запустится ли у вас app.exe
Да, app.exe запускается и анимация проигрывается. Попробуйте закрыть VS, удалить папки ".vs" и "out", запустите VS снова и откройте проект: File > Open > CMake > выберите файл CMakeLists.txt
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
04.03.2025, 23:08
Я кое-что придумал. Прикрепил тот же пример, но добавил библиотеки по относительным путям. В нём не надо менять пути. Запускается ли он?

В этом примере я скопировал библиотеки в папку с проектом:

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

Размер: 6.2 Кб

Подключил эти библиотеки по относительным путям:

JSON
1
2
3
4
5
6
7
8
                "SDL3_DIR": {
                    "value": "..\\libs\\SDL3-3.2.6\\cmake",
                    "type": "PATH"
                },
                "SDL3_image_DIR": {
                    "value": "..\\libs\\SDL3_image-3.2.4\\cmake",
                    "type": "PATH"
                }
Очень интересно, заработает у вас или нет. Запустите VS и откройте прикреплённый проект: File > Open > CMake > выберите файл CMakeLists.txt в прикреплённой папке
Вложения
Тип файла: zip sprite-animation-libs.zip (10.74 Мб, 0 просмотров)
0
8 / 6 / 4
Регистрация: 21.05.2022
Сообщений: 147
05.03.2025, 07:12  [ТС]
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Очень интересно, заработает у вас или нет. Запустите VS и откройте прикреплённый проект: File > Open > CMake > выберите файл CMakeLists.txt в прикреплённой папке
Во второй половине дня все опробую.
Правильно ли я вас понял?! Архив x64-debug.zip (высылал ранее) файл app.exe запускается и проигрывается анимация? У меня данный файл запускается, но спрайта нет и ошибок также нет.
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
05.03.2025, 09:16
Цитата Сообщение от cosmos44 Посмотреть сообщение
Во второй половине дня все опробую.
Картинка, скорее всего, не будет работать, но зато можно будет убедиться, что проект собирается, когда библиотеки подключены по относительным путям ..\libs Очень интересно соберётся или нет.

Цитата Сообщение от cosmos44 Посмотреть сообщение
Правильно ли я вас понял?! Архив x64-debug.zip (высылал ранее) файл app.exe запускается и проигрывается анимация?
Да, анимация проигрывается. Причём я специально запускал на ноутбуке 2011 года на интегрированной карте Intel 3000, где максимум можно обновить графические драйвера до OpenGL 3.1. На ноутбуке Asus K53SV две видео карты:
  • Intel HD Graphics 3000 - OpenGL 3.1
  • GeForce GT 540 M - OpenGL 4.6
Название: e3fc12b5069a4ea5f3676682d496c6ad4fc3a101.png
Просмотров: 48

Размер: 1.8 Кб
Драйвер для видео карты Intel 3000 от 10 мая 2016 года:
Название: 1ac6e07e299159cd5a66fec0af73388fca59bcfd.png
Просмотров: 48

Размер: 5.1 Кб
Драйвер для GeForce от 18 декабря 2017 года:
Название: 75f8940b1759b49f4bcc10ba4e9285e8a0d609ae.png
Просмотров: 45

Размер: 5.1 Кб
Я выбрал запуск с Intel 3000 c OpenGL 3.1:

Анимация запустилась:

Я вам позже спину пример в виде EXE на OpenGL 2.1 с окном на SDL3, который выведет версию OpenGL. Возможно API SDL3 требует как минимум OpenGL 3.0. Возможно у вас нет OpenGL 3.0, но, скорее всего, должен быть OpenGL 2.1. Я ссылаюсь на ваше сообщение, где вы писали что у вас драйвера примерно от 2014 года:
Цитата Сообщение от cosmos44 Посмотреть сообщение
Может быть у меня на данном компе железо 20-ти летней давности стоит. Драйвера-> последняя версия (10лет назад).
Миниатюры
0
9987 / 2959 / 497
Регистрация: 05.10.2013
Сообщений: 8,110
Записей в блоге: 243
05.03.2025, 11:34
Я неправильно написал пути в прикреплённом примере в сообщении #57:
JSON
1
2
3
4
5
6
7
8
                "SDL3_DIR": {
                    "value": "..\\libs\\SDL3-3.2.6\\cmake",
                    "type": "PATH"
                },
                "SDL3_image_DIR": {
                    "value": "..\\libs\\SDL3_image-3.2.4\\cmake",
                    "type": "PATH"
                }
Там написано точки перед \\libs, а нужно написать одну:
JSON
1
2
3
4
5
6
7
8
                "SDL3_DIR": {
                    "value": ".\\libs\\SDL3-3.2.6\\cmake",
                    "type": "PATH"
                },
                "SDL3_image_DIR": {
                    "value": ".\\libs\\SDL3_image-3.2.4\\cmake",
                    "type": "PATH"
                }
Исправил:
Вложения
Тип файла: zip sprite-animation-libs.zip (10.74 Мб, 2 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2025, 11:34

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru