1

私は 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 の累乗でない次元のサーフェスからテクスチャを生成できることは知っていますが、見苦しくぼやけたテクスチャが作成されます。

4

1 に答える 1

0

まあ、私はそれをする必要はありませんでした。datenwolf が指摘したように、2 次元画像の力は必要ありません。あるサーフェスを別のサーフェスにブライトする必要がある場合は、代わりにフレーム バッファ オブジェクトとテクスチャを使用します。

于 2013-08-14T17:56:58.383 に答える