Closed caffeine0coffee closed 2 years ago
modelUbo
のサイズが大きいため、app側で作った modelUbo
をbase側にコピーするとなるとオーバーヘッドがある気がする。
baseが所有している modelUbo
をapp側に露出される方法を検討している。
appに (model | scene)Ubo
を持たせるのはどうか?
baseは UniformBufferMemory
を所有しているので、appからbaseにUboの参照を渡せばmemcpyを実行できる。
void Base::updateUniformBuffer(uint32_t currentImage) {
...
void* data;
vkMapMemory(
device,
uniformBufferMemories[currentImage][DESCRIPTOR_SET_BINDING_MODEL_MATRIX_UBO],
0, sizeof(ModelMatUBO), 0, &data);
memcpy(data, &modelUbo, sizeof(ModelMatUBO));
^^^^^^^^^
vkUnmapMemory(device, uniformBufferMemories[currentImage][DESCRIPTOR_SET_BINDING_MODEL_MATRIX_UBO]);
...
}
ここでいう modelUbo
さえ提供されればいけるのでは
複数のGLFWウィンドウを扱うかもしれない事を考えると、Camera, Mouse, Keyboardと言ったコンテキストはウィンドウごとに作成しておいた方が良さそうだ
描画に必要なコンポーネント(ウィンドウごとに作成される)
アプリケーションの動作に必要なコンポーネント(ウィンドウごとに作成される)
updateUniformBufferをapp側で処理するようにしたい。
updateModelMat()
updateSceneMat()
といった関数をpublicに宣言し、app側はこれにmodelUbo
やsceneUbo
を渡す。 base側は受け取ったUBOをメモリーにコピーする。 この処理を、レンダー処理以前までにメインループに組み込めばいい感じに動くはず。なお、UBOの処理といった部分は現状のrender passやdescriptor set layoutに依存しているものなので、いずれは「アプリケーションエンジン」を作成してそれにに任せたい。#15