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

renderer_backendが保有するVAO機能の窓口を上位層に提供する More...

#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include "engine/renderer/renderer_core/renderer_types.h"
#include "engine/renderer/renderer_backend/renderer_backend_types.h"
Include dependency graph for context_vao.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_vertex_array_create (renderer_backend_context_t *backend_context_, renderer_backend_vao_t **vertex_array_)
 VAO内部状態管理構造体インスタンスのメモリを確保する
 
void renderer_backend_vertex_array_destroy (renderer_backend_context_t *backend_context_, renderer_backend_vao_t **vertex_array_)
 VAO内部状態管理構造体インスタンスを破棄する
 
renderer_result_t renderer_backend_vertex_array_bind (renderer_backend_context_t *backend_context_, renderer_backend_vao_t *vertex_array_)
 VAOをbindする
 
renderer_result_t renderer_backend_vertex_array_unbind (renderer_backend_context_t *backend_context_, renderer_backend_vao_t *vertex_array_)
 VAOをunbindする
 
renderer_result_t renderer_backend_vertex_array_attribute_set (renderer_backend_context_t *backend_context_, renderer_backend_vao_t *vertex_array_, uint32_t layout_, int32_t size_, renderer_type_t type_, bool normalized_, size_t stride_, size_t offset_)
 頂点情報のレイアウトをGPUに通知する
 

Detailed Description

renderer_backendが保有するVAO機能の窓口を上位層に提供する

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_vertex_array_attribute_set()

renderer_result_t renderer_backend_vertex_array_attribute_set ( renderer_backend_context_t backend_context_,
renderer_backend_vao_t vertex_array_,
uint32_t  layout_,
int32_t  size_,
renderer_type_t  type_,
bool  normalized_,
size_t  stride_,
size_t  offset_ 
)

頂点情報のレイアウトをGPUに通知する

Note
本関数内でVAOがbindされるため、事前のbindは不要
Parameters
backend_context_アトリビュート設定用vtable保有構造体インスタンスへのポインタ
vertex_array_VAOハンドル(OpenGL3.3では使用しない)
layout_シェーダープログラム内のどのバッファ変数の設定値かを指定
size_頂点情報に含まれるデータの数([x, y, z]の3次元座標のみであれば3)
type_バッファに格納されているデータの型 renderer_type_t
normalized_与えられた頂点データを正規化するかどうかを指定
stride_頂点情報1つあたりのサイズを指定(GLfloat型の[x, y, z]であれば、sizeof(GLfloat) x 3を指定)
offset_「この頂点属性の先頭が、現在GL_ARRAY_BUFFERにバインドされているバッファの先頭から何バイト目にあるか」を指定

メモ:

static const GLfloat vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
glVertexAttribPointer(
0,
3,
GL_FLOAT,
GL_FALSE,
sizeof(GLfloat) * 3,
(void*)0
);
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • backend_context_ == NULL
  • vertex_array_ == NULL
RENDERER_BAD_OPERATIONbackend_context_が未初期化
RENDERER_RUNTIME_ERRORtype_の値が既定値外
RENDERER_SUCCESS処理に成功し、正常終了

◆ renderer_backend_vertex_array_bind()

renderer_result_t renderer_backend_vertex_array_bind ( renderer_backend_context_t backend_context_,
renderer_backend_vao_t vertex_array_ 
)

VAOをbindする

  • 処理に成功した場合、backend_context_が保持する現在bind中のVAO値が更新される
  • 既にbind済みのvertex_array_が渡された場合は何もしない
Parameters
backend_context_bind用vtable保有構造体インスタンスへのポインタ
vertex_array_bind対象VAOハンドル構造体インスタンスへのポインタ
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • backend_context_ == NULL
  • vertex_array_ == NULL
RENDERER_BAD_OPERATIONbackend_context_->vao_vtable == NULL
RENDERER_SUCCESS処理に成功し、正常終了

◆ renderer_backend_vertex_array_create()

renderer_result_t renderer_backend_vertex_array_create ( renderer_backend_context_t backend_context_,
renderer_backend_vao_t **  vertex_array_ 
)

VAO内部状態管理構造体インスタンスのメモリを確保する

Note
確保されたリソースは renderer_backend_vertex_array_destroy を使用して破棄する
  • backend_context_が保有する仮想関数テーブルの関数を使用しメモリ確保を行う
  • 構造体インスタンスのメモリ確保に成功した場合、VAOのGPU側リソースも確保される
Parameters
[in]backend_context_VAOメモリ確保関数保有構造体インスタンスへのポインタ
[out]vertex_array_メモリ確保対象VAO構造体インスタンスへのダブルポインタ
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • vertex_array_ == NULL
  • *vertex_array_ != NULL
RENDERER_NO_MEMORYメモリ確保失敗
RENDERER_LIMIT_EXCEEDEDメモリ管理システムのシステム使用可能範囲上限を超過
RENDERER_SUCCESS処理に成功し、正常終了

◆ renderer_backend_vertex_array_destroy()

void renderer_backend_vertex_array_destroy ( renderer_backend_context_t backend_context_,
renderer_backend_vao_t **  vertex_array_ 
)

VAO内部状態管理構造体インスタンスを破棄する

  • VAOのGPU側リソースの解放も行う
  • 本関数実行後、vertex_array_ == NULLになる
  • 既に解放済みのvertex_array_に対しては何もしない
  • backend_context_ == NULLの場合は何もしない
Parameters
backend_context_リソース破棄用vtable保有構造体インスタンスへのポインタ
vertex_array_破棄対象インスタンスへのダブルポインタ

◆ renderer_backend_vertex_array_unbind()

renderer_result_t renderer_backend_vertex_array_unbind ( renderer_backend_context_t backend_context_,
renderer_backend_vao_t vertex_array_ 
)

VAOをunbindする

Parameters
backend_context_unbind用vtable保有構造体インスタンスへのポインタ
vertex_array_unbind対象VAOハンドル構造体インスタンスへのポインタ
Return values
RENDERER_INVALID_ARGUMENT以下のいずれか
  • backend_context_ == NULL
  • vertex_array_ == NULL
RENDERER_BAD_OPERATIONbackend_context_が未初期化
RENDERER_SUCCESS処理に成功し、正常終了