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

プラットフォームシステムのStrategy Contextモジュールを提供する More...

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

Go to the source code of this file.

Typedefs

typedef struct platform_context platform_context_t
 プラットフォームコンテキスト構造体前方宣言
 

Functions

platform_result_t platform_initialize (linear_alloc_t *allocator_, platform_type_t platform_type_, platform_context_t **out_platform_context_)
 プラットフォームStrategyパターンを初期化する
 
void platform_destroy (platform_context_t *platform_context_)
 プラットフォームStrategyパターンのContext構造体インスタンスの内部データをクリアする
 
platform_result_t platform_window_create (platform_context_t *platform_context_, const char *window_label_, int window_width_, int window_height_, int *framebuffer_width_, int *framebuffer_height_)
 プラットフォームに応じたウィンドウ生成処理を行う
 
platform_result_t platform_pump_messages (platform_context_t *platform_context_, void(*window_event_callback)(const window_event_t *event_), void(*keyboard_event_callback)(const keyboard_event_t *event_), void(*mouse_event_callback)(const mouse_event_t *event_))
 OSレイヤーからキーボード、マウス、ウィンドウイベントを吸い上げ、各コールバック関数へイベントを渡す
 
platform_result_t platform_swap_buffers (platform_context_t *platform_context_)
 描画サーフェイスのフロント/バックバッファをスワップする
 

Detailed Description

プラットフォームシステムのStrategy Contextモジュールを提供する

Author
chocolate-pie24

ウィンドウ制御、マウス、キーボード処理を全プラットフォーム(X Window System, win32, glfw...)で共通化するために、 Strategyパターンを使用する。このレイヤーではStrategyパターンのContextに相当する構造体インスタンスを提供する

Version
0.1
Date
2025-10-14
License
MIT License. See LICENSE file in the project root for full license text.

Typedef Documentation

◆ platform_context_t

プラットフォームコンテキスト構造体前方宣言

Function Documentation

◆ platform_destroy()

void platform_destroy ( platform_context_t platform_context_)

プラットフォームStrategyパターンのContext構造体インスタンスの内部データをクリアする

Note
  • platform_context_のメモリはlinear_allocatorによって確保しているため、内部メモリおよび自身のメモリは呼び出し側で行うこと

使用例:

// リニアアロケータ初期化
// エラー処理
// リニアアロケータによるメモリ破棄
void platform_destroy(platform_context_t *platform_context_)
プラットフォームStrategyパターンのContext構造体インスタンスの内部データをクリアする
Definition: platform_context.c:169
platform_result_t platform_initialize(linear_alloc_t *allocator_, platform_type_t platform_type_, platform_context_t **out_platform_context_)
プラットフォームStrategyパターンを初期化する
Definition: platform_context.c:113
@ PLATFORM_USE_GLFW
Definition: platform_types.h:45
platform_result_t
プラットフォームシステム実行結果コード定義
Definition: platform_types.h:27
linear_alloc_t内部データ構造
Definition: linear_allocator.c:32
プラットフォームコンテキスト構造体
Definition: platform_context.c:62
Parameters
[in,out]platform_context_クリア対象構造体インスタンス

◆ platform_initialize()

platform_result_t platform_initialize ( linear_alloc_t allocator_,
platform_type_t  platform_type_,
platform_context_t **  out_platform_context_ 
)

プラットフォームStrategyパターンを初期化する

Note
  • allocator_は初期化済みのリニアアロケータを渡すこと

使用例:

// リニアアロケータ初期化
// エラー処理
Parameters
[in,out]allocator_メモリ確保用リニアアロケータ
[in]platform_type_プラットフォーム種別
[out]out_platform_context_プラットフォームコンテキスト構造体インスタンス
Return values
PLATFORM_INVALID_ARGUMENT以下のいずれか
  • allocator_ == NULL
  • out_platform_context_ == NULL
  • *out_platform_context_ != NULL
  • platform_type_が無効値
PLATFORM_RUNTIME_ERRORvtable取得失敗
PLATFORM_SUCCESS初期化およびメモリ確保に成功し、正常終了
上記以外リニアアロケータによるメモリ確保失敗( linear_allocator_allocate )
See also
linear_allocator_init
linear_allocator_allocate

◆ platform_pump_messages()

platform_result_t platform_pump_messages ( platform_context_t platform_context_,
void(*)(const window_event_t *event_)  window_event_callback,
void(*)(const keyboard_event_t *event_)  keyboard_event_callback,
void(*)(const mouse_event_t *event_)  mouse_event_callback 
)

OSレイヤーからキーボード、マウス、ウィンドウイベントを吸い上げ、各コールバック関数へイベントを渡す

