テクスチャの作成と破棄
SDLでテクスチャの作成と破棄をするには、「SDL_CreateTexture関数」と「SDL_DestroyTexture関数」を使用します。
SDL_CreateTexture関数
テクスチャを作成します。
宣言
SDL_Texture* SDL_CreateTexture(
SDL_Renderer* renderer,
Uint32 format,
int access,
int w,
int h
);
引数
renderer | レンダラのアドレスです。 |
format | テクスチャのピクセル形式です。 この引数には、 SDL_PixelFormatEnum 型の値を指定します。 |
access | テクスチャのアクセス方式です。 この引数には、 SDL_TextureAccess 型の値を指定します。 |
w | テクスチャの幅です。 |
h | テクスチャの高さです。 |
戻り値
作成に成功すると「テクスチャのアドレス」を返し、失敗すると「NULL
」を返します。
SDL_DestroyTexture関数
テクスチャを破棄します。
宣言
void SDL_DestroyTexture( SDL_Texture* texture );
引数
texture | テクスチャのアドレスです。 |
サンプルプログラム
#include <SDL.h>
const auto WINDOW_WIDTH = 1280;
const auto WINDOW_HEIGHT = 720;
SDL_Window* g_window = nullptr;
SDL_Renderer* g_renderer = nullptr;
SDL_Texture* g_texture = nullptr;
bool Initialize();
void Finalize();
int main( int argc, char* argv[] )
{
if ( !Initialize() )
{
Finalize();
return -1;
}
// テクスチャを使用した処理
Finalize();
return 0;
}
bool Initialize()
{
if ( SDL_Init( SDL_INIT_VIDEO ) != 0 )
{
SDL_Log( u8"SDLの初期化処理に失敗しました。エラーメッセージ: %s", SDL_GetError() );
return false;
}
g_window = SDL_CreateWindow(
u8"サンプル",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
WINDOW_WIDTH,
WINDOW_HEIGHT,
0
);
if ( g_window == nullptr )
{
SDL_Log( u8"ウィンドウの作成に失敗しました。エラーメッセージ: %s", SDL_GetError() );
return false;
}
g_renderer = SDL_CreateRenderer(
g_window,
-1,
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC
);
if ( g_renderer == nullptr )
{
SDL_Log( u8"レンダラの作成に失敗しました。エラーメッセージ: %s", SDL_GetError() );
return false;
}
g_texture = SDL_CreateTexture(
g_renderer,
SDL_PIXELFORMAT_RGBA32,
SDL_TEXTUREACCESS_TARGET,
WINDOW_WIDTH,
WINDOW_HEIGHT
);
if ( g_texture == nullptr )
{
SDL_Log( u8"テクスチャの作成に失敗しました。エラーメッセージ: %s", SDL_GetError() );
return false;
}
return true;
}
void Finalize()
{
if ( g_texture != nullptr ) SDL_DestroyTexture( g_texture );
if ( g_renderer != nullptr ) SDL_DestroyRenderer( g_renderer );
if ( g_window != nullptr ) SDL_DestroyWindow( g_window );
SDL_Quit();
}