4

SDL で透明なサーフェスを作成する方法を探していたところ、次のサイトが見つかりました

基本的には、次のとおりです。

SDL_Surface* surface;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
surface = SDL_CreateRGBSurface(SDL_HWSURFACE,width,height,32, 0xFF000000, 0x00FF0000,        0x0000FF00, 0x000000FF);
#else
surface = SDL_CreateRGBSurface(SDL_HWSURFACE,width,height,32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);
#endif

それは機能しますが、私にはかなりひどいように思えるので、これを行うためのより良い方法があるかどうか疑問に思っていました.

4

3 に答える 3

1

あなたが持っているのは、コンピューターがビッグエンディアンまたはリトルエンディアンを使用しているかどうかを確認するためのチェックです。SDL はマルチプラットフォームであり、コンピュータは異なるエンディアンを使用します。

その記事の著者は、「プラットフォームにとらわれない」方法で書いていました。これを PC で実行している場合は、おそらく以下を使用するだけで安全です。

surface = SDL_CreateRGBSurface(SDL_HWSURFACE,width,height,32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);

条件は必要ありません。

そうは言っても、ビッグエンディアンを使用する他のプラットフォームにコードを移植することはできません。

于 2013-05-17T14:22:39.030 に答える
-1

実際にはこれをアルファ ブレンディングと呼んでいます。こちらで確認できます: http://lazyfoo.net/tutorials/SDL/13_alpha_blending/index.php

于 2015-04-11T19:15:19.107 に答える