[SDL2] Hello World 画像を読み込んで描画する [ゲーム制作]

C++

画像を読み込んでウィンドウに描画する

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;
}

コメント

  1. ・。・ より:

    エラーしか出ない…

    • 管理人 より:

      亀レスで申し訳ないです。

      どのようなエラーが出たか、とっかかりだけでも今後の為に教えてもらえると
      助かります。

タイトルとURLをコピーしました