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

renderer_backendが保有するシェーダーオブジェクト/シェーダープログラム操作機能の窓口を上位層に提供する More...

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

Go to the source code of this file.

Typedefs

typedef struct renderer_backend_context renderer_backend_context_t
 

Functions

renderer_result_t renderer_backend_shader_create (renderer_backend_context_t *renderer_backend_context_, renderer_backend_shader_t **shader_handle_)
 シェーダーハンドル構造体インスタンスのメモリを確保し0で初期化する
 
void renderer_backend_shader_destroy (renderer_backend_context_t *renderer_backend_context_, renderer_backend_shader_t **shader_handle_)
 シェーダーハンドル構造体インスタンスを破棄する
 
renderer_result_t renderer_backend_shader_compile (shader_type_t shader_type_, const char *shader_source_, renderer_backend_context_t *backend_context_, renderer_backend_shader_t *shader_handle_)
 シェーダーソースをコンパイルし、シェーダーオブジェクトハンドルを初期化する
 
renderer_result_t renderer_backend_shader_link (renderer_backend_context_t *backend_context_, renderer_backend_shader_t *shader_handle_)
 コンパイル済みのシェーダーオブジェクトをリンクする
 
renderer_result_t renderer_backend_shader_use (renderer_backend_context_t *backend_context_, renderer_backend_shader_t *shader_handle_)
 シェーダープログラムの使用開始をグラフィックスAPIに伝える
 

Detailed Description

renderer_backendが保有するシェーダーオブジェクト/シェーダープログラム操作機能の窓口を上位層に提供する

Author
chocolate-pie24
Version
0.1
Date
2026-02-23
License
MIT License. See LICENSE file in the project root for full license text.

Typedef Documentation

◆ renderer_backend_context_t

Renderer Backend内部状態管理構造体前方宣言

Function Documentation

◆ renderer_backend_shader_compile()

renderer_result_t renderer_backend_shader_compile ( shader_type_t  shader_type_,
const char *  shader_source_,
renderer_backend_context_t backend_context_,
renderer_backend_shader_t shader_handle_ 
)

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

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

    以下の処理を行う

  • シェーダーオブジェクトのGPU側リソース確保
  • シェーダーソースのコンパイル
Parameters
[in]shader_type_シェーダー種別 shader_type_t
[in]shader_source_シェーダーソース文字列
[in]backend_context_Renderer Backendコンテキスト構造体インスタンスへのポインタ
[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シェーダーオブジェクトのコンパイルに成功し、正常終了

◆ renderer_backend_shader_create()

renderer_result_t renderer_backend_shader_create ( renderer_backend_context_t renderer_backend_context_,
renderer_backend_shader_t **  shader_handle_ 
)

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

Note
  • メモリ確保、初期化処理はrenderer_backend_context_が保持する仮想関数テーブルを使用する
  • 確保したリソースの解放は renderer_backend_shader_destroy を使用して解放する
Parameters
[in]renderer_backend_context_Renderer Backendコンテキスト構造体インスタンスへのポインタ
[out]shader_handle_リソース確保対象シェーダーハンドル構造体インスタンスへのダブルポインタ
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • renderer_backend_context_ == NULL
  • shader_handle_ == NULL
  • *shader_handle_ != NULL
RENDERER_BAD_OPERATIONrenderer_backend_context_が未初期化
RENDERER_LIMIT_EXCEEDEDメモリ管理システムのシステム使用可能範囲上限超過
RENDERER_NO_MEMORYメモリ割り当て失敗
RENDERER_SUCCESSメモリ確保および初期化に成功し、正常終了

◆ renderer_backend_shader_destroy()

void renderer_backend_shader_destroy ( renderer_backend_context_t renderer_backend_context_,
renderer_backend_shader_t **  shader_handle_ 
)

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

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

    以下の処理を行う

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

◆ renderer_backend_shader_link()

renderer_result_t renderer_backend_shader_link ( renderer_backend_context_t backend_context_,
renderer_backend_shader_t shader_handle_ 
)

コンパイル済みのシェーダーオブジェクトをリンクする

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

以下の処理を行う

  • リンクして生成されるプログラムのGPU側リソースを確保する
  • シェーダーオブジェクトのリンク
Parameters
[in]backend_context_Renderer Backendコンテキスト構造体インスタンスへのポインタ
[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シェーダープログラムのリンクに成功し、正常終了

◆ renderer_backend_shader_use()

renderer_result_t renderer_backend_shader_use ( renderer_backend_context_t backend_context_,
renderer_backend_shader_t shader_handle_ 
)

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

Note
処理に成功した場合、現在使用中のプログラム識別子がbackend_context_が保持するフィールドに記憶される
Parameters
[in]backend_context_Renderer Backendコンテキスト構造体インスタンスへのポインタ
[in]shader_handle_シェーダープログラムハンドル格納構造体インスタンス
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • shader_handle_ == NULL
  • out_program_id_ == NULL
RENDERER_BAD_OPERATIONシェーダープログラムが未リンク
RENDERER_DATA_CORRUPTED以下のいずれか
  • shader_handle_が保持するバーテックスシェーダーオブジェクトが未コンパイル
  • shader_handle_が保持するフラグメントシェーダーオブジェクトが未コンパイル