GL CHOCO ENGINE
Loading...
Searching...
No Matches
interface_shader.h File Reference

シェーダープログラム/シェーダーオブジェクトの操作関数をまとめたvtableを定義する More...

Include dependency graph for interface_shader.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  renderer_shader_vtable
 シェーダー機能仮想関数テーブル More...
 

Typedefs

typedef renderer_result_t(* pfn_renderer_shader_create) (renderer_backend_shader_t **shader_handle_)
 シェーダーハンドル構造体インスタンスのメモリを確保し、renderer_backend_shader_tインスタンスのフィールドを全て0で初期化する
 
typedef void(* pfn_renderer_shader_destroy) (renderer_backend_shader_t **shader_handle_)
 シェーダーハンドル構造体インスタンスを破棄する
 
typedef renderer_result_t(* pfn_renderer_shader_compile) (shader_type_t shader_type_, const char *shader_source_, renderer_backend_shader_t *shader_handle_)
 シェーダーソースをコンパイルし、シェーダーオブジェクトハンドルを初期化する
 
typedef renderer_result_t(* pfn_renderer_shader_link) (renderer_backend_shader_t *shader_handle_)
 コンパイル済みのシェーダーオブジェクトをリンクし、シェーダープログラムハンドルを初期化する
 
typedef renderer_result_t(* pfn_renderer_shader_use) (renderer_backend_shader_t *shader_handle_, uint32_t *out_program_id_)
 シェーダープログラムの使用開始をグラフィックスAPIに伝える
 
typedef struct renderer_shader_vtable renderer_shader_vtable_t
 シェーダー機能仮想関数テーブル
 

Detailed Description

シェーダープログラム/シェーダーオブジェクトの操作関数をまとめたvtableを定義する

Author
chocolate-pie24
Note
  • シェーダープログラム: シェーダーオブジェクトをリンクしたプログラム
  • シェーダーオブジェクト: コンパイルされた各シェーダーステージごとのオブジェクト
Version
0.1
Date
2026-02-23
License
MIT License. See LICENSE file in the project root for full license text.

Typedef Documentation

◆ pfn_renderer_shader_compile

typedef renderer_result_t(* pfn_renderer_shader_compile) (shader_type_t shader_type_, const char *shader_source_, renderer_backend_shader_t *shader_handle_)

シェーダーソースをコンパイルし、シェーダーオブジェクトハンドルを初期化する

Note
  • shader_source_のリソース解放は呼び出し側で行うこと
  • シェーダーオブジェクトのGPUリソース確保に成功後、コンパイルに失敗した場合はGPUリソースは破棄される

    以下の処理を行う

  • シェーダーオブジェクトのGPU側リソース確保
  • シェーダーソースのコンパイル
Parameters
[in]shader_type_シェーダー種別 shader_type_t
[in]shader_source_シェーダーソース文字列
[in,out]shader_handle_コンパイルされたシェーダーオブジェクトのハンドルを格納する
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • shader_source_ == NULL
  • shader_handle_ == NULL
  • shader_type_が無効
RENDERER_BAD_OPERATION以下のいずれか
  • shader_handle_が保持するシェーダーオブジェクトがコンパイル済み
  • shader_handle_が保持するシェーダープログラムがリンク済み
RENDERER_SHADER_COMPILE_ERRORシェーダーオブジェクトのGPU側リソース確保に失敗、またはコンパイル失敗
RENDERER_LIMIT_EXCEEDEDメモリ管理システムのシステム使用可能範囲上限超過
RENDERER_NO_MEMORYメモリ割り当て失敗
RENDERER_SUCCESSシェーダーオブジェクトのコンパイルに成功し、正常終了

◆ pfn_renderer_shader_create

typedef renderer_result_t(* pfn_renderer_shader_create) (renderer_backend_shader_t **shader_handle_)

シェーダーハンドル構造体インスタンスのメモリを確保し、renderer_backend_shader_tインスタンスのフィールドを全て0で初期化する

