画像を読み込んでウィンドウに描画する
hello.bmpを用意してください。今回の例ですと横640、縦480のサイズで作成すると綺麗に描画します。
ビットマップ形式以外を読み込むには、拡張の画像ライブラリ(SDL2_image)を使用する必要があります。
基本的な処理の流れは
1. 初期化
2. ウィンドウの生成
3. レンダラーの生成
4. 描画するファイルを読み込んでサーフェイスにする
5. サーファイスからテクスチャを生成する
6. 描画する
7. 終了処理
※ エラーが発生した場合は終了処理、リソースの解放などの処理が必要です。
#include <iostream> #include <SDL.h> class GMAIN { public: int initSDL(); int createWindow(); void finSDL(); /** * メイン処理 */ void run() { initSDL(); createWindow(); // 画像を読み込んでテクスチャにする SDL_Surface* hello = SDL_LoadBMP("hello.bmp"); tex = SDL_CreateTextureFromSurface(renderer, hello); SDL_FreeSurface(hello); // 描画する SDL_RenderClear(renderer); SDL_RenderCopy(renderer, tex, NULL, NULL); SDL_RenderPresent(renderer); // 3秒ウェイトする SDL_Delay(3000); finSDL(); } private: SDL_Window* window; SDL_Renderer* renderer; SDL_Texture* tex; }; /** * 初期化 */ int GMAIN::initSDL() { // 初期化 if (SDL_Init(SDL_INIT_VIDEO) != NULL) { // error SDL_Quit(); return 1; } return 0; } /** * Window と Rendererを生成 */ int GMAIN::createWindow() { // Create window window = SDL_CreateWindow( u8"ハローワールド", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0 ); if (window == NULL) { return 1; } // Create renderer renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); if (renderer == NULL) { std::cout << "CreateRender Error : " << SDL_GetError() << std::endl; return 1; } return 0; } /** * 終了処理 */ void GMAIN::finSDL() { SDL_DestroyTexture(tex); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); } int main(int argc, char** argv) { GMAIN().run(); return 0; }
コメント
エラーしか出ない…
亀レスで申し訳ないです。
どのようなエラーが出たか、とっかかりだけでも今後の為に教えてもらえると
助かります。