![]() |
GL CHOCO ENGINE
|
このページでは、エンジン開発者が安全に対応グラフィックスAPIを追加するためのガイドラインを提供する。 なお、追加するグラフィックスAPIは当面はOpenGL3.3以外のバージョンを想定しており、Vulkanを使用する際にはある程度の設計変更が必要があることを前提としている。
なお、Renderer Systemの全体像については、Renderer System architectureを参照のこと。
renderer_types.hのtarget_graphics_api_tに追加グラフィックス名称を追加renderer_backend/renderer_backend_context/context.cのgraphics_api_valid_check()で追加したグラフィックスAPIを有効化するinclude/engine/renderer/renderer_backend/renderer_backend_concretes/以下に追加グラフィックスAPI用ディレクトリを追加concrete_shader.h, concrete_vao.h, concrete_vbo.hを追加(なお、GLCEでは複数のグラフィックスAPIの混在は想定していない。必ず3つセットで作成すること)concrete_shader.h, concrete_vao.h, concrete_vbo.hでは以下のAPIを定義する(xxxはグラフィックスAPI識別名称)。
| ヘッダ | 追加API | 役割 |
|---|---|---|
concrete_shader.h | xxx_shader_vtable_get() | シェーダー機能を提供する仮想関数テーブルを上位層に提供する |
concrete_vao.h | xxx_vao_vtable_get() | VAO機能を提供する仮想関数テーブルを上位層に提供する |
concrete_vbo.h | xxx_vbo_vtable_get() | VBO機能を提供する仮想関数テーブルを上位層に提供する |
src/engine/renderer/renderer_backend/renderer_backend_concretes/以下に追加グラフィックスAPI用ディレクトリを追加concrete_shader.c, concrete_vao.c, concrete_vbo.cを追加concrete_shader.cで、renderer_backend_shader_t構造体を定義する。フィールドは追加するグラフィックスAPI固有であるが、例えばOpenGL3.3用バックエンドでは、以下を保持している
shader concreteモジュール用実装ファイルにはRenderer Backend Interface用仮想関数テーブル(renderer_shader_vtable_t)の実装として、以下の機能を実装する(xxxはグラフィックスAPIの名称)。
各関数の実装においては下記に留意する
renderer_core/renderer_memoryが提供するrender_mem_allocate(),render_mem_free()を使用することrenderer_core/renderer_err_utilsが提供するAPIを使用すること| カテゴリー | 関数名称 | 役割 |
|---|---|---|
| Lifecycle | xxx_shader_create() | renderer_backend_shader_t構造体インスタンスのメモリを確保し、構造体フィールドを0で初期化する |
| Lifecycle | xxx_shader_destroy() | シェーダープログラムの停止をグラフィックスAPIに伝え、renderer_backend_shader_t構造体インスタンスのメモリを開放する |
| シェーダー操作 | xxx_shader_compile() | シェーダーオブジェクトをコンパイルする |
| シェーダー操作 | xxx_shader_link() | コンパイルしたシェーダーオブジェクトをリンクする |
| シェーダー操作 | xxx_shader_use() | リンク済のシェーダープログラムの使用を開始する |
renderer_backend/renderer_backend_context/context.cのshader_vtable_get()に追加したグラフィックスAPI用vtableを追加concrete_vao.cで、renderer_backend_vao_t構造体を定義する。フィールドは追加するグラフィックスAPI固有であるが、例えばOpenGL3.3用バックエンドでは、以下を保持している
VAO concreteモジュール用実装ファイルにはRenderer Backend Interface用仮想関数テーブル(renderer_vao_vtable_t)の実装として、以下の機能を実装する(xxxはグラフィックスAPIの名称)。
各関数の実装においては下記に留意する
renderer_core/renderer_memoryが提供するrender_mem_allocate(),render_mem_free()を使用することrenderer_core/renderer_err_utilsが提供するAPIを使用すること| カテゴリー | 関数名称 | 役割 |
|---|---|---|
| Lifecycle | xxx_vao_create() | renderer_backend_vao_t構造体インスタンスのメモリを確保し、構造体フィールドを0で初期化する |
| Lifecycle | xxx_vao_destroy() | VAOを削除し、renderer_backend_vao_t構造体インスタンスのメモリを開放する |
| VAO操作 | xxx_vao_bind() | VAOをbindする |
| VAO操作 | xxx_vao_unbind() | VAOをunbindする |
| VAO操作 | xxx_vao_attribute_set() | VBO属性情報を設定する |
renderer_backend/renderer_backend_context/context.cのvao_vtable_get()に追加したグラフィックスAPI用vtableを追加concrete_vbo.cで、renderer_backend_vbo_t構造体を定義する。フィールドは追加するグラフィックスAPI固有であるが、例えばOpenGL3.3用バックエンドでは、以下を保持している
VBO concreteモジュール用実装ファイルにはRenderer Backend Interface用仮想関数テーブル(renderer_vbo_vtable_t)の実装として、以下の機能を実装する(xxxはグラフィックスAPIの名称)。
各関数の実装においては下記に留意する
renderer_core/renderer_memoryが提供するrender_mem_allocate(),render_mem_free()を使用することrenderer_core/renderer_err_utilsが提供するAPIを使用すること| カテゴリー | 関数名称 | 役割 |
|---|---|---|
| Lifecycle | xxx_vbo_create() | renderer_backend_vbo_t構造体インスタンスのメモリを確保し、構造体フィールドを0で初期化する |
| Lifecycle | xxx_vbo_destroy() | VBOを削除し、renderer_backend_vbo_t構造体インスタンスのメモリを開放する |
| VBO操作 | xxx_vbo_bind() | VBOをbindする |
| VBO操作 | xxx_vbo_unbind() | VBOをunbindする |
| VBO操作 | xxx_vbo_vertex_load() | 頂点情報をGPUに転送する |
renderer_backend/renderer_backend_context/context.cのvbo_vtable_get()に追加したグラフィックスAPI用vtableを追加新規に追加したグラフィックスAPIを使用する場合は、application_create()内のrenderer_backend_initialize()でグラフィックスAPI種別を指定する(*1)
*1: 将来的にはビルドオプションで指定するように変更予定