Note
shader_handle_のリソース管理は本モジュールで行うため、確保されたメモリは使用者が renderer_shader_vtable_t が保有するdestroy関数を呼び出して解放する
Parameters
[out]shader_handle_renderer_backend_shader_t構造体インスタンスへのダブルポインタ
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • shader_handle_ == NULL
  • *shader_handle_ != NULL
  • メモリシステム未初期化(render_mem_allocateからのエラー伝播)
RENDERER_LIMIT_EXCEEDEDメモリ管理システムのシステム使用可能範囲上限超過
RENDERER_NO_MEMORYメモリ割り当て失敗
RENDERER_UNDEFINED_ERROR想定していない実行結果コードを処理過程で受け取った(render_mem_allocateからのエラー伝播)
RENDERER_SUCCESSメモリ確保および初期化に成功し、正常終了
上記以外グラフィックスAPI実装依存

◆ pfn_renderer_shader_destroy

typedef void(* pfn_renderer_shader_destroy) (renderer_backend_shader_t **shader_handle_)

シェーダーハンドル構造体インスタンスを破棄する

Note
  • 本関数実行後はshader_handle_はNULLになり再利用不可となる
  • 2重解放を許可する(shader_handle_ == NULLまたは*shader_handle_ == NULLの場合は何もしない)

    以下の処理を行う

  • シェーダープログラム/シェーダーオブジェクトのGPU側リソースの破棄
  • シェーダーハンドル構造体インスタンスが保持するリソースの破棄
  • シェーダーハンドル構造体インスタンス自身のリソースの破棄
Parameters
[in,out]shader_handle_破棄対象構造体インスタンスへのダブルポインタ

◆ pfn_renderer_shader_link

typedef renderer_result_t(* pfn_renderer_shader_link) (renderer_backend_shader_t *shader_handle_)

コンパイル済みのシェーダーオブジェクトをリンクし、シェーダープログラムハンドルを初期化する

Note
現状ではバーテックスシェーダーとフラグメントシェーダーのみを対象にリンクする

以下の処理を行う

  • リンクして生成されるシェーダープログラムのGPU側リソースを確保する
  • シェーダープログラムのリンク
Parameters
[in,out]shader_handle_リンクしたシェーダープログラムハンドルを格納する
Return values
RENDERER_INVALID_ARGUMENTshader_handle_ == NULL
RENDERER_BAD_OPERATION以下のいずれか
  • プログラムが既にリンク済み
  • バーテックスシェーダーオブジェクトが未コンパイル
  • フラグメントシェーダーオブジェクトが未コンパイル
RENDERER_SHADER_LINK_ERRORシェーダープログラムのGPU側リソース確保に失敗、またはシェーダーリンクエラー
RENDERER_LIMIT_EXCEEDEDメモリ管理システムのシステム使用可能範囲上限超過
RENDERER_NO_MEMORYメモリ割り当て失敗
RENDERER_SUCCESSプログラムのリンクに成功し、正常終了

◆ pfn_renderer_shader_use

typedef renderer_result_t(* pfn_renderer_shader_use) (renderer_backend_shader_t *shader_handle_, uint32_t *out_program_id_)

シェーダープログラムの使用開始をグラフィックスAPIに伝える

Note
現在使用中のプログラムハンドル(out_program_id_)がshader_handle_が保持するプログラムハンドルと同一の場合は、既に使用中とし何もしない
Parameters
[in]shader_handle_シェーダープログラムハンドル格納構造体インスタンス
[in,out]out_program_id_現在使用中のプログラム識別子で、本関数実行後に更新される
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • shader_handle_ == NULL
  • out_program_id_ == NULL
RENDERER_BAD_OPERATIONシェーダープログラムが未リンク
RENDERER_DATA_CORRUPTED以下のいずれか
  • shader_handle_が保持するバーテックスシェーダーオブジェクトが未コンパイル
  • shader_handle_が保持するフラグメントシェーダーオブジェクトが未コンパイル

◆ renderer_shader_vtable_t

シェーダー機能仮想関数テーブル