ikulab / ikulab-motion-viewer

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

クラス関係の見直し工事など #13

Closed caffeine0coffee closed 2 years ago

caffeine0coffee commented 2 years ago

Camera, Mouse, Keyboardなどのコンテキストをクラスとして定義し直す それに伴い、それぞれのコンテキストのUpdate関数はそれぞれのクラスにメソッドとして属することになる なので、それぞれのコンテキストをapp側にもたせて、制御するようにしたい

caffeine0coffee commented 2 years ago

中途半端にやってしまうと後々困るので、ここで一気に変えたい 図の通り、従来のbaseをApplicationEngine, RenderEngine, UiEngineに役割分担させる予定

WindowにはGLFW WindowとImGui Windowの2つがあり、それぞれGeneral / Renderの2つの属性を持つ。

General GLFW Window RenderEngineの描画を受け付けない。任意個のImGui Windowを所有することができる。
Render GLFW Window RenderEngineの描画を受け付ける。任意個のImGui Windowを所有することができる。
General ImGui Window RenderEngineの描画を受け付けない。1つのGLFW Windowに属する必要がある
Render ImGui Window RenderEngineの描画を受け付ける。1つのGLFW Windowに属する必要がある

GLFW Window 1つに対して1つのControlContextが共有される。 ControlContextにはマウスやキーボードの入力が含まれる。

ikulab-motion-viwer-structure-Page-2 drawio (2)

caffeine0coffee commented 2 years ago

RenderEngine, AppEngine, GlfwNativeWindow, RenderTarget, RenderContentにクラスを分離し、最低限のプレゼンテーションを実現させることができた。 スクショでは1.0立方のSingleColorCubeを座標(2.0, 2.0, 2.0)から見下ろしている。

image

caffeine0coffee commented 2 years ago

いくつかの外部ライブラリを追加した

caffeine0coffee commented 2 years ago

clangとclang-formatの導入も行った そのうちGitHub Actionsでフォーマットの検証をするようにしたい

caffeine0coffee commented 2 years ago

ImGuiVirtualWindowを実装し、mainブランチと同じ実行結果を得ることができた。 feat: present shape!! 時点でRender{Target | Content}だったものは BasicRender{Target | Content}とした。 Basicじゃない方にはWindow.draw()に必要なインターフェースのみを残し、shapes依存のVertex, DescriptorSetLayoutなどに合わせた具体的な実装をBasicRender{Target | Content}とした。 というより、ライブラリ的には「shapesがBasic~~に依存している」という構造。

image

caffeine0coffee commented 2 years ago

mainの再現ができたので、この時点でmainへのmergeを行う。 一枚岩状態だったBaseクラスにさようなら。