次のコードは、黒い背景に緑の正方形を表示することを目的としています。実行されますが、緑色の四角は表示されません。ただし、正方形に変更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;
}