SDLを使用したハードウェアバッファリング、動作方法に関する質問
-
03-07-2019 - |
質問
私は最初のゲームをすることに決めました。それはシンプルになりますが、c ++を使用したいので、学習にSDLを選択しました。私の質問は、「バッファ」がどのようにコードを記述するときに処理されます。関連するコードを下部に投稿します。
そう、基本的に私が理解しているのは、SDLが実際に画面に描画されているバッファを処理するということです。バッファーに書き込むときは、常に書き込み先のバックバッファー、または現在画面に描画されていないバッファーになります。したがって、SDL_Flip(screen)を呼び出すと、「blits」画面の表面をバックバッファーに移動してから、バッファーが描画されているポインターを、以前使用していたバッファーに移動し、現在表示していた古いバッファーがバックバッファーになります。この時点でSDL_FillRect(arguments)を呼び出すと、現在のバックバッファーで実行されますか?
「ハートビート」全体を投稿します。私の質問を明確にするのに役立つかもしれないので、私の学習ゲームの:
//While the user hasn't quit
while( quit == false )
{
//If there's an event to handle
if( SDL_PollEvent( &event ) )
{
//If a key was pressed
if( event.type == SDL_KEYDOWN )
{
//Set the proper message surface
switch( event.key.keysym.sym )
{
case SDLK_UP: message = upMessage; break;
case SDLK_DOWN: message = downMessage; break;
case SDLK_LEFT: message = leftMessage; break;
case SDLK_RIGHT: message = rightMessage; break;
}
}
else if( event.type == SDL_QUIT ) //if the user clicks the little X in the upper right corner.
{
quit = true;
}
}
//If a message needs to be displayed
if( message != NULL )
{
// Clear the back buffer.
SDL_FillRect( SDL_GetVideoSurface(), NULL, 0 );
//Draw the backgroudn to the back buffer.
apply_surface( 0, 0, background, screen );
// Draw the "message" to the back buffer.
apply_surface( ( SCREEN_WIDTH - message->w ) / 2, ( SCREEN_HEIGHT - message->h ) / 2, message, screen );
//Null the surface pointer
message = NULL;
}
//Swap the current and back buffer.
if( SDL_Flip( screen ) == -1 )
{
return 1;
}
}
解決
システム(X11、Linuxフレームバッファー、Windowsなど)に大きく依存し、バックエンドSDLがシステムとの対話に使用します。また、SDL_SetVideoModeに渡すフラグ。基本的に、プログラムのメモリ領域にあるソフトウェアサーフェスと、グラフィカルカードのメモリに配置されるハードウェアサーフェスがあります。あなたが説明していることは、SDL_HWSURFACE | SDL_DOUBLEBUFからSDL。これはすべてのプラットフォームと構成でサポートされているわけではなく、代わりに異なるものが表示される可能性があることを覚えておいてください。