Skip to content

rinngo0302/EasyGL

Repository files navigation

EasyGL

CI License: MIT C++17 Header Only

SDL2 と OpenGL のラッパーライブラリです。 面倒な初期化やシェーダー管理を隠蔽し、少ないコードで 3D/2D 描画ができます。

特徴

  • ヘッダオンリーEasyGL.h を1ファイル追加するだけ
  • シンプルな API — 初期化・モデル読み込み・描画がそれぞれ1行
  • 3D 描画 — OBJ モデル読み込み、テクスチャ、カメラ、ライティング(複数ライト対応)
  • 2D 描画 — 矩形、円、画像、テキスト(FreeType)
  • C++17

ヘッダオンリーライブラリとしての使い方

EasyGL は単一のヘッダファイルのみ存在するシングルヘッダライブラリです。 EasyGL.h にはAPI宣言(ヘッダ部)と関数本体(実装部)の両方が含まれています。

// ── すべての .cpp ファイルで ──
#include "EasyGL.h"          // 宣言だけが展開される

// ── プロジェクト内の *1つだけ* の .cpp ファイルで ──
#define EASYGL_IMPLEMENTATION // 実装コードの展開を有効化
#include "EasyGL.h"

EASYGL_IMPLEMENTATION を定義すると、関数の実体や内蔵ライブラリ(GLAD・stb_image)の実装が展開されます。 複数の .cpp で定義するとリンク時に重複シンボルエラーになります。必ず1ファイルだけで定義してください。

Tip: 専用の easygl_impl.cpp を作り、そこでだけ #define するのがおすすめです。

// easygl_impl.cpp
#define EASYGL_IMPLEMENTATION
#include "EasyGL.h"

クイックスタート

1. 依存ライブラリのインストール

Ubuntu / Debian:

sudo apt-get install libsdl2-dev libfreetype-dev libassimp-dev libglm-dev

2. プロジェクトにファイルを配置

以下のファイルとフォルダを指定の場所にコピーします。

  • EasyGL.h — メインヘッダファイル
  • libs/glm - 自分のプロジェクトの libs/ を作成して、そのままコピーしてください。

ディレクトリ構成:

your-project/
├── EasyGL.h
├── main.cpp
├── libs/
│   └── glm/        ← GLM ヘッダ群

3. コードを書く

コードを書く際にEASYGL_IMPLEMENTATIONを一度だけ定義してください。

#define EASYGL_IMPLEMENTATION

以下は簡易的なサンプルです。 関数のリファレンスはAPI リファレンス を参照してください。

#define EASYGL_IMPLEMENTATION
#include <SDL2/SDL.h>
#include "EasyGL.h"

int main()
{
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window *window = SDL_CreateWindow(
        "EasyGL Demo",
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        800, 600, SDL_WINDOW_OPENGL
    );

    // 初期化
    EasyGL gl;
    EZ_Init(&gl, window, 800, 600);

    // モデル・シェーダー・カメラ・ライトを作成
    EZ_Object obj    = EZ_CreateObject("assets/obj/model.obj", "assets/texture/texture.jpeg");
    EZ_Shader shader = EZ_CreateShader();
    EZ_Camera camera = EZ_CreateCamera(800.0f, 600.0f);
    EZ_Light  light  = EZ_CreateLight();

    // 描画ループ
    bool running = true;
    while (running)
    {
        EZ_BackgroundClear(22, 100, 100);
        EZ_DrawObject(obj, shader, camera, light);
        SDL_GL_SwapWindow(window);

        SDL_Event event;
        if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
            running = false;
    }

    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

4. ビルド・実行

g++ -std=c++17 -o demo main.cpp \
    -I. -Ilibs \
    $(pkg-config --cflags --libs sdl2 freetype2 SDL2_net assimp) \
    -ldl
./demo

ドキュメント

使用しているサードパーティライブラリ

ライブラリ ライセンス
GLAD Public Domain / CC0
stb_image MIT / Public Domain
KHR Headers MIT

外部依存(別途インストールが必要): SDL2, SDL2_net, FreeType, Assimp, GLM

ライセンス

MIT License

About

SDL2とOpenGLをラップしたヘッダーオンリーライブラリ

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages