SDL_CreateSurfaceFrom (SDL3) неправильно читает мои данные?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 SDL_CreateSurfaceFrom (SDL3) неправильно читает мои данные?

Сообщение Anonymous »


Я пытаюсь создать текстуру SDL из шума Перлина. Я создал массив uint8_t и заполнил его значениями шума, умноженными на 255. Когда я распечатываю значения, они кажутся в порядке:

127, 137, 134, 136, 127, 127, 127, 118, 120, 117, 137, 148, 144, 146, 137, 137, 137, 128, 130, 127, 134, 144, 141, 143, 134, 134, 134, 125, 127, 124, 136, 146, 143, 145, 136, 136, 136, 127, 129, 126, 127, 137, 134, 136, 127, 127, 127, 118, 120, 117, 127, 137, 134, 136, 127, 127, 127, 118, 120, 117, 127, 137, 134, 136, 127, 127, 127, 118, 120, 117, 118, 128, 125, 127, 118, 118, 118, 109, 111, 108, 120, 130, 127, 129, 120, 120, 120, 111, 113, 110, 117, 127, 124, 126, 117, 117, 117, 108, 110, 106 (например, шум Перлина 10x10)

После этого я вызываю CreateSurfaceFrom SDL с допустимой шириной, высотой, шагом (я думаю) и форматом пикселей как SDL_PIXELFORMAT_INDEX8, а затем создаю текстуру из этой поверхности и пытаюсь отрендерите это. К сожалению, результат не тот, который мне нужен, в основном черный или белый экран.

Я также пробовал эти форматы пикселей, но только последний дал некоторый результат, но все равно не совсем правильно:

SDL_PIXELFORMAT_UNKNOWN SDL_PIXELFORMAT_INDEX4LSB SDL_PIXELFORMAT_INDEX4MSB SDL_PIXELFORMAT_INDEX1LSB SDL_PIXELFORMAT_INDEX1MSB И вот результат: вывод SDL_PIXELFORMAT_INDEX1MSB

Также вот код:

uint8_t sdlPixels[_perlinWidth*_perlinHeight]; for (int i = 0; i < _perlinWidth*_perlinHeight; i++) { sdlPixels = static_cast(_pixels*255); std::cout CreateTextureFromSurface(поверхность); удалить [] _pixels; _pixels = nullptr; // очищаем данные _pixel А вот функции Renderer (просто отображенные функции SDL):

SDL_Surface* Renderer::CreateSurfaceFrom(void* пикселей, int ширина, int высота, int шаг, формат Uint32) { return SDL_CreateSurfaceFrom(пиксели, ширина, высота, шаг, формат); } SDL_Texture* Renderer::CreateTextureFromSurface(SDL_Surface* поверхность) { SDL_Texture* out = SDL_CreateTextureFromSurface(_renderer, поверхность); SDL_DestroySurface (поверхность); // свободная поверхность (текстура у нас уже есть) вернуться; } Являются ли пиксельные данные недопустимыми в формате, который я указываю в качестве аргумента, или я что-то пропустил при создании текстуры из SDL_Surface в SDL3?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»