Я 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 для генерации текстуры из не измеряемой степенью поверхности, но она создает некрасивые, размытые текстуры.
Уэлп, мне не нужно было ничего делать. Как отметил datenwolf, мощность двухмерных изображений не нужна. Если мне нужно что-то сделать, например, растереть одну поверхность на другую, я сделаю это с помощью объекта Frame Buffer и текстур.
Других решений пока нет …