使用例:

void mouse_event_callback(const mouse_event_t* event_) {
// イベント処理
}
void keyboard_event_callback(const keyboard_event_t* event_) {
// イベント処理
}
void window_event_callback(const window_event_t* event_) {
// イベント処理
}
void test_func(void) {
// リニアアロケータ初期化
// エラー処理
ret = platform_window_create(platform_context, "test_window", 1024, 768);
// エラー処理
ret = platform_pump_messages(platform_context, window_event_callback, keyboard_event_callback, mouse_event_callback);
// エラー処理
// リニアアロケータによるメモリ破棄
}
platform_result_t platform_window_create(platform_context_t *platform_context_, const char *window_label_, int window_width_, int window_height_, int *framebuffer_width_, int *framebuffer_height_)
プラットフォームに応じたウィンドウ生成処理を行う
Definition: platform_context.c:184
platform_result_t platform_pump_messages(platform_context_t *platform_context_, void(*window_event_callback)(const window_event_t *event_), void(*keyboard_event_callback)(const keyboard_event_t *event_), void(*mouse_event_callback)(const mouse_event_t *event_))
OSレイヤーからキーボード、マウス、ウィンドウイベントを吸い上げ、各コールバック関数へイベントを渡す
Definition: platform_context.c:205
キーボードイベント構造体
Definition: keyboard_event.h:103
マウスイベント構造体
Definition: mouse_event.h:48
ウィンドウイベント構造体
Definition: window_event.h:46
Parameters
platform_context_プラットフォームstrategy contextオブジェクト
window_event_callbackウィンドウイベントコールバック
keyboard_event_callbackキーボードイベントコールバック
mouse_event_callbackマウスイベントコールバック
Return values
PLATFORM_INVALID_ARGUMENT以下のいずれか
  • platform_context_ == NULL
  • platform_context_->vtable == NULL
  • platform_context_->backend == NULL
  • window_event_callback == NULL
  • keyboard_event_callback == NULL
  • mouse_event_callback == NULL
PLATFORM_WINDOW_CLOSEウィンドウクローズイベント発生(これは絶対に補足しなくてはいけないため、コールバックとは別に処理する)
PLATFORM_SUCCESSイベントの吸い上げに成功し、正常終了
Note
上記以外の実行結果コードはプラットフォーム実装依存

◆ platform_swap_buffers()

platform_result_t platform_swap_buffers ( platform_context_t platform_context_)

描画サーフェイスのフロント/バックバッファをスワップする

Note
  • GLFWを使用している場合はglfwSwapBuffersに相当
Warning
呼び出し前で platform_initialize によってプラットフォームサブシステムが初期化されている必要がある
platform_destroy 呼び出し後は使用不可
Parameters
platform_context_プラットフォームstrategy context構造体インスタンスへのポインタ
Return values
PLATFORM_INVALID_ARGUMENTplatform_context_ == NULL
PLATFORM_BAD_OPERATION以下のいずれか
  • platform_context_->vtable == NULL
  • platform_context_->backend == NULL
その他プラットフォーム実装依存

◆ platform_window_create()

platform_result_t platform_window_create ( platform_context_t platform_context_,
const char *  window_label_,
int  window_width_,
int  window_height_,
int *  framebuffer_width_,
int *  framebuffer_height_ 
)

プラットフォームに応じたウィンドウ生成処理を行う

Note
  • window_label_はplatform_window_create内部でdeep copyするため、呼び出し側でメモリを破棄すること

使用例:

// リニアアロケータ初期化
// エラー処理
int framebuffer_width = 0;
int framebuffer_height = 0;
ret = platform_window_create(platform_context, "test_window", 1024, 768, &framebuffer_width, &framebuffer_height);
// エラー処理
// リニアアロケータによるメモリ破棄
Parameters
[in,out]platform_context_プラットフォームStrategy Context構造体インスタンス
[in]window_label_ウィンドウラベル
[in]window_width_ウィンドウ幅
[in]window_height_ウィンドウ高さ
[out]framebuffer_width_フレームバッファサイズ(幅)格納先ポインタ
[out]framebuffer_height_フレームバッファサイズ(高さ)格納先ポインタ
Return values
PLATFORM_INVALID_ARGUMENT以下のいずれか
  • platform_context_ == NULL
  • platform_context_->vtable
  • platform_context_->backend
  • window_label_ == NULL
  • window_width_ == 0
  • window_height_ == 0
  • framebuffer_width_ == NULL
  • framebuffer_height_ == NULL
PLATFORM_SUCCESSウィンドウ生成に成功し、正常終了
Note
上記以外の実行結果コードは各プラットフォーム実装依存