ikulab / ikulab-motion-viewer

Motion viwer created in C++ and Vulkan
MIT License
3 stars 0 forks source link

ソースコード大規模工事〜コンテキスト整理編〜 #14

Closed caffeine0coffee closed 2 years ago

caffeine0coffee commented 2 years ago

updateUniformBufferをapp側で処理するようにしたい。 updateModelMat() updateSceneMat() といった関数をpublicに宣言し、app側はこれに modelUbosceneUbo を渡す。 base側は受け取ったUBOをメモリーにコピーする。 この処理を、レンダー処理以前までにメインループに組み込めばいい感じに動くはず。

なお、UBOの処理といった部分は現状のrender passやdescriptor set layoutに依存しているものなので、いずれは「アプリケーションエンジン」を作成してそれにに任せたい。#15

caffeine0coffee commented 2 years ago

modelUbo のサイズが大きいため、app側で作った modelUbo をbase側にコピーするとなるとオーバーヘッドがある気がする。 baseが所有している modelUbo をapp側に露出される方法を検討している。

caffeine0coffee commented 2 years ago

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 さえ提供されればいけるのでは

caffeine0coffee commented 2 years ago

複数のGLFWウィンドウを扱うかもしれない事を考えると、Camera, Mouse, Keyboardと言ったコンテキストはウィンドウごとに作成しておいた方が良さそうだ

caffeine0coffee commented 2 years ago

描画に必要なコンポーネント(ウィンドウごとに作成される)

アプリケーションの動作に必要なコンポーネント(ウィンドウごとに作成される)