0

次のコードは、黒い背景に緑の正方形を表示することを目的としています。実行されますが、緑色の四角は表示されません。ただし、正方形に変更SDL_DisplayFormatAlphaするとSDL_DisplayFormat正しくレンダリングされます。

それで、何がわからないのですか?*surface私はアルファマスクを使用して作成しているように見えSDL_MapRGBA、緑色をマップするために使用しているように見えるので、使用するSDL_DisplayFormatAlphaのにも一貫性があります。

(わかりやすくするためにエラー チェックを削除しましたが、この例では SDL API 呼び出しが失敗することはありません。)

#include <SDL.h>

int main(int argc, const char *argv[])
{
    SDL_Init( SDL_INIT_EVERYTHING );

    SDL_Surface *screen = SDL_SetVideoMode(
        640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF
    );

    SDL_Surface *temp = SDL_CreateRGBSurface(
        SDL_HWSURFACE, 100, 100, 32, 0, 0, 0,
        ( SDL_BYTEORDER == SDL_BIG_ENDIAN ? 0x000000ff : 0xff000000 )
    );

    SDL_Surface *surface = SDL_DisplayFormatAlpha( temp );

    SDL_FreeSurface( temp );

    SDL_FillRect(
        surface, &surface->clip_rect, SDL_MapRGBA(
            screen->format, 0x00, 0xff, 0x00, 0xff
        )
    );

    SDL_Rect r;
    r.x = 50;
    r.y = 50;

    SDL_BlitSurface( surface, NULL, screen, &r );

    SDL_Flip( screen );

    SDL_Delay( 1000 );

    SDL_Quit();

    return 0;
}
4

1 に答える 1

0

SDL_MapRGBA に間違った形式を使用していました。になるはずだった

SDL_FillRect(
    surface, NULL, SDL_MapRGBA(
        surface->format, 0xff, 0xff, 0x00, 0xff
    )
);

(surface->formatの代わりにscreen->format.) この 2 つは同等だと思いました。そして、それらは を呼び出しSDL_DisplayFormat()た後ではありますが、 を呼び出した後ではありませんSDL_DisplayFormatAlpha()。スクリーン サーフェイスにはアルファ チャネルがないため、両者の形式は異なります。

( gamedev.stackexchange.comからの相互投稿)

于 2012-11-02T02:02:30.837 に答える