Блиттинг с SDL в контексте OpenGL

Я SDL и OpenGL в C ++. В MVSC ++, если это вообще имеет значение.

Вот что я пытаюсь сделать: я хочу взять файл изображения и загрузить его как SDL_Surface *. Эта часть у меня внизу. Последняя часть, которую я хочу сделать, это взять этот SDL_Surface * и создать из него текстуру OpenGL. Эта часть у меня тоже работает.

Средняя часть, где у меня проблемы. Я хочу взять исходный SDL_Surface * и создать новую пустую поверхность с размерами, равными степени двух; тогда я переверну исходную поверхность на эту новую. Это просто дает мне черный; Я подозреваю, что или блиц не происходит, или что OpenGL не может генерировать текстуру из результирующей поверхности.

Вот код, который на самом деле доставляет мне неприятности. И просто чтобы уточнить, это работает нормально, если я пропущу эту часть, но тогда я могу использовать только текстуры со степенью двойки.

SDL_Surface* padImage(SDL_Surface* image) {
if (!image) {
return NULL;
}

int width = gfx::powerOfTwo(image->w);
int height = gfx::powerOfTwo(image->h);

SDL_Surface* padded = SDL_CreateRGBSurface(image->flags,
width,
height,
image->format->BitsPerPixel,
image->format->Rmask,
image->format->Gmask,
image->format->Bmask,
image->format->Amask);

if (!padded) {
return NULL;
}

SDL_BlitSurface(image, NULL, padded, NULL);

return padded;
};

Из моего прочтения я понял, что использование SDL_BlitSurface () — нет-нет при использовании OpenGL. Поэтому я думаю, что хочу знать, как правильно перетаскивать один SDL_Surface * на другой в контексте OpenGL.

Я знаю, что могу использовать функцию OpenGL для генерации текстуры из не измеряемой степенью поверхности, но она создает некрасивые, размытые текстуры.

1

Решение

Уэлп, мне не нужно было ничего делать. Как отметил datenwolf, мощность двухмерных изображений не нужна. Если мне нужно что-то сделать, например, растереть одну поверхность на другую, я сделаю это с помощью объекта Frame Buffer и текстур.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]