私は C++ で SDL と OpenGL を使用しています。MVSC ++では、それが問題になる場合。
これが私がやろうとしていることです: 画像ファイルを取り、それを SDL_Surface* として読み込みたいです。その部分は私がダウンしています。最後に、SDL_Surface* を取得して、そこから OpenGL テクスチャを作成します。私も取り組んでいるその部分。
中途半端なところが困ります。元の SDL_Surface* を使用して、2 のべき乗の寸法を持つ新しい空白のサーフェスを作成したいと考えています。次に、元のサーフェスをこの新しいサーフェスにブリットします。しかし、それは私に黒を与えているだけです。ブリットが発生していないか、OpenGL が結果のサーフェスからテクスチャを生成できないと思われます。
これが実際に私に問題を引き起こしているコードです。明確にするために、この部分を省略しても問題なく動作しますが、2 の累乗のテクスチャしか使用できません。
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;
};
私の読書から、OpenGLを使用する場合、SDL_BlitSurface()を使用することは禁止されていることがわかりました。したがって、OpenGL コンテキストで 1 つの SDL_Surface* を別の SDL_Surface* に適切にブリットする方法を知りたいと思います。
OpenGL 関数を使用して 2 の累乗でない次元のサーフェスからテクスチャを生成できることは知っていますが、見苦しくぼやけたテクスチャが作成されます。