Showing preview only (8,701K chars total). Download the full file or copy to clipboard to get everything.
Repository: ExplosionEngine/Explosion
Branch: master
Commit: 46dec7757735
Files: 519
Total size: 8.2 MB
Directory structure:
gitextract__bnw7v4u/
├── .clang-format
├── .clang-tidy
├── .gitattributes
├── .gitignore
├── CMake/
│ ├── Common.cmake
│ ├── Config.cmake.in
│ └── Target.cmake
├── CMakeLists.txt
├── Editor/
│ ├── CMakeLists.txt
│ ├── Include/
│ │ └── Editor/
│ │ ├── EditorEngine.h
│ │ ├── EditorModule.h
│ │ ├── Qt/
│ │ │ ├── EngineSerialization.h
│ │ │ ├── JsonSerialization.h
│ │ │ └── MirrorTemplateView.h
│ │ ├── WebUIServer.h
│ │ └── Widget/
│ │ ├── Editor.h
│ │ ├── GraphicsSampleWidget.h
│ │ ├── GraphicsWidget.h
│ │ ├── ProjectHub.h
│ │ └── WebWidget.h
│ ├── Resource/
│ │ └── ProjectTemplates/
│ │ └── Default/
│ │ └── CMakeLists.txt
│ ├── Shader/
│ │ └── GraphicsWindowSample.esl
│ ├── Src/
│ │ ├── EditorEngine.cpp
│ │ ├── EditorModule.cpp
│ │ ├── Main.cpp
│ │ ├── Qt/
│ │ │ └── MirrorTemplateView.cpp
│ │ ├── WebUIServer.cpp
│ │ └── Widget/
│ │ ├── Editor.cpp
│ │ ├── GraphicsSampleWidget.cpp
│ │ ├── GraphicsWidget.cpp
│ │ ├── ProjectHub.cpp
│ │ └── WebWidget.cpp
│ └── Web/
│ ├── .gitignore
│ ├── .npmrc
│ ├── LICENSE
│ ├── eslint.config.mjs
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── src/
│ │ ├── App.tsx
│ │ ├── main.tsx
│ │ ├── pages/
│ │ │ └── project-hub.tsx
│ │ ├── provider.tsx
│ │ ├── qwebchannel.d.ts
│ │ ├── qwebchannel.js
│ │ ├── styles/
│ │ │ └── globals.css
│ │ └── vite-env.d.ts
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── Engine/
│ ├── CMakeLists.txt
│ ├── Shader/
│ │ ├── BasePassPS.esl
│ │ ├── BasePassVS.esl
│ │ └── Platform.esh
│ └── Source/
│ ├── CMakeLists.txt
│ ├── Common/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── Common/
│ │ │ ├── Concepts.h
│ │ │ ├── Concurrent.h
│ │ │ ├── Container.h
│ │ │ ├── Debug.h
│ │ │ ├── Delegate.h
│ │ │ ├── DynamicLibrary.h
│ │ │ ├── File.h
│ │ │ ├── FileSystem.h
│ │ │ ├── Hash.h
│ │ │ ├── IO.h
│ │ │ ├── Math/
│ │ │ │ ├── Box.h
│ │ │ │ ├── Color.h
│ │ │ │ ├── Common.h
│ │ │ │ ├── Half.h
│ │ │ │ ├── Math.h
│ │ │ │ ├── Matrix.h
│ │ │ │ ├── Projection.h
│ │ │ │ ├── Quaternion.h
│ │ │ │ ├── Rect.h
│ │ │ │ ├── Sphere.h
│ │ │ │ ├── Transform.h
│ │ │ │ ├── Vector.h
│ │ │ │ └── View.h
│ │ │ ├── Memory.h
│ │ │ ├── Platform.h
│ │ │ ├── Serialization.h
│ │ │ ├── String.h
│ │ │ ├── Time.h
│ │ │ └── Utility.h
│ │ ├── Src/
│ │ │ ├── Concurrent.cpp
│ │ │ ├── Debug.cpp
│ │ │ ├── DynamicLibrary.cpp
│ │ │ ├── File.cpp
│ │ │ ├── FileSystem.cpp
│ │ │ ├── Hash.cpp
│ │ │ ├── IO.cpp
│ │ │ ├── Math/
│ │ │ │ └── Color.cpp
│ │ │ ├── Platform.cpp
│ │ │ ├── Serialization.cpp
│ │ │ ├── String.cpp
│ │ │ └── Time.cpp
│ │ └── Test/
│ │ ├── ConcurrentTest.cpp
│ │ ├── ContainerTest.cpp
│ │ ├── DelegateTest.cpp
│ │ ├── FileSystemTest.cpp
│ │ ├── FileTest.cpp
│ │ ├── HashTest.cpp
│ │ ├── MathTest.cpp
│ │ ├── MemoryTest.cpp
│ │ ├── SerializationTest.cpp
│ │ ├── SerializationTest.h
│ │ ├── StringTest.cpp
│ │ └── UtilityTest.cpp
│ ├── Core/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── Core/
│ │ │ ├── Cmdline.h
│ │ │ ├── Console.h
│ │ │ ├── Log.h
│ │ │ ├── Module.h
│ │ │ ├── Paths.h
│ │ │ ├── Thread.h
│ │ │ └── Uri.h
│ │ ├── Src/
│ │ │ ├── Cmdline.cpp
│ │ │ ├── Console.cpp
│ │ │ ├── Log.cpp
│ │ │ ├── Module.cpp
│ │ │ ├── Paths.cpp
│ │ │ ├── Thread.cpp
│ │ │ └── Uri.cpp
│ │ ├── Template/
│ │ │ └── EngineVersion.h.in
│ │ └── Test/
│ │ ├── CmdlineTest.cpp
│ │ ├── ConsoleTest.cpp
│ │ └── UriTest.cpp
│ ├── Launch/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── Launch/
│ │ │ ├── GameApplication.h
│ │ │ ├── GameClient.h
│ │ │ └── GameViewport.h
│ │ └── Src/
│ │ ├── GameApplication.cpp
│ │ ├── GameClient.cpp
│ │ ├── GameViewport.cpp
│ │ └── Main.cpp
│ ├── Mirror/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── Mirror/
│ │ │ ├── Meta.h
│ │ │ ├── Mirror.h
│ │ │ └── Registry.h
│ │ ├── Src/
│ │ │ ├── Mirror.cpp
│ │ │ └── Registry.cpp
│ │ └── Test/
│ │ ├── AnyTest.cpp
│ │ ├── AnyTest.h
│ │ ├── RegistryTest.cpp
│ │ ├── RegistryTest.h
│ │ ├── SerializationTest.cpp
│ │ ├── SerializationTest.h
│ │ └── TypeInfoTest.cpp
│ ├── RHI/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── RHI/
│ │ │ ├── BindGroup.h
│ │ │ ├── BindGroupLayout.h
│ │ │ ├── Buffer.h
│ │ │ ├── BufferView.h
│ │ │ ├── CommandBuffer.h
│ │ │ ├── CommandRecorder.h
│ │ │ ├── Common.h
│ │ │ ├── Device.h
│ │ │ ├── Gpu.h
│ │ │ ├── Instance.h
│ │ │ ├── Pipeline.h
│ │ │ ├── PipelineLayout.h
│ │ │ ├── Queue.h
│ │ │ ├── RHI.h
│ │ │ ├── RHIModule.h
│ │ │ ├── Sampler.h
│ │ │ ├── ShaderModule.h
│ │ │ ├── Surface.h
│ │ │ ├── SwapChain.h
│ │ │ ├── Synchronous.h
│ │ │ ├── Texture.h
│ │ │ └── TextureView.h
│ │ └── Src/
│ │ ├── BindGroup.cpp
│ │ ├── BindGroupLayout.cpp
│ │ ├── Buffer.cpp
│ │ ├── BufferView.cpp
│ │ ├── CommandBuffer.cpp
│ │ ├── CommandRecorder.cpp
│ │ ├── Common.cpp
│ │ ├── Device.cpp
│ │ ├── Gpu.cpp
│ │ ├── Instance.cpp
│ │ ├── Pipeline.cpp
│ │ ├── PipelineLayout.cpp
│ │ ├── Queue.cpp
│ │ ├── RHIModule.cpp
│ │ ├── Sampler.cpp
│ │ ├── ShaderModule.cpp
│ │ ├── Surface.cpp
│ │ ├── SwapChain.cpp
│ │ ├── Synchronous.cpp
│ │ ├── Texture.cpp
│ │ └── TextureView.cpp
│ ├── RHI-DirectX12/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── RHI/
│ │ │ └── DirectX12/
│ │ │ ├── BindGroup.h
│ │ │ ├── BindGroupLayout.h
│ │ │ ├── Buffer.h
│ │ │ ├── BufferView.h
│ │ │ ├── CommandBuffer.h
│ │ │ ├── CommandRecorder.h
│ │ │ ├── Common.h
│ │ │ ├── DX12RHIModule.h
│ │ │ ├── Device.h
│ │ │ ├── Gpu.h
│ │ │ ├── Instance.h
│ │ │ ├── Pipeline.h
│ │ │ ├── PipelineLayout.h
│ │ │ ├── Queue.h
│ │ │ ├── Sampler.h
│ │ │ ├── ShaderModule.h
│ │ │ ├── Surface.h
│ │ │ ├── SwapChain.h
│ │ │ ├── Synchronous.h
│ │ │ ├── Texture.h
│ │ │ └── TextureView.h
│ │ └── Src/
│ │ ├── BindGroup.cpp
│ │ ├── BindGroupLayout.cpp
│ │ ├── Buffer.cpp
│ │ ├── BufferView.cpp
│ │ ├── CommandBuffer.cpp
│ │ ├── CommandRecorder.cpp
│ │ ├── Common.cpp
│ │ ├── DX12RHIModule.cpp
│ │ ├── Device.cpp
│ │ ├── Gpu.cpp
│ │ ├── Instance.cpp
│ │ ├── Pipeline.cpp
│ │ ├── PipelineLayout.cpp
│ │ ├── Queue.cpp
│ │ ├── Sampler.cpp
│ │ ├── ShaderModule.cpp
│ │ ├── Surface.cpp
│ │ ├── SwapChain.cpp
│ │ ├── Synchronous.cpp
│ │ ├── Texture.cpp
│ │ └── TextureView.cpp
│ ├── RHI-Dummy/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── RHI/
│ │ │ └── Dummy/
│ │ │ ├── BindGroup.h
│ │ │ ├── BindGroupLayout.h
│ │ │ ├── Buffer.h
│ │ │ ├── BufferView.h
│ │ │ ├── CommandBuffer.h
│ │ │ ├── CommandRecorder.h
│ │ │ ├── Device.h
│ │ │ ├── DummyRHIModule.h
│ │ │ ├── Gpu.h
│ │ │ ├── Instance.h
│ │ │ ├── Pipeline.h
│ │ │ ├── PipelineLayout.h
│ │ │ ├── Queue.h
│ │ │ ├── Sampler.h
│ │ │ ├── ShaderModule.h
│ │ │ ├── Surface.h
│ │ │ ├── SwapChain.h
│ │ │ ├── Synchronous.h
│ │ │ ├── Texture.h
│ │ │ └── TextureView.h
│ │ └── Src/
│ │ ├── BindGroup.cpp
│ │ ├── BindGroupLayout.cpp
│ │ ├── Buffer.cpp
│ │ ├── BufferView.cpp
│ │ ├── CommandBuffer.cpp
│ │ ├── CommandRecorder.cpp
│ │ ├── Device.cpp
│ │ ├── DummyRHIModule.cpp
│ │ ├── Gpu.cpp
│ │ ├── Instance.cpp
│ │ ├── Pipeline.cpp
│ │ ├── PipelineLayout.cpp
│ │ ├── Queue.cpp
│ │ ├── Sampler.cpp
│ │ ├── ShaderModule.cpp
│ │ ├── Surface.cpp
│ │ ├── SwapChain.cpp
│ │ ├── Synchronous.cpp
│ │ ├── Texture.cpp
│ │ └── TextureView.cpp
│ ├── RHI-Vulkan/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── RHI/
│ │ │ └── Vulkan/
│ │ │ ├── BindGroup.h
│ │ │ ├── BindGroupLayout.h
│ │ │ ├── Buffer.h
│ │ │ ├── BufferView.h
│ │ │ ├── CommandBuffer.h
│ │ │ ├── CommandRecorder.h
│ │ │ ├── Common.h
│ │ │ ├── Device.h
│ │ │ ├── Gpu.h
│ │ │ ├── Instance.h
│ │ │ ├── Pipeline.h
│ │ │ ├── PipelineLayout.h
│ │ │ ├── Queue.h
│ │ │ ├── Sampler.h
│ │ │ ├── ShaderModule.h
│ │ │ ├── Surface.h
│ │ │ ├── SwapChain.h
│ │ │ ├── Synchronous.h
│ │ │ ├── Texture.h
│ │ │ ├── TextureView.h
│ │ │ └── VulkanRHIModule.h
│ │ └── Src/
│ │ ├── BindGroup.cpp
│ │ ├── BindGroupLayout.cpp
│ │ ├── Buffer.cpp
│ │ ├── BufferView.cpp
│ │ ├── CommandBuffer.cpp
│ │ ├── CommandRecorder.cpp
│ │ ├── Device.cpp
│ │ ├── Gpu.cpp
│ │ ├── Instance.cpp
│ │ ├── Pipeline.cpp
│ │ ├── PipelineLayout.cpp
│ │ ├── Platform/
│ │ │ ├── MacosSurface.mm
│ │ │ └── Win32Surface.cpp
│ │ ├── Queue.cpp
│ │ ├── Sampler.cpp
│ │ ├── ShaderModule.cpp
│ │ ├── Surface.cpp
│ │ ├── SwapChain.cpp
│ │ ├── Synchronous.cpp
│ │ ├── Texture.cpp
│ │ ├── TextureView.cpp
│ │ ├── VmaImport.cpp
│ │ └── VulkanRHIModule.cpp
│ ├── Render/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── Render/
│ │ │ ├── RenderCache.h
│ │ │ ├── RenderGraph.h
│ │ │ ├── RenderModule.h
│ │ │ ├── RenderThread.h
│ │ │ ├── Renderer.h
│ │ │ ├── ResourcePool.h
│ │ │ ├── Scene.h
│ │ │ ├── SceneProxy/
│ │ │ │ ├── Light.h
│ │ │ │ └── Primitive.h
│ │ │ ├── Shader.h
│ │ │ ├── ShaderCompiler.h
│ │ │ └── View.h
│ │ ├── SharedSrc/
│ │ │ └── RenderModule.cpp
│ │ ├── Src/
│ │ │ ├── RenderCache.cpp
│ │ │ ├── RenderGraph.cpp
│ │ │ ├── RenderThread.cpp
│ │ │ ├── Renderer.cpp
│ │ │ ├── Scene.cpp
│ │ │ ├── Shader.cpp
│ │ │ ├── ShaderCompiler.cpp
│ │ │ └── View.cpp
│ │ └── Test/
│ │ ├── ResourcePoolTest.cpp
│ │ └── ShaderTest.cpp
│ ├── Runtime/
│ │ ├── CMakeLists.txt
│ │ ├── Include/
│ │ │ └── Runtime/
│ │ │ ├── Asset/
│ │ │ │ ├── Asset.h
│ │ │ │ ├── Level.h
│ │ │ │ ├── Material.h
│ │ │ │ ├── Mesh.h
│ │ │ │ └── Texture.h
│ │ │ ├── Client.h
│ │ │ ├── Component/
│ │ │ │ ├── Camera.h
│ │ │ │ ├── Light.h
│ │ │ │ ├── Player.h
│ │ │ │ ├── Primitive.h
│ │ │ │ ├── Scene.h
│ │ │ │ └── Transform.h
│ │ │ ├── ECS.h
│ │ │ ├── Engine.h
│ │ │ ├── GameModule.h
│ │ │ ├── GameThread.h
│ │ │ ├── Meta.h
│ │ │ ├── RenderThreadPtr.h
│ │ │ ├── RuntimeModule.h
│ │ │ ├── Settings/
│ │ │ │ ├── Game.h
│ │ │ │ └── Registry.h
│ │ │ ├── System/
│ │ │ │ ├── Player.h
│ │ │ │ ├── Render.h
│ │ │ │ ├── Scene.h
│ │ │ │ └── Transform.h
│ │ │ ├── SystemGraphPresets.h
│ │ │ ├── Viewport.h
│ │ │ └── World.h
│ │ ├── Src/
│ │ │ ├── Asset/
│ │ │ │ ├── Asset.cpp
│ │ │ │ ├── Level.cpp
│ │ │ │ ├── Material.cpp
│ │ │ │ ├── Mesh.cpp
│ │ │ │ └── Texture.cpp
│ │ │ ├── Client.cpp
│ │ │ ├── Component/
│ │ │ │ ├── Camera.cpp
│ │ │ │ ├── Light.cpp
│ │ │ │ ├── Player.cpp
│ │ │ │ ├── Primitive.cpp
│ │ │ │ ├── Scene.cpp
│ │ │ │ └── Transform.cpp
│ │ │ ├── ECS.cpp
│ │ │ ├── Engine.cpp
│ │ │ ├── GameThread.cpp
│ │ │ ├── RuntimeModule.cpp
│ │ │ ├── Settings/
│ │ │ │ ├── Game.cpp
│ │ │ │ └── Registry.cpp
│ │ │ ├── System/
│ │ │ │ ├── Player.cpp
│ │ │ │ ├── Render.cpp
│ │ │ │ ├── Scene.cpp
│ │ │ │ └── Transform.cpp
│ │ │ ├── SystemGraphPresets.cpp
│ │ │ ├── Viewport.cpp
│ │ │ └── World.cpp
│ │ └── Test/
│ │ ├── AssetTest.cpp
│ │ ├── AssetTest.h
│ │ ├── ECSTest.cpp
│ │ ├── ECSTest.h
│ │ ├── RuntimeTestModule.cpp
│ │ ├── RuntimeTestModule.h
│ │ ├── WorldTest.cpp
│ │ └── WorldTest.h
│ └── Test/
│ ├── CMakeLists.txt
│ ├── Include/
│ │ └── Test/
│ │ └── Test.h
│ └── Src/
│ └── Main.cpp
├── LICENSE
├── README.md
├── Sample/
│ ├── Base/
│ │ ├── Application.cpp
│ │ ├── Application.h
│ │ ├── Camera.cpp
│ │ └── Camera.h
│ ├── CMakeLists.txt
│ ├── RHI-ParallelCompute/
│ │ ├── Compute.esl
│ │ └── ParallelCompute.cpp
│ ├── RHI-SSAO/
│ │ ├── GLTFParser.cpp
│ │ ├── GLTFParser.h
│ │ ├── Model/
│ │ │ └── Voyager.gltf
│ │ ├── SSAOApplication.cpp
│ │ └── Shader/
│ │ ├── Blur.esl
│ │ ├── Composition.esl
│ │ ├── Gbuffer.esl
│ │ └── SSAO.esl
│ ├── RHI-TexSampling/
│ │ ├── TexSampling.cpp
│ │ └── TexSampling.esl
│ ├── RHI-Triangle/
│ │ ├── Triangle.cpp
│ │ └── Triangle.esl
│ ├── Rendering-BaseTexture/
│ │ ├── BaseTexture.cpp
│ │ └── BaseTexture.esl
│ ├── Rendering-SSAO/
│ │ ├── GLTFParser.cpp
│ │ ├── GLTFParser.h
│ │ ├── Model/
│ │ │ └── Voyager.gltf
│ │ ├── SSAOApplication.cpp
│ │ └── Shader/
│ │ ├── Blur.esl
│ │ ├── Composition.esl
│ │ ├── Gbuffer.esl
│ │ └── SSAO.esl
│ └── Rendering-Triangle/
│ ├── Triangle.cpp
│ └── Triangle.esl
├── TestProject/
│ ├── CMakeLists.txt
│ └── Main.cpp
├── ThirdParty/
│ ├── ConanRecipes/
│ │ ├── README.md
│ │ ├── assimp/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── clipp/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ ├── patches/
│ │ │ │ └── 0000-fix-cpp23.patch
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── debugbreak/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── dxc/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── glfw/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── libclang/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── molten-vk/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── qt/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ ├── debug.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── rapidjson/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ ├── vulkan-utility-libraries/
│ │ │ ├── conandata.yml
│ │ │ ├── conanfile.py
│ │ │ └── test_package/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── conanfile.py
│ │ │ └── test_package.cpp
│ │ └── vulkan-validationlayers/
│ │ ├── conandata.yml
│ │ ├── conanfile.py
│ │ ├── patches/
│ │ │ └── 0000-fix-spirv-tools-includes.patch
│ │ └── test_package/
│ │ ├── CMakeLists.txt
│ │ ├── conanfile.py
│ │ └── test_package.cpp
│ └── Registry.cmake
├── Tool/
│ ├── CMakeLists.txt
│ └── MirrorTool/
│ ├── CMakeLists.txt
│ ├── ExeSrc/
│ │ └── Main.cpp
│ ├── Include/
│ │ └── MirrorTool/
│ │ ├── Generator.h
│ │ └── Parser.h
│ ├── Src/
│ │ ├── Generator.cpp
│ │ └── Parser.cpp
│ └── Test/
│ ├── Main.cpp
│ └── MirrorToolInput.h
├── conan_provider.cmake
└── conanfile.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
# Generated from CLion C/C++ Code Style settings
BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments:
Enabled: false
AlignOperands: DontAlign
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: WithoutElse
AllowShortLambdasOnASingleLine: Empty
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterReturnType: None
AlwaysBreakTemplateDeclarations: Yes
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: true
BreakBeforeBinaryOperators: All
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
BreakInheritanceList: BeforeComma
ColumnLimit: 0
CompactNamespaces: true
ContinuationIndentWidth: 4
IndentCaseLabels: true
IndentPPDirectives: BeforeHash
IndentWidth: 4
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
NamespaceIndentation: All
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PointerAlignment: Left
ReflowComments: false
SpaceAfterCStyleCast: true
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
TabWidth: 4
UseTab: Never
================================================
FILE: .clang-tidy
================================================
Checks: >
-*,
bugprone-*,
modernize-*,
performance-*,
portability-*,
readability-*,
mpi-*,
google-default-arguments,
google-explicit-constructor,
google-runtime-int,
google-runtime-operator,
misc-misplaced-const,
misc-new-delete-overloads,
misc-no-recursion,
misc-non-copyable-objects,
misc-throw-by-value-catch-by-reference,
misc-unconventional-assign-operator,
misc-uniqueptr-reset-release,
-modernize-avoid-c-arrays,
-modernize-concat-nested-namespaces,
-modernize-use-nodiscard,
-modernize-use-trailing-return-type,
-modernize-use-default-member-init,
-bugprone-easily-swappable-parameters,
-bugprone-implicit-widening-of-multiplication-result,
-readability-implicit-bool-cast,
-readability-magic-numbers,
-readability-named-parameter,
-readability-uppercase-literal-suffix,
-readability-identifier-length
================================================
FILE: .gitattributes
================================================
ThirdParty/ConanRecipes/**/* text eol=lf
================================================
FILE: .gitignore
================================================
# JetBrains
.idea
# Visual Studio Code
.vscode
# Binaries
cmake-build*
build*
# Installed
Installed
# 3rd
ThirdParty/Zip
ThirdParty/Lib
ThirdParty/ConanRecipes/**/src
ThirdParty/ConanRecipes/**/build
ThirdParty/ConanRecipes/**/CMakeUserPresets.json
# Test Project
TestProject/.idea
TestProject/.vscode
TestProject/cmake-build*
TestProject/build*
================================================
FILE: CMake/Common.cmake
================================================
option(USE_UNITY_BUILD "Use unity build" ON)
option(EXPORT_COMPILE_COMMANDS "Whether to export all compile commands" OFF)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_UNITY_BUILD ${USE_UNITY_BUILD})
set(CMAKE_EXPORT_COMPILE_COMMANDS ${EXPORT_COMPILE_COMMANDS})
if (${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT})
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/Installed CACHE PATH "" FORCE)
endif()
add_compile_definitions(
BUILD_CONFIG_DEBUG=$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,1,0>
PLATFORM_WINDOWS=$<IF:$<PLATFORM_ID:Windows>,1,0>
PLATFORM_LINUX=$<IF:$<PLATFORM_ID:Linux>,1,0>
PLATFORM_MACOS=$<IF:$<PLATFORM_ID:Darwin>,1,0>
COMPILER_MSVC=$<IF:$<CXX_COMPILER_ID:MSVC>,1,0>
COMPILER_APPLE_CLANG=$<IF:$<CXX_COMPILER_ID:AppleClang>,1,0>
COMPILER_GCC=$<IF:$<CXX_COMPILER_ID:GNU>,1,0>
)
if (${MSVC})
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
add_compile_options(/bigobj)
add_compile_definitions(
_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1
WIN32_LEAN_AND_MEAN
NOMINMAX=1
)
endif ()
================================================
FILE: CMake/Config.cmake.in
================================================
@PACKAGE_INIT@
file(GLOB_RECURSE cmake_libs ${CMAKE_CURRENT_LIST_DIR}/CMake/*.cmake)
foreach (cmake_lib ${cmake_libs})
include(${cmake_lib})
endforeach ()
include(${CMAKE_CURRENT_LIST_DIR}/@SUB_PROJECT_NAME@Targets.cmake)
check_required_components(@SUB_PROJECT_NAME@)
================================================
FILE: CMake/Target.cmake
================================================
include(GenerateExportHeader)
include(CMakePackageConfigHelpers)
option(BUILD_TEST "Build unit tests" ON)
set(GENERATED_DIR ${CMAKE_BINARY_DIR}/Generated CACHE PATH "" FORCE)
set(GENERATED_API_HEADER_DIR ${GENERATED_DIR}/Api CACHE PATH "" FORCE)
set(GENERATED_MIRROR_INFO_SRC_DIR ${GENERATED_DIR}/MirrorInfoSrc CACHE PATH "" FORCE)
set(BASE_TARGETS_FOLDER "${SUB_PROJECT_NAME}" CACHE STRING "" FORCE)
set(AUX_TARGETS_FOLDER "${BASE_TARGETS_FOLDER}/Aux" CACHE STRING "" FORCE)
get_cmake_property(with_multi_config_generator GENERATOR_IS_MULTI_CONFIG)
if (${BUILD_TEST})
enable_testing()
add_compile_definitions(BUILD_TEST=1)
else()
add_compile_definitions(BUILD_TEST=0)
endif()
if ("${SUB_PROJECT_NAME}" STREQUAL "")
message(FATAL_ERROR "SUB_PROJECT_NAME not defined, please set it in your project cmake")
endif ()
function(exp_gather_target_runtime_dependencies_recurse)
set(options "")
set(singleValueArgs NAME OUT_RUNTIME_DEP OUT_DEP_TARGET)
set(multiValueArgs "")
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
if (NOT TARGET ${arg_NAME})
set(${arg_OUT_RUNTIME_DEP} "" PARENT_SCOPE)
return()
endif ()
get_target_property(runtime_dep ${arg_NAME} RUNTIME_DEP)
if (NOT ("${runtime_dep}" STREQUAL "runtime_dep-NOTFOUND"))
list(APPEND result_runtime_dep ${runtime_dep})
endif()
get_target_property(libs ${arg_NAME} LINK_LIBRARIES)
if (NOT ("${libs}" STREQUAL "libs-NOTFOUND"))
foreach(l ${libs})
if (NOT TARGET ${l})
continue()
endif()
get_target_property(type ${l} TYPE)
if (${type} STREQUAL SHARED_LIBRARY)
list(APPEND result_runtime_dep $<TARGET_FILE:${l}>)
endif ()
list(APPEND result_dep_target ${l})
exp_gather_target_runtime_dependencies_recurse(
NAME ${l}
OUT_RUNTIME_DEP temp_runtime_dep
OUT_DEP_TARGET temp_dep_target
)
list(APPEND result_runtime_dep ${temp_runtime_dep})
list(APPEND result_dep_target ${temp_dep_target})
endforeach()
endif()
list(REMOVE_DUPLICATES result_runtime_dep)
list(REMOVE_DUPLICATES result_dep_target)
set(${arg_OUT_RUNTIME_DEP} ${result_runtime_dep} PARENT_SCOPE)
set(${arg_OUT_DEP_TARGET} ${result_dep_target} PARENT_SCOPE)
endfunction()
function(exp_process_runtime_dependencies)
set(options NOT_INSTALL)
set(singleValueArgs NAME)
set(multiValueArgs DEP_TARGET)
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
exp_gather_target_runtime_dependencies_recurse(
NAME ${arg_NAME}
OUT_RUNTIME_DEP runtime_deps
OUT_DEP_TARGET dep_targets
)
foreach (d ${arg_DEP_TARGET})
list(APPEND runtime_deps $<TARGET_FILE:${d}>)
exp_gather_target_runtime_dependencies_recurse(
NAME ${d}
OUT_RUNTIME_DEP dep_target_runtime_deps
OUT_DEP_TARGET dep_dep_targets
)
list(APPEND runtime_deps ${dep_target_runtime_deps})
list(APPEND dep_targets ${dep_dep_targets})
endforeach ()
set(copy_commands COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${arg_NAME}>)
foreach(r ${runtime_deps})
list(APPEND copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${r} $<TARGET_FILE_DIR:${arg_NAME}>)
endforeach()
if (NOT "${copy_commands}" STREQUAL "")
set(custom_target_name ${arg_NAME}.CopyRuntimeDeps)
add_custom_target(
${custom_target_name}
${copy_commands}
)
add_dependencies(${arg_NAME} ${custom_target_name})
foreach (t ${dep_targets})
add_dependencies(${custom_target_name} ${t})
endforeach ()
set_target_properties(${custom_target_name} PROPERTIES FOLDER ${AUX_TARGETS_FOLDER})
endif ()
if (NOT ${arg_NOT_INSTALL} AND NOT "${runtime_deps}" STREQUAL "")
install(
FILES ${runtime_deps} DESTINATION ${SUB_PROJECT_NAME}/Binaries
)
endif ()
endfunction()
function(exp_expand_resource_path_expression)
set(options "")
set(singleValueArgs INPUT OUTPUT_SRC OUTPUT_DST)
set(multiValueArgs "")
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
string(REPLACE "->" ";" temp ${arg_INPUT})
list(GET temp 0 src)
list(GET temp 1 dst)
set(${arg_OUTPUT_SRC} ${src} PARENT_SCOPE)
set(${arg_OUTPUT_DST} ${dst} PARENT_SCOPE)
endfunction()
function(exp_add_resources_copy_command)
set(options NOT_INSTALL)
set(singleValueArgs NAME)
set(multiValueArgs RES)
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
foreach(r ${arg_RES})
exp_expand_resource_path_expression(
INPUT ${r}
OUTPUT_SRC src
OUTPUT_DST dst
)
list(APPEND copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} $<TARGET_FILE_DIR:${arg_NAME}>/${dst})
cmake_path(SET dst_path NORMALIZE "${SUB_PROJECT_NAME}/Binaries/${dst}")
cmake_path(GET dst_path PARENT_PATH dst_dir)
if (NOT ${arg_NOT_INSTALL})
install(FILES ${src} DESTINATION ${dst_dir})
endif ()
endforeach()
set(copy_res_target_name ${arg_NAME}.CopyRes)
add_custom_target(
${copy_res_target_name}
${copy_commands}
)
set_target_properties(${copy_res_target_name} PROPERTIES FOLDER ${AUX_TARGETS_FOLDER})
add_dependencies(${arg_NAME} ${copy_res_target_name})
endfunction()
function(exp_gather_target_libs)
set(options "")
set(singleValueArgs NAME OUTPUT)
set(multiValueArgs "")
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
string(REGEX MATCH "\\$\\<BUILD_INTERFACE.+\\>" match ${arg_NAME})
if (match)
set(${arg_OUTPUT} "" PARENT_SCOPE)
return()
endif ()
get_target_property(target_libs ${arg_NAME} LINK_LIBRARIES)
if (NOT ("${target_libs}" STREQUAL "target_libs-NOTFOUND"))
foreach(target_lib ${target_libs})
string(REGEX MATCH "\\$\\<BUILD_INTERFACE.+\\>" match ${target_lib})
if (match)
continue()
endif ()
list(APPEND result ${target_lib})
exp_gather_target_libs(
NAME ${target_lib}
OUTPUT libs
)
foreach(lib ${libs})
list(APPEND result ${lib})
endforeach()
endforeach()
endif()
list(REMOVE_DUPLICATES result)
set(${arg_OUTPUT} ${result} PARENT_SCOPE)
endfunction()
function(exp_add_mirror_info_source_generation_target)
set(options DYNAMIC)
set(singleValueArgs NAME OUTPUT_SRC OUTPUT_TARGET_NAME)
set(multiValueArgs SEARCH_DIR PUBLIC_INC PRIVATE_INC LIB FRAMEWORK_DIR)
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
if (DEFINED arg_PUBLIC_INC)
foreach (i ${arg_PUBLIC_INC})
get_filename_component(absolute_i ${i} ABSOLUTE)
list(APPEND inc ${absolute_i})
endforeach ()
endif()
if (DEFINED arg_PRIVATE_INC)
foreach (i ${arg_PRIVATE_INC})
get_filename_component(absolute_i ${i} ABSOLUTE)
list(APPEND inc ${absolute_i})
endforeach ()
endif()
if (DEFINED arg_LIB)
foreach (l ${arg_LIB})
list(APPEND inc $<TARGET_PROPERTY:${l},INTERFACE_INCLUDE_DIRECTORIES>)
exp_gather_target_libs(
NAME ${l}
OUTPUT target_libs
)
foreach (tl ${target_libs})
list(APPEND inc $<TARGET_PROPERTY:${tl},INTERFACE_INCLUDE_DIRECTORIES>)
endforeach ()
endforeach()
endif()
list(REMOVE_DUPLICATES inc)
list(APPEND inc_args "-I")
foreach (i ${inc})
list(APPEND inc_args \"${i}\")
endforeach()
if (DEFINED arg_FRAMEWORK_DIR)
list(APPEND fwk_dir ${arg_FRAMEWORK_DIR})
list(APPEND fwk_dir_args "-F")
endif ()
list(REMOVE_DUPLICATES fwk_dir)
foreach (f ${fwk_dir})
get_filename_component(absolute_f ${f} ABSOLUTE)
list(APPEND fwk_dir_args ${absolute_f})
endforeach ()
if (${arg_DYNAMIC})
list(APPEND dynamic_arg "-d")
endif ()
foreach (search_dir ${arg_SEARCH_DIR})
file(GLOB_RECURSE input_header_files "${search_dir}/*.h")
foreach (input_header_file ${input_header_files})
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" temp ${input_header_file})
get_filename_component(dir ${temp} DIRECTORY)
get_filename_component(filename ${temp} NAME_WE)
set(output_source "${GENERATED_MIRROR_INFO_SRC_DIR}/${dir}/${filename}.generated.cpp")
list(APPEND output_sources ${output_source})
add_custom_command(
OUTPUT ${output_source}
COMMAND "$<TARGET_FILE:MirrorTool>" ${dynamic_arg} "-i" ${input_header_file} "-o" ${output_source} ${inc_args} ${fwk_dir_args}
DEPENDS MirrorTool ${input_header_file}
)
endforeach()
endforeach ()
set(custom_target_name "${arg_NAME}.Generated")
add_custom_target(
${custom_target_name}
DEPENDS MirrorTool ${output_sources}
)
set_target_properties(${custom_target_name} PROPERTIES FOLDER ${AUX_TARGETS_FOLDER})
set(${arg_OUTPUT_SRC} ${output_sources} PARENT_SCOPE)
set(${arg_OUTPUT_TARGET_NAME} ${custom_target_name} PARENT_SCOPE)
if (DEFINED arg_LIB)
add_dependencies(${custom_target_name} ${arg_LIB})
endif()
endfunction()
function(exp_add_executable)
set(options NOT_INSTALL)
set(singleValueArgs NAME FOLDER)
set(multiValueArgs SRC INC LINK LIB DEP_TARGET RES REFLECT)
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
if (${arg_NOT_INSTALL})
set(not_install_flag NOT_INSTALL)
else ()
set(not_install_flag "")
endif ()
if (DEFINED arg_REFLECT)
exp_add_mirror_info_source_generation_target(
NAME ${arg_NAME}
OUTPUT_SRC generated_src
OUTPUT_TARGET_NAME generated_target
SEARCH_DIR ${arg_REFLECT}
PRIVATE_INC ${arg_INC}
LIB ${arg_LIB}
)
endif()
add_executable(${arg_NAME})
target_sources(
${arg_NAME}
PRIVATE ${arg_SRC} ${generated_src}
)
if (DEFINED arg_FOLDER)
set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER}/${arg_FOLDER})
else ()
set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER})
endif ()
if (${with_multi_config_generator})
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Dist/$<CONFIG>/${SUB_PROJECT_NAME}/Binaries)
else ()
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Dist/${SUB_PROJECT_NAME}/Binaries)
endif ()
set_target_properties(
${arg_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${runtime_output_dir}
)
target_include_directories(
${arg_NAME}
PRIVATE ${arg_INC}
)
target_link_directories(
${arg_NAME}
PRIVATE ${arg_LINK}
)
target_link_libraries(
${arg_NAME}
PUBLIC ${arg_LIB}
)
exp_process_runtime_dependencies(
NAME ${arg_NAME}
DEP_TARGET ${arg_DEP_TARGET}
${not_install_flag}
)
exp_add_resources_copy_command(
NAME ${arg_NAME}
RES ${arg_RES}
${not_install_flag}
)
if (DEFINED arg_DEP_TARGET)
add_dependencies(${arg_NAME} ${arg_DEP_TARGET})
endif()
if (DEFINED arg_REFLECT)
add_dependencies(${arg_NAME} ${generated_target})
endif()
if (${MSVC})
set_target_properties(
${arg_NAME} PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY ${runtime_output_dir}
)
endif()
if (NOT ${arg_NOT_INSTALL})
install(
TARGETS ${arg_NAME}
EXPORT ${SUB_PROJECT_NAME}Targets
RUNTIME DESTINATION ${SUB_PROJECT_NAME}/Binaries
)
export(
TARGETS ${arg_NAME}
NAMESPACE ${SUB_PROJECT_NAME}::
APPEND FILE ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Targets.cmake
)
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
install(CODE "execute_process(COMMAND install_name_tool -add_rpath @executable_path ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/$<TARGET_FILE_NAME:${arg_NAME}>)")
endif ()
endif ()
endfunction()
function(exp_add_library)
set(options NOT_INSTALL)
set(singleValueArgs NAME TYPE)
set(multiValueArgs SRC PRIVATE_INC PUBLIC_INC PRIVATE_LINK PUBLIC_LINK PRIVATE_LIB PUBLIC_LIB REFLECT)
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
if ("${arg_TYPE}" STREQUAL "SHARED")
list(APPEND arg_PUBLIC_INC ${GENERATED_API_HEADER_DIR}/${arg_NAME})
endif ()
if (DEFINED arg_REFLECT)
if ("${arg_TYPE}" STREQUAL "SHARED")
list(APPEND extra_params DYNAMIC)
endif ()
exp_add_mirror_info_source_generation_target(
NAME ${arg_NAME}
OUTPUT_SRC generated_src
OUTPUT_TARGET_NAME generated_target
SEARCH_DIR ${arg_REFLECT}
PUBLIC_INC ${arg_PUBLIC_INC}
PRIVATE_INC ${arg_PRIVATE_INC}
LIB ${arg_PRIVATE_LIB} ${arg_PUBLIC_LIB}
${extra_params}
)
endif()
add_library(
${arg_NAME}
${arg_TYPE}
)
set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER})
target_sources(
${arg_NAME}
PRIVATE ${arg_SRC} ${generated_src}
)
if (${with_multi_config_generator})
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Binaries)
set(library_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Binaries)
set(archive_output_directory ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Lib)
else ()
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/Binaries)
set(library_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/Binaries)
set(archive_output_directory ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/Lib)
endif ()
set_target_properties(
${arg_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${runtime_output_dir}
LIBRARY_OUTPUT_DIRECTORY ${library_output_dir}
ARCHIVE_OUTPUT_DIRECTORY ${archive_output_directory}
)
foreach (inc ${arg_PUBLIC_INC})
get_filename_component(absolute_inc ${inc} ABSOLUTE)
list(APPEND public_build_inc $<BUILD_INTERFACE:${absolute_inc}>)
endforeach ()
target_include_directories(
${arg_NAME}
PRIVATE ${arg_PRIVATE_INC}
PUBLIC ${public_build_inc} $<INSTALL_INTERFACE:${SUB_PROJECT_NAME}/Target/${arg_NAME}/Include>
)
target_link_directories(
${arg_NAME}
PRIVATE ${arg_PRIVATE_LINK}
PUBLIC ${arg_PUBLIC_LINK}
)
target_link_libraries(
${arg_NAME}
PRIVATE ${arg_PRIVATE_LIB}
PUBLIC ${arg_PUBLIC_LIB}
)
if ("${arg_TYPE}" STREQUAL "SHARED")
string(TOUPPER ${arg_NAME}_API api_name)
string(REPLACE "-" "/" api_dir ${arg_NAME})
generate_export_header(
${arg_NAME}
EXPORT_MACRO_NAME ${api_name}
EXPORT_FILE_NAME ${GENERATED_API_HEADER_DIR}/${arg_NAME}/${api_dir}/Api.h
)
endif()
if (DEFINED arg_REFLECT)
add_dependencies(${arg_NAME} ${generated_target})
endif()
if (NOT ${arg_NOT_INSTALL})
foreach (inc ${arg_PUBLIC_INC})
list(APPEND install_inc ${inc}/)
endforeach ()
install(
DIRECTORY ${install_inc}
DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Include
)
install(
TARGETS ${arg_NAME}
EXPORT ${SUB_PROJECT_NAME}Targets
ARCHIVE DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Lib
LIBRARY DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Lib
RUNTIME DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Binaries
)
export(
TARGETS ${arg_NAME}
NAMESPACE ${SUB_PROJECT_NAME}::
APPEND FILE ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Targets.cmake
)
if ("${arg_TYPE}" STREQUAL "SHARED")
install(
FILES $<TARGET_FILE:${arg_NAME}>
DESTINATION ${SUB_PROJECT_NAME}/Binaries
)
endif ()
endif ()
endfunction()
function(exp_add_test)
if (NOT ${BUILD_TEST})
return()
endif()
set(options META)
set(singleValueArgs NAME)
set(multiValueArgs SRC INC LINK LIB DEP_TARGET RES REFLECT)
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
exp_add_executable(
NAME ${arg_NAME}
SRC ${arg_SRC}
INC ${arg_INC}
LINK ${arg_LINK}
LIB Test ${arg_LIB}
DEP_TARGET ${arg_DEP_TARGET}
RES ${arg_RES}
REFLECT ${arg_REFLECT}
NOT_INSTALL
)
add_test(
NAME ${arg_NAME}
COMMAND ${arg_NAME}
WORKING_DIRECTORY $<TARGET_FILE_DIR:${arg_NAME}>
)
endfunction()
install(
EXPORT ${SUB_PROJECT_NAME}Targets
FILE ${SUB_PROJECT_NAME}Targets.cmake
NAMESPACE ${SUB_PROJECT_NAME}::
DESTINATION ${SUB_PROJECT_NAME}
)
configure_package_config_file(
${CMAKE_CURRENT_LIST_DIR}/Config.cmake.in
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Config.cmake
INSTALL_DESTINATION ${SUB_PROJECT_NAME}/CMake
)
write_basic_package_version_file(
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}ConfigVersion.cmake
VERSION ${SUB_PROJECT_VERSION_MAJOR}.${SUB_PROJECT_VERSION_MINOR}.${SUB_PROJECT_VERSION_PATCH}
COMPATIBILITY SameMajorVersion
)
install(
FILES
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Config.cmake
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}ConfigVersion.cmake
DESTINATION ${SUB_PROJECT_NAME}
)
file(GLOB_RECURSE preset_cmake_libs ${CMAKE_CURRENT_LIST_DIR}/*)
foreach (cmake_lib ${preset_cmake_libs})
file(
COPY ${cmake_lib}
DESTINATION ${CMAKE_BINARY_DIR}/CMake
)
endforeach ()
install(
FILES ${preset_cmake_libs}
DESTINATION ${SUB_PROJECT_NAME}/CMake
)
if (DEFINED SUB_PROJECT_CMAKE_LIBS)
foreach (cmake_lib ${SUB_PROJECT_CMAKE_LIBS})
if (IS_ABSOLUTE ${cmake_lib})
message(FATAL_ERROR "project cmake libs defined in SUB_PROJECT_CMAKE_LIBS should be relative path from project root")
endif ()
set(src_file ${CMAKE_SOURCE_DIR}/${cmake_lib})
get_filename_component(binary_tree_dst_dir ${CMAKE_BINARY_DIR}/CMake/${cmake_lib} DIRECTORY)
get_filename_component(install_tree_dst_dir ${SUB_PROJECT_NAME}/CMake/${cmake_lib} DIRECTORY)
file(
COPY ${src_file}
DESTINATION ${binary_tree_dst_dir}
)
install(
FILES ${src_file}
DESTINATION ${install_tree_dst_dir}
)
endforeach ()
endif ()
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.25)
set(CONAN_INSTALL_BUILD_CONFIGURATIONS "Release" CACHE STRING "" FORCE)
set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES ${CMAKE_SOURCE_DIR}/conan_provider.cmake CACHE PATH "" FORCE)
project(Explosion)
option(BUILD_EDITOR "Build Explosion editor" ON)
option(BUILD_SAMPLE "Build samples" ON)
set(SUB_PROJECT_NAME "Explosion" CACHE STRING "" FORCE)
set(SUB_PROJECT_VERSION_MAJOR 0 CACHE STRING "" FORCE)
set(SUB_PROJECT_VERSION_MINOR 0 CACHE STRING "" FORCE)
set(SUB_PROJECT_VERSION_PATCH 1 CACHE STRING "" FORCE)
set(SUB_PROJECT_CMAKE_LIBS "ThirdParty/Registry.cmake" CACHE STRING "" FORCE)
set(USE_CONAN ON CACHE BOOL "" FORCE)
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG "Release" CACHE STRING "" FORCE)
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "Release" CACHE STRING "" FORCE)
set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL "Release" CACHE STRING "" FORCE)
add_compile_definitions(BUILD_EDITOR=$<BOOL:${BUILD_EDITOR}>)
include(CMake/Common.cmake)
include(CMake/Target.cmake)
include(ThirdParty/Registry.cmake)
add_subdirectory(Engine)
add_subdirectory(Tool)
add_subdirectory(Sample)
if (${BUILD_EDITOR})
add_subdirectory(Editor)
endif()
================================================
FILE: Editor/CMakeLists.txt
================================================
find_package(
Qt6
COMPONENTS Core Gui Widgets WebEngineWidgets
REQUIRED
)
set(QT_ROOT ${QT6_INSTALL_PREFIX})
qt_standard_project_setup()
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(platform_executable_hint MACOSX_BUNDLE)
set(bundle_install_dest BUNDLE DESTINATION ${SUB_PROJECT_NAME}/Binaries)
set(platform_fwk_dir ${QT_ROOT}/lib)
endif ()
set(editor_qt_libs Qt6::Core Qt6::Gui Qt6::Widgets Qt6::WebEngineWidgets)
set(editor_libs Core RHI Runtime httplib::httplib ${editor_qt_libs})
exp_add_mirror_info_source_generation_target(
NAME Editor
OUTPUT_SRC EDITOR_MIRROR_GENERATED_SRC
OUTPUT_TARGET_NAME EDITOR_MIRROR_GENERATED_TARGET
SEARCH_DIR Include
PRIVATE_INC Include
LIB ${editor_libs}
FRAMEWORK_DIR ${platform_fwk_dir}
)
file(GLOB_RECURSE SOURCES Src/*.cpp)
qt_add_executable(Editor ${platform_executable_hint} ${SOURCES} ${EDITOR_MIRROR_GENERATED_SRC})
set_target_properties(Editor PROPERTIES FOLDER ${BASE_TARGETS_FOLDER})
get_cmake_property(GENERATOR_IS_MULTI_CONFIG GENERATOR_IS_MULTI_CONFIG)
if (${GENERATOR_IS_MULTI_CONFIG})
set_target_properties(
Editor PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Dist/$<CONFIG>/${SUB_PROJECT_NAME}/Binaries
)
else ()
set_target_properties(
Editor PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Dist/${SUB_PROJECT_NAME}/Binaries
)
endif ()
target_include_directories(Editor PRIVATE Include)
target_link_libraries(Editor PRIVATE ${editor_libs})
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(RHI_DEP_TARGETS RHI-DirectX12 RHI-Vulkan)
else()
set(RHI_DEP_TARGETS RHI-Vulkan)
endif()
add_dependencies(Editor ${EDITOR_MIRROR_GENERATED_TARGET} ${RHI_DEP_TARGETS})
exp_process_runtime_dependencies(
NAME Editor
DEP_TARGET ${RHI_DEP_TARGETS}
)
install(
TARGETS Editor
RUNTIME DESTINATION ${SUB_PROJECT_NAME}/Binaries
${bundle_install_dest}
)
export(
TARGETS Editor
NAMESPACE ${SUB_PROJECT_NAME}::
APPEND FILE ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Targets.cmake
)
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(qt_win_deploy_executable ${QT_ROOT}/bin/windeployqt.exe)
add_custom_command(
TARGET Editor POST_BUILD
COMMAND ${qt_win_deploy_executable} $<TARGET_FILE:Editor>
)
install(
CODE "execute_process(COMMAND ${qt_win_deploy_executable} ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/$<TARGET_FILE_NAME:Editor>)"
)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(qt_mac_deploy_executable ${QT_ROOT}/bin/macdeployqt)
add_custom_command(
TARGET Editor POST_BUILD
COMMAND ${qt_mac_deploy_executable} $<TARGET_PROPERTY:Editor,RUNTIME_OUTPUT_DIRECTORY>/Editor.app -no-strip
)
install(
CODE "execute_process(COMMAND ${qt_mac_deploy_executable} ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/Editor.app -no-strip)"
)
endif ()
# TODO check is this need ?
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
foreach (rhi_dep_target ${RHI_DEP_TARGETS})
list(APPEND rhi_dep_target_copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${rhi_dep_target}> $<TARGET_FILE_DIR:Editor>/../Frameworks/$<TARGET_FILE_NAME:${rhi_dep_target}>)
endforeach ()
add_custom_command(
TARGET Editor POST_BUILD
${rhi_dep_target_copy_commands}
)
endif ()
# ---- begin shaders ---------------------------------------------------------------------------------
get_engine_shader_resources(OUTPUT editor_resources)
file(GLOB_RECURSE shaders Shader/*.es*)
foreach (shader ${shaders})
get_filename_component(shader_absolute ${shader} ABSOLUTE)
string(REPLACE ${CMAKE_CURRENT_SOURCE_DIR}/Shader ../Shader/Editor copy_dst ${shader_absolute})
list(APPEND editor_resources ${shader}->${copy_dst})
endforeach ()
file(GLOB_RECURSE resources Resource/*)
foreach (resource ${resources})
get_filename_component(resource_absolute ${resource} ABSOLUTE)
string(REPLACE ${CMAKE_CURRENT_SOURCE_DIR}/Resource ../Resource/Editor copy_dst ${resource_absolute})
list(APPEND editor_resources ${resource}->${copy_dst})
endforeach ()
exp_add_resources_copy_command(
NAME Editor
RES ${editor_resources}
)
# ---- end shaders -----------------------------------------------------------------------------------
# ---- begin web project -----------------------------------------------------------------------------
find_program(npm_executable NAMES npm.cmd npm REQUIRED NO_CACHE)
message("Perform web project npm install......")
execute_process(
COMMAND ${CMAKE_COMMAND} -E env ${npm_executable} install --no-fund --registry=https://registry.npmmirror.com
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Web
RESULT_VARIABLE npm_install_result
OUTPUT_VARIABLE npm_install_output
ERROR_VARIABLE npm_install_error
)
if (${npm_install_result} STREQUAL "0")
message(${npm_install_output})
else ()
message(FATAL_ERROR ${npm_install_error})
endif ()
add_custom_target(
Editor.Web
COMMAND ${CMAKE_COMMAND} -E env ${npm_executable} run build
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Web
VERBATIM
)
set_target_properties(Editor.Web PROPERTIES FOLDER ${AUX_TARGETS_FOLDER})
add_dependencies(Editor Editor.Web)
add_custom_command(
TARGET Editor.Web POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist $<TARGET_FILE_DIR:Editor>/Web
)
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/Web)")
endif ()
# ---- end web project -------------------------------------------------------------------------------
================================================
FILE: Editor/Include/Editor/EditorEngine.h
================================================
//
// Created by johnk on 2024/8/21.
//
#pragma once
#include <Runtime/Engine.h>
namespace Editor {
class EditorEngine final : public Runtime::Engine {
public:
~EditorEngine() override;
bool IsEditor() override;
private:
friend class EditorModule;
explicit EditorEngine(const Runtime::EngineInitParams& inParams);
};
EditorEngine& GetEditorEngine();
}
================================================
FILE: Editor/Include/Editor/EditorModule.h
================================================
//
// Created by johnk on 2024/8/21.
//
#pragma once
#include <Runtime/Engine.h>
namespace Editor {
class EditorModule final : public Runtime::EngineModule {
public:
void OnUnload() override;
::Core::ModuleType Type() const override;
Runtime::Engine* CreateEngine(const Runtime::EngineInitParams&) override;
};
}
================================================
FILE: Editor/Include/Editor/Qt/EngineSerialization.h
================================================
// Created by Kindem on 2025/8/17.
//
#pragma once
#include <QString>
#include <QList>
#include <QSet>
#include <QMap>
#include <Common/Hash.h>
#include <Common/Serialization.h>
namespace Common {
template <>
struct Serializer<QString> {
static constexpr size_t typeId = HashUtils::StrCrc32("QString");
static size_t Serialize(BinarySerializeStream& outStream, const QString& inString)
{
return Serializer<std::string>::Serialize(outStream, inString.toStdString());
}
static size_t Deserialize(BinaryDeserializeStream& inStream, QString& outString)
{
std::string stdString;
const size_t deserialized = Serializer<std::string>::Deserialize(inStream, stdString);
outString = QString::fromStdString(stdString);
return deserialized;
}
};
template <Serializable T>
struct Serializer<QList<T>> {
static constexpr size_t typeId
= HashUtils::StrCrc32("QList") +
+ Serializer<T>::typeId;
static size_t Serialize(BinarySerializeStream& outStream, const QList<T>& inList)
{
size_t serialized = Serializer<uint64_t>::Serialize(outStream, inList.size());
for (const auto& element : inList) {
serialized += Serializer<T>::Serialize(outStream, element);
}
return serialized;
}
static size_t Deserialize(BinaryDeserializeStream& inStream, QList<T>& outList)
{
size_t deserialized = 0;
outList.clear();
uint64_t size;
deserialized += Serializer<uint64_t>::Deserialize(inStream, size);
outList.reserve(size);
for (auto i = 0; i < size; i++) {
T element;
deserialized += Serializer<T>::Deserialize(inStream, element);
outList.emplaceBack(std::move(element));
}
return deserialized;
}
};
template <Serializable T>
struct Serializer<QSet<T>> {
static constexpr size_t typeId
= HashUtils::StrCrc32("QSet")
+ Serializer<T>::typeId;
static size_t Serialize(BinarySerializeStream& outStream, const QSet<T>& inSet)
{
size_t serialized = Serializer<uint64_t>::Serialize(outStream, inSet.size());
for (const auto& element : inSet) {
serialized += Serializer<T>::Serialize(outStream, element);
}
return serialized;
}
static size_t Deserialize(BinaryDeserializeStream& inStream, QSet<T>& outSet)
{
size_t deserialized = 0;
outSet.clear();
uint64_t size;
deserialized += Serializer<uint64_t>::Deserialize(inStream, size);
outSet.reserve(size);
for (auto i = 0; i < size; i++) {
T temp;
deserialized += Serializer<T>::Deserialize(inStream, temp);
outSet.insert(std::move(temp));
}
return deserialized;
}
};
template <Serializable K, Serializable V>
struct Serializer<QMap<K, V>> {
static constexpr size_t typeId
= HashUtils::StrCrc32("QMap")
+ Serializer<K>::typeId
+ Serializer<V>::typeId;
static size_t Serialize(BinarySerializeStream& outStream, const QMap<K, V>& inMap)
{
size_t serialized = Serializer<uint64_t>::Serialize(outStream, inMap.size());
for (const auto& [key, value] : inMap) {
serialized += Serializer<K>::Serialize(outStream, key);
serialized += Serializer<V>::Serialize(outStream, value);
}
return serialized;
}
static size_t Deserialize(BinaryDeserializeStream& inStream, QMap<K, V>& outMap)
{
size_t deserialized = 0;
outMap.clear();
uint64_t size;
deserialized += Serializer<uint64_t>::Deserialize(inStream, size);
for (auto i = 0; i < size; i++) {
K key;
V value;
deserialized += Serializer<K>::Deserialize(inStream, key);
deserialized += Serializer<V>::Deserialize(inStream, value);
outMap.insert(std::move(key), std::move(value));
}
return deserialized;
}
};
template <>
struct JsonSerializer<QString> {
static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Document::AllocatorType& inAllocator, const QString& inValue)
{
const std::string stdString = inValue.toStdString();
JsonSerializer<std::string>::JsonSerialize(outJsonValue, inAllocator, stdString);
}
static void JsonDeserialize(const rapidjson::Value& inJsonValue, QString& outValue)
{
std::string stdString;
JsonSerializer<std::string>::JsonDeserialize(inJsonValue, stdString);
outValue = QString::fromStdString(stdString);
}
};
template <JsonSerializable T>
struct JsonSerializer<QList<T>> {
static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Document::AllocatorType& inAllocator, const QList<T>& inList)
{
outJsonValue.SetArray();
outJsonValue.Reserve(inList.size(), inAllocator);
for (const auto& element : inList) {
rapidjson::Value jsonElement;
JsonSerializer<T>::JsonSerialize(jsonElement, inAllocator, element);
outJsonValue.PushBack(jsonElement, inAllocator);
}
}
static void JsonDeserialize(const rapidjson::Value& inJsonValue, QList<T>& outList)
{
outList.clear();
if (!inJsonValue.IsArray()) {
return;
}
outList.reserve(inJsonValue.Size());
for (auto i = 0; i < inJsonValue.Size(); i++) {
T element;
JsonSerializer<T>::JsonDeserialize(inJsonValue[i], element);
outList.emplaceBack(std::move(element));
}
}
};
template <JsonSerializable T>
struct JsonSerializer<QSet<T>> {
static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Document::AllocatorType& inAllocator, const QSet<T>& inSet)
{
outJsonValue.SetArray();
outJsonValue.Reserve(inSet.size(), inAllocator);
for (const auto& element : inSet) {
rapidjson::Value jsonElement;
JsonSerializer<T>::JsonSerialize(jsonElement, inAllocator, element);
outJsonValue.PushBack(jsonElement, inAllocator);
}
}
static void JsonDeserialize(const rapidjson::Value& inJsonValue, QSet<T>& outSet)
{
outSet.clear();
if (!inJsonValue.IsArray()) {
return;
}
outSet.reserve(inJsonValue.Size());
for (auto i = 0; i < inJsonValue.Size(); i++) {
T element;
JsonSerializer<T>::JsonDeserialize(inJsonValue[i], element);
outSet.insert(std::move(element));
}
}
};
template <JsonSerializable K, JsonSerializable V>
struct JsonSerializer<QMap<K, V>> {
static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Document::AllocatorType& inAllocator, const QMap<K, V>& inMap)
{
outJsonValue.SetArray();
outJsonValue.Reserve(inMap.size(), inAllocator);
for (const auto& [key, value] : inMap) {
rapidjson::Value jsonElement;
jsonElement.SetObject();
rapidjson::Value jsonKey;
JsonSerializer<K>::JsonSerialize(jsonElement, inAllocator, key);
rapidjson::Value jsonValue;
JsonSerializer<V>::JsonSerialize(jsonValue, inAllocator, value);
outJsonValue.AddMember("key", jsonKey, inAllocator);
outJsonValue.AddMember("value", jsonValue, inAllocator);
outJsonValue.PushBack(jsonElement, inAllocator);
}
}
static void JsonDeserialize(const rapidjson::Value& inJsonValue, QMap<K, V>& outMap)
{
outMap.clear();
if (!inJsonValue.IsArray()) {
return;
}
for (auto i = 0; i < inJsonValue.Size(); i++) {
K key;
V value;
const auto& jsonElement = inJsonValue[i];
if (!jsonElement.IsObject()) {
continue;
}
if (jsonElement.HasMember("key")) {
JsonSerializer<K>::JsonDeserialize(jsonElement["key"], key);
}
if (jsonElement.HasMember("value")) {
JsonSerializer<V>::JsonDeserialize(jsonElement["value"], value);
}
outMap.insert(std::move(key), std::move(value));
}
}
};
}
================================================
FILE: Editor/Include/Editor/Qt/JsonSerialization.h
================================================
//
// Created by Kindem on 2025/8/18.
//
#pragma once
#include <cstdint>
#include <utility>
#include <string>
#include <optional>
#include <vector>
#include <unordered_set>
#include <set>
#include <unordered_map>
#include <map>
#include <tuple>
#include <variant>
#include <QJsonValue>
#include <QJsonArray>
#include <QJsonObject>
#include <Common/Utility.h>
#include <Common/Math/Math.h>
#include <Mirror/Mirror.h>
#include <Editor/Qt/MirrorTemplateView.h>
namespace Editor {
template <typename T> struct QtJsonSerializer {};
template <typename T> concept QtJsonSerializable = requires(
const T& inValue, T& outValue,
const QJsonValue& inJsonValue, QJsonValue& outJsonValue)
{
QtJsonSerializer<T>::QtJsonSerialize(outJsonValue, inValue);
QtJsonSerializer<T>::QtJsonDeserialize(inJsonValue, outValue);
};
template <typename T> void QtJsonSerialize(QJsonValue& outJsonValue, const T& inValue);
template <typename T> void QtJsonDeserialize(const QJsonValue& inJsonValue, T& outValue);
}
namespace Editor {
template <typename T>
void QtJsonSerialize(QJsonValue& outJsonValue, const T& inValue)
{
if constexpr (QtJsonSerializable<T>) {
QtJsonSerializer<T>::QtJsonSerialize(outJsonValue, inValue);
} else {
QuickFailWithReason("your type is not support json serialization");
}
}
template <typename T>
void QtJsonDeserialize(const QJsonValue& inJsonValue, T& outValue)
{
if constexpr (QtJsonSerializable<T>) {
QtJsonSerializer<T>::QtJsonDeserialize(inJsonValue, outValue);
} else {
QuickFailWithReason("your type is not support json serialization");
}
}
template <>
struct QtJsonSerializer<bool> {
static void QtJsonSerialize(QJsonValue& outJsonValue, bool inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, bool& outValue)
{
if (!inJsonValue.isBool()) {
return;
}
outValue = inJsonValue.toBool();
}
};
template <>
struct QtJsonSerializer<int8_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, int8_t inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, int8_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = static_cast<int8_t>(inJsonValue.toInt());
}
};
template <>
struct QtJsonSerializer<uint8_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, uint8_t inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, uint8_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = static_cast<uint8_t>(inJsonValue.toInt());
}
};
template <>
struct QtJsonSerializer<int16_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, int16_t inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, int16_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = static_cast<int16_t>(inJsonValue.toInt());
}
};
template <>
struct QtJsonSerializer<uint16_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, uint16_t inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, uint16_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = static_cast<uint16_t>(inJsonValue.toInt());
}
};
template <>
struct QtJsonSerializer<int32_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, int32_t inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, int32_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = inJsonValue.toInt();
}
};
template <>
struct QtJsonSerializer<uint32_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, uint32_t inValue)
{
outJsonValue = static_cast<qint64>(inValue);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, uint32_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = static_cast<uint32_t>(inJsonValue.toInteger());
}
};
template <>
struct QtJsonSerializer<int64_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, int64_t inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, int64_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = inJsonValue.toInteger();
}
};
template <>
struct QtJsonSerializer<uint64_t> {
static void QtJsonSerialize(QJsonValue& outJsonValue, uint64_t inValue)
{
outJsonValue = static_cast<int64_t>(inValue);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, uint64_t& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = static_cast<uint64_t>(inJsonValue.toInteger());
}
};
template <>
struct QtJsonSerializer<float> {
static void QtJsonSerialize(QJsonValue& outJsonValue, float inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, float& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = static_cast<float>(inJsonValue.toDouble());
}
};
template <>
struct QtJsonSerializer<double> {
static void QtJsonSerialize(QJsonValue& outJsonValue, double inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, double& outValue)
{
if (!inJsonValue.isDouble()) {
return;
}
outValue = inJsonValue.toDouble();
}
};
template <>
struct QtJsonSerializer<std::string> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::string& inValue)
{
outJsonValue = QString::fromStdString(inValue);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::string& outValue)
{
if (!inJsonValue.isString()) {
return;
}
outValue = inJsonValue.toString().toStdString();
}
};
template <>
struct QtJsonSerializer<std::wstring> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::wstring& inValue)
{
outJsonValue = QString::fromStdWString(inValue);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::wstring& outValue)
{
if (!inJsonValue.isString()) {
return;
}
outValue = inJsonValue.toString().toStdWString();
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<std::optional<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::optional<T>& inValue)
{
if (inValue.has_value()) {
QtJsonSerializer<T>::QtJsonSerialize(outJsonValue, inValue.value());
} else {
outJsonValue = QJsonValue::Null;
}
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::optional<T>& outValue)
{
outValue.reset();
if (inJsonValue.isNull()) {
return;
}
T& outValueRef = outValue.emplace();
QtJsonSerializer<T>::QtJsonDeserialize(inJsonValue, outValueRef);
}
};
template <QtJsonSerializable K, QtJsonSerializable V>
struct QtJsonSerializer<std::pair<K, V>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::pair<K, V>& inValue)
{
QJsonValue jsonKey;
QtJsonSerializer<K>::QtJsonSerialize(jsonKey, inValue.first);
QJsonValue jsonValue;
QtJsonSerializer<V>::QtJsonSerialize(jsonValue, inValue.second);
QJsonObject jsonObject;
jsonObject["key"] = jsonKey;
jsonObject["value"] = jsonValue;
outJsonValue = std::move(jsonObject);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::pair<K, V>& outValue)
{
if (!inJsonValue.isObject()) {
return;
}
const QJsonObject jsonObject = inJsonValue.toObject();
if (jsonObject.contains("key")) {
const QJsonValue jsonKey = jsonObject["key"];
QtJsonSerializer<K>::QtJsonDeserialize(jsonKey, outValue.first);
}
if (jsonObject.contains("value")) {
const QJsonValue jsonValue = jsonObject["value"];
QtJsonSerializer<V>::QtJsonDeserialize(jsonValue, outValue.second);
}
}
};
template <QtJsonSerializable T, size_t N>
struct QtJsonSerializer<std::array<T, N>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::array<T, N>& inValue)
{
QJsonArray jsonArray;
for (const auto& element : inValue) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, element);
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::array<T, N>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
if (jsonArray.size() != N) {
return;
}
for (auto i = 0; i < N; i++) {
QtJsonSerializer<T>::QtJsonDeserialize(jsonArray[i], outValue[i]);
}
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<std::vector<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::vector<T>& inValue)
{
QJsonArray jsonArray;
for (const auto& element : inValue) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, element);
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::vector<T>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
outValue.reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
T element;
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
outValue.emplace_back(std::move(element));
}
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<std::list<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::list<T>& inValue)
{
QJsonArray jsonArray;
for (const auto& element : inValue) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, element);
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::list<T>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
for (const auto& jsonElement : jsonArray) {
T element;
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
outValue.emplace_back(std::move(element));
}
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<std::unordered_set<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::unordered_set<T>& inValue)
{
QJsonArray jsonArray;
for (const auto& element : inValue) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, element);
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::unordered_set<T>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
outValue.reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
T element;
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
outValue.emplace(std::move(element));
}
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<std::set<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::set<T>& inValue)
{
QJsonArray jsonArray;
for (const auto& element : inValue) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, element);
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::set<T>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
for (const auto& jsonElement : jsonArray) {
T element;
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
outValue.emplace(std::move(element));
}
}
};
template <QtJsonSerializable K, QtJsonSerializable V>
struct QtJsonSerializer<std::unordered_map<K, V>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::unordered_map<K, V>& inValue)
{
QJsonArray jsonArray;
for (const auto& pair : inValue) {
QJsonValue jsonPair;
QtJsonSerializer<std::pair<K, V>>::QtJsonSerialize(jsonPair, pair);
jsonArray.append(jsonPair);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::unordered_map<K, V>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
outValue.reserve(jsonArray.size());
for (const auto& jsonPair : jsonArray) {
std::pair<K, V> pair;
QtJsonSerializer<std::pair<K, V>>::QtJsonDeserialize(jsonPair, pair);
outValue.emplace(std::move(pair));
}
}
};
template <QtJsonSerializable K, QtJsonSerializable V>
struct QtJsonSerializer<std::map<K, V>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::map<K, V>& inValue)
{
QJsonArray jsonArray;
for (const auto& pair : inValue) {
QJsonValue jsonPair;
QtJsonSerializer<std::pair<K, V>>::QtJsonSerialize(jsonPair, pair);
jsonArray.append(jsonPair);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::map<K, V>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
for (const auto& jsonPair : jsonArray) {
std::pair<K, V> pair;
QtJsonSerializer<std::pair<K, V>>::QtJsonDeserialize(jsonPair, pair);
outValue.emplace(std::move(pair));
}
}
};
template <QtJsonSerializable... T>
struct QtJsonSerializer<std::tuple<T...>> {
template <size_t... I>
static void QtJsonSerializeInternal(QJsonObject& outJsonObject, const std::tuple<T...>& inValue, std::index_sequence<I...>)
{
(void) std::initializer_list<int> { ([&]() -> void {
const auto key = std::to_string(I);
QJsonValue jsonValue;
QtJsonSerializer<T>::QtJsonSerialize(jsonValue, std::get<I>(inValue));
outJsonObject[QString::fromStdString(key)] = jsonValue;
}(), 0)... };
}
template <size_t... I>
static void QtJsonDeserializeInternal(const QJsonObject& inJsonObject, std::tuple<T...>& outValue, std::index_sequence<I...>)
{
(void) std::initializer_list<int> { ([&]() -> void {
const auto key = std::to_string(I);
const QJsonValue jsonValue = inJsonObject[QString::fromStdString(key)];
if (jsonValue.isNull()) {
return;
}
QtJsonSerializer<T>::QtJsonDeserialize(jsonValue, std::get<I>(outValue));
}(), 0)... };
}
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::tuple<T...>& inValue)
{
QJsonObject jsonObject;
QtJsonSerializeInternal(jsonObject, inValue, std::make_index_sequence<sizeof...(T)> {});
outJsonValue = std::move(jsonObject);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::tuple<T...>& outValue)
{
outValue = {};
if (!inJsonValue.isObject()) {
return;
}
QtJsonDeserializeInternal(inJsonValue.toObject(), outValue, std::make_index_sequence<sizeof...(T)> {});
}
};
template <QtJsonSerializable... T>
struct QtJsonSerializer<std::variant<T...>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const std::variant<T...>& inValue)
{
QJsonValue jsonType;
QtJsonSerializer<uint64_t>::QtJsonSerialize(jsonType, inValue.index());
QJsonValue jsonContent;
std::visit([&]<typename T0>(T0&& v) -> void {
QtJsonSerializer<std::decay_t<T0>>::QtJsonSerialize(jsonContent, v);
}, inValue);
QJsonObject jsonObject;
jsonObject["type"] = jsonType;
jsonObject["content"] = jsonContent;
outJsonValue = std::move(jsonObject);
}
template <size_t... I>
static void QtJsonDeserializeInternal(const QJsonValue& inContentJsonValue, std::variant<T...>& outValue, size_t inAspectIndex, std::index_sequence<I...>)
{
(void) std::initializer_list<int> { ([&]() -> void {
if (I != inAspectIndex) {
return;
}
T temp;
QtJsonSerializer<T>::QtJsonDeserialize(inContentJsonValue, temp);
outValue = std::move(temp);
}(), 0)... };
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::variant<T...>& outValue)
{
if (!inJsonValue.isObject()) {
return;
}
const QJsonObject jsonObject = inJsonValue.toObject();
if (!jsonObject.contains("type") || !jsonObject.contains("content")) {
return;
}
const QJsonValue jsonType = jsonObject["type"];
const QJsonValue jsonContent = jsonObject["content"];
uint64_t aspectIndex = 0;
QtJsonSerializer<uint64_t>::QtJsonDeserialize(jsonType, aspectIndex);
QtJsonDeserializeInternal(jsonContent, outValue, aspectIndex, std::make_index_sequence<sizeof...(T)> {});
}
};
template <QtJsonSerializable T, uint8_t L>
struct QtJsonSerializer<Common::Vec<T, L>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const Common::Vec<T, L>& inValue)
{
QJsonArray jsonArray;
for (auto i = 0; i < L; i++) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, inValue[i]);
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, Common::Vec<T, L>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
if (jsonArray.size() != L) {
return;
}
for (auto i = 0; i < L; i++) {
QtJsonSerializer<T>::QtJsonDeserialize(jsonArray[i], outValue[i]);
}
}
};
template <QtJsonSerializable T, uint8_t R, uint8_t C>
struct QtJsonSerializer<Common::Mat<T, R, C>> {
static void QtJsonSerialize(QJsonValue& jsonValue, const Common::Mat<T, R, C>& inValue)
{
QJsonArray jsonArray;
for (auto i = 0; i < R; i++) {
for (auto j = 0; j < C; j++) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, inValue.At(i, j));
jsonArray.append(jsonElement);
}
}
jsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& jsonValue, Common::Mat<T, R, C>& outValue)
{
if (!jsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = jsonValue.toArray();
if (jsonArray.size() != R * C) {
return;
}
for (auto i = 0; i < jsonArray.size(); i++) {
auto row = i / C;
auto col = i % C;
QtJsonSerializer<T>::QtJsonDeserialize(jsonArray[i], outValue.At(row, col));
}
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<Common::Quaternion<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const Common::Quaternion<T>& inValue)
{
QJsonValue jsonW;
QtJsonSerializer<T>::QtJsonSerialize(jsonW, inValue.w);
QJsonValue jsonX;
QtJsonSerializer<T>::QtJsonSerialize(jsonX, inValue.x);
QJsonValue jsonY;
QtJsonSerializer<T>::QtJsonSerialize(jsonY, inValue.y);
QJsonValue jsonZ;
QtJsonSerializer<T>::QtJsonSerialize(jsonZ, inValue.z);
QJsonArray jsonArray;
jsonArray.append(jsonX);
jsonArray.append(jsonY);
jsonArray.append(jsonZ);
jsonArray.append(jsonW);
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, Common::Quaternion<T>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
if (jsonArray.size() != 4) {
return;
}
const QJsonValue jsonX = jsonArray[0];
QtJsonSerializer<T>::QtJsonDeserialize(jsonX, outValue.x);
const QJsonValue jsonY = jsonArray[1];
QtJsonSerializer<T>::QtJsonDeserialize(jsonY, outValue.y);
const QJsonValue jsonZ = jsonArray[2];
QtJsonSerializer<T>::QtJsonDeserialize(jsonZ, outValue.z);
const QJsonValue jsonW = jsonArray[3];
QtJsonSerializer<T>::QtJsonDeserialize(jsonW, outValue.w);
}
};
template <>
struct QtJsonSerializer<Common::Color> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const Common::Color& inValue)
{
QJsonValue jsonR;
QtJsonSerializer<uint8_t>::QtJsonSerialize(jsonR, inValue.r);
QJsonValue jsonG;
QtJsonSerializer<uint8_t>::QtJsonSerialize(jsonG, inValue.g);
QJsonValue jsonB;
QtJsonSerializer<uint8_t>::QtJsonSerialize(jsonB, inValue.b);
QJsonValue jsonA;
QtJsonSerializer<uint8_t>::QtJsonSerialize(jsonA, inValue.a);
QJsonArray jsonArray;
jsonArray.append(jsonR);
jsonArray.append(jsonG);
jsonArray.append(jsonB);
jsonArray.append(jsonA);
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, Common::Color& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
if (jsonArray.size() != 4) {
return;
}
const QJsonValue jsonR = jsonArray[0];
QtJsonSerializer<uint8_t>::QtJsonDeserialize(jsonR, outValue.r);
const QJsonValue jsonG = jsonArray[1];
QtJsonSerializer<uint8_t>::QtJsonDeserialize(jsonG, outValue.g);
const QJsonValue jsonB = jsonArray[2];
QtJsonSerializer<uint8_t>::QtJsonDeserialize(jsonB, outValue.b);
const QJsonValue jsonA = jsonArray[3];
QtJsonSerializer<uint8_t>::QtJsonDeserialize(jsonA, outValue.a);
}
};
template <>
struct QtJsonSerializer<Common::LinearColor> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const Common::LinearColor& inValue)
{
QJsonValue jsonR;
QtJsonSerializer<float>::QtJsonSerialize(jsonR, inValue.r);
QJsonValue jsonG;
QtJsonSerializer<float>::QtJsonSerialize(jsonG, inValue.g);
QJsonValue jsonB;
QtJsonSerializer<float>::QtJsonSerialize(jsonB, inValue.b);
QJsonValue jsonA;
QtJsonSerializer<float>::QtJsonSerialize(jsonA, inValue.a);
QJsonArray jsonArray;
jsonArray.append(jsonR);
jsonArray.append(jsonG);
jsonArray.append(jsonB);
jsonArray.append(jsonA);
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, Common::LinearColor& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
if (jsonArray.size() != 4) {
return;
}
const QJsonValue jsonR = jsonArray[0];
QtJsonSerializer<float>::QtJsonDeserialize(jsonR, outValue.r);
const QJsonValue jsonG = jsonArray[1];
QtJsonSerializer<float>::QtJsonDeserialize(jsonG, outValue.g);
const QJsonValue jsonB = jsonArray[2];
QtJsonSerializer<float>::QtJsonDeserialize(jsonB, outValue.b);
const QJsonValue jsonA = jsonArray[3];
QtJsonSerializer<float>::QtJsonDeserialize(jsonA, outValue.a);
}
};
template <>
struct QtJsonSerializer<QString> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const QString& inValue)
{
outJsonValue = inValue;
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, QString& outValue)
{
if (!inJsonValue.isString()) {
return;
}
outValue = inJsonValue.toString();
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<QList<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const QList<T>& inValue)
{
QJsonArray jsonArray;
for (const auto& element : inValue) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, element);
jsonArray.push_back(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, QList<T>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
outValue.reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
T element;
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
outValue.emplaceBack(std::move(element));
}
}
};
template <QtJsonSerializable T>
struct QtJsonSerializer<QSet<T>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const QSet<T>& inValue)
{
QJsonArray jsonArray;
for (const auto& element : inValue) {
QJsonValue jsonElement;
QtJsonSerializer<T>::QtJsonSerialize(jsonElement, element);
jsonArray.push_back(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, QSet<T>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
outValue.reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
T element;
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
outValue.insert(std::move(element));
}
}
};
template <QtJsonSerializable K, QtJsonSerializable V>
struct QtJsonSerializer<QMap<K, V>> {
static void QtJsonSerialize(QJsonValue& outJsonValue, const QMap<K, V>& inValue)
{
QJsonArray jsonArray;
for (const auto& [key, value] : inValue) {
QJsonValue jsonKey;
QtJsonSerializer<K>::QtJsonSerialize(jsonKey, key);
QJsonValue jsonValue;
QtJsonSerializer<V>::QtJsonSerialize(jsonValue, value);
QJsonObject jsonObject;
jsonObject["key"] = jsonKey;
jsonObject["value"] = jsonValue;
jsonArray.append(std::move(jsonObject));
}
outJsonValue = std::move(jsonArray);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, QMap<K, V>& outValue)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
outValue.clear();
for (const auto& jsonElement : jsonArray) {
if (!jsonElement.isObject()) {
continue;
}
const QJsonObject jsonObject = jsonElement.toObject();
K key;
if (jsonObject.contains("key")) {
const QJsonValue jsonKey = jsonObject["key"];
QtJsonSerializer<K>::QtJsonDeserialize(jsonKey, key);
}
V value;
if (jsonObject.contains("value")) {
const QJsonValue jsonValue = jsonObject["value"];
QtJsonSerializer<V>::QtJsonDeserialize(jsonValue, value);
}
outValue.emplace(std::move(key), std::move(value));
}
}
};
template <Mirror::MetaClass T>
struct QtJsonSerializer<T> {
static void QtJsonSerializeDyn(QJsonObject& outJsonObject, const Mirror::Class& inClass, const Mirror::Argument& inValue)
{
const auto* baseClass = inClass.GetBaseClass();
const auto& memberVariables = inClass.GetMemberVariables();
const auto defaultObject = inClass.GetDefaultObject();
if (baseClass != nullptr) {
QJsonObject baseContentJson;
QtJsonSerializeDyn(baseContentJson, *baseClass, inValue);
outJsonObject["_base"] = std::move(baseContentJson);
}
for (const auto& memberVariable : memberVariables | std::views::values) {
if (memberVariable.IsTransient()) {
continue;
}
const bool sameAsDefault = defaultObject.Empty() || !memberVariable.GetTypeInfo()->equalComparable
? false
: memberVariable.GetDyn(inValue) == memberVariable.GetDyn(defaultObject);
if (sameAsDefault) {
continue;
}
QJsonValue memberContentJson;
Mirror::Any memberRef = memberVariable.GetDyn(inValue);
SerializeValueDyn(memberContentJson, memberRef);
outJsonObject[QString::fromStdString(memberVariable.GetName())] = memberContentJson;
}
}
static void QtJsonDeserializeDyn(const QJsonObject& inJsonObject, const Mirror::Class& inClass, const Mirror::Argument& outValue)
{
const auto* baseClass = inClass.GetBaseClass();
const auto defaultObject = inClass.GetDefaultObject();
if (inJsonObject.contains("_base")) {
if (const QJsonValue baseContentJson = inJsonObject["_base"];
baseClass != nullptr && baseContentJson.isObject()) {
QtJsonDeserializeDyn(baseContentJson.toObject(), *baseClass, outValue);
}
}
for (const auto& memberVariable : inClass.GetMemberVariables() | std::views::values) {
const auto& memberName = memberVariable.GetName();
if (const QJsonValue memberContentJson = inJsonObject[QString::fromStdString(memberName)];
!memberContentJson.isNull()) {
DeserializeValueDyn(memberContentJson, memberVariable.GetDyn(outValue));
} else {
if (!defaultObject.Empty()) {
memberVariable.SetDyn(outValue, memberVariable.GetDyn(defaultObject));
}
}
}
}
static void QtJsonSerialize(QJsonValue& outJsonValue, const T& inValue)
{
QJsonObject jsonObject;
QtJsonSerializeDyn(jsonObject, Mirror::Class::Get<T>(), Mirror::ForwardAsArg(inValue));
outJsonValue = std::move(jsonObject);
}
static void QtJsonDeserialize(const QJsonValue& inJsonValue, T& outValue)
{
if (inJsonValue.isNull()) {
return;
}
QtJsonDeserializeDyn(inJsonValue.toObject(), Mirror::Class::Get<T>(), Mirror::ForwardAsArg(outValue));
}
private:
using SupportedSimpleTypes = std::tuple<
bool, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, float, double, std::string, std::wstring,
Common::FVec2, Common::FVec3, Common::FVec4, Common::FMat4x4, Common::FQuat, Common::Color, Common::LinearColor,
QString
>;
using SupportedTemplateViews = std::tuple<
Common::Wrap<Mirror::StdOptionalView>, Common::Wrap<Mirror::StdPairView>, Common::Wrap<Mirror::StdArrayView>, Common::Wrap<Mirror::StdVectorView>,
Common::Wrap<Mirror::StdListView>, Common::Wrap<Mirror::StdUnorderedSetView>, Common::Wrap<Mirror::StdSetView>, Common::Wrap<Mirror::StdUnorderedMapView>,
Common::Wrap<Mirror::StdMapView>, Common::Wrap<Mirror::StdTupleView>, Common::Wrap<Mirror::StdVariantView>, Common::Wrap<QListMetaView>, Common::Wrap<QMapMetaView>
>;
static auto BuildSimpleTypeDynSerializers()
{
std::unordered_map<Mirror::TypeId, std::function<void(QJsonValue&, const Mirror::Any&)>> result;
Common::TupleTypeTraverser<SupportedSimpleTypes>::Each([&]<typename T0>(T0&&) -> void {
using RawType = std::decay_t<T0>;
result.emplace(Mirror::GetTypeId<RawType>(), [](QJsonValue& outJsonValue, const Mirror::Any& inRef) -> void {
QtJsonSerializer<T0>::QtJsonSerialize(outJsonValue, inRef.As<const T0&>());
});
});
return result;
}
static auto BuildSimpleTypeDynDeserializers()
{
std::unordered_map<Mirror::TypeId, std::function<void(const QJsonValue&, const Mirror::Any&)>> result;
Common::TupleTypeTraverser<SupportedSimpleTypes>::Each([&]<typename T0>(T0&&) -> void {
using RawType = std::decay_t<T0>;
result.emplace(Mirror::GetTypeId<RawType>(), [](const QJsonValue& inJsonValue, const Mirror::Any& outRef) -> void {
QtJsonSerializer<T0>::QtJsonDeserialize(inJsonValue, outRef.As<T0&>());
});
});
return result;
}
static auto BuildTemplateViewDynSerializers()
{
std::unordered_map<Mirror::TemplateViewId, std::function<void(QJsonValue&, const Mirror::Any&)>> result;
Common::TupleTypeTraverser<SupportedTemplateViews>::Each([&]<typename T0>(T0&&) -> void {
using RawType = typename std::decay_t<T0>::RawType;
result.emplace(RawType::id, [](QJsonValue& outJsonValue, const Mirror::Any& inRef) -> void {
const RawType view(inRef);
SerializeDynWithView(outJsonValue, view);
});
});
return result;
}
static auto BuildTemplateViewDynDeserializers()
{
std::unordered_map<Mirror::TemplateViewId, std::function<void(const QJsonValue&, const Mirror::Any&)>> result;
Common::TupleTypeTraverser<SupportedTemplateViews>::Each([&]<typename T0>(T0&&) -> void {
using RawType = typename std::decay_t<T0>::RawType;
result.emplace(RawType::id, [](const QJsonValue& inJsonValue, const Mirror::Any& inRef) -> void {
const RawType view(inRef);
DeserializeDynWithView(inJsonValue, view);
});
});
return result;
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdOptionalView& inView)
{
if (inView.HasValue()) {
SerializeValueDyn(outJsonValue, inView.ConstValue());
} else {
outJsonValue = QJsonValue::Null;
}
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdOptionalView& inView)
{
inView.Reset();
if (inJsonValue.isNull()) {
return;
}
const Mirror::Any newValueRef = inView.EmplaceDefault();
DeserializeValueDyn(inJsonValue, newValueRef);
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdPairView& inView)
{
QJsonValue jsonKey;
SerializeValueDyn(jsonKey, inView.ConstKey());
QJsonValue jsonValue;
SerializeValueDyn(jsonValue, inView.ConstValue());
QJsonObject jsonObject;
jsonObject["key"] = jsonKey;
jsonObject["value"] = jsonValue;
outJsonValue = std::move(jsonObject);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdPairView& inView)
{
if (!inJsonValue.isObject()) {
return;
}
inView.Reset();
const QJsonObject jsonObject = inJsonValue.toObject();
if (jsonObject.contains("key")) {
const QJsonValue jsonKey = jsonObject["key"];
DeserializeValueDyn(jsonKey, inView.Key());
}
if (jsonObject.contains("value")) {
const QJsonValue jsonValue = jsonObject["value"];
DeserializeValueDyn(jsonValue, inView.Value());
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdArrayView& inView)
{
QJsonArray jsonArray;
for (auto i = 0; i < inView.Size(); i++) {
QJsonValue jsonElement;
SerializeValueDyn(jsonElement, inView.ConstAt(i));
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdArrayView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
if (jsonArray.size() != inView.Size()) {
return;
}
for (auto i = 0; i < jsonArray.size(); i++) {
const QJsonValue jsonElement = jsonArray[i];
DeserializeValueDyn(jsonElement, inView.At(i));
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdVectorView& inView)
{
QJsonArray jsonArray;
for (auto i = 0; i < inView.Size(); i++) {
QJsonValue jsonElement;
SerializeValueDyn(jsonElement, inView.ConstAt(i));
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdVectorView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
inView.Reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
DeserializeValueDyn(jsonElement, inView.EmplaceDefaultBack());
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdListView& inView)
{
QJsonArray jsonArray;
inView.ConstTraverse([&](const Mirror::Any& elementRef) -> void {
QJsonValue jsonElement;
SerializeValueDyn(jsonElement, elementRef);
jsonArray.append(jsonElement);
});
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdListView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
for (const auto& jsonElement : jsonArray) {
DeserializeValueDyn(jsonElement, inView.EmplaceDefaultBack());
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdUnorderedSetView& inView)
{
QJsonArray jsonArray;
inView.ConstTraverse([&](const Mirror::Any& elementRef) -> void {
QJsonValue jsonElement;
SerializeValueDyn(jsonElement, elementRef);
jsonArray.append(jsonElement);
});
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdUnorderedSetView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
inView.Reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
Mirror::Any element = inView.CreateElement();
DeserializeValueDyn(jsonElement, element);
inView.Emplace(element);
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdSetView& inView)
{
QJsonArray jsonArray;
inView.ConstTraverse([&](const Mirror::Any& elementRef) -> void {
QJsonValue jsonElement;
SerializeValueDyn(jsonElement, elementRef);
jsonArray.append(jsonElement);
});
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdSetView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
for (const auto& jsonElement : jsonArray) {
Mirror::Any element = inView.CreateElement();
DeserializeValueDyn(jsonElement, element);
inView.Emplace(element);
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdUnorderedMapView& inView)
{
QJsonArray jsonArray;
inView.ConstTraverse([&](const Mirror::Any& inKey, const Mirror::Any& inValue) -> void {
QJsonValue jsonKey;
SerializeValueDyn(jsonKey, inKey);
QJsonValue jsonValue;
SerializeValueDyn(jsonValue, inValue);
QJsonObject jsonObject;
jsonObject["key"] = jsonKey;
jsonObject["value"] = jsonValue;
jsonArray.append(jsonObject);
});
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdUnorderedMapView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
inView.Reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
if (!jsonElement.isObject()) {
continue;
}
const QJsonObject jsonObject = jsonElement.toObject();
Mirror::Any key = inView.CreateKey();
if (jsonObject.contains("key")) {
QJsonValue jsonKey = jsonObject["key"];
DeserializeValueDyn(jsonKey, key);
}
Mirror::Any value = inView.CreateValue();
if (jsonObject.contains("value")) {
QJsonValue jsonValue = jsonObject["value"];
DeserializeValueDyn(jsonValue, value);
}
inView.Emplace(key, value);
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdMapView& inView)
{
QJsonArray jsonArray;
inView.ConstTraverse([&](const Mirror::Any& inKey, const Mirror::Any& inValue) -> void {
QJsonValue jsonKey;
SerializeValueDyn(jsonKey, inKey);
QJsonValue jsonValue;
SerializeValueDyn(jsonValue, inValue);
QJsonObject jsonObject;
jsonObject["key"] = jsonKey;
jsonObject["value"] = jsonValue;
jsonArray.append(jsonObject);
});
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdMapView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
for (const auto& jsonElement : jsonArray) {
if (!jsonElement.isObject()) {
continue;
}
const QJsonObject jsonObject = jsonElement.toObject();
Mirror::Any key = inView.CreateKey();
if (jsonObject.contains("key")) {
QJsonValue jsonKey = jsonObject["key"];
DeserializeValueDyn(jsonKey, key);
}
Mirror::Any value = inView.CreateValue();
if (jsonObject.contains("value")) {
QJsonValue jsonValue = jsonObject["value"];
DeserializeValueDyn(jsonValue, value);
}
inView.Emplace(key, value);
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdTupleView& inView)
{
QJsonObject jsonObject;
inView.ConstTraverse([&](const Mirror::Any& inElementRef, size_t inIndex) -> void {
QJsonValue jsonElement;
SerializeValueDyn(jsonElement, inElementRef);
jsonObject[QString::number(inIndex)] = jsonElement;
});
outJsonValue = std::move(jsonObject);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdTupleView& inView)
{
if (!inJsonValue.isObject()) {
return;
}
const QJsonObject jsonObject = inJsonValue.toObject();
for (const auto& key : jsonObject.keys()) {
const auto index = key.toUInt();
const QJsonValue jsonElement = jsonObject[key];
const Mirror::Any elementRef = inView.Get(index);
DeserializeValueDyn(jsonElement, elementRef);
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror::StdVariantView& inView)
{
QJsonValue typeJson;
QtJsonSerializer<uint64_t>::QtJsonSerialize(typeJson, inView.Index());
QJsonValue contentJson;
inView.Visit([&](const Mirror::Any& inValueRef) -> void {
SerializeValueDyn(contentJson, inValueRef);
});
QJsonObject jsonObject;
jsonObject["type"] = typeJson;
jsonObject["content"] = contentJson;
outJsonValue = std::move(jsonObject);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdVariantView& inView)
{
if (!inJsonValue.isObject()) {
return;
}
const QJsonObject jsonObject = inJsonValue.toObject();
if (!jsonObject.contains("type") || !jsonObject.contains("content")) {
return;
}
const QJsonValue typeJson = jsonObject["type"];
const QJsonValue contentJson = jsonObject["content"];
uint64_t type = 0;
QtJsonSerializer<uint64_t>::QtJsonDeserialize(typeJson, type);
Mirror::Any tempObj = inView.CreateElement(type);
DeserializeValueDyn(contentJson, tempObj);
(void) inView.Emplace(type, tempObj);
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const QListMetaView& inView)
{
QJsonArray jsonArray;
for (auto i = 0; i < inView.Size(); i++) {
QJsonValue jsonElement;
SerializeValueDyn(jsonElement, inView.ConstAt(i));
jsonArray.append(jsonElement);
}
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const QListMetaView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
inView.Reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
DeserializeValueDyn(jsonElement, inView.EmplaceDefaultBack());
}
}
static void SerializeDynWithView(QJsonValue& outJsonValue, const QMapMetaView& inView)
{
QJsonArray jsonArray;
inView.ConstTraverse([&](const Mirror::Any& inKey, const Mirror::Any& inValue) -> void {
QJsonValue jsonKey;
SerializeValueDyn(jsonKey, inKey);
QJsonValue jsonValue;
SerializeValueDyn(jsonValue, inValue);
QJsonObject jsonObject;
jsonObject["key"] = jsonKey;
jsonObject["value"] = jsonValue;
jsonArray.append(jsonObject);
});
outJsonValue = std::move(jsonArray);
}
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const QMapMetaView& inView)
{
if (!inJsonValue.isArray()) {
return;
}
const QJsonArray jsonArray = inJsonValue.toArray();
inView.Clear();
inView.Reserve(jsonArray.size());
for (const auto& jsonElement : jsonArray) {
if (!jsonElement.isObject()) {
continue;
}
const QJsonObject jsonObject = jsonElement.toObject();
Mirror::Any key = inView.CreateKey();
if (jsonObject.contains("key")) {
QJsonValue jsonKey = jsonObject["key"];
DeserializeValueDyn(jsonKey, key);
}
Mirror::Any value = inView.CreateValue();
if (jsonObject.contains("value")) {
QJsonValue jsonValue = jsonObject["value"];
DeserializeValueDyn(jsonValue, value);
}
inView.Emplace(key, value);
}
}
static void SerializeValueDyn(QJsonValue& outJsonValue, const Mirror::Any& inValueRef)
{
static auto simpleTypeDynSerializers = BuildSimpleTypeDynSerializers();
static auto templateViewDynSerializers = BuildTemplateViewDynSerializers();
if (inValueRef.HasTemplateView()) {
const Mirror::TemplateViewId templateViewId = inValueRef.GetTemplateViewId();
AssertWithReason(templateViewDynSerializers.contains(templateViewId), std::format("QtJsonSerializeValueDyn not support type {}", inValueRef.Type()->name));
templateViewDynSerializers.at(templateViewId)(outJsonValue, inValueRef);
} else if (const Mirror::Class* clazz = inValueRef.GetDynamicClass(); clazz != nullptr) {
AssertWithReason(!inValueRef.Type()->isPointer, "QtJsonSerializeValueDyn not support meta object pointer");
QJsonObject jsonObject;
QtJsonSerializeDyn(jsonObject, *clazz, inValueRef);
outJsonValue = std::move(jsonObject);
} else {
const Mirror::TypeId typeId = inValueRef.TypeId();
AssertWithReason(simpleTypeDynSerializers.contains(typeId), std::format("QtJsonSerializeValueDyn not support type {}", inValueRef.Type()->name));
simpleTypeDynSerializers.at(typeId)(outJsonValue, inValueRef);
}
}
static void DeserializeValueDyn(const QJsonValue& inJsonValue, const Mirror::Any& outValueRef)
{
static auto simpleTypeDynDeserializers = BuildSimpleTypeDynDeserializers();
static auto templateViewDynDeserializers = BuildTemplateViewDynDeserializers();
if (outValueRef.HasTemplateView()) {
const Mirror::TemplateViewId templateViewId = outValueRef.GetTemplateViewId();
AssertWithReason(templateViewDynDeserializers.contains(templateViewId), std::format("QtJsonSerializeValueDyn not support type {}", outValueRef.Type()->name));
templateViewDynDeserializers.at(templateViewId)(inJsonValue, outValueRef);
} else if (const Mirror::Class* clazz = outValueRef.GetDynamicClass(); clazz != nullptr) {
AssertWithReason(!outValueRef.Type()->isPointer, "QtJsonSerializeValueDyn not support meta object pointer");
if (!inJsonValue.isObject()) {
return;
}
const QJsonObject jsonObject = inJsonValue.toObject();
QtJsonDeserializeDyn(jsonObject, *clazz, outValueRef);
} else {
const Mirror::TypeId typeId = outValueRef.TypeId();
AssertWithReason(simpleTypeDynDeserializers.contains(typeId), std::format("QtJsonSerializeValueDyn not support type {}", outValueRef.Type()->name));
simpleTypeDynDeserializers.at(typeId)(inJsonValue, outValueRef);
}
}
};
}
================================================
FILE: Editor/Include/Editor/Qt/MirrorTemplateView.h
================================================
//
// Created by Kindem on 2025/8/26.
//
#pragma once
#include <QList>
#include <QMap>
#include <Mirror/Mirror.h>
namespace Editor {
struct QListMetaViewRtti {
static constexpr Mirror::TemplateViewId id = Common::HashUtils::StrCrc32("Editor::QListMetaView");
using GetElementTypeFunc = const Mirror::TypeInfo*();
using GetSizeFunc = size_t(const Mirror::Any&);
using ReserveFunc = void(const Mirror::Any&, size_t);
using ResizeFunc = void(const Mirror::Any&, size_t);
using ClearFunc = void(const Mirror::Any&);
using GetElementFunc = Mirror::Any(const Mirror::Any&, size_t);
using GetConstElementFunc = Mirror::Any(const Mirror::Any&, size_t);
using EmplaceBackFunc = Mirror::Any(const Mirror::Any&, const Mirror::Argument&);
using EmplaceDefaultBackFunc = Mirror::Any(const Mirror::Any&);
using RemoveFunc = void(const Mirror::Any&, size_t);
template <typename T> static const Mirror::TypeInfo* GetElementType();
template <typename T> static size_t GetSize(const Mirror::Any& inRef);
template <typename T> static void Reserve(const Mirror::Any& inRef, size_t inSize);
template <typename T> static void Resize(const Mirror::Any& inRef, size_t inSize);
template <typename T> static void Clear(const Mirror::Any& inRef);
template <typename T> static Mirror::Any GetElement(const Mirror::Any& inRef, size_t inIndex);
template <typename T> static Mirror::Any GetConstElement(const Mirror::Any& inRef, size_t inIndex);
template <typename T> static Mirror::Any EmplaceBack(const Mirror::Any& inRef, const Mirror::Argument& inTempObj);
template <typename T> static Mirror::Any EmplaceDefaultBack(const Mirror::Any& inRef);
template <typename T> static void Remove(const Mirror::Any& inRef, size_t inIndex);
GetElementTypeFunc* getElementType;
GetSizeFunc* getSize;
ReserveFunc* reserve;
ResizeFunc* resize;
ClearFunc* clear;
GetElementFunc* getElement;
GetConstElementFunc* getConstElement;
EmplaceBackFunc* emplaceBack;
EmplaceDefaultBackFunc* emplaceDefaultBack;
RemoveFunc* remove;
};
template <typename T>
static constexpr QListMetaViewRtti qListMetaViewRttiImpl = {
&QListMetaViewRtti::GetElementType<T>,
&QListMetaViewRtti::GetSize<T>,
&QListMetaViewRtti::Reserve<T>,
&QListMetaViewRtti::Resize<T>,
&QListMetaViewRtti::Clear<T>,
&QListMetaViewRtti::GetElement<T>,
&QListMetaViewRtti::GetConstElement<T>,
&QListMetaViewRtti::EmplaceBack<T>,
&QListMetaViewRtti::EmplaceDefaultBack<T>,
&QListMetaViewRtti::Remove<T>
};
class QListMetaView {
public:
static constexpr Mirror::TemplateViewId id = QListMetaViewRtti::id;
explicit QListMetaView(const Mirror::Any& inRef);
NonCopyable(QListMetaView)
NonMovable(QListMetaView)
const Mirror::TypeInfo* ElementType() const;
size_t Size() const;
void Reserve(size_t inSize) const;
void Resize(size_t inSize) const;
void Clear() const;
Mirror::Any At(size_t inIndex) const;
Mirror::Any ConstAt(size_t inIndex) const;
Mirror::Any EmplaceBack(const Mirror::Argument& inTempObj) const;
Mirror::Any EmplaceDefaultBack() const;
void Remove(size_t inIndex) const;
private:
Mirror::Any ref;
const QListMetaViewRtti* rtti;
};
struct QMapMetaViewRtti {
static constexpr Mirror::TemplateViewId id = Common::HashUtils::StrCrc32("Editor::QMapMetaView");
using GetKeyTypeFunc = const Mirror::TypeInfo*();
using GetValueTypeFunc = const Mirror::TypeInfo*();
using CreateKeyFunc = Mirror::Any();
using CreateValueFunc = Mirror::Any();
using GetSizeFunc = size_t(const Mirror::Any&);
using ReserveFunc = void(const Mirror::Any&, size_t);
using ClearFunc = void(const Mirror::Any&);
using GetOrAddFunc = Mirror::Any(const Mirror::Any&, const Mirror::Argument&);
using ConstAtFunc = Mirror::Any(const Mirror::Any&, const Mirror::Argument&);
using TraverseFunc = void(const Mirror::Any&, const std::function<void(const Mirror::Any&, const Mirror::Any&)>&);
using ConstTraverseFunc = void(const Mirror::Any&, const std::function<void(const Mirror::Any&, const Mirror::Any&)>&);
using ContainsFunc = bool(const Mirror::Any&, const Mirror::Argument&);
using EmplaceFunc = void(const Mirror::Any&, const Mirror::Argument&, const Mirror::Argument&);
using EraseFunc = void(const Mirror::Any&, const Mirror::Argument&);
template <typename K, typename V> static const Mirror::TypeInfo* GetKeyType();
template <typename K, typename V> static const Mirror::TypeInfo* GetValueType();
template <typename K, typename V> static Mirror::Any CreateKey();
template <typename K, typename V> static Mirror::Any CreateValue();
template <typename K, typename V> static size_t GetSize(const Mirror::Any& inRef);
template <typename K, typename V> static void Reserve(const Mirror::Any& inRef, size_t inSize);
template <typename K, typename V> static void Clear(const Mirror::Any& inRef);
template <typename K, typename V> static Mirror::Any GetOrAdd(const Mirror::Any& inRef, const Mirror::Argument& inKey);
template <typename K, typename V> static Mirror::Any ConstAt(const Mirror::Any& inRef, const Mirror::Argument& inKey);
template <typename K, typename V> static void Traverse(const Mirror::Any& inRef, const std::function<void(const Mirror::Any&, const Mirror::Any&)>& inVisitor);
template <typename K, typename V> static void ConstTraverse(const Mirror::Any& inRef, const std::function<void(const Mirror::Any&, const Mirror::Any&)>& inVisitor);
template <typename K, typename V> static bool Contains(const Mirror::Any& inRef, const Mirror::Argument& inKey);
template <typename K, typename V> static void Emplace(const Mirror::Any& inRef, const Mirror::Argument& inKey, const Mirror::Argument& inValue);
template <typename K, typename V> static void Erase(const Mirror::Any& inRef, const Mirror::Argument& inKey);
GetKeyTypeFunc* getKeyType;
GetValueTypeFunc* getValueType;
CreateKeyFunc* createKey;
CreateValueFunc* createValue;
GetSizeFunc* getSize;
ReserveFunc* reserve;
ClearFunc* clear;
GetOrAddFunc* getOrAdd;
ConstAtFunc* constAt;
TraverseFunc* traverse;
ConstTraverseFunc* constTraverse;
ContainsFunc* contains;
EmplaceFunc* emplace;
EraseFunc* erase;
};
template <typename K, typename V>
static constexpr QMapMetaViewRtti qMapMetaViewRttiImpl = {
&QMapMetaViewRtti::GetKeyType<K, V>,
&QMapMetaViewRtti::GetValueType<K, V>,
&QMapMetaViewRtti::CreateKey<K, V>,
&QMapMetaViewRtti::CreateValue<K, V>,
&QMapMetaViewRtti::GetSize<K, V>,
&QMapMetaViewRtti::Reserve<K, V>,
&QMapMetaViewRtti::Clear<K, V>,
&QMapMetaViewRtti::GetOrAdd<K, V>,
&QMapMetaViewRtti::ConstAt<K, V>,
&QMapMetaViewRtti::Traverse<K, V>,
&QMapMetaViewRtti::ConstTraverse<K, V>,
&QMapMetaViewRtti::Contains<K, V>,
&QMapMetaViewRtti::Emplace<K, V>,
&QMapMetaViewRtti::Erase<K, V>
};
class QMapMetaView {
public:
using PairTraverser = std::function<void(const Mirror::Any&, const Mirror::Any&)>;
static constexpr Mirror::TemplateViewId id = QMapMetaViewRtti::id;
explicit QMapMetaView(const Mirror::Any& inRef);
NonCopyable(QMapMetaView)
NonMovable(QMapMetaView)
const Mirror::TypeInfo* GetKeyType() const;
const Mirror::TypeInfo* GetValueType() const;
Mirror::Any CreateKey() const;
Mirror::Any CreateValue() const;
size_t GetSize() const;
void Reserve(size_t inSize) const;
void Clear() const;
Mirror::Any GetOrAdd(const Mirror::Argument& inKey) const;
Mirror::Any ConstAt(const Mirror::Argument& inKey) const;
void Traverse(const PairTraverser& inTraverser) const;
void ConstTraverse(const PairTraverser& inTraverser) const;
bool Contains(const Mirror::Argument& inKey) const;
void Emplace(const Mirror::Argument& inTempKey, const Mirror::Argument& inTempValue) const;
void Erase(const Mirror::Argument& inKey) const;
private:
Mirror::Any ref;
const QMapMetaViewRtti* rtti;
};
} // namespace Editor
namespace Mirror {
template <typename T>
struct TemplateViewRttiGetter<QList<T>> {
static constexpr TemplateViewId Id();
static const void* Get();
};
template <typename K, typename V>
struct TemplateViewRttiGetter<QMap<K, V>> {
static constexpr TemplateViewId Id();
static const void* Get();
};
}
namespace Editor {
template <typename T>
const Mirror::TypeInfo* QListMetaViewRtti::GetElementType()
{
return Mirror::GetTypeInfo<T>();
}
template <typename T>
size_t QListMetaViewRtti::GetSize(const Mirror::Any& inRef)
{
return inRef.As<const QList<T>&>().size();
}
template <typename T>
void QListMetaViewRtti::Reserve(const Mirror::Any& inRef, size_t inSize)
{
inRef.As<QList<T>&>().reserve(inSize);
}
template <typename T>
void QListMetaViewRtti::Resize(const Mirror::Any& inRef, size_t inSize)
{
inRef.As<QList<T>&>().resize(inSize);
}
template <typename T>
void QListMetaViewRtti::Clear(const Mirror::Any& inRef)
{
inRef.As<QList<T>&>().clear();
}
template <typename T>
Mirror::Any QListMetaViewRtti::GetElement(const Mirror::Any& inRef, size_t inIndex)
{
return std::ref(inRef.As<QList<T>&>()[inIndex]);
}
template <typename T>
Mirror::Any QListMetaViewRtti::GetConstElement(const Mirror::Any& inRef, size_t inIndex)
{
return std::ref(inRef.As<const QList<T>&>()[inIndex]);
}
template <typename T>
Mirror::Any QListMetaViewRtti::EmplaceBack(const Mirror::Any& inRef, const Mirror::Argument& inTempObj)
{
return std::ref(inRef.As<QList<T>&>().emplaceBack(std::move(inTempObj.As<T&>())));
}
template <typename T>
Mirror::Any QListMetaViewRtti::EmplaceDefaultBack(const Mirror::Any& inRef)
{
return std::ref(inRef.As<QList<T>&>().emplaceBack());
}
template <typename T>
void QListMetaViewRtti::Remove(const Mirror::Any& inRef, size_t inIndex)
{
inRef.As<QList<T>&>().remove(inIndex);
}
template <typename K, typename V>
const Mirror::TypeInfo* QMapMetaViewRtti::GetKeyType()
{
return Mirror::GetTypeInfo<K>();
}
template <typename K, typename V>
const Mirror::TypeInfo* QMapMetaViewRtti::GetValueType()
{
return Mirror::GetTypeInfo<V>();
}
template <typename K, typename V>
Mirror::Any QMapMetaViewRtti::CreateKey()
{
return K();
}
template <typename K, typename V>
Mirror::Any QMapMetaViewRtti::CreateValue()
{
return V();
}
template <typename K, typename V>
size_t QMapMetaViewRtti::GetSize(const Mirror::Any& inRef)
{
return inRef.As<const QMap<K, V>&>().size();
}
template <typename K, typename V>
void QMapMetaViewRtti::Reserve(const Mirror::Any& inRef, size_t inSize)
{
inRef.As<QMap<K, V>&>().reserve(inSize);
}
template <typename K, typename V>
void QMapMetaViewRtti::Clear(const Mirror::Any& inRef)
{
inRef.As<QMap<K, V>&>().clear();
}
template <typename K, typename V>
Mirror::Any QMapMetaViewRtti::ConstAt(const Mirror::Any& inRef, const Mirror::Argument& inKey)
{
return inRef.As<const QMap<K, V>&>()[inKey];
}
template <typename K, typename V>
Mirror::Any QMapMetaViewRtti::GetOrAdd(const Mirror::Any& inRef, const Mirror::Argument& inKey)
{
return inRef.As<QMap<K, V>&>()[inKey];
}
template <typename K, typename V>
void QMapMetaViewRtti::Traverse(const Mirror::Any& inRef, const std::function<void(const Mirror::Any&, const Mirror::Any&)>& inVisitor)
{
for (QMap<K, V>& map = inRef.As<QMap<K, V>&>();
const auto& [key, value] : map) {
inVisitor(std::ref(key), std::ref(value));
}
}
template <typename K, typename V>
void QMapMetaViewRtti::ConstTraverse(const Mirror::Any& inRef, const std::function<void(const Mirror::Any&, const Mirror::Any&)>& inVisitor)
{
for (const QMap<K, V>& map = inRef.As<const QMap<K, V>&>();
const auto& [key, value] : map) {
inVisitor(std::ref(key), std::ref(value));
}
}
template <typename K, typename V>
bool QMapMetaViewRtti::Contains(const Mirror::Any& inRef, const Mirror::Argument& inKey)
{
return inRef.As<const QMap<K, V>&>().contains(inKey);
}
template <typename K, typename V>
void QMapMetaViewRtti::Emplace(const Mirror::Any& inRef, const Mirror::Argument& inKey, const Mirror::Argument& inValue)
{
inRef.As<QMap<K, V>&>().emplace(inKey, inValue);
}
template <typename K, typename V>
void QMapMetaViewRtti::Erase(const Mirror::Any& inRef, const Mirror::Argument& inKey)
{
inRef.As<QMap<K, V>&>().remove(inKey);
}
} // namespace Editor
namespace Mirror {
template <typename T>
constexpr TemplateViewId TemplateViewRttiGetter<QList<T>>::Id()
{
return Editor::QListMetaViewRtti::id;
}
template <typename T>
const void* TemplateViewRttiGetter<QList<T>>::Get()
{
return &Editor::qListMetaViewRttiImpl<T>;
}
template <typename K, typename V>
constexpr TemplateViewId TemplateViewRttiGetter<QMap<K, V>>::Id()
{
return Editor::QMapMetaViewRtti::id;
}
template <typename K, typename V>
const void* TemplateViewRttiGetter<QMap<K, V>>::Get()
{
return &Editor::qMapMetaViewRttiImpl<K, V>;
}
} // namespace Mirror
================================================
FILE: Editor/Include/Editor/WebUIServer.h
================================================
//
// Created by johnk on 2025/8/8.
//
#pragma once
#include <httplib.h>
#include <Common/Concurrent.h>
#include <Common/Memory.h>
namespace Editor {
class WebUIServer {
public:
static WebUIServer& Get();
void Start();
void Stop();
const std::string& BaseUrl() const;
private:
WebUIServer();
std::string baseUrl;
Common::UniquePtr<Common::NamedThread> productServerThread;
Common::UniquePtr<httplib::Server> productServer;
};
}
================================================
FILE: Editor/Include/Editor/Widget/Editor.h
================================================
//
// Created by Kindem on 2025/3/22.
//
#pragma once
#include <QWidget>
namespace Editor {
class ExplosionEditor final : public QWidget {
Q_OBJECT
public:
ExplosionEditor();
};
}
================================================
FILE: Editor/Include/Editor/Widget/GraphicsSampleWidget.h
================================================
//
// Created by Kindem on 2025/3/16.
//
#pragma once
#include <QWidget>
#include <QBoxLayout>
#include <Render/ShaderCompiler.h>
#include <Editor/Widget/GraphicsWidget.h>
namespace Editor {
class GraphicsSampleWidget final : public GraphicsWidget {
Q_OBJECT
public:
explicit GraphicsSampleWidget(QWidget* inParent = nullptr);
~GraphicsSampleWidget() override;
protected:
void resizeEvent(QResizeEvent* event) override;
private:
static constexpr uint8_t swapChainTextureNum = 2;
void RecreateSwapChain(uint32_t inWidth, uint32_t inHeight);
void DispatchFrame() const;
void DrawFrame() const;
Common::UniquePtr<RHI::Semaphore> imageReadySemaphore;
Common::UniquePtr<RHI::Semaphore> renderFinishedSemaphore;
Common::UniquePtr<RHI::Fence> frameFence;
Common::UniquePtr<RHI::SwapChain> swapChain;
std::array<RHI::Texture*, 2> swapChainTextures;
std::array<Common::UniquePtr<RHI::TextureView>, 2> swapChainTextureViews;
Render::ShaderCompileOutput vsCompileOutput;
Render::ShaderCompileOutput psCompileOutput;
Common::UniquePtr<RHI::ShaderModule> vsModule;
Common::UniquePtr<RHI::ShaderModule> psModule;
Common::UniquePtr<RHI::BindGroupLayout> bindGroupLayout;
Common::UniquePtr<RHI::PipelineLayout> pipelineLayout;
Common::UniquePtr<RHI::RasterPipeline> pipeline;
Common::UniquePtr<RHI::Buffer> vertexBuffer;
Common::UniquePtr<RHI::BufferView> vertexBufferView;
Common::UniquePtr<RHI::Buffer> uniformBuffer;
Common::UniquePtr<RHI::BufferView> uniformBufferView;
Common::UniquePtr<RHI::BindGroup> bindGroup;
Common::UniquePtr<RHI::CommandBuffer> commandBuffer;
Common::UniquePtr<Common::WorkerThread> drawThread;
std::atomic_bool running;
};
}
================================================
FILE: Editor/Include/Editor/Widget/GraphicsWidget.h
================================================
//
// Created by Kindem on 2025/3/16.
//
#pragma once
#include <QWidget>
#include <QTimer>
#include <Common/Memory.h>
#include <RHI/RHI.h>
namespace Editor {
class GraphicsWidget : public QWidget {
Q_OBJECT
public:
explicit GraphicsWidget(QWidget* inParent = nullptr);
~GraphicsWidget() override;
RHI::Device& GetDevice() const;
RHI::Surface& GetSurface() const;
protected:
QPaintEngine* paintEngine() const override;
void WaitDeviceIdle() const;
RHI::Device* device;
Common::UniquePtr<RHI::Surface> surface;
};
}
================================================
FILE: Editor/Include/Editor/Widget/ProjectHub.h
================================================
//
// Created by johnk on 2025/8/3.
//
#pragma once
#include <Editor/Widget/WebWidget.h>
#include <Mirror/Meta.h>
#include <Common/FileSystem.h>
#include <Editor/Qt/EngineSerialization.h>
namespace Editor {
class ProjectHub;
struct EClass() RecentProjectInfo {
EClassBody(RecentProjectInfo)
EProperty() std::string name;
EProperty() std::string path;
};
struct EClass() ProjectTemplateInfo {
EClassBody(ProjectTemplateInfo)
EProperty() std::string name;
EProperty() std::string path;
};
class ProjectHubBackend final : public QObject {
Q_OBJECT
Q_PROPERTY(QString engineVersion READ GetEngineVersion CONSTANT)
Q_PROPERTY(QJsonValue projectTemplates READ GetProjectTemplates CONSTANT)
Q_PROPERTY(QJsonValue recentProjects READ GetRecentProjects)
public:
explicit ProjectHubBackend(ProjectHub* parent = nullptr);
~ProjectHubBackend() override;
public Q_SLOTS:
void CreateProject() const;
QString BrowseDirectory() const;
private:
QString GetEngineVersion() const;
QJsonValue GetProjectTemplates() const;
QJsonValue GetRecentProjects() const;
Common::Path recentProjectsFile;
std::string engineVersion;
std::vector<ProjectTemplateInfo> projectTemplates;
std::vector<RecentProjectInfo> recentProjects;
};
class ProjectHub final : public WebWidget {
Q_OBJECT
public:
explicit ProjectHub(QWidget* inParent = nullptr);
private:
ProjectHubBackend* backend;
};
}
================================================
FILE: Editor/Include/Editor/Widget/WebWidget.h
================================================
//
// Created by johnk on 2025/8/9.
//
#pragma once
#include <QWebChannel>
#include <QWebEngineView>
#include <QWebEnginePage>
namespace Editor {
class WebPage : public QWebEnginePage {
Q_OBJECT
public:
explicit WebPage(QWidget* inParent = nullptr);
~WebPage() override;
protected:
void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) override;
};
class WebWidget : public QWebEngineView {
Q_OBJECT
public:
explicit WebWidget(QWidget* inParent = nullptr);
~WebWidget() override;
void Load(const std::string& inUrl);
protected:
QWebChannel* GetWebChannel() const;
private:
QWebChannel* webChannel;
};
}
================================================
FILE: Editor/Resource/ProjectTemplates/Default/CMakeLists.txt
================================================
cmake_minimum_required(VERSION %{cmakeMinVersion})
project(%{projectName}%)
%{findEngineCMakeScripts}%
================================================
FILE: Editor/Shader/GraphicsWindowSample.esl
================================================
#include <Platform.esh>
struct FragmentInput {
float4 position : SV_POSITION;
float4 color : COLOR;
};
#if VERTEX_SHADER
cbuffer vsUniform {
float3 vertexColor;
};
FragmentInput VSMain(
uint vertexId : SV_VertexID,
VkLocation(0) float3 position : POSITION)
{
FragmentInput fragmentInput;
fragmentInput.position = float4(position.xyz, 1.0f);
#if VULKAN
fragmentInput.position.y = - fragmentInput.position.y;
#endif
fragmentInput.color = float4(0.0f, 0.0f, 0.0f, 1.0f);
fragmentInput.color[vertexId % 3] = vertexColor[vertexId % 3];
return fragmentInput;
}
#endif
#if PIXEL_SHADER
float4 PSMain(FragmentInput input) : SV_TARGET
{
return input.color;
}
#endif
================================================
FILE: Editor/Src/EditorEngine.cpp
================================================
//
// Created by johnk on 2024/8/21.
//
#include <Editor/EditorEngine.h>
namespace Editor {
EditorEngine::~EditorEngine() = default;
bool EditorEngine::IsEditor()
{
return true;
}
EditorEngine::EditorEngine(const Runtime::EngineInitParams& inParams)
: Engine(inParams)
{
}
EditorEngine& GetEditorEngine()
{
return static_cast<EditorEngine&>(Runtime::EngineHolder::Get());
}
}
================================================
FILE: Editor/Src/EditorModule.cpp
================================================
//
// Created by johnk on 2024/8/21.
//
#include <Editor/EditorEngine.h>
#include <Editor/EditorModule.h>
namespace Editor {
void EditorModule::OnUnload()
{
Runtime::EngineHolder::Unload();
}
::Core::ModuleType EditorModule::Type() const
{
return ::Core::ModuleType::mStatic;
}
Runtime::Engine* EditorModule::CreateEngine(const Runtime::EngineInitParams& inParams)
{
return new EditorEngine(inParams);
}
}
IMPLEMENT_STATIC_MODULE(Editor, "Editor", Editor::EditorModule)
================================================
FILE: Editor/Src/Main.cpp
================================================
//
// Created by johnk on 2024/3/31.
//
#include <QApplication>
#include <QNetworkProxy>
#include <Core/Cmdline.h>
#include <Runtime/Engine.h>
#include <Editor/Widget/Editor.h>
#include <Editor/Widget/ProjectHub.h>
#include <Editor/WebUIServer.h>
#if BUILD_CONFIG_DEBUG
#include <Editor/Widget/GraphicsSampleWidget.h>
static Core::CmdlineArgValue<bool> caGraphicsSample(
"graphicsSample", "-graphicsSample", false,
"Whether to run graphics sample instead of editor");
#endif
static Core::CmdlineArgValue<std::string> caRhiType(
"rhiType", "-rhi", RHI::GetPlatformDefaultRHIAbbrString(),
"rhi abbr string, can be 'dx12' or 'vulkan'");
static Core::CmdlineArgValue<std::string> caProjectRoot(
"projectRoot", "-project", "",
"project root path");
enum class EditorApplicationModel : uint8_t {
#if BUILD_CONFIG_DEBUG
graphicsSample,
#endif
projectHub,
editor,
max
};
static EditorApplicationModel GetAppModel()
{
#if BUILD_CONFIG_DEBUG
if (caGraphicsSample.GetValue()) {
return EditorApplicationModel::graphicsSample;
}
#endif
if (caProjectRoot.GetValue().empty()) {
return EditorApplicationModel::projectHub;
}
return EditorApplicationModel::editor;
}
static bool NeedInitCore(EditorApplicationModel inModel)
{
bool result = inModel == EditorApplicationModel::editor;
#if BUILD_CONFIG_DEBUG
result = result || inModel == EditorApplicationModel::graphicsSample;
#endif
return result;
}
static void InitializePreQtApp(EditorApplicationModel inModel)
{
Editor::WebUIServer::Get().Start();
if (!NeedInitCore(inModel)) {
return;
}
Runtime::EngineInitParams params {};
params.logToFile = true;
params.gameRoot = caProjectRoot.GetValue();
params.rhiType = caRhiType.GetValue();
Runtime::EngineHolder::Load("Editor", params);
}
static void InitializePostQtApp()
{
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
}
static void Cleanup(EditorApplicationModel inModel)
{
Editor::WebUIServer::Get().Stop();
if (!NeedInitCore(inModel)) {
return;
}
Runtime::EngineHolder::Unload();
}
static Common::UniquePtr<QWidget> CreateMainWidget(EditorApplicationModel inModel)
{
#if BUILD_CONFIG_DEBUG
if (inModel == EditorApplicationModel::graphicsSample) {
return new Editor::GraphicsSampleWidget();
}
#endif
if (inModel == EditorApplicationModel::projectHub) { // NOLINT
return new Editor::ProjectHub();
}
return new Editor::ExplosionEditor();
}
int main(int argc, char* argv[])
{
Core::Cli::Get().Parse(argc, argv);
const auto appModel = GetAppModel();
InitializePreQtApp(appModel);
QApplication qtApplication(argc, argv);
InitializePostQtApp();
Common::UniquePtr<QWidget> mainWidget = CreateMainWidget(appModel);
mainWidget->show();
const int execRes = QApplication::exec();
mainWidget.Reset();
Cleanup(appModel);
return execRes;
}
================================================
FILE: Editor/Src/Qt/MirrorTemplateView.cpp
================================================
//
// Created by Kindem on 2025/8/26.
//
#include <Editor/Qt/MirrorTemplateView.h>
namespace Editor {
QListMetaView::QListMetaView(const Mirror::Any& inRef)
: ref(inRef)
{
Assert(inRef.IsRef() && ref.CanAsTemplateView<QListMetaView>());
rtti = static_cast<const QListMetaViewRtti*>(ref.GetTemplateViewRtti());
}
const Mirror::TypeInfo* QListMetaView::ElementType() const
{
return rtti->getElementType();
}
size_t QListMetaView::Size() const
{
return rtti->getSize(ref);
}
void QListMetaView::Reserve(size_t inSize) const
{
rtti->reserve(ref, inSize);
}
void QListMetaView::Resize(size_t inSize) const
{
rtti->resize(ref, inSize);
}
void QListMetaView::Clear() const
{
rtti->clear(ref);
}
Mirror::Any QListMetaView::At(size_t inIndex) const
{
return rtti->getElement(ref, inIndex);
}
Mirror::Any QListMetaView::ConstAt(size_t inIndex) const
{
return rtti->getConstElement(ref, inIndex);
}
Mirror::Any QListMetaView::EmplaceBack(const Mirror::Argument& inTempObj) const
{
return rtti->emplaceBack(ref, inTempObj);
}
Mirror::Any QListMetaView::EmplaceDefaultBack() const
{
return rtti->emplaceDefaultBack(ref);
}
void QListMetaView::Remove(size_t inIndex) const
{
rtti->remove(ref, inIndex);
}
QMapMetaView::QMapMetaView(const Mirror::Any& inRef)
: ref(inRef)
{
Assert(inRef.IsRef() && ref.CanAsTemplateView<QMapMetaView>());
rtti = static_cast<const QMapMetaViewRtti*>(ref.GetTemplateViewRtti());
}
const Mirror::TypeInfo* QMapMetaView::GetKeyType() const
{
return rtti->getKeyType();
}
const Mirror::TypeInfo* QMapMetaView::GetValueType() const
{
return rtti->getValueType();
}
Mirror::Any QMapMetaView::CreateKey() const
{
return rtti->createKey();
}
Mirror::Any QMapMetaView::CreateValue() const
{
return rtti->createValue();
}
size_t QMapMetaView::GetSize() const
{
return rtti->getSize(ref);
}
void QMapMetaView::Reserve(size_t inSize) const
{
rtti->reserve(ref, inSize);
}
void QMapMetaView::Clear() const
{
rtti->clear(ref);
}
Mirror::Any QMapMetaView::GetOrAdd(const Mirror::Argument& inKey) const
{
return rtti->getOrAdd(ref, inKey);
}
Mirror::Any QMapMetaView::ConstAt(const Mirror::Argument& inKey) const
{
return rtti->constAt(ref, inKey);
}
void QMapMetaView::Traverse(const PairTraverser& inTraverser) const
{
rtti->traverse(ref, inTraverser);
}
void QMapMetaView::ConstTraverse(const PairTraverser& inTraverser) const
{
rtti->constTraverse(ref, inTraverser);
}
bool QMapMetaView::Contains(const Mirror::Argument& inKey) const
{
return rtti->contains(ref, inKey);
}
void QMapMetaView::Emplace(const Mirror::Argument& inTempKey, const Mirror::Argument& inTempValue) const
{
rtti->emplace(ref, inTempKey, inTempValue);
}
void QMapMetaView::Erase(const Mirror::Argument& inKey) const
{
rtti->erase(ref, inKey);
}
} // namespace Editor
================================================
FILE: Editor/Src/WebUIServer.cpp
================================================
//
// Created by johnk on 2025/8/8.
//
#include <QtEnvironmentVariables>
#include <QByteArrayView>
#include <Core/Cmdline.h>
#include <Core/Log.h>
#include <Core/Paths.h>
#include <Editor/WebUIServer.h>
static Core::CmdlineArgValue<uint32_t> caWebUIPort(
"webUIPort", "-webUIPort", 10907,
"WebUI port");
static Core::CmdlineArgValue<bool> caWebUIDev(
"webUIDev", "-webUIDev", false,
"Whether to enable hot reload for web UI");
static Core::CmdlineArgValue<uint32_t> caWebUIDevServerPort(
"webUIDevServerPort", "-webUIDevServerPort", 5173,
"Port of web ui dev server, which works only when dev mode enabled");
static Core::CmdlineArgValue<bool> caWebUIDebug(
"webUIDebug", "-webUIDebug", false,
"Whether to enable web ui debug (you can attach debugger to qt web engine process).");
static Core::CmdlineArgValue<uint32_t> caWebUIRemoteDebugPort(
"webUIRemoveDebugPort", "-webUIRemoveDebugPort", 5174,
"Port of web ui debug port, you can attach to the url printed in log to create debug process.");
namespace Editor {
WebUIServer& WebUIServer::Get()
{
static WebUIServer webUIServer;
return webUIServer;
}
WebUIServer::WebUIServer() = default;
void WebUIServer::Start()
{
uint32_t serverPort;
std::string serverMode;
if (caWebUIDev.GetValue()) {
serverPort = caWebUIDevServerPort.GetValue();
serverMode = "development";
httplib::Client client(std::format("http://localhost:{}", serverPort));
auto res = client.Get("/");
AssertWithReason(
res->status == 200,
"did you forget to start dev server, just call Script/start_editor_web_dev_server.py manually");
} else {
serverPort = caWebUIPort.GetValue();
serverMode = "product";
productServerThread = std::make_unique<Common::NamedThread>("WebUIServerThread", [this, serverPort]() -> void {
const auto webRoot = Core::Paths::ExecutablePath().Parent() / "Web";
const auto indexHtmlFile = webRoot / "index.html";
productServer = Common::MakeUnique<httplib::Server>();
productServer->set_mount_point("/", webRoot.Absolute().String());
productServer->Get("/(.+)", [indexHtmlFile](const httplib::Request&, httplib::Response& res) {
res.set_file_content(indexHtmlFile.Absolute().String());
});
productServer->listen("localhost", static_cast<int32_t>(serverPort));
});
}
baseUrl = std::format("http://localhost:{}", serverPort);
LogInfo(WebUI, "{} web ui server listening on {}", serverMode, baseUrl);
if (caWebUIDebug.GetValue()) {
const auto flags = std::format("--remote-debugging-port={}", caWebUIRemoteDebugPort.GetValue());
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", QByteArrayView(flags.c_str(), static_cast<qsizetype>(flags.length())));
}
}
void WebUIServer::Stop()
{
if (productServer.Valid()) {
productServer->stop();
}
if (productServerThread.Valid()) {
productServerThread->Join();
}
productServer.Reset();
productServerThread.Reset();
}
const std::string& WebUIServer::BaseUrl() const
{
return baseUrl;
}
} // namespace Editor
================================================
FILE: Editor/Src/Widget/Editor.cpp
================================================
//
// Created by Kindem on 2025/3/22.
//
#include <Editor/Widget/Editor.h>
#include <Editor/Widget/moc_Editor.cpp>
namespace Editor {
ExplosionEditor::ExplosionEditor() = default;
} // namespace Editor
================================================
FILE: Editor/Src/Widget/GraphicsSampleWidget.cpp
================================================
//
// Created by Kindem on 2025/3/16.
//
#include <QResizeEvent>
#include <Common/Time.h>
#include <Editor/Widget/GraphicsSampleWidget.h>
#include <Editor/Widget/moc_GraphicsSampleWidget.cpp> // NOLINT
namespace Editor {
struct GraphicsWindowSampleVertex {
Common::FVec3 position;
};
struct GraphicsWindowSampleVsUniform {
Common::FVec3 color;
};
GraphicsSampleWidget::GraphicsSampleWidget(QWidget* inParent)
: GraphicsWidget(inParent)
, imageReadySemaphore(GetDevice().CreateSemaphore())
, renderFinishedSemaphore(GetDevice().CreateSemaphore())
, frameFence(GetDevice().CreateFence(true))
, drawThread(Common::MakeUnique<Common::WorkerThread>("DrawThread"))
{
resize(1024, 768);
RecreateSwapChain(width(), height());
Render::ShaderCompileOptions shaderCompileOptions;
shaderCompileOptions.includeDirectories = {"../Shader/Engine"};
shaderCompileOptions.byteCodeType = GetDevice().GetGpu().GetInstance().GetRHIType() == RHI::RHIType::directX12 ? Render::ShaderByteCodeType::dxil : Render::ShaderByteCodeType::spirv;
shaderCompileOptions.withDebugInfo = static_cast<bool>(BUILD_CONFIG_DEBUG); // NOLINT
{
Render::ShaderCompileInput shaderCompileInput;
shaderCompileInput.source = Common::FileUtils::ReadTextFile("../Shader/Editor/GraphicsWindowSample.esl");
shaderCompileInput.stage = RHI::ShaderStageBits::sVertex;
shaderCompileInput.entryPoint = "VSMain";
shaderCompileInput.includeDirectories.emplace_back("../Test/Sample/ShaderInclude");
vsCompileOutput = Render::ShaderCompiler::Get().Compile(shaderCompileInput, shaderCompileOptions).get();
}
{
Render::ShaderCompileInput shaderCompileInput;
shaderCompileInput.source = Common::FileUtils::ReadTextFile("../Shader/Editor/GraphicsWindowSample.esl");
shaderCompileInput.stage = RHI::ShaderStageBits::sPixel;
shaderCompileInput.entryPoint = "PSMain";
shaderCompileInput.includeDirectories.emplace_back("../Test/Sample/ShaderInclude");
psCompileOutput = Render::ShaderCompiler::Get().Compile(shaderCompileInput, shaderCompileOptions).get();
}
vsModule = GetDevice().CreateShaderModule(RHI::ShaderModuleCreateInfo("VSMain", vsCompileOutput.byteCode));
psModule = GetDevice().CreateShaderModule(RHI::ShaderModuleCreateInfo("PSMain", psCompileOutput.byteCode));
bindGroupLayout = GetDevice().CreateBindGroupLayout(
RHI::BindGroupLayoutCreateInfo(0)
.AddEntry(RHI::BindGroupLayoutEntry(vsCompileOutput.reflectionData.QueryResourceBindingChecked("vsUniform").second, RHI::ShaderStageBits::sVertex)));
pipelineLayout = GetDevice().CreatePipelineLayout(
RHI::PipelineLayoutCreateInfo()
.AddBindGroupLayout(bindGroupLayout.Get()));
pipeline = GetDevice().CreateRasterPipeline(
RHI::RasterPipelineCreateInfo(pipelineLayout.Get())
.SetVertexShader(vsModule.Get())
.SetPixelShader(psModule.Get())
.SetVertexState(
RHI::VertexState()
.AddVertexBufferLayout(
RHI::VertexBufferLayout(RHI::VertexStepMode::perVertex, sizeof(GraphicsWindowSampleVertex))
.AddAttribute(RHI::VertexAttribute(vsCompileOutput.reflectionData.QueryVertexBindingChecked("POSITION"), RHI::VertexFormat::float32X3, 0))))
.SetFragmentState(
RHI::FragmentState()
.AddColorTarget(RHI::ColorTargetState(swapChainTextures[0]->GetCreateInfo().format, RHI::ColorWriteBits::all)))
.SetPrimitiveState(RHI::PrimitiveState(RHI::PrimitiveTopologyType::triangle, RHI::FillMode::solid, RHI::IndexFormat::uint16, RHI::FrontFace::ccw, RHI::CullMode::none)));
{
const std::vector<GraphicsWindowSampleVertex> vertices = {
{{-.5f, -.5f, 0.f}},
{{.5f, -.5f, 0.f}},
{{0.f, .5f, 0.f}},
};
const auto bufferSize = vertices.size() * sizeof(GraphicsWindowSampleVertex);
vertexBuffer = GetDevice().CreateBuffer(
RHI::BufferCreateInfo()
.SetSize(bufferSize)
.SetUsages(RHI::BufferUsageBits::vertex | RHI::BufferUsageBits::mapWrite | RHI::BufferUsageBits::copySrc)
.SetInitialState(RHI::BufferState::staging)
.SetDebugName("vertexBuffer"));
auto* data = vertexBuffer->Map(RHI::MapMode::write, 0, bufferSize);
memcpy(data, vertices.data(), bufferSize);
vertexBuffer->UnMap();
vertexBufferView = vertexBuffer->CreateBufferView(
RHI::BufferViewCreateInfo()
.SetType(RHI::BufferViewType::vertex)
.SetSize(bufferSize)
.SetOffset(0)
.SetExtendVertex(sizeof(GraphicsWindowSampleVertex)));
}
{
uniformBuffer = GetDevice().CreateBuffer(
RHI::BufferCreateInfo()
.SetSize(sizeof(GraphicsWindowSampleVsUniform))
.SetUsages(RHI::BufferUsageBits::uniform | RHI::BufferUsageBits::mapWrite | RHI::BufferUsageBits::copySrc)
.SetInitialState(RHI::BufferState::staging)
.SetDebugName("vsUniform"));
uniformBufferView = uniformBuffer->CreateBufferView(
RHI::BufferViewCreateInfo()
.SetType(RHI::BufferViewType::uniformBinding)
.SetSize(sizeof(GraphicsWindowSampleVsUniform))
.SetOffset(0));
}
bindGroup = GetDevice().CreateBindGroup(
RHI::BindGroupCreateInfo(bindGroupLayout.Get())
.AddEntry(RHI::BindGroupEntry(vsCompileOutput.reflectionData.QueryResourceBindingChecked("vsUniform").second, uniformBufferView.Get())));
commandBuffer = GetDevice().CreateCommandBuffer();
running = true;
DispatchFrame();
}
GraphicsSampleWidget::~GraphicsSampleWidget()
{
running = false;
drawThread.Reset();
WaitDeviceIdle();
}
void GraphicsSampleWidget::resizeEvent(QResizeEvent* event)
{
GraphicsWidget::resizeEvent(event);
drawThread->EmplaceTask([this, size = event->size()]() -> void {
RecreateSwapChain(size.width(), size.height());
});
}
void GraphicsSampleWidget::RecreateSwapChain(uint32_t inWidth, uint32_t inHeight)
{
static std::vector<RHI::PixelFormat> formatQualifiers = {
RHI::PixelFormat::rgba8Unorm,
RHI::PixelFormat::bgra8Unorm
};
if (swapChain != nullptr) {
WaitDeviceIdle();
swapChain.Reset();
}
std::optional<RHI::PixelFormat> pixelFormat = {};
for (const auto format : formatQualifiers) {
if (device->CheckSwapChainFormatSupport(surface.Get(), format)) {
pixelFormat = format;
break;
}
}
Assert(pixelFormat.has_value());
swapChain = device->CreateSwapChain(
RHI::SwapChainCreateInfo()
.SetPresentQueue(device->GetQueue(RHI::QueueType::graphics, 0))
.SetSurface(surface.Get())
.SetTextureNum(2)
.SetFormat(pixelFormat.value())
.SetWidth(inWidth)
.SetHeight(inHeight)
.SetPresentMode(RHI::PresentMode::immediately));
for (auto i = 0; i < swapChainTextureNum; i++) {
swapChainTextures[i] = swapChain->GetTexture(i);
swapChainTextureViews[i] = swapChainTextures[i]->CreateTextureView(
RHI::TextureViewCreateInfo()
.SetDimension(RHI::TextureViewDimension::tv2D)
.SetMipLevels(0, 1)
.SetArrayLayers(0, 1)
.SetAspect(RHI::TextureAspect::color)
.SetType(RHI::TextureViewType::colorAttachment));
}
}
void GraphicsSampleWidget::DispatchFrame() const
{
if (!running) {
return;
}
drawThread->EmplaceTask([this]() -> void { DrawFrame(); });
}
void GraphicsSampleWidget::DrawFrame() const
{
frameFence->Wait();
frameFence->Reset();
const double currentTimeSeconds = Common::TimePoint::Now().ToSeconds();
const GraphicsWindowSampleVsUniform uniform = {{
(std::sin(currentTimeSeconds) + 1) / 2,
(std::cos(currentTimeSeconds) + 1) / 2,
std::abs(std::sin(currentTimeSeconds))
}};
auto* uniformData = uniformBuffer->Map(RHI::MapMode::write, 0, sizeof(GraphicsWindowSampleVsUniform));
memcpy(uniformData, &uniform, sizeof(GraphicsWindowSampleVsUniform));
uniformBuffer->UnMap();
const auto backTextureIndex = swapChain->AcquireBackTexture(imageReadySemaphore.Get());
const Common::UniquePtr<RHI::CommandRecorder> commandRecorder = commandBuffer->Begin();
{
commandRecorder->ResourceBarrier(RHI::Barrier::Transition(swapChainTextures[backTextureIndex], RHI::TextureState::present, RHI::TextureState::renderTarget));
const Common::UniquePtr<RHI::RasterPassCommandRecorder> rasterRecorder = commandRecorder->BeginRasterPass(
RHI::RasterPassBeginInfo()
.AddColorAttachment(RHI::ColorAttachment(swapChainTextureViews[backTextureIndex].Get(), RHI::LoadOp::clear, RHI::StoreOp::store, Common::LinearColorConsts::black)));
{
rasterRecorder->SetPipeline(pipeline.Get());
rasterRecorder->SetBindGroup(0, bindGroup.Get());
rasterRecorder->SetScissor(0, 0, width(), height());
rasterRecorder->SetViewport(0, 0, static_cast<float>(width()), static_cast<float>(height()), 0, 1);
rasterRecorder->SetPrimitiveTopology(RHI::PrimitiveTopology::triangleList);
rasterRecorder->SetVertexBuffer(0, vertexBufferView.Get());
rasterRecorder->Draw(3, 1, 0, 0);
}
rasterRecorder->EndPass();
commandRecorder->ResourceBarrier(RHI::Barrier::Transition(swapChainTextures[backTextureIndex], RHI::TextureState::renderTarget, RHI::TextureState::present));
}
commandRecorder->End();
GetDevice().GetQueue(RHI::QueueType::graphics, 0)->Submit(
commandBuffer.Get(),
RHI::QueueSubmitInfo()
.AddWaitSemaphore(imageReadySemaphore.Get())
.AddSignalSemaphore(renderFinishedSemaphore.Get())
.SetSignalFence(frameFence.Get()));
swapChain->Present(renderFinishedSemaphore.Get());
DispatchFrame();
}
} // namespace Editor
================================================
FILE: Editor/Src/Widget/GraphicsWidget.cpp
================================================
//
// Created by Kindem on 2025/3/16.
//
#include <Editor/Widget/GraphicsWidget.h>
#include <Editor/Widget/moc_GraphicsWidget.cpp> // NOLINT
#include <Render/RenderModule.h>
namespace Editor {
GraphicsWidget::GraphicsWidget(QWidget* inParent)
: QWidget(inParent)
{
setAttribute(Qt::WA_NativeWindow);
setAttribute(Qt::WA_PaintOnScreen);
setAttribute(Qt::WA_NoSystemBackground);
const Render::RenderModule& renderModule = Core::ModuleManager::Get().GetTyped<Render::RenderModule>("Render");
device = renderModule.GetDevice();
Assert(device != nullptr);
surface = device->CreateSurface(
RHI::SurfaceCreateInfo()
.SetWindow(reinterpret_cast<void*>(winId()))); // NOLINT
}
GraphicsWidget::~GraphicsWidget() = default;
RHI::Device& GraphicsWidget::GetDevice() const
{
return *device;
}
RHI::Surface& GraphicsWidget::GetSurface() const
{
return *surface;
}
QPaintEngine* GraphicsWidget::paintEngine() const
{
return nullptr;
}
void GraphicsWidget::WaitDeviceIdle() const
{
const Common::UniquePtr<RHI::Fence> fence = device->CreateFence(false);
device->GetQueue(RHI::QueueType::graphics, 0)->Flush(fence.Get());
fence->Wait();
}
} // namespace Editor
================================================
FILE: Editor/Src/Widget/ProjectHub.cpp
================================================
//
// Created by johnk on 2025/8/3.
//
#include <QFileDialog>
#include <Editor/Widget/ProjectHub.h>
#include <Editor/Widget/moc_ProjectHub.cpp>
#include <Core/Log.h>
#include <Core/EngineVersion.h>
#include <Core/Paths.h>
#include <Mirror/Mirror.h>
#include <Editor/Qt/JsonSerialization.h>
namespace Editor {
ProjectHubBackend::ProjectHubBackend(ProjectHub* parent)
: QObject(parent)
, recentProjectsFile(Core::Paths::EngineCacheDir() / "Editor" / "ProjectHub" / "RecentProjects.json")
, engineVersion(std::format("v{}.{}.{}", ENGINE_VERSION_MAJOR, ENGINE_VERSION_MINOR, ENGINE_VERSION_PATCH))
{
const Common::Path projectTemplatesRoot = Core::Paths::EngineResDir() / "Editor" / "ProjectTemplates";
(void) projectTemplatesRoot.Traverse([this](const Common::Path& inPath) -> bool {
if (inPath.IsFile()) {
return true;
}
projectTemplates.emplace_back(ProjectTemplateInfo { inPath.DirName(), inPath.String() });
return true;
});
if (recentProjectsFile.Exists()) {
Common::JsonDeserializeFromFile(recentProjectsFile.String(), recentProjects);
}
}
ProjectHubBackend::~ProjectHubBackend()
{
Common::JsonSerializeToFile(recentProjectsFile.String(), recentProjects);
}
void ProjectHubBackend::CreateProject() const
{
// TODO
LogInfo(ProjectHub, "ProjectHubBridge::CreateProject");
}
QString ProjectHubBackend::BrowseDirectory() const // NOLINT
{
return QFileDialog::getExistingDirectory(nullptr, "Select Project Directory", QDir::rootPath());
}
QString ProjectHubBackend::GetEngineVersion() const
{
return QString::fromStdString(engineVersion);
}
QJsonValue ProjectHubBackend::GetProjectTemplates() const
{
QJsonValue value;
QtJsonSerialize(value, projectTemplates);
return value;
}
QJsonValue ProjectHubBackend::GetRecentProjects() const
{
QJsonValue value;
QtJsonSerialize(value, recentProjects);
return value;
}
ProjectHub::ProjectHub(QWidget* inParent)
: WebWidget(inParent)
{
setFixedSize(800, 600);
Load("/project-hub");
backend = new ProjectHubBackend(this);
GetWebChannel()->registerObject("backend", backend);
}
} // namespace Editor
================================================
FILE: Editor/Src/Widget/WebWidget.cpp
================================================
//
// Created by johnk on 2025/8/9.
//
#include <Editor/Widget/WebWidget.h>
#include <Editor/Widget/moc_WebWidget.cpp>
#include <Core/Cmdline.h>
#include <Core/Log.h>
#include <Editor/WebUIServer.h>
namespace Editor {
WebPage::WebPage(QWidget* inParent)
: QWebEnginePage(inParent)
{
}
WebPage::~WebPage() = default;
void WebPage::javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID)
{
if (level == InfoMessageLevel)
{
LogInfo(WebUIJavaScript, "{}", message.toStdString());
}
else if (level == WarningMessageLevel)
{
LogWarning(WebUIJavaScript, "{}", message.toStdString());
}
else if (level == ErrorMessageLevel)
{
LogError(WebUIJavaScript, "{}", message.toStdString());
}
}
WebWidget::WebWidget(QWidget* inParent)
: QWebEngineView(inParent)
{
webChannel = new QWebChannel(this);
setPage(new WebPage(this));
page()->setWebChannel(webChannel);
}
WebWidget::~WebWidget() = default;
void WebWidget::Load(const std::string& inUrl)
{
static Core::CmdlineArg& caWebUIPort = Core::Cli::Get().GetArg("webUIPort");
Assert(inUrl.starts_with("/"));
const auto& baseUrl = WebUIServer::Get().BaseUrl();
const auto fullUrl = baseUrl + inUrl;
load(QUrl(fullUrl.c_str()));
}
QWebChannel* WebWidget::GetWebChannel() const
{
return webChannel;
}
} // namespace Editor
================================================
FILE: Editor/Web/.gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
pnpm-lock.yaml
yarn.lock
package-lock.json
bun.lockb
================================================
FILE: Editor/Web/.npmrc
================================================
package-lock=true
================================================
FILE: Editor/Web/LICENSE
================================================
MIT License
Copyright (c) 2024 Next UI
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: Editor/Web/eslint.config.mjs
================================================
import path from "node:path";
import { fileURLToPath } from "node:url";
import { defineConfig, globalIgnores } from "eslint/config";
import { fixupConfigRules, fixupPluginRules } from "@eslint/compat";
import react from "eslint-plugin-react";
import unusedImports from "eslint-plugin-unused-imports";
import _import from "eslint-plugin-import";
import typescriptEslint from "@typescript-eslint/eslint-plugin";
import jsxA11Y from "eslint-plugin-jsx-a11y";
import prettier from "eslint-plugin-prettier";
import globals from "globals";
import tsParser from "@typescript-eslint/parser";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default defineConfig([
globalIgnores([
".now/*",
"**/*.css",
"**/.changeset",
"**/dist",
"esm/*",
"public/*",
"tests/*",
"scripts/*",
"**/*.config.js",
"**/.DS_Store",
"**/node_modules",
"**/coverage",
"**/.next",
"**/build",
"!**/.commitlintrc.cjs",
"!**/.lintstagedrc.cjs",
"!**/jest.config.js",
"!**/plopfile.js",
"!**/react-shim.js",
"!**/tsup.config.ts",
]),
{
extends: fixupConfigRules(
compat.extends(
"plugin:react/recommended",
"plugin:prettier/recommended",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended",
),
),
plugins: {
react: fixupPluginRules(react),
"unused-imports": unusedImports,
import: fixupPluginRules(_import),
"@typescript-eslint": typescriptEslint,
"jsx-a11y": fixupPluginRules(jsxA11Y),
prettier: fixupPluginRules(prettier),
},
languageOptions: {
globals: {
...Object.fromEntries(
Object.entries(globals.browser).map(([key]) => [key, "off"]),
),
...globals.node,
},
parser: tsParser,
ecmaVersion: 12,
sourceType: "module",
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
},
settings: {
react: {
version: "detect",
},
},
files: ["**/*.ts", "**/*.tsx"],
rules: {
"no-console": "warn",
"react/prop-types": "off",
"react/jsx-uses-react": "off",
"react/react-in-jsx-scope": "off",
"react-hooks/exhaustive-deps": "off",
"jsx-a11y/click-events-have-key-events": "warn",
"jsx-a11y/interactive-supports-focus": "warn",
"prettier/prettier": [
"warn",
{
"endOfLine": "auto",
"singleQuote": true,
"jsxSingleQuote": true,
"semi": true,
"printWidth": 200,
"tabWidth": 2,
"useTabs": false,
"objectWrap": "collapse",
"bracketSameLine": true,
"arrowParens": "always",
"singleAttributePerLine": false,
}
],
"no-unused-vars": "off",
"unused-imports/no-unused-vars": "off",
"unused-imports/no-unused-imports": "warn",
"@typescript-eslint/no-unused-vars": [
"warn",
{
args: "after-used",
ignoreRestSiblings: false,
argsIgnorePattern: "^_.*?$",
},
],
"import/order": [
"warn",
{
groups: [
"type",
"builtin",
"object",
"external",
"internal",
"parent",
"sibling",
"index",
],
pathGroups: [
{
pattern: "~/**",
group: "external",
position: "after",
},
],
"newlines-between": "never",
},
],
"react/self-closing-comp": "warn",
"react/jsx-sort-props": [
"warn",
{
callbacksLast: true,
shorthandFirst: true,
noSortAlphabetically: false,
reservedFirst: true,
},
]
},
},
]);
================================================
FILE: Editor/Web/index.html
================================================
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + HeroUI</title>
<meta key="title" content="Vite + HeroUI" property="og:title" />
<meta
content="Make beautiful websites regardless of your design experience."
property="og:description"
/>
<meta
content="Make beautiful websites regardless of your design experience."
name="description"
/>
<meta
key="viewport"
content="viewport-fit=cover, width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
name="viewport"
/>
<link href="/favicon.ico" rel="icon" />
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
================================================
FILE: Editor/Web/package.json
================================================
{
"name": "vite-template",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint --fix",
"preview": "vite preview"
},
"dependencies": {
"@heroui/avatar": "^2.2.20",
"@heroui/breadcrumbs": "^2.2.20",
"@heroui/button": "^2.2.24",
"@heroui/chip": "^2.2.20",
"@heroui/code": "^2.2.18",
"@heroui/dropdown": "^2.3.24",
"@heroui/form": "^2.1.24",
"@heroui/input": "^2.4.25",
"@heroui/kbd": "^2.2.19",
"@heroui/link": "^2.2.21",
"@heroui/navbar": "^2.2.22",
"@heroui/react": "^2.8.2",
"@heroui/snippet": "^2.2.25",
"@heroui/switch": "^2.2.22",
"@heroui/system": "^2.4.20",
"@heroui/tabs": "^2.2.21",
"@heroui/theme": "^2.4.20",
"@heroui/use-theme": "2.1.10",
"@heroui/user": "^2.2.20",
"@react-aria/visually-hidden": "3.8.26",
"@react-types/shared": "3.31.0",
"@tailwindcss/postcss": "4.1.11",
"@tailwindcss/vite": "4.1.11",
"clsx": "2.1.1",
"framer-motion": "11.18.2",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-router-dom": "6.23.0",
"tailwind-variants": "2.0.1",
"tailwindcss": "4.1.11"
},
"devDependencies": {
"@eslint/compat": "1.2.8",
"@eslint/eslintrc": "3.3.1",
"@eslint/js": "9.25.1",
"@types/node": "20.5.7",
"@types/react": "18.3.3",
"@types/react-dom": "18.3.0",
"@typescript-eslint/eslint-plugin": "8.31.1",
"@typescript-eslint/parser": "8.31.1",
"@vitejs/plugin-react": "4.7.0",
"eslint": "9.25.1",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-import": "2.31.0",
"eslint-plugin-jsx-a11y": "6.10.2",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "5.2.1",
"eslint-plugin-react": "7.37.5",
"eslint-plugin-react-hooks": "5.2.0",
"eslint-plugin-unused-imports": "4.1.4",
"globals": "16.0.0",
"postcss": "8.5.6",
"prettier": "3.5.3",
"typescript": "5.6.3",
"vite": "6.0.11",
"vite-tsconfig-paths": "5.1.4"
}
}
================================================
FILE: Editor/Web/postcss.config.js
================================================
export default {
plugins: {
"@tailwindcss/postcss": {},
},
};
================================================
FILE: Editor/Web/src/App.tsx
================================================
import { Route, Routes } from 'react-router-dom';
import ProjectHubPage from '@/pages/project-hub';
function App() {
return (
<Routes>
<Route element={<ProjectHubPage />} path='/project-hub' />
</Routes>
);
}
export default App;
================================================
FILE: Editor/Web/src/main.tsx
================================================
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import { Provider } from './provider.tsx';
import App from './App.tsx';
import '@/styles/globals.css';
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<BrowserRouter>
<Provider>
<main className='dark text-foreground bg-background'>
<App />
</main>
</Provider>
</BrowserRouter>
</React.StrictMode>,
);
================================================
FILE: Editor/Web/src/pages/project-hub.tsx
================================================
import { useEffect, useState } from 'react';
import { Tabs, Tab } from '@heroui/tabs';
import { User } from '@heroui/user';
import { Form } from '@heroui/form';
import { Button, PressEvent } from '@heroui/button';
import { Input } from '@heroui/input';
import { Chip } from '@heroui/chip';
import { Listbox, ListboxItem } from '@heroui/listbox';
import { Avatar } from '@heroui/avatar';
import { ScrollShadow } from '@heroui/scroll-shadow';
import { Select, SelectItem } from '@heroui/react';
import { QWebChannel } from '@/qwebchannel';
interface RecentProjectInfo {
name: string;
path: string;
}
interface ProjectTemplateInfo {
name: string;
path: string;
}
export default function ProjectHubPage() {
const [engineVersion, setEngineVersion] = useState('');
const [recentProjects, setRecentProjects] = useState(Array<RecentProjectInfo>);
const [projectTemplates, setProjectTemplates] = useState(Array<ProjectTemplateInfo>);
const [projectPath, setProjectPath] = useState('');
useEffect(() => {
new QWebChannel(window.qt.webChannelTransport, (channel: QWebChannel): void => {
window.backend = channel.objects.backend;
setEngineVersion(window.backend.engineVersion);
setRecentProjects(window.backend.recentProjects);
setProjectTemplates(window.backend.projectTemplates);
});
}, []);
function onCreateProject(): void {
// TODO
console.error("onCreateProject()");
window.backend.CreateProject();
}
function onOpenProject(e: PressEvent): void {
// TODO
const index = parseInt(e.target.getAttribute('data-key') as string);
console.error('onOpenProject:', index);
}
function onBrowseProjectPath(): void {
window.backend.BrowseDirectory((path: string) => {
if (path) {
setProjectPath(path);
}
});
}
return (
<div className='h-screen p-6'>
<div className='mb-4'>
<User
avatarProps={{ src: '/logo.png' }}
description={
<div className='mt-1'>
<Chip className='ml-1' color='secondary' size='sm' variant='flat'>
{engineVersion}
</Chip>
</div>
}
name='Explosion Game Engine'
/>
</div>
<Tabs isVertical={true}>
<Tab className='w-full pr-6' title='Recently Projects'>
<ScrollShadow hideScrollBar className='h-[450px]' size={60}>
<Listbox items={recentProjects} variant='flat'>
{recentProjects.map((item, i) => (
<ListboxItem key={i} textValue={item.name} onPress={onOpenProject}>
<div className='flex gap-2 items-center'>
<Avatar alt={item.name} className='shrink-0' name={item.name} size='sm' />
<div className='flex flex-col'>
<span className='text-small'>{item.name}</span>
<span className='text-tiny text-default-400'>{item.path}</span>
</div>
</div>
</ListboxItem>
))}
</Listbox>
</ScrollShadow>
</Tab>
<Tab className='w-full pr-6' title='New Project'>
<Form className='w-full ml-4'>
<Input fullWidth isRequired label='Project Name' labelPlacement='outside' placeholder='HelloExplosion' />
<div className='flex w-full'>
<Input isRequired label='Project Path' labelPlacement='outside' placeholder='/path/to/your/project' value={projectPath} onValueChange={setProjectPath} />
<Button className='ml-2 mt-6' onPress={() => onBrowseProjectPath()}>
Browse
</Button>
</div>
<Select fullWidth isRequired defaultSelectedKeys={['0']} label='Project Template' labelPlacement='outside'>
{projectTemplates.map((item, i) => (
<SelectItem key={i}>{item.name}</SelectItem>
))}
</Select>
<Button color='primary' onPress={onCreateProject}>
Create
</Button>
</Form>
</Tab>
</Tabs>
</div>
);
}
================================================
FILE: Editor/Web/src/provider.tsx
================================================
import type { NavigateOptions } from 'react-router-dom';
import { HeroUIProvider } from '@heroui/system';
import { useHref, useNavigate } from 'react-router-dom';
declare module '@react-types/shared' {
interface RouterConfig {
routerOptions: NavigateOptions;
}
}
export function Provider({ children }: { children: React.ReactNode }) {
const navigate = useNavigate();
return (
<HeroUIProvider navigate={navigate} useHref={useHref}>
{children}
</HeroUIProvider>
);
}
================================================
FILE: Editor/Web/src/qwebchannel.d.ts
================================================
export { QWebChannel } from './qwebchannel.js';
declare global {
interface Window {
qt: any;
backend: any;
showDirectoryPicker: any;
}
}
================================================
FILE: Editor/Web/src/qwebchannel.js
================================================
// Copyright (C) 2016 The Qt Company Ltd.
// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com>
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
"use strict";
var QWebChannelMessageTypes = {
signal: 1,
propertyUpdate: 2,
init: 3,
idle: 4,
debug: 5,
invokeMethod: 6,
connectToSignal: 7,
disconnectFromSignal: 8,
setProperty: 9,
response: 10,
};
var QWebChannel = function(transport, initCallback, converters)
{
if (typeof transport !== "object" || typeof transport.send !== "function") {
console.error("The QWebChannel expects a transport object with a send function and onmessage callback property." +
" Given is: transport: " + typeof(transport) + ", transport.send: " + typeof(transport.send));
return;
}
var channel = this;
this.transport = transport;
var converterRegistry =
{
Date : function(response) {
if (typeof response === "string"
&& response.match(
/^-?\d+-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d*)?([-+\u2212](\d{2}):(\d{2})|Z)?$/)) {
var date = new Date(response);
if (!isNaN(date))
return date;
}
return undefined; // Return undefined if current converter is not applicable
}
};
this.usedConverters = [];
this.addConverter = function(converter)
{
if (typeof converter === "string") {
if (converterRegistry.hasOwnProperty(converter))
this.usedConverters.push(converterRegistry[converter]);
else
console.error("Converter '" + converter + "' not found");
} else if (typeof converter === "function") {
this.usedConverters.push(converter);
} else {
console.error("Invalid converter object type " + typeof converter);
}
}
if (Array.isArray(converters)) {
for (const converter of converters)
this.addConverter(converter);
} else if (converters !== undefined) {
this.addConverter(converters);
}
this.send = function(data)
{
if (typeof(data) !== "string") {
data = JSON.stringify(data);
}
channel.transport.send(data);
}
this.transport.onmessage = function(message)
{
var data = message.data;
if (typeof data === "string") {
data = JSON.parse(data);
}
switch (data.type) {
case QWebChannelMessageTypes.signal:
channel.handleSignal(data);
break;
case QWebChannelMessageTypes.response:
channel.handleResponse(data);
break;
case QWebChannelMessageTypes.propertyUpdate:
channel.handlePropertyUpdate(data);
break;
default:
console.error("invalid message received:", message.data);
break;
}
}
this.execCallbacks = {};
this.execId = 0;
this.exec = function(data, callback)
{
if (!callback) {
// if no callback is given, send directly
channel.send(data);
return;
}
if (channel.execId === Number.MAX_VALUE) {
// wrap
channel.execId = Number.MIN_VALUE;
}
if (data.hasOwnProperty("id")) {
console.error("Cannot exec message with property id: " + JSON.stringify(data));
return;
}
data.id = channel.execId++;
channel.execCallbacks[data.id] = callback;
channel.send(data);
};
this.objects = {};
this.handleSignal = function(message)
{
var object = channel.objects[message.object];
if (object) {
object.signalEmitted(message.signal, message.args);
} else {
console.warn("Unhandled signal: " + message.object + "::" + message.signal);
}
}
this.handleResponse = function(message)
{
if (!message.hasOwnProperty("id")) {
console.error("Invalid response message received: ", JSON.stringify(message));
return;
}
channel.execCallbacks[message.id](message.data);
delete channel.execCallbacks[message.id];
}
this.handlePropertyUpdate = function(message)
{
message.data.forEach(data => {
var object = channel.objects[data.object];
if (object) {
object.propertyUpdate(data.signals, data.properties);
} else {
console.warn("Unhandled property update: " + data.object + "::" + data.signal);
}
});
channel.exec({type: QWebChannelMessageTypes.idle});
}
this.debug = function(message)
{
channel.send({type: QWebChannelMessageTypes.debug, data: message});
};
channel.exec({type: QWebChannelMessageTypes.init}, function(data) {
for (const objectName of Object.keys(data)) {
new QObject(objectName, data[objectName], channel);
}
// now unwrap properties, which might reference other registered objects
for (const objectName of Object.keys(channel.objects)) {
channel.objects[objectName].unwrapProperties();
}
if (initCallback) {
initCallback(channel);
}
channel.exec({type: QWebChannelMessageTypes.idle});
});
};
function QObject(name, data, webChannel)
{
this.__id__ = name;
webChannel.objects[name] = this;
// List of callbacks that get invoked upon signal emission
this.__objectSignals__ = {};
// Cache of all properties, updated when a notify signal is emitted
this.__propertyCache__ = {};
var object = this;
// ----------------------------------------------------------------------
this.unwrapQObject = function(response)
{
for (const converter of webChannel.usedConverters) {
var result = converter(response);
if (result !== undefined)
return result;
}
if (response instanceof Array) {
// support list of objects
return response.map(qobj => object.unwrapQObject(qobj))
}
if (!(response instanceof Object))
return response;
if (!response["__QObject*__"] || response.id === undefined) {
var jObj = {};
for (const propName of Object.keys(response)) {
jObj[propName] = object.unwrapQObject(response[propName]);
}
return jObj;
}
var objectId = response.id;
if (webChannel.objects[objectId])
return webChannel.objects[objectId];
if (!response.data) {
console.error("Cannot unwrap unknown QObject " + objectId + " without data.");
return;
}
var qObject = new QObject( objectId, response.data, webChannel );
qObject.destroyed.connect(function() {
if (webChannel.objects[objectId] === qObject) {
delete webChannel.objects[objectId];
// reset the now deleted QObject to an empty {} object
// just assigning {} though would not have the desired effect, but the
// below also ensures all external references will see the empty map
// NOTE: this detour is necessary to workaround QTBUG-40021
Object.keys(qObject).forEach(name => delete qObject[name]);
}
});
// here we are already initialized, and thus must directly unwrap the properties
qObject.unwrapProperties();
return qObject;
}
this.unwrapProperties = function()
{
for (const propertyIdx of Object.keys(object.__propertyCache__)) {
object.__propertyCache__[propertyIdx] = object.unwrapQObject(object.__propertyCache__[propertyIdx]);
}
}
function addSignal(signalData, isPropertyNotifySignal)
{
var signalName = signalData[0];
var signalIndex = signalData[1];
object[signalName] = {
connect: function(callback) {
if (typeof(callback) !== "function") {
console.error("Bad callback given to connect to signal " + signalName);
return;
}
object.__objectSignals__[signalIndex] = object.__objectSignals__[signalIndex] || [];
object.__objectSignals__[signalIndex].push(callback);
// only required for "pure" signals, handled separately for properties in propertyUpdate
if (isPropertyNotifySignal)
return;
// also note that we always get notified about the destroyed signal
if (signalName === "destroyed" || signalName === "destroyed()" || signalName === "destroyed(QObject*)")
return;
// and otherwise we only need to be connected only once
if (object.__objectSignals__[signalIndex].length == 1) {
webChannel.exec({
type: QWebChannelMessageTypes.connectToSignal,
object: object.__id__,
signal: signalIndex
});
}
},
disconnect: function(callback) {
if (typeof(callback) !== "function") {
console.error("Bad callback given to disconnect from signal " + signalName);
return;
}
// This makes a new list. This is important because it won't interfere with
// signal processing if a disconnection happens while emittig a signal
object.__objectSignals__[signalIndex] = (object.__objectSignals__[signalIndex] || []).filter(function(c) {
return c != callback;
});
if (!isPropertyNotifySignal && object.__objectSignals__[signalIndex].length === 0) {
// only required for "pure" signals, handled separately for properties in propertyUpdate
webChannel.exec({
type: QWebChannelMessageTypes.disconnectFromSignal,
object: object.__id__,
signal: signalIndex
});
}
}
};
}
/**
* Invokes all callbacks for the given signalname. Also works for property notify callbacks.
*/
function invokeSignalCallbacks(signalName, signalArgs)
{
var connections = object.__objectSignals__[signalName];
if (connections) {
connections.forEach(function(callback) {
callback.apply(callback, signalArgs);
});
}
}
this.propertyUpdate = function(signals, propertyMap)
{
// update property cache
for (const propertyIndex of Object.keys(propertyMap)) {
var propertyValue = propertyMap[propertyIndex];
object.__propertyCache__[propertyIndex] = this.unwrapQObject(propertyValue);
}
for (const signalName of Object.keys(signals)) {
// Invoke all callbacks, as signalEmitted() does not. This ensures the
// property cache is updated before the callbacks are invoked.
invokeSignalCallbacks(signalName, signals[signalName]);
}
}
this.signalEmitted = function(signalName, signalArgs)
{
invokeSignalCallbacks(signalName, this.unwrapQObject(signalArgs));
}
function addMethod(methodData)
{
var methodName = methodData[0];
var methodIdx = methodData[1];
// Fully specified methods are invoked by id, others by name for host-side overload resolution
var invokedMethod = methodName[methodName.length - 1] === ')' ? methodIdx : methodName
object[methodName] = function() {
var args = [];
var callback;
var errCallback;
for (var i = 0; i < arguments.length; ++i) {
var argument = arguments[i];
if (typeof argument === "function")
callback = argument;
else
args.push(argument);
}
var result;
// during test, webChannel.exec synchronously calls the callback
// therefore, the promise must be constucted before calling
// webChannel.exec to ensure the callback is set up
if (!callback && (typeof(Promise) === 'function')) {
result = new Promise(function(resolve, reject) {
callback = resolve;
errCallback = reject;
});
}
webChannel.exec({
"type": QWebChannelMessageTypes.invokeMethod,
"object": object.__id__,
"method": invokedMethod,
"args": args
}, function(response) {
if (response !== undefined) {
var result = object.unwrapQObject(response);
if (callback) {
(callback)(result);
}
} else if (errCallback) {
(errCallback)();
}
});
return result;
};
}
function bindGetterSetter(propertyInfo)
{
var propertyIndex = propertyInfo[0];
var propertyName = propertyInfo[1];
var notifySignalData = propertyInfo[2];
// initialize property cache with current value
// NOTE: if this is an object, it is not directly unwrapped as it might
// reference other QObject that we do not know yet
object.__propertyCache__[propertyIndex] = propertyInfo[3];
if (notifySignalData) {
if (notifySignalData[0] === 1) {
// signal name is optimized away, reconstruct the actual name
notifySignalData[0] = propertyName + "Changed";
}
addSignal(notifySignalData, true);
}
Object.defineProperty(object, propertyName, {
configurable: true,
get: function () {
var propertyValue = object.__propertyCache__[propertyIndex];
if (propertyValue === undefined) {
// This shouldn't happen
console.warn("Undefined value in property cache for property \"" + propertyName + "\" in object " + object.__id__);
}
return propertyValue;
},
set: function(value) {
if (value === undefined) {
console.warn("Property setter for " + propertyName + " called with undefined value!");
return;
}
object.__propertyCache__[propertyIndex] = value;
var valueToSend = value;
webChannel.exec({
"type": QWebChannelMessageTypes.setProperty,
"object": object.__id__,
"property": propertyIndex,
"value": valueToSend
});
}
});
}
// ----------------------------------------------------------------------
data.methods.forEach(addMethod);
data.properties.forEach(bindGetterSetter);
data.signals.forEach(function(signal) { addSignal(signal, false); });
Object.assign(object, data.enums);
}
QObject.prototype.toJSON = function() {
if (this.__id__ === undefined) return {};
return {
id: this.__id__,
"__QObject*__": true
};
};
//required for use with nodejs
//++[kindem] use ES6 export
export {
QWebChannel
}
//--[kindem]
================================================
FILE: Editor/Web/src/styles/globals.css
================================================
@import "tailwindcss";
@config "../../tailwind.config.js"
================================================
FILE: Editor/Web/src/vite-env.d.ts
================================================
/// <reference types="vite/client" />
================================================
FILE: Editor/Web/tailwind.config.js
================================================
import {heroui} from "@heroui/theme"
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
'./src/layouts/**/*.{js,ts,jsx,tsx,mdx}',
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
"./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
darkMode: "class",
plugins: [heroui()],
}
================================================
FILE: Editor/Web/tsconfig.json
================================================
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"paths": {
"@/*": ["./src/*"]
},
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
================================================
FILE: Editor/Web/tsconfig.node.json
================================================
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true,
"strict": true
},
"include": ["vite.config.ts"]
}
================================================
FILE: Editor/Web/vercel.json
================================================
{
"rewrites": [
{ "source": "/(.*)", "destination": "/" }
]
}
================================================
FILE: Editor/Web/vite.config.ts
================================================
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import tsconfigPaths from "vite-tsconfig-paths";
import tailwindcss from "@tailwindcss/vite";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react(), tsconfigPaths(), tailwindcss()],
});
================================================
FILE: Engine/CMakeLists.txt
================================================
add_subdirectory(Source)
function(get_engine_shader_resources)
set(options "")
set(singleValueArgs OUTPUT)
set(multiValueArgs "")
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
file(GLOB_RECURSE engine_shaders ${CMAKE_SOURCE_DIR}/Engine/Shader/*.es*)
foreach (shader ${engine_shaders})
get_filename_component(shader_absolute ${shader} ABSOLUTE)
string(REPLACE ${CMAKE_SOURCE_DIR}/Engine/Shader ../Shader/${SUB_PROJECT_NAME} copy_dst ${shader_absolute})
list(APPEND result ${shader}->${copy_dst})
endforeach ()
set(${arg_OUTPUT} ${result} PARENT_SCOPE)
endfunction()
================================================
FILE: Engine/Shader/BasePassPS.esl
================================================
================================================
FILE: Engine/Shader/BasePassVS.esl
================================================
================================================
FILE: Engine/Shader/Platform.esh
================================================
#ifndef __PLATFORM_H__
#define __PLATFORM_H__
#if VULKAN
#define VkBinding(x, y) [[vk::binding(x, y)]]
#define VkLocation(x) [[vk::location(x)]]
#else
#define VkBinding(x, y)
#define VkLocation(x)
#endif
#endif
================================================
FILE: Engine/Source/CMakeLists.txt
================================================
if (${BUILD_TEST})
add_subdirectory(Test)
endif()
add_subdirectory(Common)
add_subdirectory(Core)
add_subdirectory(Mirror)
add_subdirectory(RHI)
add_subdirectory(RHI-Dummy)
add_subdirectory(RHI-Vulkan)
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
add_subdirectory(RHI-DirectX12)
endif()
add_subdirectory(Render)
add_subdirectory(Runtime)
add_subdirectory(Launch)
================================================
FILE: Engine/Source/Common/CMakeLists.txt
================================================
file(GLOB_RECURSE sources Src/*.cpp)
exp_add_library(
NAME Common
TYPE STATIC
SRC ${sources}
PUBLIC_INC Include
PUBLIC_LIB rapidjson::rapidjson debugbreak::debugbreak cityhash::cityhash Taskflow::Taskflow
)
file(GLOB test_sources Test/*.cpp)
exp_add_test(
NAME Common.Test
INC Test
SRC ${test_sources}
LIB Common
)
================================================
FILE: Engine/Source/Common/Include/Common/Concepts.h
================================================
//
// Created by johnk on 2024/8/16.
//
#pragma once
#include <type_traits>
#include <string>
#include <optional>
#include <array>
#include <utility>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <set>
#include <map>
#include <variant>
namespace Common {
template <typename T> concept BaseEqualComparable = requires(const T& lhs, const T& rhs) { { lhs == rhs } -> std::same_as<bool>; { lhs != rhs } -> std::same_as<bool>; };
template <typename T> struct EqualComparableTest { static constexpr bool value = BaseEqualComparable<T>; };
}
namespace Common {
template <typename T> concept CppBool = std::is_same_v<T, bool>;
template <typename T> concept CppIntegral = std::is_integral_v<T>;
template <typename T> concept CppIntegralNonBool = CppIntegral<T> && !CppBool<T>;
template <typename T> concept CppFloatingPoint = std::is_floating_point_v<T>;
template <typename T> concept CppSigned = std::is_signed_v<T>;
template <typename T> concept CppUnsigned = std::is_unsigned_v<T>;
template <typename T> concept CppArithmetic = std::is_arithmetic_v<T>;
template <typename T> concept CppArithmeticNonBool = CppArithmetic<T> && !CppBool<T>;
template <typename T> concept CppFundamental = std::is_fundamental_v<T>;
template <typename T> concept CppClass = std::is_class_v<T>;
template <typename T> concept CppVoid = std::is_void_v<T>;
template <typename T> concept CppUnion = std::is_union_v<T>;
template <typename T> concept CppArray = std::is_array_v<T>;
template <typename T> concept CppEnum = std::is_enum_v<T>;
template <typename T> concept CppFunction = std::is_function_v<T>;
template <typename T> concept CppInvocable = std::is_invocable_v<T>;
template <typename T> concept CppConst = std::is_const_v<T>;
template <typename T> concept CppPointer = std::is_pointer_v<T>;
template <typename T> concept CppConstPointer = CppPointer<T> && CppConst<std::remove_pointer_t<T>>;
template <typename T> concept CppRef = std::is_reference_v<T>;
template <typename T> concept CppNotRef = !std::is_reference_v<T>;
template <typename T> concept CppLValueRef = std::is_lvalue_reference_v<T>;
template <typename T> concept CppLValueConstRef = CppLValueRef<T> && CppConst<std::remove_reference_t<T>>;
template <typename T> concept CppRValueRef = std::is_rvalue_reference_v<T>;
template <typename T> concept CppLValueRefOrPtr = CppLValueRef<T> || CppPointer<T>;
template <typename T> concept CppVolatile = std::is_volatile_v<T>;
template <typename T> concept CppPolymorphic = std::is_polymorphic_v<T>;
template <typename T> concept CppCopyConstructible = std::is_copy_constructible_v<T>;
template <typename T> concept CppMoveConstructible = std::is_move_constructible_v<T>;
template <typename T> concept CppCopyAssignable = std::is_copy_assignable_v<T>;
template <typename T> concept CppMoveAssignable = std::is_move_assignable_v<T>;
template <typename T> concept CppStdString = std::is_same_v<T, std::string>;
template <uint8_t N, typename... T> concept ArgsNumEqual = sizeof...(T) == N;
template <uint8_t N, typename... T> concept ArgsNumLess = sizeof...(T) < N;
template <uint8_t N, typename... T> concept ArgsNumGreater = sizeof...(T) > N;
template <uint8_t N, typename... T> concept ArgsNumLessEqual = sizeof...(T) <= N;
template <uint8_t N, typename... T> concept ArgsNumGreaterEqual = sizeof...(T) >= N;
template <typename C, typename B> concept DerivedFrom = std::is_base_of_v<B, C>;
template <typename T> concept EqualComparable = EqualComparableTest<T>::value;
}
namespace Common {
// some types can perform operator== compare, but it requires element type also support operator== compare, so we test it further
template <typename T> struct EqualComparableTest<std::optional<T>> { static constexpr bool value = EqualComparableTest<T>::value; };
template <typename T> struct EqualComparableTest<std::vector<T>> { static constexpr bool value = EqualComparableTest<T>::value; };
template <typename T> struct EqualComparableTest<std::unordered_set<T>> { static constexpr bool value = EqualComparableTest<T>::value; };
template <typename T> struct EqualComparableTest<std::set<T>> { static constexpr bool value = EqualComparableTest<T>::value; };
template <typename T, size_t N> struct EqualComparableTest<std::array<T, N>> { static constexpr bool value = EqualComparableTest<T>::value; };
template <typename K, typename V> struct EqualComparableTest<std::pair<K, V>> { static constexpr bool value = std::conjunction_v<EqualComparableTest<K>, EqualComparableTest<V>>; };
template <typename K, typename V> struct EqualComparableTest<std::unordered_map<K, V>> { static constexpr bool value = std::conjunction_v<EqualComparableTest<K>, EqualComparableTest<V>>; };
template <typename K, typename V> struct EqualComparableTest<std::map<K, V>> { static constexpr bool value = std::conjunction_v<EqualComparableTest<K>, EqualComparableTest<V>>; };
template <typename... T> struct EqualComparableTest<std::variant<T...>> { static constexpr bool value = std::conjunction_v<EqualComparableTest<T>...>; };
}
================================================
FILE: Engine/Source/Common/Include/Common/Concurrent.h
================================================
//
// Created by johnk on 2022/7/20.
//
#pragma once
#include <string>
#include <vector>
#include <queue>
#include <mutex>
#include <thread>
#include <future>
#include <functional>
#include <type_traits>
#include <Common/Debug.h>
#include <Common/Memory.h>
#include <Common/Utility.h>
namespace Common {
class NamedThread {
public:
DefaultMovable(NamedThread)
NamedThread();
template <typename F> explicit NamedThread(const std::string& name, F&& task);
void Join();
private:
void SetThreadName(const std::string& name);
std::thread thread;
};
class ThreadPool {
public:
ThreadPool(const std::string& name, uint8_t threadNum);
~ThreadPool();
template <typename F> auto EmplaceTask(F&& task);
template <typename F> void ExecuteTasks(size_t taskNum, F&& task);
private:
template <typename Ret> auto EmplaceTaskInternal(Common::SharedPtr<std::packaged_task<Ret()>> packedTask);
bool stop;
std::mutex mutex;
std::condition_variable condition;
std::vector<NamedThread> threads;
std::queue<std::function<void()>> tasks;
};
class WorkerThread {
public:
explicit WorkerThread(const std::string& name);
~WorkerThread();
void Flush();
template <typename F> auto EmplaceTask(F&& task);
private:
bool stop;
bool flush;
std::mutex mutex;
std::condition_variable taskCondition;
std::condition_variable flushCondition;
NamedThread thread;
std::queue<std::function<void()>> tasks;
};
}
namespace Common {
template <typename F>
NamedThread::NamedThread(const std::string& name, F&& task)
{
thread = std::thread([this, task, name]() -> void {
SetThreadName(name);
task();
});
}
template <typename F>
auto ThreadPool::EmplaceTask(F&& task)
{
using RetType = std::invoke_result_t<F>;
return EmplaceTaskInternal<RetType>(Common::MakeShared<std::packaged_task<RetType()>>(task));
}
template <typename F>
void ThreadPool::ExecuteTasks(size_t taskNum, F&& task)
{
using RetType = std::invoke_result_t<F, size_t>;
std::vector<std::future<RetType>> futures;
futures.reserve(taskNum);
for (size_t i = 0; i < taskNum; i++) {
futures.emplace_back(EmplaceTaskInternal<RetType>(Common::MakeShared<std::packaged_task<RetType()>>(std::bind(std::forward<F>(task), i))));
}
for (const auto& future : futures) {
future.wait();
}
}
template <typename Ret>
auto ThreadPool::EmplaceTaskInternal(Common::SharedPtr<std::packaged_task<Ret()>> packedTask)
{
auto result = packedTask->get_future();
{
std::unique_lock lock(mutex);
Assert(!stop);
tasks.emplace([packedTask]() -> void { (*packedTask)(); });
}
condition.notify_one();
return result;
}
template <typename F>
auto WorkerThread::EmplaceTask(F&& task)
{
using RetType = std::invoke_result_t<F>;
auto packagedTask = Common::MakeShared<std::packaged_task<RetType()>>(task);
auto result = packagedTask->get_future();
{
std::unique_lock lock(mutex);
Assert(!stop);
tasks.emplace([packagedTask]() -> void { (*packagedTask)(); });
}
taskCondition.notify_one();
return result;
}
}
================================================
FILE: Engine/Source/Common/Include/Common/Container.h
================================================
//
// Created by johnk on 2023/12/4.
//
#pragma once
#include <set>
#include <vector>
#include <unordered_set>
#include <algorithm>
#include <array>
#include <bitset>
#include <list>
#include <functional>
#include <iterator>
#include <Common/Debug.h>
#include <Common/Concepts.h>
#include <Common/Math/Common.h>
#include <Common/Utility.h>
namespace Common {
class VectorUtils {
public:
template <typename T> static typename std::vector<T>::iterator SwapWithLastAndDelete(std::vector<T>& vector, const typename std::vector<T>::iterator& iterator);
template <typename T> static size_t SwapWithLastAndDelete(std::vector<T>& vector, size_t index);
template <typename T> static std::vector<T> GetIntersection(const std::vector<T>& lhs, const std::vector<T>& rhs);
template <typename T> static std::vector<T> GetDifferences(const std::vector<T>& lhs, const std::vector<T>& rhs);
template <typename T> static std::vector<T> Combine(const std::vector<T>& lhs, const std::vector<T>& rhs);
};
class SetUtils {
public:
template <typename T> static std::unordered_set<T> GetIntersection(const std::unordered_set<T>& lhs, const std::unordered_set<T>& rhs);
template <typename T> static std::unordered_set<T> GetUnion(const std::unordered_set<T>& lhs, const std::unordered_set<T>& rhs);
template <typename T> static void GetUnionInplace(std::unordered_set<T>& lhs, const std::unordered_set<T>& rhs);
};
template <typename T> class InplaceVectorIter;
template <typename I, typename T> concept ValidInplaceVectorIter = std::is_same_v<I, InplaceVectorIter<T>> || std::is_same_v<I, InplaceVectorIter<const T>>;
template <typename T>
class InplaceVectorIter {
public:
using Offset = int64_t;
explicit InplaceVectorIter(T* inPtr);
template <ValidInplaceVectorIter<T> T2> Offset operator-(const T2& inOther) const;
template <ValidInplaceVectorIter<T> T2> bool operator==(const T2& inOther) const;
template <ValidInplaceVectorIter<T> T2> bool operator!=(const T2& inOther) const;
template <ValidInplaceVectorIter<T> T2> bool operator>(const T2& inOther) const;
tem
gitextract__bnw7v4u/ ├── .clang-format ├── .clang-tidy ├── .gitattributes ├── .gitignore ├── CMake/ │ ├── Common.cmake │ ├── Config.cmake.in │ └── Target.cmake ├── CMakeLists.txt ├── Editor/ │ ├── CMakeLists.txt │ ├── Include/ │ │ └── Editor/ │ │ ├── EditorEngine.h │ │ ├── EditorModule.h │ │ ├── Qt/ │ │ │ ├── EngineSerialization.h │ │ │ ├── JsonSerialization.h │ │ │ └── MirrorTemplateView.h │ │ ├── WebUIServer.h │ │ └── Widget/ │ │ ├── Editor.h │ │ ├── GraphicsSampleWidget.h │ │ ├── GraphicsWidget.h │ │ ├── ProjectHub.h │ │ └── WebWidget.h │ ├── Resource/ │ │ └── ProjectTemplates/ │ │ └── Default/ │ │ └── CMakeLists.txt │ ├── Shader/ │ │ └── GraphicsWindowSample.esl │ ├── Src/ │ │ ├── EditorEngine.cpp │ │ ├── EditorModule.cpp │ │ ├── Main.cpp │ │ ├── Qt/ │ │ │ └── MirrorTemplateView.cpp │ │ ├── WebUIServer.cpp │ │ └── Widget/ │ │ ├── Editor.cpp │ │ ├── GraphicsSampleWidget.cpp │ │ ├── GraphicsWidget.cpp │ │ ├── ProjectHub.cpp │ │ └── WebWidget.cpp │ └── Web/ │ ├── .gitignore │ ├── .npmrc │ ├── LICENSE │ ├── eslint.config.mjs │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── src/ │ │ ├── App.tsx │ │ ├── main.tsx │ │ ├── pages/ │ │ │ └── project-hub.tsx │ │ ├── provider.tsx │ │ ├── qwebchannel.d.ts │ │ ├── qwebchannel.js │ │ ├── styles/ │ │ │ └── globals.css │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── vercel.json │ └── vite.config.ts ├── Engine/ │ ├── CMakeLists.txt │ ├── Shader/ │ │ ├── BasePassPS.esl │ │ ├── BasePassVS.esl │ │ └── Platform.esh │ └── Source/ │ ├── CMakeLists.txt │ ├── Common/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── Common/ │ │ │ ├── Concepts.h │ │ │ ├── Concurrent.h │ │ │ ├── Container.h │ │ │ ├── Debug.h │ │ │ ├── Delegate.h │ │ │ ├── DynamicLibrary.h │ │ │ ├── File.h │ │ │ ├── FileSystem.h │ │ │ ├── Hash.h │ │ │ ├── IO.h │ │ │ ├── Math/ │ │ │ │ ├── Box.h │ │ │ │ ├── Color.h │ │ │ │ ├── Common.h │ │ │ │ ├── Half.h │ │ │ │ ├── Math.h │ │ │ │ ├── Matrix.h │ │ │ │ ├── Projection.h │ │ │ │ ├── Quaternion.h │ │ │ │ ├── Rect.h │ │ │ │ ├── Sphere.h │ │ │ │ ├── Transform.h │ │ │ │ ├── Vector.h │ │ │ │ └── View.h │ │ │ ├── Memory.h │ │ │ ├── Platform.h │ │ │ ├── Serialization.h │ │ │ ├── String.h │ │ │ ├── Time.h │ │ │ └── Utility.h │ │ ├── Src/ │ │ │ ├── Concurrent.cpp │ │ │ ├── Debug.cpp │ │ │ ├── DynamicLibrary.cpp │ │ │ ├── File.cpp │ │ │ ├── FileSystem.cpp │ │ │ ├── Hash.cpp │ │ │ ├── IO.cpp │ │ │ ├── Math/ │ │ │ │ └── Color.cpp │ │ │ ├── Platform.cpp │ │ │ ├── Serialization.cpp │ │ │ ├── String.cpp │ │ │ └── Time.cpp │ │ └── Test/ │ │ ├── ConcurrentTest.cpp │ │ ├── ContainerTest.cpp │ │ ├── DelegateTest.cpp │ │ ├── FileSystemTest.cpp │ │ ├── FileTest.cpp │ │ ├── HashTest.cpp │ │ ├── MathTest.cpp │ │ ├── MemoryTest.cpp │ │ ├── SerializationTest.cpp │ │ ├── SerializationTest.h │ │ ├── StringTest.cpp │ │ └── UtilityTest.cpp │ ├── Core/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── Core/ │ │ │ ├── Cmdline.h │ │ │ ├── Console.h │ │ │ ├── Log.h │ │ │ ├── Module.h │ │ │ ├── Paths.h │ │ │ ├── Thread.h │ │ │ └── Uri.h │ │ ├── Src/ │ │ │ ├── Cmdline.cpp │ │ │ ├── Console.cpp │ │ │ ├── Log.cpp │ │ │ ├── Module.cpp │ │ │ ├── Paths.cpp │ │ │ ├── Thread.cpp │ │ │ └── Uri.cpp │ │ ├── Template/ │ │ │ └── EngineVersion.h.in │ │ └── Test/ │ │ ├── CmdlineTest.cpp │ │ ├── ConsoleTest.cpp │ │ └── UriTest.cpp │ ├── Launch/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── Launch/ │ │ │ ├── GameApplication.h │ │ │ ├── GameClient.h │ │ │ └── GameViewport.h │ │ └── Src/ │ │ ├── GameApplication.cpp │ │ ├── GameClient.cpp │ │ ├── GameViewport.cpp │ │ └── Main.cpp │ ├── Mirror/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── Mirror/ │ │ │ ├── Meta.h │ │ │ ├── Mirror.h │ │ │ └── Registry.h │ │ ├── Src/ │ │ │ ├── Mirror.cpp │ │ │ └── Registry.cpp │ │ └── Test/ │ │ ├── AnyTest.cpp │ │ ├── AnyTest.h │ │ ├── RegistryTest.cpp │ │ ├── RegistryTest.h │ │ ├── SerializationTest.cpp │ │ ├── SerializationTest.h │ │ └── TypeInfoTest.cpp │ ├── RHI/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── RHI/ │ │ │ ├── BindGroup.h │ │ │ ├── BindGroupLayout.h │ │ │ ├── Buffer.h │ │ │ ├── BufferView.h │ │ │ ├── CommandBuffer.h │ │ │ ├── CommandRecorder.h │ │ │ ├── Common.h │ │ │ ├── Device.h │ │ │ ├── Gpu.h │ │ │ ├── Instance.h │ │ │ ├── Pipeline.h │ │ │ ├── PipelineLayout.h │ │ │ ├── Queue.h │ │ │ ├── RHI.h │ │ │ ├── RHIModule.h │ │ │ ├── Sampler.h │ │ │ ├── ShaderModule.h │ │ │ ├── Surface.h │ │ │ ├── SwapChain.h │ │ │ ├── Synchronous.h │ │ │ ├── Texture.h │ │ │ └── TextureView.h │ │ └── Src/ │ │ ├── BindGroup.cpp │ │ ├── BindGroupLayout.cpp │ │ ├── Buffer.cpp │ │ ├── BufferView.cpp │ │ ├── CommandBuffer.cpp │ │ ├── CommandRecorder.cpp │ │ ├── Common.cpp │ │ ├── Device.cpp │ │ ├── Gpu.cpp │ │ ├── Instance.cpp │ │ ├── Pipeline.cpp │ │ ├── PipelineLayout.cpp │ │ ├── Queue.cpp │ │ ├── RHIModule.cpp │ │ ├── Sampler.cpp │ │ ├── ShaderModule.cpp │ │ ├── Surface.cpp │ │ ├── SwapChain.cpp │ │ ├── Synchronous.cpp │ │ ├── Texture.cpp │ │ └── TextureView.cpp │ ├── RHI-DirectX12/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── RHI/ │ │ │ └── DirectX12/ │ │ │ ├── BindGroup.h │ │ │ ├── BindGroupLayout.h │ │ │ ├── Buffer.h │ │ │ ├── BufferView.h │ │ │ ├── CommandBuffer.h │ │ │ ├── CommandRecorder.h │ │ │ ├── Common.h │ │ │ ├── DX12RHIModule.h │ │ │ ├── Device.h │ │ │ ├── Gpu.h │ │ │ ├── Instance.h │ │ │ ├── Pipeline.h │ │ │ ├── PipelineLayout.h │ │ │ ├── Queue.h │ │ │ ├── Sampler.h │ │ │ ├── ShaderModule.h │ │ │ ├── Surface.h │ │ │ ├── SwapChain.h │ │ │ ├── Synchronous.h │ │ │ ├── Texture.h │ │ │ └── TextureView.h │ │ └── Src/ │ │ ├── BindGroup.cpp │ │ ├── BindGroupLayout.cpp │ │ ├── Buffer.cpp │ │ ├── BufferView.cpp │ │ ├── CommandBuffer.cpp │ │ ├── CommandRecorder.cpp │ │ ├── Common.cpp │ │ ├── DX12RHIModule.cpp │ │ ├── Device.cpp │ │ ├── Gpu.cpp │ │ ├── Instance.cpp │ │ ├── Pipeline.cpp │ │ ├── PipelineLayout.cpp │ │ ├── Queue.cpp │ │ ├── Sampler.cpp │ │ ├── ShaderModule.cpp │ │ ├── Surface.cpp │ │ ├── SwapChain.cpp │ │ ├── Synchronous.cpp │ │ ├── Texture.cpp │ │ └── TextureView.cpp │ ├── RHI-Dummy/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── RHI/ │ │ │ └── Dummy/ │ │ │ ├── BindGroup.h │ │ │ ├── BindGroupLayout.h │ │ │ ├── Buffer.h │ │ │ ├── BufferView.h │ │ │ ├── CommandBuffer.h │ │ │ ├── CommandRecorder.h │ │ │ ├── Device.h │ │ │ ├── DummyRHIModule.h │ │ │ ├── Gpu.h │ │ │ ├── Instance.h │ │ │ ├── Pipeline.h │ │ │ ├── PipelineLayout.h │ │ │ ├── Queue.h │ │ │ ├── Sampler.h │ │ │ ├── ShaderModule.h │ │ │ ├── Surface.h │ │ │ ├── SwapChain.h │ │ │ ├── Synchronous.h │ │ │ ├── Texture.h │ │ │ └── TextureView.h │ │ └── Src/ │ │ ├── BindGroup.cpp │ │ ├── BindGroupLayout.cpp │ │ ├── Buffer.cpp │ │ ├── BufferView.cpp │ │ ├── CommandBuffer.cpp │ │ ├── CommandRecorder.cpp │ │ ├── Device.cpp │ │ ├── DummyRHIModule.cpp │ │ ├── Gpu.cpp │ │ ├── Instance.cpp │ │ ├── Pipeline.cpp │ │ ├── PipelineLayout.cpp │ │ ├── Queue.cpp │ │ ├── Sampler.cpp │ │ ├── ShaderModule.cpp │ │ ├── Surface.cpp │ │ ├── SwapChain.cpp │ │ ├── Synchronous.cpp │ │ ├── Texture.cpp │ │ └── TextureView.cpp │ ├── RHI-Vulkan/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── RHI/ │ │ │ └── Vulkan/ │ │ │ ├── BindGroup.h │ │ │ ├── BindGroupLayout.h │ │ │ ├── Buffer.h │ │ │ ├── BufferView.h │ │ │ ├── CommandBuffer.h │ │ │ ├── CommandRecorder.h │ │ │ ├── Common.h │ │ │ ├── Device.h │ │ │ ├── Gpu.h │ │ │ ├── Instance.h │ │ │ ├── Pipeline.h │ │ │ ├── PipelineLayout.h │ │ │ ├── Queue.h │ │ │ ├── Sampler.h │ │ │ ├── ShaderModule.h │ │ │ ├── Surface.h │ │ │ ├── SwapChain.h │ │ │ ├── Synchronous.h │ │ │ ├── Texture.h │ │ │ ├── TextureView.h │ │ │ └── VulkanRHIModule.h │ │ └── Src/ │ │ ├── BindGroup.cpp │ │ ├── BindGroupLayout.cpp │ │ ├── Buffer.cpp │ │ ├── BufferView.cpp │ │ ├── CommandBuffer.cpp │ │ ├── CommandRecorder.cpp │ │ ├── Device.cpp │ │ ├── Gpu.cpp │ │ ├── Instance.cpp │ │ ├── Pipeline.cpp │ │ ├── PipelineLayout.cpp │ │ ├── Platform/ │ │ │ ├── MacosSurface.mm │ │ │ └── Win32Surface.cpp │ │ ├── Queue.cpp │ │ ├── Sampler.cpp │ │ ├── ShaderModule.cpp │ │ ├── Surface.cpp │ │ ├── SwapChain.cpp │ │ ├── Synchronous.cpp │ │ ├── Texture.cpp │ │ ├── TextureView.cpp │ │ ├── VmaImport.cpp │ │ └── VulkanRHIModule.cpp │ ├── Render/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── Render/ │ │ │ ├── RenderCache.h │ │ │ ├── RenderGraph.h │ │ │ ├── RenderModule.h │ │ │ ├── RenderThread.h │ │ │ ├── Renderer.h │ │ │ ├── ResourcePool.h │ │ │ ├── Scene.h │ │ │ ├── SceneProxy/ │ │ │ │ ├── Light.h │ │ │ │ └── Primitive.h │ │ │ ├── Shader.h │ │ │ ├── ShaderCompiler.h │ │ │ └── View.h │ │ ├── SharedSrc/ │ │ │ └── RenderModule.cpp │ │ ├── Src/ │ │ │ ├── RenderCache.cpp │ │ │ ├── RenderGraph.cpp │ │ │ ├── RenderThread.cpp │ │ │ ├── Renderer.cpp │ │ │ ├── Scene.cpp │ │ │ ├── Shader.cpp │ │ │ ├── ShaderCompiler.cpp │ │ │ └── View.cpp │ │ └── Test/ │ │ ├── ResourcePoolTest.cpp │ │ └── ShaderTest.cpp │ ├── Runtime/ │ │ ├── CMakeLists.txt │ │ ├── Include/ │ │ │ └── Runtime/ │ │ │ ├── Asset/ │ │ │ │ ├── Asset.h │ │ │ │ ├── Level.h │ │ │ │ ├── Material.h │ │ │ │ ├── Mesh.h │ │ │ │ └── Texture.h │ │ │ ├── Client.h │ │ │ ├── Component/ │ │ │ │ ├── Camera.h │ │ │ │ ├── Light.h │ │ │ │ ├── Player.h │ │ │ │ ├── Primitive.h │ │ │ │ ├── Scene.h │ │ │ │ └── Transform.h │ │ │ ├── ECS.h │ │ │ ├── Engine.h │ │ │ ├── GameModule.h │ │ │ ├── GameThread.h │ │ │ ├── Meta.h │ │ │ ├── RenderThreadPtr.h │ │ │ ├── RuntimeModule.h │ │ │ ├── Settings/ │ │ │ │ ├── Game.h │ │ │ │ └── Registry.h │ │ │ ├── System/ │ │ │ │ ├── Player.h │ │ │ │ ├── Render.h │ │ │ │ ├── Scene.h │ │ │ │ └── Transform.h │ │ │ ├── SystemGraphPresets.h │ │ │ ├── Viewport.h │ │ │ └── World.h │ │ ├── Src/ │ │ │ ├── Asset/ │ │ │ │ ├── Asset.cpp │ │ │ │ ├── Level.cpp │ │ │ │ ├── Material.cpp │ │ │ │ ├── Mesh.cpp │ │ │ │ └── Texture.cpp │ │ │ ├── Client.cpp │ │ │ ├── Component/ │ │ │ │ ├── Camera.cpp │ │ │ │ ├── Light.cpp │ │ │ │ ├── Player.cpp │ │ │ │ ├── Primitive.cpp │ │ │ │ ├── Scene.cpp │ │ │ │ └── Transform.cpp │ │ │ ├── ECS.cpp │ │ │ ├── Engine.cpp │ │ │ ├── GameThread.cpp │ │ │ ├── RuntimeModule.cpp │ │ │ ├── Settings/ │ │ │ │ ├── Game.cpp │ │ │ │ └── Registry.cpp │ │ │ ├── System/ │ │ │ │ ├── Player.cpp │ │ │ │ ├── Render.cpp │ │ │ │ ├── Scene.cpp │ │ │ │ └── Transform.cpp │ │ │ ├── SystemGraphPresets.cpp │ │ │ ├── Viewport.cpp │ │ │ └── World.cpp │ │ └── Test/ │ │ ├── AssetTest.cpp │ │ ├── AssetTest.h │ │ ├── ECSTest.cpp │ │ ├── ECSTest.h │ │ ├── RuntimeTestModule.cpp │ │ ├── RuntimeTestModule.h │ │ ├── WorldTest.cpp │ │ └── WorldTest.h │ └── Test/ │ ├── CMakeLists.txt │ ├── Include/ │ │ └── Test/ │ │ └── Test.h │ └── Src/ │ └── Main.cpp ├── LICENSE ├── README.md ├── Sample/ │ ├── Base/ │ │ ├── Application.cpp │ │ ├── Application.h │ │ ├── Camera.cpp │ │ └── Camera.h │ ├── CMakeLists.txt │ ├── RHI-ParallelCompute/ │ │ ├── Compute.esl │ │ └── ParallelCompute.cpp │ ├── RHI-SSAO/ │ │ ├── GLTFParser.cpp │ │ ├── GLTFParser.h │ │ ├── Model/ │ │ │ └── Voyager.gltf │ │ ├── SSAOApplication.cpp │ │ └── Shader/ │ │ ├── Blur.esl │ │ ├── Composition.esl │ │ ├── Gbuffer.esl │ │ └── SSAO.esl │ ├── RHI-TexSampling/ │ │ ├── TexSampling.cpp │ │ └── TexSampling.esl │ ├── RHI-Triangle/ │ │ ├── Triangle.cpp │ │ └── Triangle.esl │ ├── Rendering-BaseTexture/ │ │ ├── BaseTexture.cpp │ │ └── BaseTexture.esl │ ├── Rendering-SSAO/ │ │ ├── GLTFParser.cpp │ │ ├── GLTFParser.h │ │ ├── Model/ │ │ │ └── Voyager.gltf │ │ ├── SSAOApplication.cpp │ │ └── Shader/ │ │ ├── Blur.esl │ │ ├── Composition.esl │ │ ├── Gbuffer.esl │ │ └── SSAO.esl │ └── Rendering-Triangle/ │ ├── Triangle.cpp │ └── Triangle.esl ├── TestProject/ │ ├── CMakeLists.txt │ └── Main.cpp ├── ThirdParty/ │ ├── ConanRecipes/ │ │ ├── README.md │ │ ├── assimp/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── clipp/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ ├── patches/ │ │ │ │ └── 0000-fix-cpp23.patch │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── debugbreak/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── dxc/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── glfw/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── libclang/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── molten-vk/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── qt/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ ├── debug.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── rapidjson/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ ├── vulkan-utility-libraries/ │ │ │ ├── conandata.yml │ │ │ ├── conanfile.py │ │ │ └── test_package/ │ │ │ ├── CMakeLists.txt │ │ │ ├── conanfile.py │ │ │ └── test_package.cpp │ │ └── vulkan-validationlayers/ │ │ ├── conandata.yml │ │ ├── conanfile.py │ │ ├── patches/ │ │ │ └── 0000-fix-spirv-tools-includes.patch │ │ └── test_package/ │ │ ├── CMakeLists.txt │ │ ├── conanfile.py │ │ └── test_package.cpp │ └── Registry.cmake ├── Tool/ │ ├── CMakeLists.txt │ └── MirrorTool/ │ ├── CMakeLists.txt │ ├── ExeSrc/ │ │ └── Main.cpp │ ├── Include/ │ │ └── MirrorTool/ │ │ ├── Generator.h │ │ └── Parser.h │ ├── Src/ │ │ ├── Generator.cpp │ │ └── Parser.cpp │ └── Test/ │ ├── Main.cpp │ └── MirrorToolInput.h ├── conan_provider.cmake └── conanfile.py
SYMBOL INDEX (1944 symbols across 419 files)
FILE: Editor/Include/Editor/EditorEngine.h
function namespace (line 9) | namespace Editor {
FILE: Editor/Include/Editor/EditorModule.h
function namespace (line 9) | namespace Editor {
FILE: Editor/Include/Editor/Qt/EngineSerialization.h
function namespace (line 14) | namespace Common {
function Deserialize (line 48) | static size_t Deserialize(BinaryDeserializeStream& inStream, QList<T>& o...
function Serialize (line 72) | static size_t Serialize(BinarySerializeStream& outStream, const QSet<T>&...
FILE: Editor/Include/Editor/Qt/JsonSerialization.h
function namespace (line 27) | namespace Editor {
function namespace (line 41) | namespace Editor {
function QtJsonSerialize (line 294) | static void QtJsonSerialize(QJsonValue& outJsonValue, const std::pair<K,...
function QtJsonDeserialize (line 308) | static void QtJsonDeserialize(const QJsonValue& inJsonValue, std::pair<K...
function QtJsonSerialize (line 327) | static void QtJsonSerialize(QJsonValue& outJsonValue, const std::array<T...
function QtJsonSerialize (line 503) | static void QtJsonSerialize(QJsonValue& outJsonValue, const std::map<K, ...
function QtJsonDeserializeInternal (line 546) | void QtJsonDeserializeInternal(const QJsonObject& inJsonObject, std::tup...
function QtJsonDeserializeInternal (line 594) | void QtJsonDeserializeInternal(const QJsonValue& inContentJsonValue, std...
function QtJsonSerialize (line 628) | static void QtJsonSerialize(QJsonValue& outJsonValue, const Common::Vec<...
function QtJsonDeserialize (line 639) | static void QtJsonDeserialize(const QJsonValue& inJsonValue, Common::Vec...
function QtJsonSerialize (line 656) | static void QtJsonSerialize(QJsonValue& jsonValue, const Common::Mat<T, ...
function QtJsonDeserialize (line 669) | static void QtJsonDeserialize(const QJsonValue& jsonValue, Common::Mat<T...
function QtJsonDeserialize (line 710) | static void QtJsonDeserialize(const QJsonValue& inJsonValue, Common::Qua...
function QtJsonDeserialize (line 758) | static void QtJsonDeserialize(const QJsonValue& inJsonValue, Common::Col...
function LinearColor (line 783) | struct QtJsonSerializer<Common::LinearColor> {
function QString (line 831) | struct QtJsonSerializer<QString> {
function QtJsonDeserialize (line 924) | static void QtJsonDeserialize(const QJsonValue& inJsonValue, QMap<K, V>&...
function QtJsonSerializeDyn (line 956) | static void QtJsonSerializeDyn(QJsonObject& outJsonObject, const Mirror:...
function QtJsonDeserializeDyn (line 987) | static void QtJsonDeserializeDyn(const QJsonObject& inJsonObject, const ...
function SerializeDynWithView (line 1190) | static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror:...
function DeserializeDynWithView (line 1201) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function DeserializeDynWithView (line 1224) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function DeserializeDynWithView (line 1250) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function DeserializeDynWithView (line 1282) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function SerializeDynWithView (line 1309) | static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror:...
function DeserializeDynWithView (line 1327) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function SerializeDynWithView (line 1353) | static void SerializeDynWithView(QJsonValue& outJsonValue, const Mirror:...
function DeserializeDynWithView (line 1364) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function DeserializeDynWithView (line 1394) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function SerializeDynWithView (line 1416) | static void SerializeDynWithView(QJsonValue& outJsonValue, const QListMe...
function DeserializeDynWithView (line 1427) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function DeserializeDynWithView (line 1458) | static void DeserializeDynWithView(const QJsonValue& inJsonValue, const ...
function SerializeValueDyn (line 1485) | static void SerializeValueDyn(QJsonValue& outJsonValue, const Mirror::An...
function DeserializeValueDyn (line 1506) | static void DeserializeValueDyn(const QJsonValue& inJsonValue, const Mir...
FILE: Editor/Include/Editor/Qt/MirrorTemplateView.h
function namespace (line 12) | namespace Editor {
function Any (line 309) | Any QMapMetaViewRtti::GetOrAdd(const Mirror::Any& inRef, const Mirror::A...
FILE: Editor/Include/Editor/WebUIServer.h
function namespace (line 12) | namespace Editor {
FILE: Editor/Include/Editor/Widget/Editor.h
function namespace (line 9) | namespace Editor {
FILE: Editor/Include/Editor/Widget/GraphicsSampleWidget.h
function namespace (line 13) | namespace Editor {
FILE: Editor/Include/Editor/Widget/GraphicsWidget.h
function namespace (line 13) | namespace Editor {
FILE: Editor/Include/Editor/Widget/ProjectHub.h
function namespace (line 12) | namespace Editor {
type EClass (line 22) | struct EClass
function QJsonValue (line 45) | QJsonValue GetProjectTemplates() const;
FILE: Editor/Include/Editor/Widget/WebWidget.h
function namespace (line 11) | namespace Editor {
FILE: Editor/Src/EditorEngine.cpp
type Editor (line 7) | namespace Editor {
function EditorEngine (line 20) | EditorEngine& GetEditorEngine()
FILE: Editor/Src/EditorModule.cpp
type Editor (line 8) | namespace Editor {
FILE: Editor/Src/Main.cpp
type EditorApplicationModel (line 30) | enum class EditorApplicationModel : uint8_t {
function EditorApplicationModel (line 39) | static EditorApplicationModel GetAppModel()
function NeedInitCore (line 52) | static bool NeedInitCore(EditorApplicationModel inModel)
function InitializePreQtApp (line 61) | static void InitializePreQtApp(EditorApplicationModel inModel)
function InitializePostQtApp (line 77) | static void InitializePostQtApp()
function Cleanup (line 82) | static void Cleanup(EditorApplicationModel inModel)
function CreateMainWidget (line 92) | static Common::UniquePtr<QWidget> CreateMainWidget(EditorApplicationMode...
function main (line 105) | int main(int argc, char* argv[])
FILE: Editor/Src/Qt/MirrorTemplateView.cpp
type Editor (line 7) | namespace Editor {
FILE: Editor/Src/WebUIServer.cpp
type Editor (line 33) | namespace Editor {
function WebUIServer (line 34) | WebUIServer& WebUIServer::Get()
FILE: Editor/Src/Widget/Editor.cpp
type Editor (line 8) | namespace Editor {
FILE: Editor/Src/Widget/GraphicsSampleWidget.cpp
type Editor (line 11) | namespace Editor {
type GraphicsWindowSampleVertex (line 12) | struct GraphicsWindowSampleVertex {
type GraphicsWindowSampleVsUniform (line 16) | struct GraphicsWindowSampleVsUniform {
FILE: Editor/Src/Widget/GraphicsWidget.cpp
type Editor (line 9) | namespace Editor {
function QPaintEngine (line 38) | QPaintEngine* GraphicsWidget::paintEngine() const
FILE: Editor/Src/Widget/ProjectHub.cpp
type Editor (line 15) | namespace Editor {
function QString (line 46) | QString ProjectHubBackend::BrowseDirectory() const // NOLINT
function QString (line 51) | QString ProjectHubBackend::GetEngineVersion() const
function QJsonValue (line 56) | QJsonValue ProjectHubBackend::GetProjectTemplates() const
function QJsonValue (line 63) | QJsonValue ProjectHubBackend::GetRecentProjects() const
FILE: Editor/Src/Widget/WebWidget.cpp
type Editor (line 11) | namespace Editor {
function QWebChannel (line 55) | QWebChannel* WebWidget::GetWebChannel() const
FILE: Editor/Web/src/App.tsx
function App (line 4) | function App() {
FILE: Editor/Web/src/pages/project-hub.tsx
type RecentProjectInfo (line 14) | interface RecentProjectInfo {
type ProjectTemplateInfo (line 19) | interface ProjectTemplateInfo {
function ProjectHubPage (line 24) | function ProjectHubPage() {
FILE: Editor/Web/src/provider.tsx
type RouterConfig (line 6) | interface RouterConfig {
function Provider (line 11) | function Provider({ children }: { children: React.ReactNode }) {
FILE: Editor/Web/src/qwebchannel.d.ts
type Window (line 4) | interface Window {
FILE: Editor/Web/src/qwebchannel.js
function QObject (line 177) | function QObject(name, data, webChannel)
FILE: Engine/Source/Common/Include/Common/Concepts.h
function namespace (line 19) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Concurrent.h
function namespace (line 20) | namespace Common {
function namespace (line 75) | namespace Common {
function packagedTask (line 125) | auto packagedTask = Common::MakeShared<std::packaged_task<RetType()>>(ta...
FILE: Engine/Source/Common/Include/Common/Container.h
function namespace (line 22) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Debug.h
function namespace (line 32) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Delegate.h
function namespace (line 17) | namespace Common::Internal {
function Count (line 48) | size_t Count() const;
FILE: Engine/Source/Common/Include/Common/DynamicLibrary.h
function namespace (line 18) | namespace Common {
FILE: Engine/Source/Common/Include/Common/File.h
function namespace (line 11) | namespace Common {
FILE: Engine/Source/Common/Include/Common/FileSystem.h
function namespace (line 10) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Hash.h
function namespace (line 12) | namespace Common::Internal {
FILE: Engine/Source/Common/Include/Common/IO.h
function namespace (line 9) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Box.h
function namespace (line 11) | namespace Common {
function JsonDeserialize (line 107) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Box<T>&...
function namespace (line 122) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Color.h
function namespace (line 12) | namespace Common {
function namespace (line 71) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Common.h
function namespace (line 12) | namespace Common {
function namespace (line 18) | namespace Common {
function namespace (line 23) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Half.h
function namespace (line 15) | namespace Common {
function namespace (line 19) | namespace Common::Internal {
function namespace (line 33) | namespace Common {
function endian (line 211) | endian E>
function namespace (line 224) | namespace Common {
function endian (line 436) | endian E>
FILE: Engine/Source/Common/Include/Common/Math/Matrix.h
function namespace (line 13) | namespace Common {
type JsonSerializer (line 357) | struct JsonSerializer
function JsonSerialize (line 358) | static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Doc...
function JsonDeserialize (line 371) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Mat<T, ...
function namespace (line 388) | namespace Common::Internal {
FILE: Engine/Source/Common/Include/Common/Math/Projection.h
function namespace (line 14) | namespace Common {
function Serialize (line 66) | static size_t Serialize(BinarySerializeStream& stream, const ReversedZOr...
function Deserialize (line 76) | static size_t Deserialize(BinaryDeserializeStream& stream, ReversedZOrth...
function Serialize (line 93) | static size_t Serialize(BinarySerializeStream& stream, const ReversedZPe...
function Deserialize (line 104) | static size_t Deserialize(BinaryDeserializeStream& stream, ReversedZPers...
function JsonDeserialize (line 170) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Reverse...
function JsonDeserialize (line 217) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Reverse...
function namespace (line 241) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Quaternion.h
function namespace (line 12) | namespace Common {
function T (line 92) | T Model() const;
function Deserialize (line 137) | static size_t Deserialize(BinaryDeserializeStream& stream, Angle<T>& value)
function Serialize (line 149) | static size_t Serialize(BinarySerializeStream& stream, const Radian<T>& ...
function Deserialize (line 154) | static size_t Deserialize(BinaryDeserializeStream& stream, Radian<T>& va...
function Serialize (line 166) | static size_t Serialize(BinarySerializeStream& stream, const Quaternion<...
function Deserialize (line 176) | static size_t Deserialize(BinaryDeserializeStream& stream, Quaternion<T>...
function JsonDeserialize (line 223) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Angle<T...
function JsonDeserialize (line 236) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Radian<...
function JsonDeserialize (line 265) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Quatern...
function namespace (line 278) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Rect.h
function namespace (line 11) | namespace Common {
function JsonDeserialize (line 105) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Rect<T>...
function namespace (line 120) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Sphere.h
function namespace (line 11) | namespace Common {
function Serialize (line 48) | static size_t Serialize(BinarySerializeStream& stream, const Sphere<T>& ...
function Deserialize (line 56) | static size_t Deserialize(BinaryDeserializeStream& stream, Sphere<T>& va...
function JsonDeserialize (line 93) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Sphere<...
function namespace (line 108) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Transform.h
function namespace (line 13) | namespace Common {
function namespace (line 70) | namespace Common {
function JsonDeserialize (line 129) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Transfo...
function namespace (line 147) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Math/Vector.h
function namespace (line 14) | namespace Common::Internal {
function namespace (line 21) | namespace Common {
function namespace (line 216) | namespace Common {
function string (line 245) | string ToString(const Vec<T, L>& inValue)
function JsonSerialize (line 262) | static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Doc...
function JsonDeserialize (line 273) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, Vec<T, ...
function namespace (line 285) | namespace Common {
function x (line 355) | x(inX)
FILE: Engine/Source/Common/Include/Common/Math/View.h
function namespace (line 11) | namespace Common {
function namespace (line 32) | namespace Common {
function JsonDeserialize (line 65) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, ViewTra...
function namespace (line 72) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Memory.h
function namespace (line 12) | namespace Common {
function namespace (line 114) | namespace Common {
FILE: Engine/Source/Common/Include/Common/Platform.h
type class (line 10) | enum class
type class (line 17) | enum class
function CpuArch (line 29) | enum class CpuArch {
FILE: Engine/Source/Common/Include/Common/Serialization.h
function namespace (line 29) | namespace Common {
function endian (line 266) | endian BinaryFileSerializeStream<E>::Endian()
function endian (line 319) | endian BinaryFileDeserializeStream<E>::Endian()
function endian (line 375) | endian MemorySerializeStream<E>::Endian()
function endian (line 413) | endian MemoryDeserializeStream<E>::Endian()
type Header (line 490) | struct Header {
function Deserialize (line 525) | size_t> Deserialize(BinaryDeserializeStream& stream, T& value)
function IMPL_BASIC_TYPE_SERIALIZER (line 544) | IMPL_BASIC_TYPE_SERIALIZER(bool)
function wstring (line 595) | struct Serializer<std::wstring> {
function Serialize (line 642) | static size_t Serialize(BinarySerializeStream& stream, const std::option...
function Deserialize (line 655) | static size_t Deserialize(BinaryDeserializeStream& stream, std::optional...
function Serialize (line 679) | static size_t Serialize(BinarySerializeStream& stream, const std::pair<K...
function Deserialize (line 687) | static size_t Deserialize(BinaryDeserializeStream& stream, std::pair<K, ...
function Serialize (line 703) | static size_t Serialize(BinarySerializeStream& stream, const std::array<...
function Deserialize (line 716) | static size_t Deserialize(BinaryDeserializeStream& stream, std::array<T,...
function Serialize (line 745) | static size_t Serialize(BinarySerializeStream& stream, const std::vector...
function Deserialize (line 758) | static size_t Deserialize(BinaryDeserializeStream& stream, std::vector<T...
function Serialize (line 782) | static size_t Serialize(BinarySerializeStream& stream, const std::list<T...
function Deserialize (line 895) | static size_t Deserialize(BinaryDeserializeStream& stream, std::unordere...
function Serialize (line 920) | static size_t Serialize(BinarySerializeStream& stream, const std::map<K,...
function Deserialize (line 931) | static size_t Deserialize(BinaryDeserializeStream& stream, std::map<K, V...
function Serialize (line 976) | static size_t Serialize(BinarySerializeStream& stream, const std::tuple<...
function Deserialize (line 984) | static size_t Deserialize(BinaryDeserializeStream& stream, std::tuple<T....
function Deserialize (line 1030) | static size_t Deserialize(BinaryDeserializeStream& stream, std::variant<...
function int8_t (line 1058) | struct JsonSerializer<int8_t> {
function uint8_t (line 1074) | struct JsonSerializer<uint8_t> {
function int16_t (line 1090) | struct JsonSerializer<int16_t> {
function uint16_t (line 1106) | struct JsonSerializer<uint16_t> {
function int32_t (line 1122) | struct JsonSerializer<int32_t> {
function uint32_t (line 1138) | struct JsonSerializer<uint32_t> {
function int64_t (line 1154) | struct JsonSerializer<int64_t> {
function uint64_t (line 1170) | struct JsonSerializer<uint64_t> {
function float (line 1186) | struct JsonSerializer<float> {
function double (line 1202) | struct JsonSerializer<double> {
function string (line 1218) | struct JsonSerializer<std::string> {
function wstring (line 1234) | struct JsonSerializer<std::wstring> {
function JsonDeserialize (line 1261) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, std::op...
function JsonSerialize (line 1275) | static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Doc...
function JsonDeserialize (line 1289) | static void JsonDeserialize(const rapidjson::Value& inJsonValue, std::pa...
function JsonSerialize (line 1305) | static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Doc...
function JsonSerialize (line 1478) | static void JsonSerialize(rapidjson::Value& outJsonValue, rapidjson::Doc...
function JsonDeserializeInternal (line 1523) | void JsonDeserializeInternal(const rapidjson::Value& inJsonValue, std::t...
function JsonDeserializeInternal (line 1569) | void JsonDeserializeInternal(const rapidjson::Value& inContentJsonValue,...
FILE: Engine/Source/Common/Include/Common/String.h
function namespace (line 23) | namespace Common {
function string (line 94) | string ToString(const std::pair<K, V>& inValue)
function string (line 105) | string ToString(const std::array<T, N>& inValue)
function string (line 175) | string ToString(const std::unordered_map<K, V>& inValue)
function string (line 193) | string ToString(const std::map<K, V>& inValue)
FILE: Engine/Source/Common/Include/Common/Time.h
function Time (line 19) | Time ToTime() const;
FILE: Engine/Source/Common/Include/Common/Utility.h
function namespace (line 48) | namespace Common {
function namespace (line 72) | namespace Common {
FILE: Engine/Source/Common/Src/Concurrent.cpp
type Common (line 14) | namespace Common {
FILE: Engine/Source/Common/Src/Debug.cpp
type Common (line 12) | namespace Common {
FILE: Engine/Source/Common/Src/DynamicLibrary.cpp
type Common (line 21) | namespace Common {
function DynamicLibrary (line 49) | DynamicLibrary& DynamicLibrary::operator=(DynamicLibrary&& inOther) no...
function DynamicLibHandle (line 88) | DynamicLibHandle DynamicLibrary::GetHandle() const
function DynamicLibrary (line 93) | DynamicLibrary DynamicLibraryFinder::Find(const std::string& simpleNam...
FILE: Engine/Source/Common/Src/File.cpp
type Common (line 17) | namespace Common {
FILE: Engine/Source/Common/Src/FileSystem.cpp
type Common::Internal (line 8) | namespace Common::Internal {
function GetUnixStylePath (line 9) | std::filesystem::path GetUnixStylePath(const std::string& inPath)
function GetUnixStylePath (line 14) | std::filesystem::path GetUnixStylePath(const std::filesystem::path& in...
type Common (line 20) | namespace Common {
function Path (line 21) | Path Path::WorkingDirectory()
function Path (line 48) | Path Path::operator/(const Path& inPath) const
function Path (line 53) | Path Path::operator/(const std::string& inPath) const
function Path (line 58) | Path Path::operator/(const char* inPath) const
function Path (line 63) | Path Path::operator+(const Path& inPath) const
function Path (line 68) | Path Path::operator+(const std::string& inPath) const
function Path (line 73) | Path Path::operator+(const char* inPath) const
function Path (line 83) | Path Path::Parent() const
function Path (line 147) | Path Path::Absolute() const
function Path (line 152) | Path Path::Relative(const Path& inRelative) const
function Path (line 157) | Path Path::Canonical() const
FILE: Engine/Source/Common/Src/Hash.cpp
type Common (line 7) | namespace Common {
FILE: Engine/Source/Common/Src/IO.cpp
type Common (line 7) | namespace Common {
FILE: Engine/Source/Common/Src/Math/Color.cpp
type Common (line 11) | namespace Common {
function LinearColor (line 49) | LinearColor Color::ToLinearColor() const
function LinearColor (line 102) | LinearColor& LinearColor::operator=(const LinearColor& inOther)
function Color (line 120) | Color LinearColor::ToColor() const
FILE: Engine/Source/Common/Src/Platform.cpp
type Common (line 14) | namespace Common {
FILE: Engine/Source/Common/Src/Serialization.cpp
type Common (line 7) | namespace Common {
FILE: Engine/Source/Common/Src/String.cpp
type Common (line 11) | namespace Common {
FILE: Engine/Source/Common/Src/Time.cpp
type Common::Internal (line 11) | namespace Common::Internal {
function GetNumStringFillZeros (line 13) | static std::string GetNumStringFillZeros(T inNum, uint8_t inWidth)
type Common (line 27) | namespace Common {
function TimePoint (line 28) | TimePoint TimePoint::Now()
function Time (line 38) | Time TimePoint::ToTime() const
function AccurateTime (line 43) | AccurateTime TimePoint::ToAccurateTime() const
FILE: Engine/Source/Common/Test/ConcurrentTest.cpp
function TEST (line 9) | TEST(ConcurrentTest, NamedThreadTest)
function TEST (line 18) | TEST(ConcurrentTest, ThreadPoolTest0)
function TEST (line 30) | TEST(ConcurrentTest, ThreadPoolTest1)
function TEST (line 44) | TEST(ConcurrentTest, ThreadPoolTest2)
function TEST (line 56) | TEST(ConcurrentTest, ThreadPoolTest3)
function TEST (line 68) | TEST(ConcurrentTest, ThreadPoolExecuteTasksTest)
function TEST (line 76) | TEST(ConcurrentTest, WorkerThread0)
function TEST (line 88) | TEST(ConcurrentTest, WorkerThread1)
function TEST (line 99) | TEST(ConcurrentTest, WorkerThread2)
function TEST (line 115) | TEST(ConcurrentTest, WorkerThread3)
FILE: Engine/Source/Common/Test/ContainerTest.cpp
type ConstructType (line 9) | enum class ConstructType : uint8_t {
type CopyAndMoveTest (line 16) | struct CopyAndMoveTest {
method CopyAndMoveTest (line 21) | CopyAndMoveTest()
method CopyAndMoveTest (line 28) | CopyAndMoveTest(ConstructType inType, bool inCopyAssigned, bool inMove...
method CopyAndMoveTest (line 35) | CopyAndMoveTest(const CopyAndMoveTest& inOther)
method CopyAndMoveTest (line 42) | CopyAndMoveTest(CopyAndMoveTest&& inOther) noexcept
method CopyAndMoveTest (line 49) | CopyAndMoveTest& operator=(const CopyAndMoveTest& inOther)
method CopyAndMoveTest (line 55) | CopyAndMoveTest& operator=(CopyAndMoveTest&& inOther) noexcept
function TEST (line 69) | TEST(ContainerTest, VectorSwapDeleteTest)
function TEST (line 98) | TEST(ContainerTest, VectorGetIntersection)
function TEST (line 107) | TEST(ContainerTest, VectorGetDifferences)
function TEST (line 120) | TEST(ContainerTest, SetGetIntersection)
function TEST (line 129) | TEST(ContainerTest, InplaceVectorBasic)
function TEST (line 174) | TEST(ContainerTest, InplaceVectorIter)
function TEST (line 238) | TEST(ContainerTest, InplaceVectorCopyAndMove)
function TEST (line 305) | TEST(ContainerTest, TrunkBasic)
function TEST (line 339) | TEST(ContainerTest, TrunkEachTest)
function TEST (line 354) | TEST(ContainerTest, TrunkCopyAndMove)
function TEST (line 419) | TEST(ContainerTest, TrunkListBasic)
function TEST (line 446) | TEST(ContainerTest, StableUnorderedMapTest)
FILE: Engine/Source/Common/Test/DelegateTest.cpp
function StaticReceiver (line 10) | static void StaticReceiver(int a, bool b)
class Receiver (line 17) | class Receiver {
method Receiver (line 19) | Receiver() = default;
method Receive (line 21) | void Receive(int a, bool b) // NOLINT
function TEST (line 29) | TEST(DelegateTest, BasicTest)
FILE: Engine/Source/Common/Test/FileSystemTest.cpp
function TEST (line 7) | TEST(FileSystemTest, PathTest)
FILE: Engine/Source/Common/Test/FileTest.cpp
function TEST (line 9) | TEST(FileTest, ReadWriteTextFileTest)
FILE: Engine/Source/Common/Test/HashTest.cpp
function TEST (line 11) | TEST(HashTest, CityHashTest)
function TEST (line 17) | TEST(HashTest, StrCrc32Test)
function TEST (line 23) | TEST(HashTest, StrCrc32DynTest)
FILE: Engine/Source/Common/Test/MathTest.cpp
function TEST (line 22) | TEST(MathTest, CommonTest)
function TEST (line 29) | TEST(MathTest, HFloatTest) // NOLINT
function TEST (line 57) | TEST(MathTest, FVec1Test)
function TEST (line 79) | TEST(MathTest, FVec2Test)
function TEST (line 101) | TEST(MathTest, FVec3Test)
function TEST (line 117) | TEST(MathTest, FVec4Test)
function TEST (line 132) | TEST(MathTest, IVec1Test)
function TEST (line 144) | TEST(MathTest, IVec2Test)
function TEST (line 162) | TEST(MathTest, IVec3Test)
function TEST (line 179) | TEST(MathTest, IVec4Test)
function TEST (line 195) | TEST(MathTest, HVec1Test)
function TEST (line 207) | TEST(MathTest, HVec2Test)
function TEST (line 222) | TEST(MathTest, HVec3Test)
function TEST (line 234) | TEST(MathTest, HVec4Test)
function TEST (line 244) | TEST(MathTest, SubVecTest)
function TEST (line 254) | TEST(MathTest, VecModelTest)
function TEST (line 263) | TEST(MathTest, VecDotTest)
function TEST (line 274) | TEST(MathTest, VecCrossTest)
function TEST (line 288) | TEST(MathTest, VecNormalizeTest)
function TEST (line 298) | TEST(MathTest, VecConstsTest)
function TEST (line 304) | TEST(MathTest, IMat2x3Test)
function TEST (line 318) | TEST(MathTest, FMat3x4Test)
function TEST (line 339) | TEST(MathTest, SubMatrixTest)
function TEST (line 354) | TEST(MathTest, MatExtractionTest)
function TEST (line 370) | TEST(MathTest, MatViewTest)
function TEST (line 385) | TEST(MathTest, MatConstsTest)
function TEST (line 399) | TEST(MathTest, MatSetTest) // NOLINT
function TEST (line 430) | TEST(MathTest, MatMulTest)
function TEST (line 457) | TEST(MathTest, MathTranposeTest)
function TEST (line 471) | TEST(MathTest, MatrixDetInverseTest)
function TEST (line 511) | TEST(MathTest, AngleAndRadianTest)
function TEST (line 520) | TEST(MathTest, QuaternionBasicTest)
function TEST (line 528) | TEST(MathTest, QuaternionRotationTest)
function TEST (line 541) | TEST(MathTest, EulerRotationTest)
function TEST (line 554) | TEST(MathTest, QuaternionToRotationMatrixTest)
function TEST (line 569) | TEST(MathTest, TransformTest)
function TEST (line 594) | TEST(MathTest, RectTest)
function TEST (line 607) | TEST(MathTest, BoxTest)
function TEST (line 619) | TEST(MathTest, SphereTest)
function TEST (line 632) | TEST(MathTest, SerializationTest)
function TEST (line 682) | TEST(MathTest, ToStringTest)
function TEST (line 780) | TEST(MathTest, JsonSerializationTest)
FILE: Engine/Source/Common/Test/MemoryTest.cpp
type TestStruct (line 10) | struct TestStruct {
method TestStruct (line 14) | TestStruct(const uint32_t inValue, bool& inLive) : value(inValue), liv...
type ChildTestStruct (line 25) | struct ChildTestStruct : TestStruct {
method ChildTestStruct (line 28) | ChildTestStruct(const uint32_t inValue, const uint32_t inCValue, bool&...
function TEST (line 33) | TEST(MemoryTest, UniqueRefTest) // NOLINT
function TEST (line 54) | TEST(MemoryTest, SharedRefTest) // NOLINT
function TEST (line 77) | TEST(MemoryTest, WeakRefTest) // NOLINT
function TEST (line 108) | TEST(MemoryTest, WeakRefDeriveTest) // NOLINT
FILE: Engine/Source/Common/Test/SerializationTest.cpp
function TEST (line 10) | TEST(SerializationTest, FileStreamTest)
function TEST (line 31) | TEST(SerializationTest, ByteStreamTest)
function TEST (line 50) | TEST(SerializationTest, TypedSerializationTest)
function TEST (line 80) | TEST(SerializationTest, TypedSerializationWithFileTest)
function TEST (line 112) | TEST(SerializationTest, JsonSerializationTest)
function TEST (line 143) | TEST(SerializationTest, JsonSerializationWithFileTest)
FILE: Engine/Source/Common/Test/SerializationTest.h
function std (line 14) | inline std::string FltToJson(float value)
FILE: Engine/Source/Common/Test/StringTest.cpp
function TEST (line 10) | TEST(StringUtilsTest, ToUpperCaseTest)
function TEST (line 17) | TEST(StringUtilsTest, ToLowerCaseTest)
function TEST (line 24) | TEST(StringUtilsTest, SplitTest)
function TEST (line 56) | TEST(StringUtilsTest, ReplaceTest)
function TEST (line 62) | TEST(StringUtilsTest, RegexMatchTest)
function TEST (line 69) | TEST(StringUtilsTest, RegexSearchFirstTest)
function TEST (line 75) | TEST(StringUtilsTest, RegexSearchTest)
function TEST (line 84) | TEST(StringUtilsTest, AfterFirstTest)
function TEST (line 90) | TEST(StringUtilsTest, BeforeFirstTest)
function TEST (line 96) | TEST(StringUtilsTest, AfterLastTest)
function TEST (line 102) | TEST(StringUtilsTest, BeforeLastTest)
function TEST (line 108) | TEST(StringUtilsTest, ToStringTest)
FILE: Engine/Source/Common/Test/UtilityTest.cpp
function TEST (line 10) | TEST(UtilityTest, AlignUpTest)
FILE: Engine/Source/Core/Include/Core/Cmdline.h
function namespace (line 15) | namespace Core {
function namespace (line 88) | namespace Core {
FILE: Engine/Source/Core/Include/Core/Console.h
type class (line 17) | enum class
function std (line 34) | const std::string& Name() const;
FILE: Engine/Source/Core/Include/Core/Log.h
function class (line 22) | class LogStream {
function COutLogStream (line 29) | COutLogStream final : public LogStream {
function NonMovable (line 46) | NonCopyable(FileLogStream)
FILE: Engine/Source/Core/Include/Core/Module.h
function namespace (line 36) | namespace Core {
FILE: Engine/Source/Core/Include/Core/Paths.h
function namespace (line 12) | namespace Core {
FILE: Engine/Source/Core/Include/Core/Thread.h
function namespace (line 11) | namespace Core {
FILE: Engine/Source/Core/Include/Core/Uri.h
type class (line 11) | enum class
function class (line 17) | class CORE_API Uri {
function namespace (line 51) | namespace std { // NOLINT
function namespace (line 61) | namespace Common { // NOLINT
FILE: Engine/Source/Core/Src/Cmdline.cpp
type Core (line 11) | namespace Core {
function Cli (line 14) | Cli& Cli::Get()
function CmdlineArg (line 49) | CmdlineArg* Cli::FindArg(const std::string& name) const
function CmdlineArg (line 55) | CmdlineArg& Cli::GetArg(const std::string& name) const
FILE: Engine/Source/Core/Src/Console.cpp
type Core::Internal (line 13) | namespace Core::Internal {
function SetConsoleSettingFromJsonValue (line 14) | static void SetConsoleSettingFromJsonValue(ConsoleSetting& inConsoleSe...
type Core (line 38) | namespace Core {
function CSFlags (line 62) | CSFlags ConsoleSetting::Flags() const
function Console (line 67) | Console& Console::Get()
function ConsoleSetting (line 80) | ConsoleSetting* Console::FindSetting(const std::string& inName) const
function ConsoleSetting (line 86) | ConsoleSetting& Console::GetSetting(const std::string& inName) const
FILE: Engine/Source/Core/Src/Log.cpp
type Core (line 9) | namespace Core {
function Logger (line 51) | Logger& Logger::Get()
FILE: Engine/Source/Core/Src/Module.cpp
type Core (line 9) | namespace Core {
function ModuleManager (line 27) | ModuleManager& ModuleManager::Get()
function Module (line 35) | Module* ModuleManager::FindOrLoad(const std::string& moduleName)
function Module (line 48) | Module* ModuleManager::Find(const std::string& moduleName)
function Module (line 57) | Module* ModuleManager::GetOrLoad(const std::string& moduleName)
function Module (line 64) | Module* ModuleManager::Get(const std::string& moduleName)
FILE: Engine/Source/Core/Src/Thread.cpp
type Core (line 9) | namespace Core {
function ThreadTag (line 24) | ThreadTag ThreadContext::Tag()
FILE: Engine/Source/Core/Src/Uri.cpp
type Core (line 11) | namespace Core {
function UriProtocol (line 24) | UriProtocol Uri::Protocol() const // NOLINT
FILE: Engine/Source/Core/Test/CmdlineTest.cpp
function TEST (line 20) | TEST(CmdlineTest, BasicTest)
FILE: Engine/Source/Core/Test/ConsoleTest.cpp
function TEST (line 14) | TEST(ConsoleTest, ConsoleSettingTest)
FILE: Engine/Source/Core/Test/UriTest.cpp
function TEST (line 8) | TEST(UriTest, BasicTest)
function TEST (line 16) | TEST(UriTest, FileProtocolTest)
function TEST (line 31) | TEST(UriTest, AssetProtocolTest)
FILE: Engine/Source/Launch/Include/Launch/GameApplication.h
function namespace (line 12) | namespace Launch {
FILE: Engine/Source/Launch/Include/Launch/GameClient.h
function namespace (line 10) | namespace Launch {
FILE: Engine/Source/Launch/Include/Launch/GameViewport.h
function namespace (line 20) | namespace Launch {
FILE: Engine/Source/Launch/Src/GameApplication.cpp
type Launch (line 13) | namespace Launch {
FILE: Engine/Source/Launch/Src/GameClient.cpp
type Launch (line 8) | namespace Launch {
FILE: Engine/Source/Launch/Src/GameViewport.cpp
type Launch::Internal (line 8) | namespace Launch::Internal {
type Launch (line 22) | namespace Launch {
FILE: Engine/Source/Launch/Src/Main.cpp
function main (line 7) | int main(int argc, char* argv[])
FILE: Engine/Source/Mirror/Include/Mirror/Meta.h
function namespace (line 21) | namespace Mirror::Internal {
function namespace (line 24) | namespace Mirror {
FILE: Engine/Source/Mirror/Include/Mirror/Mirror.h
function namespace (line 32) | namespace Mirror {
type TypeInfo (line 39) | struct TypeInfo {
type TypeInfoCompact (line 70) | struct TypeInfoCompact {
type class (line 83) | enum class
type AnyRtti (line 93) | struct AnyRtti {
function TemplateViewId (line 256) | TemplateViewId GetTemplateViewId() const;
function class (line 326) | class MIRROR_API RefInfo {
type MIRROR_API (line 406) | struct MIRROR_API
function IsNull (line 413) | bool IsNull() const;
function IdPresets (line 424) | struct MIRROR_API IdPresets {
function MetaPresets (line 432) | struct MIRROR_API MetaPresets {
type class (line 466) | enum class
function Any (line 478) | Any Get() const;
function Variable (line 2545) | struct JsonSerializer<const Mirror::Variable*> {
function Function (line 2584) | struct JsonSerializer<const Mirror::Function*> {
function Constructor (line 2623) | struct JsonSerializer<const Mirror::Constructor*> {
function Destructor (line 2662) | struct JsonSerializer<const Mirror::Destructor*> {
function MemberVariable (line 2680) | struct JsonSerializer<const Mirror::MemberVariable*> {
function MemberFunction (line 2719) | struct JsonSerializer<const Mirror::MemberFunction*> {
function Mirror (line 2758) | struct JsonSerializer<const Mirror::Class*> {
function EnumValue (line 2774) | struct JsonSerializer<const Mirror::EnumValue*> {
function Mirror (line 2813) | struct JsonSerializer<const Mirror::Enum*> {
function std (line 2830) | static std::string ToStringDyn(const Mirror::Class& clazz, const Mirror:...
function getters (line 4494) | static auto getters = Internal::BuildVariantDynGetterArray<T...>(std::ma...
function constGetters (line 4501) | static auto constGetters = Internal::BuildVariantDynConstGetterArray<T.....
function emplaceFuncs (line 4524) | static auto emplaceFuncs = Internal::BuildVariantDynEmplaceFuncArray<T.....
FILE: Engine/Source/Mirror/Include/Mirror/Registry.h
function namespace (line 12) | namespace Mirror::Internal {
function namespace (line 36) | namespace Mirror {
function namespace (line 136) | namespace Mirror::Internal {
FILE: Engine/Source/Mirror/Src/Mirror.cpp
type Mirror (line 15) | namespace Mirror {
function PointerConvertible (line 16) | bool PointerConvertible(const TypeInfoCompact& inSrcType, const TypeIn...
function PolymorphismConvertible (line 30) | bool PolymorphismConvertible(const TypeInfoCompact& inSrcType, const T...
function Convertible (line 69) | bool Convertible(const TypeInfoCompact& inSrcType, const TypeInfoCompa...
function Any (line 122) | Any& Any::operator=(const Any& inOther)
function Any (line 133) | Any& Any::operator=(Any&& inOther) noexcept
function Any (line 140) | Any& Any::CopyAssign(Any& inOther)
function Any (line 147) | Any& Any::CopyAssign(const Any& inOther)
function Any (line 154) | Any& Any::CopyAssign(Any&& inOther)
function Any (line 161) | Any& Any::MoveAssign(Any& inOther) noexcept
function Any (line 169) | Any& Any::MoveAssign(const Any& inOther) noexcept
function Any (line 177) | Any& Any::MoveAssign(Any&& inOther) noexcept
function Any (line 185) | const Any& Any::CopyAssign(Any& inOther) const
function Any (line 192) | const Any& Any::CopyAssign(const Any& inOther) const
function Any (line 199) | const Any& Any::CopyAssign(Any&& inOther) const
function Any (line 206) | const Any& Any::MoveAssign(Any& inOther) const noexcept
function Any (line 214) | const Any& Any::MoveAssign(const Any& inOther) const noexcept
function Any (line 222) | const Any& Any::MoveAssign(Any&& inOther) const noexcept
function TemplateViewId (line 351) | TemplateViewId Any::GetTemplateViewId() const
function TemplateViewRttiPtr (line 357) | TemplateViewRttiPtr Any::GetTemplateViewRtti() const
function Any (line 374) | Any Any::At(uint32_t inIndex)
function Any (line 380) | Any Any::At(uint32_t inIndex) const
function Any (line 397) | Any Any::Ref()
function Any (line 403) | Any Any::Ref() const
function Any (line 409) | Any Any::ConstRef() const
function Any (line 415) | Any Any::Value() const
function Any (line 421) | Any Any::Ptr()
function Any (line 437) | Any Any::Ptr() const
function Any (line 453) | Any Any::ConstPtr() const
function Any (line 459) | Any Any::Deref() const
function AnyPolicy (line 465) | AnyPolicy Any::Policy() const
function TypeInfo (line 490) | const TypeInfo* Any::Type()
function TypeInfo (line 505) | const TypeInfo* Any::Type() const
function TypeInfo (line 520) | const TypeInfo* Any::RemoveRefType()
function TypeInfo (line 535) | const TypeInfo* Any::RemoveRefType() const
function TypeInfo (line 550) | const TypeInfo* Any::AddPointerType()
function TypeInfo (line 565) | const TypeInfo* Any::AddPointerType() const
function TypeInfo (line 580) | const TypeInfo* Any::RemovePointerType()
function TypeInfo (line 589) | const TypeInfo* Any::RemovePointerType() const
function TypeId (line 603) | TypeId Any::TypeId() const
function Class (line 608) | const Class* Any::GetDynamicClass() const
function Any (line 685) | Any Any::operator[](uint32_t inIndex)
function Any (line 690) | Any Any::operator[](uint32_t inIndex) const
function Argument (line 783) | Argument& Argument::operator=(Any& inAny)
function Argument (line 789) | Argument& Argument::operator=(const Any& inAny)
function Argument (line 795) | Argument& Argument::operator=(Any&& inAny)
function TemplateViewRttiPtr (line 801) | TemplateViewRttiPtr Argument::GetTemplateViewRtti() const
function TypeInfo (line 836) | const TypeInfo* Argument::Type() const
function TypeInfo (line 843) | const TypeInfo* Argument::RemoveRefType() const
function TypeInfo (line 850) | const TypeInfo* Argument::AddPointerType() const
function TypeInfo (line 857) | const TypeInfo* Argument::RemovePointerType() const
function Class (line 864) | const Class* Argument::GetDynamicClass() const
function Id (line 909) | const Id& ReflNode::GetId() const
function Any (line 1011) | Any Variable::Get() const
function Id (line 1021) | const Id& Variable::GetOwnerId() const
function Class (line 1026) | const Class* Variable::GetOwner() const
function FieldAccess (line 1031) | FieldAccess Variable::GetAccess() const
function TypeInfo (line 1037) | const TypeInfo* Variable::GetTypeInfo() const
function Any (line 1047) | Any Variable::GetDyn() const
function Id (line 1070) | const Id& Function::GetOwnerId() const
function Class (line 1075) | const Class* Function::GetOwner() const
function FieldAccess (line 1080) | FieldAccess Function::GetAccess() const
function TypeInfo (line 1091) | const TypeInfo* Function::GetRetTypeInfo() const
function TypeInfo (line 1096) | const TypeInfo* Function::GetArgTypeInfo(const uint8_t argIndex) const
function Any (line 1106) | Any Function::InvokeDyn(const ArgumentList& inArgumentList) const
function Id (line 1132) | const Id& Constructor::GetOwnerId() const
function Class (line 1137) | const Class& Constructor::GetOwner() const
function FieldAccess (line 1143) | FieldAccess Constructor::GetAccess() const
function TypeInfo (line 1154) | const TypeInfo* Constructor::GetArgTypeInfo(const uint8_t argIndex) const
function TypeInfo (line 1164) | const TypeInfo* Constructor::GetArgRemoveRefTypeInfo(uint8_t argIndex)...
function TypeInfo (line 1174) | const TypeInfo* Constructor::GetArgRemovePointerTypeInfo(uint8_t argIn...
function Any (line 1184) | Any Constructor::ConstructDyn(const ArgumentList& arguments) const
function Any (line 1189) | Any Constructor::NewDyn(const ArgumentList& arguments) const
function Any (line 1194) | Any Constructor::InplaceNewDyn(void* ptr, const ArgumentList& argument...
function Id (line 1215) | const Id& Destructor::GetOwnerId() const
function Class (line 1220) | const Class& Destructor::GetOwner() const
function FieldAccess (line 1226) | FieldAccess Destructor::GetAccess() const
function Id (line 1260) | const Id& MemberVariable::GetOwnerId() const
function Class (line 1265) | const Class& MemberVariable::GetOwner() const
function FieldAccess (line 1271) | FieldAccess MemberVariable::GetAccess() const
function TypeInfo (line 1282) | const TypeInfo* MemberVariable::GetTypeInfo() const
function Any (line 1292) | Any MemberVariable::GetDyn(const Argument& object) const
function Id (line 1320) | const Id& MemberFunction::GetOwnerId() const
function Class (line 1325) | const Class& MemberFunction::GetOwner() const
function FieldAccess (line 1331) | FieldAccess MemberFunction::GetAccess() const
function TypeInfo (line 1342) | const TypeInfo* MemberFunction::GetRetTypeInfo() const
function TypeInfo (line 1347) | const TypeInfo* MemberFunction::GetArgTypeInfo(const uint8_t argIndex)...
function Any (line 1357) | Any MemberFunction::InvokeDyn(const Argument& object, const ArgumentLi...
function Variable (line 1366) | Variable& GlobalScope::EmplaceVariable(const Id& inId, Variable::Const...
function Function (line 1372) | Function& GlobalScope::EmplaceFunction(const Id& inId, Function::Const...
function GlobalScope (line 1378) | const GlobalScope& GlobalScope::Get()
function Variable (line 1402) | const Variable* GlobalScope::FindVariable(const Id& inId) const
function Variable (line 1407) | const Variable& GlobalScope::GetVariable(const Id& inId) const
function Function (line 1417) | const Function* GlobalScope::FindFunction(const Id& inId) const
function Function (line 1422) | const Function& GlobalScope::GetFunction(const Id& inId) const
function Class (line 1460) | const Class* Class::Find(const Id& inId)
function Class (line 1466) | const Class& Class::Get(const Id& inId)
function Class (line 1478) | const Class* Class::Find(const TypeInfo* typeInfo)
function Class (line 1484) | const Class& Class::Get(const TypeInfo* typeInfo)
function Class (line 1499) | const Class* Class::Find(const TypeId typeId)
function Class (line 1508) | const Class& Class::Get(TypeId typeId)
function Any (line 1539) | Any Class::InplaceGetObject(void* ptr) const
function Destructor (line 1579) | Destructor& Class::EmplaceDestructor(Destructor::ConstructParams&& inP...
function Constructor (line 1586) | Constructor& Class::EmplaceConstructor(const Id& inId, Constructor::Co...
function Variable (line 1593) | Variable& Class::EmplaceStaticVariable(const Id& inId, Variable::Const...
function Function (line 1600) | Function& Class::EmplaceStaticFunction(const Id& inId, Function::Const...
function MemberVariable (line 1607) | MemberVariable& Class::EmplaceMemberVariable(const Id& inId, MemberVar...
function MemberFunction (line 1614) | MemberFunction& Class::EmplaceMemberFunction(const Id& inId, MemberFun...
function TypeInfo (line 1621) | const TypeInfo* Class::GetTypeInfo() const
function Class (line 1636) | const Class* Class::GetBaseClass() const
function Constructor (line 1658) | const Constructor* Class::FindDefaultConstructor() const
function Constructor (line 1663) | const Constructor& Class::GetDefaultConstructor() const
function Destructor (line 1673) | const Destructor* Class::FindDestructor() const
function Destructor (line 1678) | const Destructor& Class::GetDestructor() const
function Constructor (line 1689) | const Constructor* Class::FindSuitableConstructor(const ArgumentList& ...
function Any (line 1725) | Any Class::ConstructDyn(const ArgumentList& arguments) const
function Any (line 1732) | Any Class::NewDyn(const ArgumentList& arguments) const
function Any (line 1739) | Any Class::InplaceNewDyn(void* ptr, const ArgumentList& arguments) const
function Any (line 1756) | Any Class::Cast(const Argument& objPtrOrRef) const
function Constructor (line 1761) | const Constructor* Class::FindConstructor(const Id& inId) const
function Constructor (line 1767) | const Constructor& Class::GetConstructor(const Id& inId) const
function Variable (line 1779) | const Variable* Class::FindStaticVariable(const Id& inId) const
function Variable (line 1785) | const Variable& Class::GetStaticVariable(const Id& inId) const
function Function (line 1797) | const Function* Class::FindStaticFunction(const Id& inId) const
function Function (line 1803) | const Function& Class::GetStaticFunction(const Id& inId) const
function MemberVariable (line 1815) | const MemberVariable* Class::FindMemberVariable(const Id& inId) const
function MemberVariable (line 1821) | const MemberVariable& Class::GetMemberVariable(const Id& inId) const
function MemberFunction (line 1838) | const MemberFunction* Class::FindMemberFunction(const Id& inId) const
function MemberFunction (line 1844) | const MemberFunction& Class::GetMemberFunction(const Id& inId) const
function Any (line 1851) | Any Class::GetDefaultObject() const
function Any (line 1876) | Any EnumValue::Get() const
function Id (line 1891) | const Id& EnumValue::GetOwnerId() const
function Enum (line 1896) | const Enum* EnumValue::GetOwner() const
function Any (line 1901) | Any EnumValue::GetDyn() const
function Enum (line 1921) | const Enum* Enum::Find(const Id& inId)
function Enum (line 1927) | const Enum& Enum::Get(const Id& inId)
function TypeInfo (line 1943) | const TypeInfo* Enum::GetTypeInfo() const
function EnumValue (line 1953) | const EnumValue* Enum::FindValue(const Id& inId) const
function EnumValue (line 1959) | const EnumValue& Enum::GetValue(const Id& inId) const
function EnumValue (line 1969) | const EnumValue* Enum::FindValue(EnumValue::IntegralValue inValue) const
function EnumValue (line 1979) | const EnumValue& Enum::GetValue(EnumValue::IntegralValue inValue) const
function EnumValue (line 1991) | const EnumValue* Enum::FindValue(const Argument& inArg) const
function EnumValue (line 2001) | const EnumValue& Enum::GetValue(const Argument& inArg) const
function EnumValue (line 2023) | EnumValue& Enum::EmplaceElement(const Id& inId, EnumValue::ConstructPa...
function TypeInfo (line 2037) | const TypeInfo* StdOptionalView::ElementType() const
function Any (line 2047) | Any StdOptionalView::Emplace(const Argument& inTempObj) const
function Any (line 2052) | Any StdOptionalView::EmplaceDefault() const
function Any (line 2062) | Any StdOptionalView::Value() const
function Any (line 2067) | Any StdOptionalView::ConstValue() const
function TypeInfo (line 2079) | const TypeInfo* StdPairView::KeyType() const
function TypeInfo (line 2084) | const TypeInfo* StdPairView::ValueType() const
function Any (line 2089) | Any StdPairView::Key() const
function Any (line 2094) | Any StdPairView::Value() const
function Any (line 2099) | Any StdPairView::ConstKey() const
function Any (line 2104) | Any StdPairView::ConstValue() const
function TypeInfo (line 2121) | const TypeInfo* StdArrayView::ElementType() const
function Any (line 2131) | Any StdArrayView::At(size_t inIndex) const
function Any (line 2136) | Any StdArrayView::ConstAt(size_t inIndex) const
function TypeInfo (line 2148) | const TypeInfo* StdVectorView::ElementType() const
function Any (line 2173) | Any StdVectorView::At(size_t inIndex) const
function Any (line 2178) | Any StdVectorView::ConstAt(size_t inIndex) const
function Any (line 2183) | Any StdVectorView::EmplaceBack(const Argument& inTempObj) const
function Any (line 2188) | Any StdVectorView::EmplaceDefaultBack() const
function TypeInfo (line 2205) | const TypeInfo* StdListView::ElementType() const
function Any (line 2230) | Any StdListView::EmplaceFront(const Argument& inTempObj) const
function Any (line 2235) | Any StdListView::EmplaceBack(const Argument& inTempObj) const
function Any (line 2240) | Any StdListView::EmplaceDefaultFront() const
function Any (line 2245) | Any StdListView::EmplaceDefaultBack() const
function TypeInfo (line 2257) | const TypeInfo* StdUnorderedSetView::ElementType() const
function Any (line 2262) | Any StdUnorderedSetView::CreateElement() const
function TypeInfo (line 2314) | const TypeInfo* StdSetView::ElementType() const
function Any (line 2319) | Any StdSetView::CreateElement() const
function TypeInfo (line 2366) | const TypeInfo* StdUnorderedMapView::KeyType() const
function TypeInfo (line 2371) | const TypeInfo* StdUnorderedMapView::ValueType() const
function Any (line 2376) | Any StdUnorderedMapView::CreateKey() const
function Any (line 2381) | Any StdUnorderedMapView::CreateValue() const
function Any (line 2401) | Any StdUnorderedMapView::At(const Argument& inKey) const
function Any (line 2406) | Any StdUnorderedMapView::ConstAt(const Argument& inKey) const
function Any (line 2411) | Any StdUnorderedMapView::GetOrAdd(const Argument& inKey) const
function TypeInfo (line 2448) | const TypeInfo* StdMapView::KeyType() const
function TypeInfo (line 2453) | const TypeInfo* StdMapView::ValueType() const
function Any (line 2458) | Any StdMapView::CreateKey() const
function Any (line 2463) | Any StdMapView::CreateValue() const
function Any (line 2478) | Any StdMapView::At(const Argument& inKey) const
function Any (line 2483) | Any StdMapView::ConstAt(const Argument& inKey) const
function Any (line 2488) | Any StdMapView::GetOrAdd(const Argument& inKey) const
function TypeInfo (line 2530) | const TypeInfo* StdTupleView::ElementType(size_t inIndex) const
function Any (line 2535) | Any StdTupleView::CreateElement(size_t inIndex) const
function Any (line 2540) | Any StdTupleView::Get(size_t inIndex) const
function TypeInfo (line 2565) | const TypeInfo* StdVariantView::TypeByIndex(size_t inIndex) const
function Any (line 2570) | Any StdVariantView::CreateElement(size_t inIndex) const
function Any (line 2580) | Any StdVariantView::GetElement(size_t inIndex) const
function Any (line 2585) | Any StdVariantView::GetConstElement(size_t inIndex) const
function Any (line 2595) | Any StdVariantView::Emplace(size_t inIndex, const Argument& inTempObj)...
FILE: Engine/Source/Mirror/Src/Registry.cpp
type Mirror::Internal (line 9) | namespace Mirror::Internal {
type Mirror (line 23) | namespace Mirror {
function Registry (line 42) | Registry& Registry::Get()
function GlobalRegistry (line 52) | GlobalRegistry Registry::Global()
function Class (line 57) | Class& Registry::EmplaceClass(const Id& inId, Class::ConstructParams&&...
function Enum (line 63) | Enum& Registry::EmplaceEnum(const Id& inId, Enum::ConstructParams&& in...
FILE: Engine/Source/Mirror/Test/AnyTest.cpp
function AnyCopyAssignTest (line 82) | AnyCopyAssignTest& AnyCopyAssignTest::operator=(const AnyCopyAssignTest&...
function AnyMoveAssignTest (line 98) | AnyMoveAssignTest& AnyMoveAssignTest::operator=(AnyMoveAssignTest&& inOt...
function TEST (line 110) | TEST(AnyTest, DefaultCtorTest)
function TEST (line 122) | TEST(AnyTest, DetorTest)
function TEST (line 136) | TEST(AnyTest, CopyCtorTest)
function TEST (line 153) | TEST(AnyTest, CopyCtorWithPolicyTest)
function TEST (line 178) | TEST(AnyTest, MoveTest)
function TEST (line 191) | TEST(AnyTest, ValueCtorTest)
function TEST (line 212) | TEST(AnyTest, RefCtorTest)
function TEST (line 237) | TEST(AnyTest, CopyAssignTest)
function TEST (line 250) | TEST(AnyTest, MoveAssignTest)
function TEST (line 263) | TEST(AnyTest, ValueCopyAssignTest)
function TEST (line 273) | TEST(AnyTest, ValueMoveAssignTest)
function TEST (line 283) | TEST(AnyTest, ValueAssignTest)
function TEST (line 293) | TEST(AnyTest, RefAssignTest)
function TEST (line 305) | TEST(AnyTest, ConvertibleTest)
function TEST (line 396) | TEST(AnyTest, ConstConvertibleTest)
function TEST (line 480) | TEST(AnyTest, PointerConvertibleTest)
function TEST (line 496) | TEST(AnyTest, PointerConstConvertibleTest)
function TEST (line 512) | TEST(AnyTest, ValueAsTest)
function TEST (line 544) | TEST(AnyTest, ValueConstAsTest)
function TEST (line 563) | TEST(AnyTest, RefAsTest)
function TEST (line 579) | TEST(AnyTest, RefConstAsTest)
function TEST (line 595) | TEST(AnyTest, TryAsTest)
function TEST (line 624) | TEST(AnyTest, ConstTryAsTest)
function TEST (line 653) | TEST(AnyTest, PolyAsTest)
function TEST (line 670) | TEST(AnyTest, ConstPolyAsTest)
function TEST (line 687) | TEST(AnyTest, GetRefTest)
function TEST (line 709) | TEST(AnyTest, ConstGetRefTest)
function TEST (line 736) | TEST(AnyTest, ValueTest)
function TEST (line 758) | TEST(AnyTest, GetPtrTest)
function TEST (line 775) | TEST(AnyTest, ConstGetPtrTest)
function TEST (line 792) | TEST(AnyTest, GetConstPtrTest)
function TEST (line 809) | TEST(AnyTest, DereferenceTest)
function TEST (line 816) | TEST(AnyTest, PolicyTest)
function TEST (line 830) | TEST(AnyTest, TypeIdTest)
function TEST (line 856) | TEST(AnyTest, ConstTypeIdTest)
function TEST (line 882) | TEST(AnyTest, TypeInfoTest)
function TEST (line 907) | TEST(AnyTest, ConstTypeInfoTest)
function TEST (line 932) | TEST(AnyTest, RemoveRefTypeTest)
function TEST (line 957) | TEST(AnyTest, ConstRemoveRefTypeTest)
function TEST (line 982) | TEST(AnyTest, AddPointerTypeTest)
function TEST (line 1020) | TEST(AnyTest, ConstAddPointerTypeTest)
function TEST (line 1058) | TEST(AnyTest, RemovePointerTypeTest)
function TEST (line 1107) | TEST(AnyTest, ConstRemovePointerTypeTest)
function TEST (line 1156) | TEST(AnyTest, ResetAndEmptyTest)
function TEST (line 1165) | TEST(AnyTest, DataTest)
function TEST (line 1180) | TEST(AnyTest, SizeTest)
function TEST (line 1194) | TEST(AnyTest, OperatorBoolTest)
function TEST (line 1211) | TEST(AnyTest, OperatorEqualTest)
function TEST (line 1233) | TEST(AnyTest, ToStringTest)
function TEST (line 1239) | TEST(AnyTest, ArrayTest)
function TEST (line 1279) | TEST(AnyTest, StdOptionalViewTest)
function TEST (line 1293) | TEST(AnyTest, StdPairViewTest)
function TEST (line 1303) | TEST(AnyTest, StdArrayViewTest)
function TEST (line 1315) | TEST(AnyTest, StdVectorViewTest)
function TEST (line 1331) | TEST(AnyTest, StdListViewTest)
function TEST (line 1355) | TEST(AnyTest, StdunorderedSetViewTest)
function TEST (line 1378) | TEST(AnyTest, StdSetViewTest)
function TEST (line 1401) | TEST(AnyTest, StdUnorderedMapViewTest)
function TEST (line 1428) | TEST(AnyTest, StdMapViewTest)
function TEST (line 1455) | TEST(AnyTest, StdTupleViewTest)
FILE: Engine/Source/Mirror/Test/AnyTest.h
type AnyDtorTest (line 12) | struct AnyDtorTest {
type AnyCopyCtorTest (line 22) | struct AnyCopyCtorTest {
type AnyMoveCtorTest (line 30) | struct AnyMoveCtorTest {
type AnyCopyAssignTest (line 37) | struct AnyCopyAssignTest {
type AnyMoveAssignTest (line 45) | struct AnyMoveAssignTest {
type AnyBasicTest (line 53) | struct AnyBasicTest {
type EClass (line 60) | struct EClass
type EClass (line 66) | struct EClass
type EClass (line 72) | struct EClass
type EClass (line 87) | struct EClass
FILE: Engine/Source/Mirror/Test/RegistryTest.cpp
function F0 (line 14) | int F0(const int a, const int b)
function F2 (line 24) | void F2(int& outValue)
function F3 (line 29) | int F3(int&& inValue)
function F4 (line 34) | int F4(int inValue)
function F4 (line 39) | float F4(int inValue, float inRet)
function TEST (line 96) | TEST(RegistryTest, GlobalScopeTest)
function TEST (line 167) | TEST(RegistryTest, ClassTest)
function TEST (line 253) | TEST(RegistryTest, EnumTest)
FILE: Engine/Source/Mirror/Test/RegistryTest.h
type EClass (line 18) | struct EClass
function class (line 30) | class EClass() C1 {
type EClass (line 43) | struct EClass
function EEnum (line 52) | enum class EEnum() E0 {
FILE: Engine/Source/Mirror/Test/SerializationTest.cpp
function gf (line 18) | int gf(int a, int b)
function PerformSerializationTest (line 36) | void PerformSerializationTest(const Common::Path& fileName, const T& obj...
function PerformJsonSerializationTest (line 53) | void PerformJsonSerializationTest(const T& inValue, const std::string& i...
function TEST (line 80) | TEST(SerializationTest, VariableFileTest)
function TEST (line 114) | TEST(SerializationTest, ClassFileTest)
function TEST (line 121) | TEST(SerializationTest, ContainerFileTest)
function TEST (line 135) | TEST(SerializationTest, MetaObjectWithBaseClassTest)
function TEST (line 142) | TEST(SerializationTest, EnumSerializationTest)
function TEST (line 149) | TEST(SerializationTest, ReflNodeSerializationTest)
function TEST (line 182) | TEST(SerializationTest, MetaObjectSerializationTest)
function TEST (line 189) | TEST(SerializationTest, EnumJsonSerializationTest)
function TEST (line 196) | TEST(SerializationTest, MetaTypeJsonSerializationTest)
FILE: Engine/Source/Mirror/Test/SerializationTest.h
type class (line 14) | enum class
type EClass (line 26) | struct EClass
type EClass (line 41) | struct EClass
type EClass (line 60) | struct EClass
type EClass (line 72) | struct EClass
FILE: Engine/Source/Mirror/Test/TypeInfoTest.cpp
function Add (line 10) | int Add(const int a, const int b)
type TestClass (line 15) | struct TestClass {
method Add (line 18) | int Add(const int b) const
function AssertTypeIdEq (line 25) | void AssertTypeIdEq()
function AssertTypeIdNe (line 31) | void AssertTypeIdNe()
function TEST (line 36) | TEST(TypeTest, TypeInfoTest)
function TEST (line 54) | TEST(TypeTest, TypeTraitsTest)
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/BindGroup.h
function namespace (line 14) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/BindGroupLayout.h
function namespace (line 11) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Buffer.h
function namespace (line 14) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/BufferView.h
function namespace (line 14) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/CommandBuffer.h
function namespace (line 18) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/CommandRecorder.h
function namespace (line 9) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h
function namespace (line 17) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/DX12RHIModule.h
function namespace (line 10) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Device.h
function namespace (line 20) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Gpu.h
function namespace (line 15) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Instance.h
function namespace (line 21) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Pipeline.h
function namespace (line 13) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/PipelineLayout.h
function namespace (line 16) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Queue.h
function namespace (line 14) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Sampler.h
function namespace (line 13) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/ShaderModule.h
function namespace (line 11) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Surface.h
function namespace (line 11) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/SwapChain.h
function namespace (line 13) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Synchronous.h
function namespace (line 17) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Texture.h
function namespace (line 12) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/TextureView.h
function namespace (line 13) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Src/BindGroup.cpp
type RHI::DirectX12 (line 12) | namespace RHI::DirectX12 {
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 13) | static CD3DX12_CPU_DESCRIPTOR_HANDLE GetDescriptorCpuHandle(const Bind...
function DX12BindGroupLayout (line 44) | DX12BindGroupLayout& DX12BindGroup::GetBindGroupLayout() const
type RHI::DirectX12 (line 35) | namespace RHI::DirectX12 {
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 13) | static CD3DX12_CPU_DESCRIPTOR_HANDLE GetDescriptorCpuHandle(const Bind...
function DX12BindGroupLayout (line 44) | DX12BindGroupLayout& DX12BindGroup::GetBindGroupLayout() const
FILE: Engine/Source/RHI-DirectX12/Src/BindGroupLayout.cpp
type RHI::DirectX12 (line 8) | namespace RHI::DirectX12 {
function D3D12_SHADER_VISIBILITY (line 9) | D3D12_SHADER_VISIBILITY GetShaderVisibility(const ShaderStageFlags sha...
type RHI::DirectX12 (line 21) | namespace RHI::DirectX12 {
function D3D12_SHADER_VISIBILITY (line 9) | D3D12_SHADER_VISIBILITY GetShaderVisibility(const ShaderStageFlags sha...
FILE: Engine/Source/RHI-DirectX12/Src/Buffer.cpp
type RHI::DirectX12 (line 16) | namespace RHI::DirectX12 {
function D3D12_HEAP_TYPE (line 17) | static D3D12_HEAP_TYPE GetDX12HeapType(const BufferUsageFlags bufferUs...
function D3D12_RESOURCE_FLAGS (line 33) | static D3D12_RESOURCE_FLAGS GetDX12ResourceFlag(const BufferUsageFlags...
function MapMode (line 48) | static MapMode GetMapMode(BufferUsageFlags bufferUsages)
function ID3D12Resource (line 96) | ID3D12Resource* DX12Buffer::GetNative() const
function BufferUsageFlags (line 101) | BufferUsageFlags DX12Buffer::GetUsages() const
function DX12Device (line 106) | DX12Device& DX12Buffer::GetDevice() const
type RHI::DirectX12 (line 64) | namespace RHI::DirectX12 {
function D3D12_HEAP_TYPE (line 17) | static D3D12_HEAP_TYPE GetDX12HeapType(const BufferUsageFlags bufferUs...
function D3D12_RESOURCE_FLAGS (line 33) | static D3D12_RESOURCE_FLAGS GetDX12ResourceFlag(const BufferUsageFlags...
function MapMode (line 48) | static MapMode GetMapMode(BufferUsageFlags bufferUsages)
function ID3D12Resource (line 96) | ID3D12Resource* DX12Buffer::GetNative() const
function BufferUsageFlags (line 101) | BufferUsageFlags DX12Buffer::GetUsages() const
function DX12Device (line 106) | DX12Device& DX12Buffer::GetDevice() const
FILE: Engine/Source/RHI-DirectX12/Src/BufferView.cpp
type RHI::DirectX12 (line 12) | namespace RHI::DirectX12 {
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 21) | CD3DX12_CPU_DESCRIPTOR_HANDLE DX12BufferView::GetNativeCpuDescriptorHa...
function D3D12_VERTEX_BUFFER_VIEW (line 26) | const D3D12_VERTEX_BUFFER_VIEW& DX12BufferView::GetNativeVertexBufferV...
function D3D12_INDEX_BUFFER_VIEW (line 31) | const D3D12_INDEX_BUFFER_VIEW& DX12BufferView::GetNativeIndexBufferVie...
FILE: Engine/Source/RHI-DirectX12/Src/CommandBuffer.cpp
type RHI::DirectX12 (line 11) | namespace RHI::DirectX12 {
function ID3D12DescriptorHeap (line 35) | ID3D12DescriptorHeap* RuntimeDescriptorHeap::GetNative() const
function CD3DX12_GPU_DESCRIPTOR_HANDLE (line 40) | CD3DX12_GPU_DESCRIPTOR_HANDLE RuntimeDescriptorHeap::NewGpuDescriptorH...
function CD3DX12_GPU_DESCRIPTOR_HANDLE (line 76) | CD3DX12_GPU_DESCRIPTOR_HANDLE RuntimeDescriptorCompact::NewGpuDescript...
function ID3D12CommandAllocator (line 100) | ID3D12CommandAllocator* DX12CommandBuffer::GetNativeAllocator() const
function ID3D12GraphicsCommandList (line 105) | ID3D12GraphicsCommandList* DX12CommandBuffer::GetNativeCmdList() const
function RuntimeDescriptorCompact (line 110) | RuntimeDescriptorCompact* DX12CommandBuffer::GetRuntimeDescriptorHeaps...
FILE: Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp
type RHI::DirectX12 (line 22) | namespace RHI::DirectX12 {
function D3D12_CLEAR_FLAGS (line 23) | static D3D12_CLEAR_FLAGS GetDX12ClearFlags(const DepthStencilAttachmen...
function GetNativeSubResourceIndex (line 36) | static size_t GetNativeSubResourceIndex(const DX12Texture& texture, co...
function CD3DX12_TEXTURE_COPY_LOCATION (line 42) | static CD3DX12_TEXTURE_COPY_LOCATION GetNativeTextureCopyLocation(cons...
function CD3DX12_TEXTURE_COPY_LOCATION (line 47) | static CD3DX12_TEXTURE_COPY_LOCATION GetNativeBufferCopyLocationFromTe...
function D3D12_BOX (line 61) | static D3D12_BOX GetNativeBox(const Common::UVec3& origin, const Commo...
type RHI::DirectX12 (line 74) | namespace RHI::DirectX12 {
function D3D12_CLEAR_FLAGS (line 23) | static D3D12_CLEAR_FLAGS GetDX12ClearFlags(const DepthStencilAttachmen...
function GetNativeSubResourceIndex (line 36) | static size_t GetNativeSubResourceIndex(const DX12Texture& texture, co...
function CD3DX12_TEXTURE_COPY_LOCATION (line 42) | static CD3DX12_TEXTURE_COPY_LOCATION GetNativeTextureCopyLocation(cons...
function CD3DX12_TEXTURE_COPY_LOCATION (line 47) | static CD3DX12_TEXTURE_COPY_LOCATION GetNativeBufferCopyLocationFromTe...
function D3D12_BOX (line 61) | static D3D12_BOX GetNativeBox(const Common::UVec3& origin, const Commo...
FILE: Engine/Source/RHI-DirectX12/Src/Common.cpp
type RHI::DirectX12 (line 7) | namespace RHI::DirectX12 {
FILE: Engine/Source/RHI-DirectX12/Src/DX12RHIModule.cpp
type RHI::DirectX12 (line 8) | namespace RHI::DirectX12 {
function Instance (line 28) | Instance* DX12RHIModule::GetRHIInstance() // NOLINT
FILE: Engine/Source/RHI-DirectX12/Src/Device.cpp
type RHI::DirectX12 (line 29) | namespace RHI::DirectX12 {
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 43) | const CD3DX12_CPU_DESCRIPTOR_HANDLE& DescriptorAllocation::GetCpuHandl...
function ID3D12DescriptorHeap (line 48) | ID3D12DescriptorHeap* DescriptorAllocation::GetNativeDescriptorHeap() ...
function DX12Gpu (line 172) | DX12Gpu& DX12Device::GetGpu() const
function Queue (line 177) | Queue* DX12Device::GetQueue(const QueueType inType, const size_t inIndex)
function TextureSubResourceCopyFootprint (line 264) | TextureSubResourceCopyFootprint DX12Device::GetTextureSubResourceCopyF...
function ID3D12Device (line 284) | ID3D12Device* DX12Device::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/Gpu.cpp
type RHI::DirectX12 (line 9) | namespace RHI::DirectX12 {
function GpuProperty (line 18) | GpuProperty DX12Gpu::GetProperty()
function DX12Instance (line 30) | DX12Instance& DX12Gpu::GetInstance() const
function IDXGIAdapter1 (line 35) | IDXGIAdapter1* DX12Gpu::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/Instance.cpp
type RHI::DirectX12 (line 11) | namespace RHI::DirectX12 {
function LONG (line 13) | static LONG __stdcall DX12VectoredExceptionHandler(EXCEPTION_POINTERS*...
function RHIType (line 45) | RHIType DX12Instance::GetRHIType()
function IDXGIFactory4 (line 50) | IDXGIFactory4* DX12Instance::GetNative() const
function Gpu (line 120) | Gpu* DX12Instance::GetGpu(const uint32_t index)
type RHI::DirectX12 (line 26) | namespace RHI::DirectX12 {
function LONG (line 13) | static LONG __stdcall DX12VectoredExceptionHandler(EXCEPTION_POINTERS*...
function RHIType (line 45) | RHIType DX12Instance::GetRHIType()
function IDXGIFactory4 (line 50) | IDXGIFactory4* DX12Instance::GetNative() const
function Gpu (line 120) | Gpu* DX12Instance::GetGpu(const uint32_t index)
FILE: Engine/Source/RHI-DirectX12/Src/Pipeline.cpp
type RHI::DirectX12 (line 14) | namespace RHI::DirectX12 {
function D3D12_RENDER_TARGET_BLEND_DESC (line 15) | D3D12_RENDER_TARGET_BLEND_DESC GetDX12RenderTargetBlendDesc(const Colo...
function CD3DX12_RASTERIZER_DESC (line 30) | CD3DX12_RASTERIZER_DESC GetDX12RasterizerDesc(const RasterPipelineCrea...
function CD3DX12_BLEND_DESC (line 47) | CD3DX12_BLEND_DESC GetDX12BlendDesc(const RasterPipelineCreateInfo& cr...
function D3D12_DEPTH_STENCILOP_DESC (line 60) | D3D12_DEPTH_STENCILOP_DESC GetDX12DepthStencilOpDesc(const StencilFace...
function CD3DX12_DEPTH_STENCIL_DESC (line 70) | CD3DX12_DEPTH_STENCIL_DESC GetDX12DepthStencilDesc(const RasterPipelin...
function DXGI_SAMPLE_DESC (line 84) | DXGI_SAMPLE_DESC GetDX12SampleDesc(const RasterPipelineCreateInfo& cre...
function UINT (line 92) | UINT GetDX12SampleMask(const RasterPipelineCreateInfo& createInfo)
function UpdateDX12RenderTargetsDesc (line 97) | void UpdateDX12RenderTargetsDesc(D3D12_GRAPHICS_PIPELINE_STATE_DESC& d...
function UpdateDX12DepthStencilTargetDesc (line 106) | void UpdateDX12DepthStencilTargetDesc(D3D12_GRAPHICS_PIPELINE_STATE_DE...
function GetDX12InputElements (line 114) | std::vector<D3D12_INPUT_ELEMENT_DESC> GetDX12InputElements(const Raste...
function UpdateDX12InputLayoutDesc (line 139) | void UpdateDX12InputLayoutDesc(D3D12_GRAPHICS_PIPELINE_STATE_DESC& des...
function DX12PipelineLayout (line 155) | DX12PipelineLayout& DX12ComputePipeline::GetPipelineLayout() const
function ID3D12PipelineState (line 160) | ID3D12PipelineState* DX12ComputePipeline::GetNative() const
function DX12PipelineLayout (line 190) | DX12PipelineLayout& DX12RasterPipeline::GetPipelineLayout() const
function ID3D12PipelineState (line 195) | ID3D12PipelineState* DX12RasterPipeline::GetNative() const
type RHI::DirectX12 (line 146) | namespace RHI::DirectX12 {
function D3D12_RENDER_TARGET_BLEND_DESC (line 15) | D3D12_RENDER_TARGET_BLEND_DESC GetDX12RenderTargetBlendDesc(const Colo...
function CD3DX12_RASTERIZER_DESC (line 30) | CD3DX12_RASTERIZER_DESC GetDX12RasterizerDesc(const RasterPipelineCrea...
function CD3DX12_BLEND_DESC (line 47) | CD3DX12_BLEND_DESC GetDX12BlendDesc(const RasterPipelineCreateInfo& cr...
function D3D12_DEPTH_STENCILOP_DESC (line 60) | D3D12_DEPTH_STENCILOP_DESC GetDX12DepthStencilOpDesc(const StencilFace...
function CD3DX12_DEPTH_STENCIL_DESC (line 70) | CD3DX12_DEPTH_STENCIL_DESC GetDX12DepthStencilDesc(const RasterPipelin...
function DXGI_SAMPLE_DESC (line 84) | DXGI_SAMPLE_DESC GetDX12SampleDesc(const RasterPipelineCreateInfo& cre...
function UINT (line 92) | UINT GetDX12SampleMask(const RasterPipelineCreateInfo& createInfo)
function UpdateDX12RenderTargetsDesc (line 97) | void UpdateDX12RenderTargetsDesc(D3D12_GRAPHICS_PIPELINE_STATE_DESC& d...
function UpdateDX12DepthStencilTargetDesc (line 106) | void UpdateDX12DepthStencilTargetDesc(D3D12_GRAPHICS_PIPELINE_STATE_DE...
function GetDX12InputElements (line 114) | std::vector<D3D12_INPUT_ELEMENT_DESC> GetDX12InputElements(const Raste...
function UpdateDX12InputLayoutDesc (line 139) | void UpdateDX12InputLayoutDesc(D3D12_GRAPHICS_PIPELINE_STATE_DESC& des...
function DX12PipelineLayout (line 155) | DX12PipelineLayout& DX12ComputePipeline::GetPipelineLayout() const
function ID3D12PipelineState (line 160) | ID3D12PipelineState* DX12ComputePipeline::GetNative() const
function DX12PipelineLayout (line 190) | DX12PipelineLayout& DX12RasterPipeline::GetPipelineLayout() const
function ID3D12PipelineState (line 195) | ID3D12PipelineState* DX12RasterPipeline::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/PipelineLayout.cpp
type RHI::DirectX12 (line 14) | namespace RHI::DirectX12 {
function ID3D12RootSignature (line 43) | ID3D12RootSignature* DX12PipelineLayout::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/Queue.cpp
type RHI::DirectX12 (line 12) | namespace RHI::DirectX12 {
function ID3D12CommandQueue (line 47) | ID3D12CommandQueue* DX12Queue::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/Sampler.cpp
type RHI::DirectX12 (line 9) | namespace RHI::DirectX12 {
function D3D12_FILTER (line 10) | static D3D12_FILTER GetDX12Filter(const SamplerCreateInfo& createInfo)
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 36) | CD3DX12_CPU_DESCRIPTOR_HANDLE DX12Sampler::GetNativeCpuDescriptorHandl...
type RHI::DirectX12 (line 27) | namespace RHI::DirectX12 {
function D3D12_FILTER (line 10) | static D3D12_FILTER GetDX12Filter(const SamplerCreateInfo& createInfo)
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 36) | CD3DX12_CPU_DESCRIPTOR_HANDLE DX12Sampler::GetNativeCpuDescriptorHandl...
FILE: Engine/Source/RHI-DirectX12/Src/ShaderModule.cpp
type RHI::DirectX12 (line 7) | namespace RHI::DirectX12 {
function D3D12_SHADER_BYTECODE (line 22) | const D3D12_SHADER_BYTECODE& DX12ShaderModule::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/Surface.cpp
type RHI::DirectX12 (line 7) | namespace RHI::DirectX12 {
function HWND (line 16) | HWND DX12Surface::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/SwapChain.cpp
type RHI::DirectX12 (line 17) | namespace RHI::DirectX12 {
function GetSyncInterval (line 18) | static uint8_t GetSyncInterval(PresentMode presentMode)
function Texture (line 43) | Texture* DX12SwapChain::GetTexture(uint8_t inIndex)
type RHI::DirectX12 (line 24) | namespace RHI::DirectX12 {
function GetSyncInterval (line 18) | static uint8_t GetSyncInterval(PresentMode presentMode)
function Texture (line 43) | Texture* DX12SwapChain::GetTexture(uint8_t inIndex)
FILE: Engine/Source/RHI-DirectX12/Src/Synchronous.cpp
type RHI::DirectX12 (line 9) | namespace RHI::DirectX12 {
function ID3D12Fence (line 39) | ID3D12Fence* DX12Fence::GetNative() const
function ID3D12Fence (line 61) | ID3D12Fence* DX12Semaphore::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/Texture.cpp
type RHI::DirectX12 (line 12) | namespace RHI::DirectX12 {
function ID3D12Resource (line 34) | ID3D12Resource* DX12Texture::GetNative() const
FILE: Engine/Source/RHI-DirectX12/Src/TextureView.cpp
type RHI::DirectX12 (line 11) | namespace RHI::DirectX12 {
function IsShaderResource (line 12) | static bool IsShaderResource(const TextureViewType type)
function IsUnorderedAccess (line 17) | static bool IsUnorderedAccess(const TextureViewType type)
function IsRenderTarget (line 22) | static bool IsRenderTarget(const TextureViewType type)
function IsDepthStencil (line 27) | static bool IsDepthStencil(const TextureViewType type)
function FillTexture1DSRV (line 32) | static void FillTexture1DSRV(D3D12_TEX1D_SRV& srv, const TextureViewCr...
function FillTexture2DSRV (line 42) | static void FillTexture2DSRV(D3D12_TEX2D_SRV& srv, const TextureViewCr...
function FillTexture2DArraySRV (line 53) | static void FillTexture2DArraySRV(D3D12_TEX2D_ARRAY_SRV& srv, const Te...
function FillTextureCubeSRV (line 66) | static void FillTextureCubeSRV(D3D12_TEXCUBE_SRV& srv, const TextureVi...
function FillTextureCubeArraySRV (line 76) | static void FillTextureCubeArraySRV(D3D12_TEXCUBE_ARRAY_SRV& srv, cons...
function FillTexture3DSRV (line 88) | static void FillTexture3DSRV(D3D12_TEX3D_SRV& srv, const TextureViewCr...
function FillTexture1DUAV (line 98) | static void FillTexture1DUAV(D3D12_TEX1D_UAV& uav, const TextureViewCr...
function FillTexture2DUAV (line 106) | static void FillTexture2DUAV(D3D12_TEX2D_UAV& uav, const TextureViewCr...
function FillTexture2DArrayUAV (line 115) | static void FillTexture2DArrayUAV(D3D12_TEX2D_ARRAY_UAV& uav, const Te...
function FillTexture3DUAV (line 126) | static void FillTexture3DUAV(D3D12_TEX3D_UAV& uav, const TextureViewCr...
function FillTexture1DRTV (line 136) | static void FillTexture1DRTV(D3D12_TEX1D_RTV& rtv, const TextureViewCr...
function FillTexture2DRTV (line 144) | static void FillTexture2DRTV(D3D12_TEX2D_RTV& rtv, const TextureViewCr...
function FillTexture2DArrayRTV (line 153) | static void FillTexture2DArrayRTV(D3D12_TEX2D_ARRAY_RTV& rtv, const Te...
function FillTexture3DRTV (line 164) | static void FillTexture3DRTV(D3D12_TEX3D_RTV& rtv, const TextureViewCr...
function FillTexture1DDSV (line 174) | static void FillTexture1DDSV(D3D12_TEX1D_DSV& dsv, const TextureViewCr...
function FillTexture2DDSV (line 182) | static void FillTexture2DDSV(D3D12_TEX2D_DSV& dsv, const TextureViewCr...
function FillTexture2DArrayDSV (line 190) | static void FillTexture2DArrayDSV(D3D12_TEX2D_ARRAY_DSV& dsv, const Te...
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 212) | CD3DX12_CPU_DESCRIPTOR_HANDLE DX12TextureView::GetNativeCpuDescriptorH...
type RHI::DirectX12 (line 201) | namespace RHI::DirectX12 {
function IsShaderResource (line 12) | static bool IsShaderResource(const TextureViewType type)
function IsUnorderedAccess (line 17) | static bool IsUnorderedAccess(const TextureViewType type)
function IsRenderTarget (line 22) | static bool IsRenderTarget(const TextureViewType type)
function IsDepthStencil (line 27) | static bool IsDepthStencil(const TextureViewType type)
function FillTexture1DSRV (line 32) | static void FillTexture1DSRV(D3D12_TEX1D_SRV& srv, const TextureViewCr...
function FillTexture2DSRV (line 42) | static void FillTexture2DSRV(D3D12_TEX2D_SRV& srv, const TextureViewCr...
function FillTexture2DArraySRV (line 53) | static void FillTexture2DArraySRV(D3D12_TEX2D_ARRAY_SRV& srv, const Te...
function FillTextureCubeSRV (line 66) | static void FillTextureCubeSRV(D3D12_TEXCUBE_SRV& srv, const TextureVi...
function FillTextureCubeArraySRV (line 76) | static void FillTextureCubeArraySRV(D3D12_TEXCUBE_ARRAY_SRV& srv, cons...
function FillTexture3DSRV (line 88) | static void FillTexture3DSRV(D3D12_TEX3D_SRV& srv, const TextureViewCr...
function FillTexture1DUAV (line 98) | static void FillTexture1DUAV(D3D12_TEX1D_UAV& uav, const TextureViewCr...
function FillTexture2DUAV (line 106) | static void FillTexture2DUAV(D3D12_TEX2D_UAV& uav, const TextureViewCr...
function FillTexture2DArrayUAV (line 115) | static void FillTexture2DArrayUAV(D3D12_TEX2D_ARRAY_UAV& uav, const Te...
function FillTexture3DUAV (line 126) | static void FillTexture3DUAV(D3D12_TEX3D_UAV& uav, const TextureViewCr...
function FillTexture1DRTV (line 136) | static void FillTexture1DRTV(D3D12_TEX1D_RTV& rtv, const TextureViewCr...
function FillTexture2DRTV (line 144) | static void FillTexture2DRTV(D3D12_TEX2D_RTV& rtv, const TextureViewCr...
function FillTexture2DArrayRTV (line 153) | static void FillTexture2DArrayRTV(D3D12_TEX2D_ARRAY_RTV& rtv, const Te...
function FillTexture3DRTV (line 164) | static void FillTexture3DRTV(D3D12_TEX3D_RTV& rtv, const TextureViewCr...
function FillTexture1DDSV (line 174) | static void FillTexture1DDSV(D3D12_TEX1D_DSV& dsv, const TextureViewCr...
function FillTexture2DDSV (line 182) | static void FillTexture2DDSV(D3D12_TEX2D_DSV& dsv, const TextureViewCr...
function FillTexture2DArrayDSV (line 190) | static void FillTexture2DArrayDSV(D3D12_TEX2D_ARRAY_DSV& dsv, const Te...
function CD3DX12_CPU_DESCRIPTOR_HANDLE (line 212) | CD3DX12_CPU_DESCRIPTOR_HANDLE DX12TextureView::GetNativeCpuDescriptorH...
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/BindGroup.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/BindGroupLayout.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Buffer.h
function namespace (line 10) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/BufferView.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/CommandBuffer.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/CommandRecorder.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Device.h
function namespace (line 10) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/DummyRHIModule.h
function namespace (line 10) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Gpu.h
function namespace (line 10) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Instance.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Pipeline.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/PipelineLayout.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Queue.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Sampler.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/ShaderModule.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Surface.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/SwapChain.h
function namespace (line 11) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Synchronous.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/Texture.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Include/RHI/Dummy/TextureView.h
function namespace (line 9) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/BindGroup.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/BindGroupLayout.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/Buffer.cpp
type RHI::Dummy (line 8) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/BufferView.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/CommandBuffer.cpp
type RHI::Dummy (line 8) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/Device.cpp
type RHI::Dummy (line 21) | namespace RHI::Dummy {
function DummyGpu (line 31) | DummyGpu& DummyDevice::GetGpu() const
function Queue (line 41) | Queue* DummyDevice::GetQueue(const QueueType type, const size_t index)
function TextureSubResourceCopyFootprint (line 122) | TextureSubResourceCopyFootprint DummyDevice::GetTextureSubResourceCopy...
FILE: Engine/Source/RHI-Dummy/Src/DummyRHIModule.cpp
type RHI::Dummy (line 8) | namespace RHI::Dummy {
function Instance (line 28) | Instance* DummyRHIModule::GetRHIInstance() // NOLINT
FILE: Engine/Source/RHI-Dummy/Src/Gpu.cpp
type RHI::Dummy (line 8) | namespace RHI::Dummy {
function GpuProperty (line 16) | GpuProperty DummyGpu::GetProperty()
function DummyInstance (line 26) | DummyInstance& DummyGpu::GetInstance() const
FILE: Engine/Source/RHI-Dummy/Src/Instance.cpp
type RHI::Dummy (line 9) | namespace RHI::Dummy {
function RHIType (line 19) | RHIType DummyInstance::GetRHIType()
function Gpu (line 29) | Gpu* DummyInstance::GetGpu(const uint32_t index)
FILE: Engine/Source/RHI-Dummy/Src/Pipeline.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/PipelineLayout.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/Queue.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/Sampler.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/ShaderModule.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/Surface.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/SwapChain.cpp
type RHI::Dummy (line 9) | namespace RHI::Dummy {
function Texture (line 26) | Texture* DummySwapChain::GetTexture(uint8_t index)
FILE: Engine/Source/RHI-Dummy/Src/Synchronous.cpp
type RHI::Dummy (line 8) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/Texture.cpp
type RHI::Dummy (line 8) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Dummy/Src/TextureView.cpp
type RHI::Dummy (line 7) | namespace RHI::Dummy {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/BindGroup.h
function namespace (line 12) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/BindGroupLayout.h
function namespace (line 12) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Buffer.h
function namespace (line 13) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/BufferView.h
function namespace (line 9) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/CommandBuffer.h
function namespace (line 13) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/CommandRecorder.h
function namespace (line 11) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h
function namespace (line 13) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Device.h
function namespace (line 17) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Gpu.h
function namespace (line 12) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Instance.h
function namespace (line 14) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Pipeline.h
function namespace (line 11) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/PipelineLayout.h
function namespace (line 11) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Queue.h
function namespace (line 12) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Sampler.h
function namespace (line 12) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/ShaderModule.h
function namespace (line 13) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Surface.h
function namespace (line 11) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/SwapChain.h
function namespace (line 13) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Synchronous.h
function namespace (line 11) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Texture.h
function namespace (line 15) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/TextureView.h
function namespace (line 14) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/VulkanRHIModule.h
function namespace (line 10) | namespace RHI::Vulkan {
FILE: Engine/Source/RHI-Vulkan/Src/BindGroup.cpp
type RHI::Vulkan (line 14) | namespace RHI::Vulkan {
function VkDescriptorSet (line 30) | VkDescriptorSet VulkanBindGroup::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/BindGroupLayout.cpp
type RHI::Vulkan (line 10) | namespace RHI::Vulkan {
function VkDescriptorSetLayout (line 25) | VkDescriptorSetLayout VulkanBindGroupLayout::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/Buffer.cpp
type RHI::Vulkan (line 14) | namespace RHI::Vulkan {
function VkBuffer (line 90) | VkBuffer VulkanBuffer::GetNative() const
function BufferUsageFlags (line 95) | BufferUsageFlags VulkanBuffer::GetUsages() const
FILE: Engine/Source/RHI-Vulkan/Src/BufferView.cpp
type RHI::Vulkan (line 10) | namespace RHI::Vulkan {
function IsIndexBuffer (line 11) | static bool IsIndexBuffer(const BufferUsageFlags bufferUsages)
function IndexFormat (line 46) | IndexFormat VulkanBufferView::GetIndexFormat() const
function VulkanBuffer (line 51) | VulkanBuffer& VulkanBufferView::GetBuffer() const
type RHI::Vulkan (line 17) | namespace RHI::Vulkan {
function IsIndexBuffer (line 11) | static bool IsIndexBuffer(const BufferUsageFlags bufferUsages)
function IndexFormat (line 46) | IndexFormat VulkanBufferView::GetIndexFormat() const
function VulkanBuffer (line 51) | VulkanBuffer& VulkanBufferView::GetBuffer() const
FILE: Engine/Source/RHI-Vulkan/Src/CommandBuffer.cpp
type RHI::Vulkan (line 10) | namespace RHI::Vulkan {
function VkCommandBuffer (line 37) | VkCommandBuffer VulkanCommandBuffer::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp
type RHI::Vulkan (line 20) | namespace RHI::Vulkan {
function VkAccessFlags (line 21) | static VkAccessFlags GetBufferMemoryBarrierAccessFlags(const BufferSta...
function VkPipelineStageFlags (line 35) | static VkPipelineStageFlags GetBufferPipelineBarrierSrcStage(const Buf...
function VkPipelineStageFlags (line 50) | static VkPipelineStageFlags GetBufferPipelineBarrierDstStage(const Buf...
function VkAccessFlags (line 64) | static VkAccessFlags GetTextureMemoryBarrierAccessFlags(const TextureS...
function VkPipelineStageFlags (line 80) | static VkPipelineStageFlags GetTexturePipelineBarrierSrcStage(const Te...
function VkPipelineStageFlags (line 96) | static VkPipelineStageFlags GetTexturePipelineBarrierDstStage(const Te...
function VkImageLayout (line 112) | static VkImageLayout GetTextureLayout(const TextureState inState)
function VkImageSubresourceLayers (line 128) | static VkImageSubresourceLayers GetNativeImageSubResourceLayers(const ...
function VkBufferImageCopy (line 138) | static VkBufferImageCopy GetNativeBufferImageCopy(Device& device, cons...
type RHI::Vulkan (line 157) | namespace RHI::Vulkan {
function VkAccessFlags (line 21) | static VkAccessFlags GetBufferMemoryBarrierAccessFlags(const BufferSta...
function VkPipelineStageFlags (line 35) | static VkPipelineStageFlags GetBufferPipelineBarrierSrcStage(const Buf...
function VkPipelineStageFlags (line 50) | static VkPipelineStageFlags GetBufferPipelineBarrierDstStage(const Buf...
function VkAccessFlags (line 64) | static VkAccessFlags GetTextureMemoryBarrierAccessFlags(const TextureS...
function VkPipelineStageFlags (line 80) | static VkPipelineStageFlags GetTexturePipelineBarrierSrcStage(const Te...
function VkPipelineStageFlags (line 96) | static VkPipelineStageFlags GetTexturePipelineBarrierDstStage(const Te...
function VkImageLayout (line 112) | static VkImageLayout GetTextureLayout(const TextureState inState)
function VkImageSubresourceLayers (line 128) | static VkImageSubresourceLayers GetNativeImageSubResourceLayers(const ...
function VkBufferImageCopy (line 138) | static VkBufferImageCopy GetNativeBufferImageCopy(Device& device, cons...
FILE: Engine/Source/RHI-Vulkan/Src/Device.cpp
type RHI::Vulkan (line 26) | namespace RHI::Vulkan {
function VulkanGpu (line 63) | VulkanGpu& VulkanDevice::GetGpu() const
function Queue (line 73) | Queue* VulkanDevice::GetQueue(QueueType inType, size_t inIndex)
function TextureSubResourceCopyFootprint (line 170) | TextureSubResourceCopyFootprint VulkanDevice::GetTextureSubResourceCop...
function VkDevice (line 183) | VkDevice VulkanDevice::GetNative() const
function VmaAllocator (line 317) | VmaAllocator& VulkanDevice::GetNativeAllocator()
type RHI::Vulkan (line 43) | namespace RHI::Vulkan {
function VulkanGpu (line 63) | VulkanGpu& VulkanDevice::GetGpu() const
function Queue (line 73) | Queue* VulkanDevice::GetQueue(QueueType inType, size_t inIndex)
function TextureSubResourceCopyFootprint (line 170) | TextureSubResourceCopyFootprint VulkanDevice::GetTextureSubResourceCop...
function VkDevice (line 183) | VkDevice VulkanDevice::GetNative() const
function VmaAllocator (line 317) | VmaAllocator& VulkanDevice::GetNativeAllocator()
FILE: Engine/Source/RHI-Vulkan/Src/Gpu.cpp
type RHI::Vulkan (line 9) | namespace RHI::Vulkan {
function GpuProperty (line 18) | GpuProperty VulkanGpu::GetProperty()
function VulkanInstance (line 35) | VulkanInstance& VulkanGpu::GetInstance() const
function VkPhysicalDevice (line 40) | VkPhysicalDevice VulkanGpu::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/Instance.cpp
type RHI::Vulkan (line 15) | namespace RHI::Vulkan {
function VKAPI_ATTR (line 35) | static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(
function PopulateDebugMessengerCreateInfo (line 46) | void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoE...
function RHIType (line 86) | RHIType VulkanInstance::GetRHIType()
function Gpu (line 171) | Gpu* VulkanInstance::GetGpu(const uint32_t inIndex)
function VkInstance (line 176) | VkInstance VulkanInstance::GetNative() const
type RHI::Vulkan (line 58) | namespace RHI::Vulkan {
function VKAPI_ATTR (line 35) | static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(
function PopulateDebugMessengerCreateInfo (line 46) | void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoE...
function RHIType (line 86) | RHIType VulkanInstance::GetRHIType()
function Gpu (line 171) | Gpu* VulkanInstance::GetGpu(const uint32_t inIndex)
function VkInstance (line 176) | VkInstance VulkanInstance::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/Pipeline.cpp
type RHI::Vulkan (line 14) | namespace RHI::Vulkan {
function VkStencilOpState (line 15) | static VkStencilOpState ConvertStencilOp(const StencilFaceState& stenc...
function VkPipelineDepthStencilStateCreateInfo (line 28) | static VkPipelineDepthStencilStateCreateInfo ConstructDepthStencil(con...
function VkPipelineInputAssemblyStateCreateInfo (line 46) | static VkPipelineInputAssemblyStateCreateInfo ConstructInputAssembly(c...
function VkPipelineRasterizationStateCreateInfo (line 56) | static VkPipelineRasterizationStateCreateInfo ConstructRasterization(c...
function VkPipelineMultisampleStateCreateInfo (line 77) | static VkPipelineMultisampleStateCreateInfo ConstructMultiSampleState(...
function VkPipelineViewportStateCreateInfo (line 88) | static VkPipelineViewportStateCreateInfo ConstructViewportInfo(const R...
function VkPipelineColorBlendStateCreateInfo (line 100) | static VkPipelineColorBlendStateCreateInfo ConstructAttachmentInfo(con...
function VkPipelineVertexInputStateCreateInfo (line 129) | static VkPipelineVertexInputStateCreateInfo ConstructVertexInput(const...
function VulkanPipelineLayout (line 174) | VulkanPipelineLayout* VulkanRasterPipeline::GetPipelineLayout() const
function VkPipeline (line 267) | VkPipeline VulkanRasterPipeline::GetNative() const
function VulkanPipelineLayout (line 288) | VulkanPipelineLayout* VulkanComputePipeline::GetPipelineLayout() const
function VkPipeline (line 316) | VkPipeline VulkanComputePipeline::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/PipelineLayout.cpp
type RHI::Vulkan (line 9) | namespace RHI::Vulkan {
function VkPipelineLayout (line 26) | VkPipelineLayout VulkanPipelineLayout::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/Platform/Win32Surface.cpp
type RHI::Vulkan (line 15) | namespace RHI::Vulkan {
function VkSurfaceKHR (line 16) | VkSurfaceKHR CreateNativeSurface(const VkInstance& instance, const Sur...
FILE: Engine/Source/RHI-Vulkan/Src/Queue.cpp
type RHI::Vulkan (line 12) | namespace RHI::Vulkan {
function VkQueue (line 72) | VkQueue VulkanQueue::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/Sampler.cpp
type RHI::Vulkan (line 9) | namespace RHI::Vulkan {
function VkSampler (line 25) | VkSampler VulkanSampler::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/ShaderModule.cpp
type RHI::Vulkan (line 11) | namespace RHI::Vulkan {
function VkShaderModule (line 33) | VkShaderModule VulkanShaderModule::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/Surface.cpp
type RHI::Vulkan (line 10) | namespace RHI::Vulkan {
function VkSurfaceKHR (line 25) | VkSurfaceKHR VulkanSurface::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/SwapChain.cpp
type RHI::Vulkan (line 15) | namespace RHI::Vulkan {
function Texture (line 45) | Texture* VulkanSwapChain::GetTexture(const uint8_t inIndex)
FILE: Engine/Source/RHI-Vulkan/Src/Synchronous.cpp
type RHI::Vulkan (line 10) | namespace RHI::Vulkan {
function VkFence (line 45) | VkFence VulkanFence::GetNative() const
function VkSemaphore (line 66) | VkSemaphore VulkanSemaphore::GetNative() const
FILE: Engine/Source/RHI-Vulkan/Src/Texture.cpp
type RHI::Vulkan (line 14) | namespace RHI::Vulkan {
function VkImage (line 48) | VkImage VulkanTexture::GetNative() const
function VkImageSubresourceRange (line 63) | VkImageSubresourceRange VulkanTexture::GetNativeSubResourceFullRange()...
FILE: Engine/Source/RHI-Vulkan/Src/TextureView.cpp
type RHI::Vulkan (line 10) | namespace RHI::Vulkan {
function VkImageView (line 47) | VkImageView VulkanTextureView::GetNative() const
function VulkanTexture (line 52) | VulkanTexture& VulkanTextureView::GetTexture() const
FILE: Engine/Source/RHI-Vulkan/Src/VulkanRHIModule.cpp
type RHI::Vulkan (line 8) | namespace RHI::Vulkan {
function Instance (line 28) | Instance* VulkanRHIModule::GetRHIInstance() // NOLINT
FILE: Engine/Source/RHI/Include/RHI/BindGroup.h
function namespace (line 14) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/BindGroupLayout.h
function namespace (line 13) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Buffer.h
function namespace (line 11) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/BufferView.h
function namespace (line 14) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/CommandBuffer.h
function namespace (line 10) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/CommandRecorder.h
function namespace (line 15) | namespace RHI {
function namespace (line 259) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Common.h
type class (line 28) | enum class
type class (line 35) | enum class
type class (line 41) | enum class
type class (line 48) | enum class
type class (line 54) | enum class
type class (line 108) | enum class
type class (line 145) | enum class
type class (line 152) | enum class
type class (line 162) | enum class
type class (line 170) | enum class
type class (line 178) | enum class
type class (line 187) | enum class
type class (line 194) | enum class
type class (line 200) | enum class
type class (line 212) | enum class
type class (line 220) | enum class
type class (line 230) | enum class
type class (line 237) | enum class
type class (line 246) | enum class
type class (line 251) | enum class
type class (line 257) | enum class
type class (line 264) | enum class
type class (line 277) | enum class
type class (line 283) | enum class
type class (line 289) | enum class
type class (line 295) | enum class
type class (line 302) | enum class
type class (line 314) | enum class
type class (line 328) | enum class
type class (line 337) | enum class
type class (line 343) | enum class
type class (line 349) | enum class
type class (line 358) | enum class
type class (line 364) | enum class
function TextureState (line 375) | enum class TextureState : uint8_t {
type class (line 390) | enum class
type class (line 407) | enum class
type class (line 419) | enum class
function ColorWriteBits (line 431) | enum class ColorWriteBits : uint8_t {
function namespace (line 444) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Device.h
function namespace (line 17) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Gpu.h
function namespace (line 12) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Instance.h
function namespace (line 13) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Pipeline.h
function namespace (line 13) | namespace RHI {
function namespace (line 293) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/PipelineLayout.h
function namespace (line 11) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Queue.h
function namespace (line 12) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/RHIModule.h
function namespace (line 10) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Sampler.h
function namespace (line 11) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/ShaderModule.h
function namespace (line 12) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Surface.h
function namespace (line 9) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/SwapChain.h
function namespace (line 13) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Synchronous.h
function namespace (line 11) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/Texture.h
function namespace (line 11) | namespace RHI {
FILE: Engine/Source/RHI/Include/RHI/TextureView.h
function namespace (line 11) | namespace RHI {
FILE: Engine/Source/RHI/Src/BindGroup.cpp
type RHI (line 9) | namespace RHI {
function BindGroupCreateInfo (line 22) | BindGroupCreateInfo& BindGroupCreateInfo::AddEntry(const BindGroupEntr...
FILE: Engine/Source/RHI/Src/BindGroupLayout.cpp
type RHI (line 7) | namespace RHI {
function BindGroupLayoutCreateInfo (line 37) | BindGroupLayoutCreateInfo& BindGroupLayoutCreateInfo::AddEntry(const B...
FILE: Engine/Source/RHI/Src/Buffer.cpp
type RHI (line 7) | namespace RHI {
function BufferCreateInfo (line 18) | BufferCreateInfo& BufferCreateInfo::SetSize(const uint32_t inSize)
function BufferCreateInfo (line 23) | BufferCreateInfo& BufferCreateInfo::SetUsages(const BufferUsageFlags i...
function BufferCreateInfo (line 28) | BufferCreateInfo& BufferCreateInfo::SetInitialState(const BufferState ...
function BufferCreateInfo (line 34) | BufferCreateInfo& BufferCreateInfo::SetDebugName(std::string inDebugName)
function BufferCreateInfo (line 64) | const BufferCreateInfo& Buffer::GetCreateInfo() const
FILE: Engine/Source/RHI/Src/BufferView.cpp
type RHI (line 7) | namespace RHI {
function BufferViewCreateInfo (line 35) | BufferViewCreateInfo& BufferViewCreateInfo::SetType(const BufferViewTy...
function BufferViewCreateInfo (line 41) | BufferViewCreateInfo& BufferViewCreateInfo::SetOffset(const uint32_t i...
function BufferViewCreateInfo (line 47) | BufferViewCreateInfo& BufferViewCreateInfo::SetSize(const uint32_t inS...
function BufferViewCreateInfo (line 53) | BufferViewCreateInfo& BufferViewCreateInfo::SetExtendVertex(const uint...
function BufferViewCreateInfo (line 59) | BufferViewCreateInfo& BufferViewCreateInfo::SetExtendIndex(const Index...
function BufferViewCreateInfo (line 65) | BufferViewCreateInfo& BufferViewCreateInfo::SetExtendStorage(uint32_t ...
FILE: Engine/Source/RHI/Src/CommandBuffer.cpp
type RHI (line 7) | namespace RHI {
FILE: Engine/Source/RHI/Src/CommandRecorder.cpp
type RHI (line 7) | namespace RHI {
function TextureSubResourceInfo (line 18) | TextureSubResourceInfo& TextureSubResourceInfo::SetMipLevel(const uint...
function TextureSubResourceInfo (line 24) | TextureSubResourceInfo& TextureSubResourceInfo::SetArrayLayer(const ui...
function TextureSubResourceInfo (line 30) | TextureSubResourceInfo& TextureSubResourceInfo::SetAspect(const Textur...
function BufferCopyInfo (line 43) | BufferCopyInfo& BufferCopyInfo::SetSrcOffset(const size_t inSrcOffset)
function BufferCopyInfo (line 49) | BufferCopyInfo& BufferCopyInfo::SetDstOffset(const size_t inDstOffset)
function BufferCopyInfo (line 55) | BufferCopyInfo& BufferCopyInfo::SetCopySize(const size_t inCopySize)
function TextureCopyInfo (line 70) | TextureCopyInfo& TextureCopyInfo::SetSrcSubResource(const TextureSubRe...
function TextureCopyInfo (line 76) | TextureCopyInfo& TextureCopyInfo::SetSrcOrigin(const Common::UVec3& in...
function TextureCopyInfo (line 82) | TextureCopyInfo& TextureCopyInfo::SetDstSubResource(const TextureSubRe...
function TextureCopyInfo (line 88) | TextureCopyInfo& TextureCopyInfo::SetDstOrigin(const Common::UVec3& in...
function TextureCopyInfo (line 94) | TextureCopyInfo& TextureCopyInfo::SetCopyRegion(const Common::UVec3& i...
function BufferTextureCopyInfo (line 108) | BufferTextureCopyInfo& BufferTextureCopyInfo::SetBufferOffset(const si...
function BufferTextureCopyInfo (line 114) | BufferTextureCopyInfo& BufferTextureCopyInfo::SetTextureSubResource(co...
function BufferTextureCopyInfo (line 120) | BufferTextureCopyInfo& BufferTextureCopyInfo::SetTextureOrigin(const C...
function BufferTextureCopyInfo (line 126) | BufferTextureCopyInfo& BufferTextureCopyInfo::SetCopyRegion(const Comm...
function ColorAttachment (line 144) | ColorAttachment& ColorAttachment::SetView(TextureView* inView)
function ColorAttachment (line 150) | ColorAttachment& ColorAttachment::SetResolveView(TextureView* inResolv...
function DepthStencilAttachment (line 173) | DepthStencilAttachment& DepthStencilAttachment::SetView(TextureView* i...
function RasterPassBeginInfo (line 181) | RasterPassBeginInfo& RasterPassBeginInfo::SetDepthStencilAttachment(co...
function RasterPassBeginInfo (line 187) | RasterPassBeginInfo& RasterPassBeginInfo::AddColorAttachment(const Col...
FILE: Engine/Source/RHI/Src/Common.cpp
type RHI (line 7) | namespace RHI {
function GetBytesPerPixel (line 8) | size_t GetBytesPerPixel(PixelFormat format)
FILE: Engine/Source/RHI/Src/Device.cpp
type RHI (line 7) | namespace RHI {
function DeviceCreateInfo (line 16) | DeviceCreateInfo& DeviceCreateInfo::AddQueueRequest(const QueueRequest...
FILE: Engine/Source/RHI/Src/Gpu.cpp
type RHI (line 7) | namespace RHI {
FILE: Engine/Source/RHI/Src/Instance.cpp
type RHI (line 8) | namespace RHI {
function RHIType (line 9) | RHIType GetPlatformRHIType()
function GetPlatformDefaultRHIAbbrString (line 18) | std::string GetPlatformDefaultRHIAbbrString()
function GetAbbrStringByType (line 27) | std::string GetAbbrStringByType(RHIType type)
function RHIType (line 37) | RHIType GetRHITypeByAbbrString(const std::string& abbrString) // NOLINT
function GetRHIModuleNameByType (line 47) | std::string GetRHIModuleNameByType(const RHIType type)
function Instance (line 57) | Instance* Instance::GetByPlatform()
function Instance (line 62) | Instance* Instance::GetByType(const RHIType& type)
FILE: Engine/Source/RHI/Src/Pipeline.cpp
type RHI (line 8) | namespace RHI {
function VertexAttribute (line 36) | VertexAttribute& VertexAttribute::SetPlatformBinding(const PlatformVer...
function VertexBufferLayout (line 47) | VertexBufferLayout& VertexBufferLayout::AddAttribute(const VertexAttri...
function VertexState (line 57) | VertexState& VertexState::AddVertexBufferLayout(const VertexBufferLayo...
function PrimitiveState (line 79) | PrimitiveState& PrimitiveState::SetTopologyType(const PrimitiveTopolog...
function PrimitiveState (line 85) | PrimitiveState& PrimitiveState::SetFillMode(const FillMode inFillMode)
function PrimitiveState (line 91) | PrimitiveState& PrimitiveState::SetStripIndexFormat(const IndexFormat ...
function PrimitiveState (line 97) | PrimitiveState& PrimitiveState::SetFrontFace(const FrontFace inFrontFace)
function PrimitiveState (line 103) | PrimitiveState& PrimitiveState::SetCullMode(const CullMode inCullMode)
function PrimitiveState (line 109) | PrimitiveState& PrimitiveState::SetDepthClip(const bool inDepthClip)
function DepthStencilState (line 158) | DepthStencilState& DepthStencilState::SetDepthEnabled(const bool inDep...
function DepthStencilState (line 164) | DepthStencilState& DepthStencilState::SetStencilEnabled(const bool inS...
function DepthStencilState (line 170) | DepthStencilState& DepthStencilState::SetFormat(const PixelFormat inFo...
function DepthStencilState (line 176) | DepthStencilState& DepthStencilState::SetDepthCompareFunc(const Compar...
function DepthStencilState (line 182) | DepthStencilState& DepthStencilState::SetStencilFront(const StencilFac...
function DepthStencilState (line 188) | DepthStencilState& DepthStencilState::SetStencilBack(const StencilFace...
function DepthStencilState (line 194) | DepthStencilState& DepthStencilState::SetStencilReadMask(const uint8_t...
function DepthStencilState (line 200) | DepthStencilState& DepthStencilState::SetStencilWriteMask(const uint8_...
function DepthStencilState (line 206) | DepthStencilState& DepthStencilState::SetDepthBias(const int32_t inDep...
function DepthStencilState (line 212) | DepthStencilState& DepthStencilState::SetDepthBiasSlopeScale(const flo...
function DepthStencilState (line 218) | DepthStencilState& DepthStencilState::SetDepthBiasClamp(const float in...
function MultiSampleState (line 236) | MultiSampleState& MultiSampleState::SetCount(const uint8_t inCount)
function MultiSampleState (line 242) | MultiSampleState& MultiSampleState::SetMask(const uint32_t inMask)
function MultiSampleState (line 248) | MultiSampleState& MultiSampleState::SetAlphaToCoverage(const bool inAl...
function ColorTargetState (line 280) | ColorTargetState& ColorTargetState::SetFormat(const PixelFormat inFormat)
function ColorTargetState (line 286) | ColorTargetState& ColorTargetState::SetWriteFlags(const ColorWriteFlag...
function ColorTargetState (line 292) | ColorTargetState& ColorTargetState::SetBlendEnabled(const bool inBlend...
function ColorTargetState (line 298) | ColorTargetState& ColorTargetState::SetColorBlend(const BlendComponent...
function ColorTargetState (line 304) | ColorTargetState& ColorTargetState::SetAlphaBlend(const BlendComponent...
function FragmentState (line 319) | FragmentState& FragmentState::AddColorTarget(const ColorTargetState& i...
function ComputePipelineCreateInfo (line 342) | ComputePipelineCreateInfo& ComputePipelineCreateInfo::SetLayout(Pipeli...
function ComputePipelineCreateInfo (line 348) | ComputePipelineCreateInfo& ComputePipelineCreateInfo::SetComputeShader...
function RasterPipelineCreateInfo (line 364) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetLayout(Pipeline...
function RasterPipelineCreateInfo (line 370) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetVertexShader(Sh...
function RasterPipelineCreateInfo (line 376) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetPixelShader(Sha...
function RasterPipelineCreateInfo (line 382) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetGeometryShader(...
function RasterPipelineCreateInfo (line 388) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetDomainShader(Sh...
function RasterPipelineCreateInfo (line 394) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetHullShader(Shad...
function RasterPipelineCreateInfo (line 400) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetVertexState(con...
function RasterPipelineCreateInfo (line 406) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetPrimitiveState(...
function RasterPipelineCreateInfo (line 412) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetDepthStencilState(
function RasterPipelineCreateInfo (line 419) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetMultiSampleState(
function RasterPipelineCreateInfo (line 426) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetFragmentState(c...
function RasterPipelineCreateInfo (line 432) | RasterPipelineCreateInfo& RasterPipelineCreateInfo::SetDebugName(std::...
FILE: Engine/Source/RHI/Src/PipelineLayout.cpp
type RHI (line 7) | namespace RHI {
function PipelineConstantLayout (line 22) | PipelineConstantLayout& PipelineConstantLayout::SetStageFlags(const Sh...
function PipelineConstantLayout (line 28) | PipelineConstantLayout& PipelineConstantLayout::SetOffset(const uint32...
function PipelineConstantLayout (line 34) | PipelineConstantLayout& PipelineConstantLayout::SetSize(const uint32_t...
function PipelineLayoutCreateInfo (line 44) | PipelineLayoutCreateInfo& PipelineLayoutCreateInfo::AddBindGroupLayout...
function PipelineLayoutCreateInfo (line 50) | PipelineLayoutCreateInfo& PipelineLayoutCreateInfo::AddPipelineConstan...
FILE: Engine/Source/RHI/Src/Queue.cpp
type RHI (line 7) | namespace RHI {
function QueueSubmitInfo (line 13) | QueueSubmitInfo& QueueSubmitInfo::AddWaitSemaphore(Semaphore* inSemaph...
function QueueSubmitInfo (line 19) | QueueSubmitInfo& QueueSubmitInfo::AddSignalSemaphore(Semaphore* inSema...
function QueueSubmitInfo (line 25) | QueueSubmitInfo& QueueSubmitInfo::SetSignalFence(Fence* inSignalFence)
function QueueSubmitInfo (line 31) | QueueSubmitInfo& QueueSubmitInfo::SetWaitSemaphores(const std::vector<...
function QueueSubmitInfo (line 37) | QueueSubmitInfo& QueueSubmitInfo::SetSignalSemaphores(const std::vecto...
FILE: Engine/Source/RHI/Src/RHIModule.cpp
type RHI (line 7) | namespace RHI {
FILE: Engine/Source/RHI/Src/Sampler.cpp
type RHI (line 7) | namespace RHI {
function SamplerCreateInfo (line 22) | SamplerCreateInfo& SamplerCreateInfo::SetAddressModeU(const AddressMod...
function SamplerCreateInfo (line 28) | SamplerCreateInfo& SamplerCreateInfo::SetAddressModeV(const AddressMod...
function SamplerCreateInfo (line 34) | SamplerCreateInfo& SamplerCreateInfo::SetAddressModeW(const AddressMod...
function SamplerCreateInfo (line 40) | SamplerCreateInfo& SamplerCreateInfo::SetMagFilter(const FilterMode in...
function SamplerCreateInfo (line 46) | SamplerCreateInfo& SamplerCreateInfo::SetMinFilter(const FilterMode in...
function SamplerCreateInfo (line 52) | SamplerCreateInfo& SamplerCreateInfo::SetMipFilter(const FilterMode in...
function SamplerCreateInfo (line 58) | SamplerCreateInfo& SamplerCreateInfo::SetLodMinClamp(const float inValue)
function SamplerCreateInfo (line 64) | SamplerCreateInfo& SamplerCreateInfo::SetLodMaxClamp(const float inValue)
function SamplerCreateInfo (line 70) | SamplerCreateInfo& SamplerCreateInfo::SetComparisonFunc(const CompareF...
function SamplerCreateInfo (line 76) | SamplerCreateInfo& SamplerCreateInfo::SetMaxAnisotropy(const uint8_t i...
function SamplerCreateInfo (line 82) | SamplerCreateInfo& SamplerCreateInfo::SetDebugName(std::string inName)
FILE: Engine/Source/RHI/Src/ShaderModule.cpp
type RHI (line 7) | namespace RHI {
function ShaderModuleCreateInfo (line 22) | ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetByteCode(const void...
function ShaderModuleCreateInfo (line 28) | ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetSize(const size_t i...
FILE: Engine/Source/RHI/Src/Surface.cpp
type RHI (line 7) | namespace RHI {
function SurfaceCreateInfo (line 13) | SurfaceCreateInfo& SurfaceCreateInfo::SetWindow(void* inWindow)
FILE: Engine/Source/RHI/Src/SwapChain.cpp
type RHI (line 7) | namespace RHI {
function SwapChainCreateInfo (line 19) | SwapChainCreateInfo& SwapChainCreateInfo::SetPresentQueue(Queue* inPre...
function SwapChainCreateInfo (line 25) | SwapChainCreateInfo& SwapChainCreateInfo::SetSurface(Surface* inSurface)
function SwapChainCreateInfo (line 31) | SwapChainCreateInfo& SwapChainCreateInfo::SetTextureNum(const uint8_t ...
function SwapChainCreateInfo (line 37) | SwapChainCreateInfo& SwapChainCreateInfo::SetFormat(const PixelFormat ...
function SwapChainCreateInfo (line 43) | SwapChainCreateInfo& SwapChainCreateInfo::SetWidth(const uint32_t inWi...
function SwapChainCreateInfo (line 49) | SwapChainCreateInfo& SwapChainCreateInfo::SetHeight(const uint32_t inH...
function SwapChainCreateInfo (line 55) | SwapChainCreateInfo& SwapChainCreateInfo::SetPresentMode(const Present...
FILE: Engine/Source/RHI/Src/Synchronous.cpp
type RHI (line 7) | namespace RHI {
function Barrier (line 8) | Barrier Barrier::Transition(Buffer* buffer, const BufferState before, ...
function Barrier (line 18) | Barrier Barrier::Transition(Texture* texture, const TextureState befor...
FILE: Engine/Source/RHI/Src/Texture.cpp
type RHI (line 7) | namespace RHI {
function TextureCreateInfo (line 21) | TextureCreateInfo& TextureCreateInfo::SetDimension(const TextureDimens...
function TextureCreateInfo (line 27) | TextureCreateInfo& TextureCreateInfo::SetWidth(const uint32_t inWidth)
function TextureCreateInfo (line 33) | TextureCreateInfo& TextureCreateInfo::SetHeight(const uint32_t inHeight)
function TextureCreateInfo (line 39) | TextureCreateInfo& TextureCreateInfo::SetDepthOrArraySize(const uint32...
function TextureCreateInfo (line 45) | TextureCreateInfo& TextureCreateInfo::SetFormat(const PixelFormat inFo...
function TextureCreateInfo (line 51) | TextureCreateInfo& TextureCreateInfo::SetUsages(const TextureUsageFlag...
function TextureCreateInfo (line 57) | TextureCreateInfo& TextureCreateInfo::SetMipLevels(const uint8_t inMip...
function TextureCreateInfo (line 63) | TextureCreateInfo& TextureCreateInfo::SetSamples(const uint8_t inSamples)
function TextureCreateInfo (line 69) | TextureCreateInfo& TextureCreateInfo::SetInitialState(const TextureSta...
function TextureCreateInfo (line 75) | TextureCreateInfo& TextureCreateInfo::SetDebugName(std::string inDebug...
function TextureCreateInfo (line 117) | const TextureCreateInfo& Texture::GetCreateInfo() const
FILE: Engine/Source/RHI/Src/TextureView.cpp
type RHI (line 7) | namespace RHI {
function TextureViewCreateInfo (line 26) | TextureViewCreateInfo& TextureViewCreateInfo::SetType(const TextureVie...
function TextureViewCreateInfo (line 32) | TextureViewCreateInfo& TextureViewCreateInfo::SetDimension(const Textu...
function TextureViewCreateInfo (line 38) | TextureViewCreateInfo& TextureViewCreateInfo::SetAspect(const TextureA...
function TextureViewCreateInfo (line 44) | TextureViewCreateInfo& TextureViewCreateInfo::SetMipLevels(const uint8...
function TextureViewCreateInfo (line 51) | TextureViewCreateInfo& TextureViewCreateInfo::SetArrayLayers(const uin...
FILE: Engine/Source/Render/Include/Render/RenderCache.h
function namespace (line 12) | namespace Render {
FILE: Engine/Source/Render/Include/Render/RenderGraph.h
type class (line 21) | enum class
type class (line 27) | enum class
type class (line 33) | enum class
type class (line 40) | enum class
function RGResType (line 54) | RGResType Type() const;
function RGBufferViewDesc (line 127) | const RGBufferViewDesc& GetDesc() const;
FILE: Engine/Source/Render/Include/Render/RenderModule.h
function namespace (line 15) | namespace Render {
FILE: Engine/Source/Render/Include/Render/RenderThread.h
function namespace (line 11) | namespace Render {
function namespace (line 47) | namespace Render {
FILE: Engine/Source/Render/Include/Render/Renderer.h
function namespace (line 11) | namespace RHI {
function namespace (line 17) | namespace Render {
FILE: Engine/Source/Render/Include/Render/ResourcePool.h
function namespace (line 14) | namespace Render::Internal {
function DescType (line 31) | const DescType& GetDesc() const;
type PooledResTraits (line 122) | struct PooledResTraits
function RefType (line 127) | static RefType CreateResource(RHI::Device& device, const DescType& desc)
type PooledResTraits (line 134) | struct PooledResTraits
function RefType (line 139) | static RefType CreateResource(RHI::Device& device, const DescType& desc)
function device (line 157) | device(inDevice)
FILE: Engine/Source/Render/Include/Render/Scene.h
function namespace (line 11) | namespace Render {
function namespace (line 83) | namespace Render {
FILE: Engine/Source/Render/Include/Render/SceneProxy/Light.h
function namespace (line 10) | namespace Render {
FILE: Engine/Source/Render/Include/Render/SceneProxy/Primitive.h
function namespace (line 9) | namespace Render {
FILE: Engine/Source/Render/Include/Render/Shader.h
function namespace (line 94) | namespace Render::Internal {
type class (line 99) | enum class
type ShaderBoolVariantField (line 105) | struct ShaderBoolVariantField {
type ShaderRangedIntVariantField (line 112) | struct ShaderRangedIntVariantField {
function class (line 130) | class ShaderUtils {
type VertexFactoryInput (line 142) | struct VertexFactoryInput {
type class (line 153) | enum class
function std (line 185) | const std::string& GetName() const override;
function std (line 244) | const std::string& GetName() const override;
function MakeTypeKeyFromName (line 387) | static uint64_t MakeTypeKeyFromName(const std::string& inName)
function VertexFactoryInputVec (line 413) | VertexFactoryInputVec BuildVertexFactoryInputVecFromStatic(std::index_se...
FILE: Engine/Source/Render/Include/Render/ShaderCompiler.h
function namespace (line 14) | namespace Render {
FILE: Engine/Source/Render/Include/Render/View.h
function namespace (line 11) | namespace Render {
FILE: Engine/Source/Render/SharedSrc/RenderModule.cpp
type Render (line 9) | namespace Render {
function Scene (line 70) | Scene* RenderModule::NewScene() const // NOLINT
function ViewState (line 75) | ViewState* RenderModule::NewViewState() const // NOLINT
function View (line 80) | View RenderModule::CreateView() const // NOLINT
function StandardRenderer (line 85) | StandardRenderer RenderModule::CreateStandardRenderer(const StandardRe...
FILE: Engine/Source/Render/Src/RenderCache.cpp
type Render::Internal (line 12) | namespace Render::Internal {
type Render (line 17) | namespace Render {
class PipelineLayoutCache (line 18) | class PipelineLayoutCache {
method PipelineLayout (line 26) | PipelineLayout* GetLayout(const D& desc)
function PipelineLayoutCache (line 43) | PipelineLayoutCache& PipelineLayoutCache::Get(RHI::Device& device)
method PipelineLayout (line 26) | PipelineLayout* GetLayout(const D& desc)
function RVertexAttribute (line 109) | RVertexAttribute& RVertexAttribute::SetBinding(const RVertexBinding& i...
function RVertexBufferLayout (line 145) | RVertexBufferLayout& RVertexBufferLayout::AddAttribute(const RVertexAt...
function RVertexState (line 174) | RVertexState& RVertexState::AddVertexBufferLayout(const RVertexBufferL...
function RasterPipelineStateDesc (line 225) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetVertexShader(cons...
function RasterPipelineStateDesc (line 231) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetPixelShader(const...
function RasterPipelineStateDesc (line 237) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetGeometryShader(co...
function RasterPipelineStateDesc (line 243) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetDomainShader(cons...
function RasterPipelineStateDesc (line 249) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetHullShader(const ...
function RasterPipelineStateDesc (line 255) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetVertexState(const...
function RasterPipelineStateDesc (line 261) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetPrimitiveState(co...
function RasterPipelineStateDesc (line 267) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetDepthStencilState...
function RasterPipelineStateDesc (line 273) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetMultiSampleState(...
function RasterPipelineStateDesc (line 279) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetFragmentState(con...
function BindGroupLayout (line 424) | BindGroupLayout* PipelineLayout::GetBindGroupLayout(const uint8_t layo...
function BindGroupLayout (line 454) | BindGroupLayout* ComputePipelineState::GetBindGroupLayout(uint8_t layo...
function PipelineLayout (line 459) | PipelineLayout* ComputePipelineState::GetPipelineLayout() const
function PipelineLayout (line 499) | PipelineLayout* RasterPipelineState::GetPipelineLayout() const
function SamplerCache (line 516) | SamplerCache& SamplerCache::Get(RHI::Device& device)
function Sampler (line 535) | Sampler* SamplerCache::GetOrCreate(const RSamplerDesc& desc)
function PipelineCache (line 547) | PipelineCache& PipelineCache::Get(RHI::Device& device)
function ComputePipelineState (line 573) | ComputePipelineState* PipelineCache::GetOrCreate(const ComputePipeline...
function RasterPipelineState (line 583) | RasterPipelineState* PipelineCache::GetOrCreate(const RasterPipelineSt...
function ResourceViewCache (line 595) | ResourceViewCache& ResourceViewCache::Get(RHI::Device& device)
function BindGroupCache (line 682) | BindGroupCache& BindGroupCache::Get(RHI::Device& device)
type Render (line 67) | namespace Render {
class PipelineLayoutCache (line 18) | class PipelineLayoutCache {
method PipelineLayout (line 26) | PipelineLayout* GetLayout(const D& desc)
function PipelineLayoutCache (line 43) | PipelineLayoutCache& PipelineLayoutCache::Get(RHI::Device& device)
method PipelineLayout (line 26) | PipelineLayout* GetLayout(const D& desc)
function RVertexAttribute (line 109) | RVertexAttribute& RVertexAttribute::SetBinding(const RVertexBinding& i...
function RVertexBufferLayout (line 145) | RVertexBufferLayout& RVertexBufferLayout::AddAttribute(const RVertexAt...
function RVertexState (line 174) | RVertexState& RVertexState::AddVertexBufferLayout(const RVertexBufferL...
function RasterPipelineStateDesc (line 225) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetVertexShader(cons...
function RasterPipelineStateDesc (line 231) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetPixelShader(const...
function RasterPipelineStateDesc (line 237) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetGeometryShader(co...
function RasterPipelineStateDesc (line 243) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetDomainShader(cons...
function RasterPipelineStateDesc (line 249) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetHullShader(const ...
function RasterPipelineStateDesc (line 255) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetVertexState(const...
function RasterPipelineStateDesc (line 261) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetPrimitiveState(co...
function RasterPipelineStateDesc (line 267) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetDepthStencilState...
function RasterPipelineStateDesc (line 273) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetMultiSampleState(...
function RasterPipelineStateDesc (line 279) | RasterPipelineStateDesc& RasterPipelineStateDesc::SetFragmentState(con...
function BindGroupLayout (line 424) | BindGroupLayout* PipelineLayout::GetBindGroupLayout(const uint8_t layo...
function BindGroupLayout (line 454) | BindGroupLayout* ComputePipelineState::GetBindGroupLayout(uint8_t layo...
function PipelineLayout (line 459) | PipelineLayout* ComputePipelineState::GetPipelineLayout() const
function PipelineLayout (line 499) | PipelineLayout* RasterPipelineState::GetPipelineLayout() const
function SamplerCache (line 516) | SamplerCache& SamplerCache::Get(RHI::Device& device)
function Sampler (line 535) | Sampler* SamplerCache::GetOrCreate(const RSamplerDesc& desc)
function PipelineCache (line 547) | PipelineCache& PipelineCache::Get(RHI::Device& device)
function ComputePipelineState (line 573) | ComputePipelineState* PipelineCache::GetOrCreate(const ComputePipeline...
function RasterPipelineState (line 583) | RasterPipelineState* PipelineCache::GetOrCreate(const RasterPipelineSt...
function ResourceViewCache (line 595) | ResourceViewCache& ResourceViewCache::Get(RHI::Device& device)
function BindGroupCache (line 682) | BindGroupCache& BindGroupCache::Get(RHI::Device& device)
FILE: Engine/Source/Render/Src/RenderGraph.cpp
type Render::Internal (line 11) | namespace Render::Internal {
function ComputeReadsWritesForBindGroup (line 12) | static void ComputeReadsWritesForBindGroup(const RGBindGroupDesc& inDe...
function GetRHIQueueTypeAndIndex (line 33) | static std::pair<RHI::QueueType, uint8_t> GetRHIQueueTypeAndIndex(RGQu...
function GetRHIRasterPassBeginInfo (line 48) | static RHI::RasterPassBeginInfo GetRHIRasterPassBeginInfo(RGBuilder& b...
type Render (line 62) | namespace Render {
function RGResType (line 72) | RGResType RGResource::Type() const
function RGBufferDesc (line 100) | const RGBufferDesc& RGBuffer::GetDesc() const
function RGTextureDesc (line 123) | const RGTextureDesc& RGTexture::GetDesc() const
function RGResViewType (line 135) | RGResViewType RGResourceView::Type() const
function RGBufferViewDesc (line 149) | const RGBufferViewDesc& RGBufferView::GetDesc() const
function RGBufferRef (line 154) | RGBufferRef RGBufferView::GetBuffer() const
function RGResourceRef (line 159) | RGResourceRef RGBufferView::GetResource()
function RGTextureViewDesc (line 173) | const RGTextureViewDesc& RGTextureView::GetDesc() const
function RGTextureRef (line 178) | RGTextureRef RGTextureView::GetTexture() const
function RGResourceRef (line 183) | RGResourceRef RGTextureView::GetResource()
function RGColorAttachment (line 199) | RGColorAttachment& RGColorAttachment::SetView(RGTextureViewRef inView)
function RGDepthStencilAttachment (line 223) | RGDepthStencilAttachment& RGDepthStencilAttachment::SetView(RGTextureV...
function RGRasterPassDesc (line 229) | RGRasterPassDesc& RGRasterPassDesc::AddColorAttachment(const RGColorAt...
function RGRasterPassDesc (line 235) | RGRasterPassDesc& RGRasterPassDesc::SetDepthStencilAttachment(const RG...
function RGBindGroupDesc (line 241) | RGBindGroupDesc RGBindGroupDesc::Create(BindGroupLayout* inLayout)
function RGBindGroupDesc (line 248) | RGBindGroupDesc& RGBindGroupDesc::Sampler(std::string inName, RHI::Sam...
function RGBindGroupDesc (line 259) | RGBindGroupDesc& RGBindGroupDesc::UniformBuffer(std::string inName, RG...
function RGBindGroupDesc (line 270) | RGBindGroupDesc& RGBindGroupDesc::StorageBuffer(std::string inName, RG...
function RGBindGroupDesc (line 281) | RGBindGroupDesc& RGBindGroupDesc::RwStorageBuffer(std::string inName, ...
function RGBindGroupDesc (line 292) | RGBindGroupDesc& RGBindGroupDesc::Texture(std::string inName, RGTextur...
function RGBindGroupDesc (line 303) | RGBindGroupDesc& RGBindGroupDesc::StorageTexture(std::string inName, R...
function RGBindGroupDesc (line 321) | const RGBindGroupDesc& RGBindGroup::GetDesc() const
function RGBufferRef (line 395) | RGBufferRef RGBuilder::CreateBuffer(const RGBufferDesc& inDesc)
function RGTextureRef (line 403) | RGTextureRef RGBuilder::CreateTexture(const RGTextureDesc& inDesc)
function RGBufferViewRef (line 411) | RGBufferViewRef RGBuilder::CreateBufferView(RGBufferRef inBuffer, cons...
function RGTextureViewRef (line 419) | RGTextureViewRef RGBuilder::CreateTextureView(RGTextureRef inTexture, ...
function RGBufferRef (line 427) | RGBufferRef RGBuilder::ImportBuffer(RHI::Buffer* inBuffer, RHI::Buffer...
function RGTextureRef (line 435) | RGTextureRef RGBuilder::ImportTexture(RHI::Texture* inTexture, RHI::Te...
function RGBindGroupRef (line 443) | RGBindGroupRef RGBuilder::AllocateBindGroup(const RGBindGroupDesc& inD...
FILE: Engine/Source/Render/Src/RenderThread.cpp
type Render (line 7) | namespace Render {
function RenderThread (line 8) | RenderThread& RenderThread::Get()
function RenderWorkerThreads (line 37) | RenderWorkerThreads& RenderWorkerThreads::Get()
FILE: Engine/Source/Render/Src/Renderer.cpp
type Render (line 7) | namespace Render {
FILE: Engine/Source/Render/Src/Scene.cpp
type Render (line 7) | namespace Render {
FILE: Engine/Source/Render/Src/Shader.cpp
type Render (line 12) | namespace Render {
function ShaderVariantKey (line 77) | ShaderVariantKey ShaderUtils::ComputeVariantKey(const ShaderVariantFie...
function ShaderSourceHash (line 126) | ShaderSourceHash ShaderUtils::ComputeShaderSourceHash(const std::strin...
function VertexFactoryTypeKey (line 185) | VertexFactoryTypeKey VertexFactoryType::GetKey() const
function VertexFactoryTypeRegistry (line 190) | VertexFactoryTypeRegistry& VertexFactoryTypeRegistry::Get()
function ShaderTypeKey (line 241) | ShaderTypeKey ShaderType::GetKey() const
function ShaderVariantFieldVec (line 292) | const ShaderVariantFieldVec& MaterialShaderType::GetVariantFields() const
function ShaderReflectionData (line 311) | ShaderReflectionData& ShaderReflectionData::operator=(const ShaderRefl...
function ShaderTypeRegistry (line 354) | ShaderTypeRegistry& ShaderTypeRegistry::Get()
function ShaderType (line 382) | const ShaderType& ShaderTypeRegistry::GetType(ShaderTypeKey inKey) const
function ShaderArtifactRegistry (line 400) | ShaderArtifactRegistry& ShaderArtifactRegistry::Get()
function ShaderMap (line 415) | ShaderMap& ShaderMap::Get(RHI::Device& inDevice)
function ShaderInstance (line 431) | ShaderInstance ShaderMap::GetShaderInstance(const ShaderType& inShader...
FILE: Engine/Source/Render/Src/ShaderCompiler.cpp
type Render::Internal (line 39) | namespace Render::Internal {
function GetPresetIncludeDirectories (line 40) | static std::vector<std::string> GetPresetIncludeDirectories()
function TranslateIncludeDirectories (line 46) | static std::vector<std::string> TranslateIncludeDirectories(const std:...
type Render (line 56) | namespace Render {
function GetRHIBindingType (line 58) | static RHI::BindingType GetRHIBindingType(const D3D_SHADER_INPUT_TYPE ...
function GetRHIHlslBindingRangeType (line 71) | static RHI::HlslBindingRangeType GetRHIHlslBindingRangeType(const D3D_...
function GetDXCTargetProfile (line 85) | static std::wstring GetDXCTargetProfile(RHI::ShaderStageBits stage)
function GetDXCBaseArguments (line 98) | static std::vector<LPCWSTR> GetDXCBaseArguments(const ShaderCompileOpt...
function GetEntryPointArguments (line 116) | static std::vector<std::wstring> GetEntryPointArguments(const ShaderCo...
function GetTargetProfileArguments (line 124) | static std::vector<std::wstring> GetTargetProfileArguments(const Shade...
function GetIncludePathArguments (line 132) | static std::vector<std::wstring> GetIncludePathArguments(const ShaderC...
function GetInternalDefinitions (line 142) | static std::vector<std::wstring> GetInternalDefinitions(const ShaderCo...
function GetDefinitionArguments (line 171) | static std::vector<std::wstring> GetDefinitionArguments(const ShaderCo...
function FillArguments (line 185) | static void FillArguments(std::vector<LPCWSTR>& result, const std::vec...
function BuildHlslReflectionData (line 193) | static void BuildHlslReflectionData(const ComPtr<ID3D12ShaderReflectio...
function BuildGlslReflectionData (line 219) | static void BuildGlslReflectionData(const spirv_cross::Compiler& compi...
function CompileDxilOrSpriv (line 262) | static void CompileDxilOrSpriv(
function ShaderCompiler (line 351) | ShaderCompiler& ShaderCompiler::Get()
function ShaderTypeCompiler (line 372) | ShaderTypeCompiler& ShaderTypeCompiler::Get()
type Render (line 345) | namespace Render {
function GetRHIBindingType (line 58) | static RHI::BindingType GetRHIBindingType(const D3D_SHADER_INPUT_TYPE ...
function GetRHIHlslBindingRangeType (line 71) | static RHI::HlslBindingRangeType GetRHIHlslBindingRangeType(const D3D_...
function GetDXCTargetProfile (line 85) | static std::wstring GetDXCTargetProfile(RHI::ShaderStageBits stage)
function GetDXCBaseArguments (line 98) | static std::vector<LPCWSTR> GetDXCBaseArguments(const ShaderCompileOpt...
function GetEntryPointArguments (line 116) | static std::vector<std::wstring> GetEntryPointArguments(const ShaderCo...
function GetTargetProfileArguments (line 124) | static std::vector<std::wstring> GetTargetProfileArguments(const Shade...
function GetIncludePathArguments (line 132) | static std::vector<std::wstring> GetIncludePathArguments(const ShaderC...
function GetInternalDefinitions (line 142) | static std::vector<std::wstring> GetInternalDefinitions(const ShaderCo...
function GetDefinitionArguments (line 171) | static std::vector<std::wstring> GetDefinitionArguments(const ShaderCo...
function FillArguments (line 185) | static void FillArguments(std::vector<LPCWSTR>& result, const std::vec...
function BuildHlslReflectionData (line 193) | static void BuildHlslReflectionData(const ComPtr<ID3D12ShaderReflectio...
function BuildGlslReflectionData (line 219) | static void BuildGlslReflectionData(const spirv_cross::Compiler& compi...
function CompileDxilOrSpriv (line 262) | static void CompileDxilOrSpriv(
function ShaderCompiler (line 351) | ShaderCompiler& ShaderCompiler::Get()
function ShaderTypeCompiler (line 372) | ShaderTypeCompiler& ShaderTypeCompiler::Get()
FILE: Engine/Source/Render/Src/View.cpp
type Render (line 7) | namespace Render {
FILE: Engine/Source/Render/Test/ResourcePoolTest.cpp
type ResourcePoolTest (line 11) | struct ResourcePoolTest : testing::Test {
method SetUp (line 12) | void SetUp() override
method TearDown (line 21) | void TearDown() override {}
function TEST_F (line 27) | TEST_F(ResourcePoolTest, BasicTest)
FILE: Engine/Source/Render/Test/ShaderTest.cpp
function TEST (line 9) | class TestGlobalShaderVS final : public Render::StaticShaderType<TestGlo...
function TEST (line 115) | TEST(ShaderTest, VertexFactoryTest)
FILE: Engine/Source/Runtime/Include/Runtime/Asset/Asset.h
function namespace (line 21) | namespace Runtime {
function namespace (line 203) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Asset/Level.h
function namespace (line 12) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Asset/Material.h
function namespace (line 16) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Asset/Mesh.h
function namespace (line 13) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Asset/Texture.h
function namespace (line 15) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Client.h
function namespace (line 9) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Component/Camera.h
function namespace (line 12) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Component/Light.h
function namespace (line 11) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Component/Player.h
function namespace (line 13) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Component/Primitive.h
function namespace (line 12) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Component/Scene.h
function namespace (line 12) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Component/Transform.h
function namespace (line 12) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/ECS.h
function namespace (line 18) | namespace Runtime {
function namespace (line 46) | namespace Runtime::Internal {
FILE: Engine/Source/Runtime/Include/Runtime/Engine.h
function namespace (line 14) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/GameModule.h
function namespace (line 9) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/GameThread.h
function namespace (line 15) | namespace Runtime {
function namespace (line 53) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Meta.h
function namespace (line 10) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/RenderThreadPtr.h
function namespace (line 10) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/RuntimeModule.h
function namespace (line 10) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Settings/Game.h
function namespace (line 11) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Settings/Registry.h
function namespace (line 11) | namespace Runtime {
function namespace (line 43) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/System/Player.h
function namespace (line 15) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/System/Render.h
function namespace (line 17) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/System/Scene.h
function namespace (line 18) | namespace Runtime {
function namespace (line 66) | namespace Runtime::Internal {
function namespace (line 95) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/System/Transform.h
function namespace (line 12) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/SystemGraphPresets.h
function namespace (line 10) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/Viewport.h
function namespace (line 10) | namespace Runtime {
FILE: Engine/Source/Runtime/Include/Runtime/World.h
function namespace (line 15) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Asset/Asset.cpp
type Runtime (line 7) | namespace Runtime {
function AssetManager (line 29) | AssetManager& AssetManager::Get()
FILE: Engine/Source/Runtime/Src/Asset/Level.cpp
type Runtime (line 7) | namespace Runtime {
function ECArchive (line 15) | ECArchive& Level::GetArchive()
FILE: Engine/Source/Runtime/Src/Asset/Material.cpp
type Runtime::Internal (line 7) | namespace Runtime::Internal {
function GetVariantFieldMacro (line 8) | static std::string GetVariantFieldMacro(const std::string& inVariantFi...
type VariantFieldConverter (line 14) | struct VariantFieldConverter {}
type VariantFieldConverter<MaterialBoolVariantField> (line 17) | struct VariantFieldConverter<MaterialBoolVariantField> {
method Execute (line 18) | static Render::ShaderBoolVariantField Execute(const std::string& inV...
type VariantFieldConverter<MaterialRangedUintVariantField> (line 28) | struct VariantFieldConverter<MaterialRangedUintVariantField> {
method Execute (line 29) | static Render::ShaderRangedIntVariantField Execute(const std::string...
function BuildShaderVariantFieldVec (line 39) | static Render::ShaderVariantFieldVec BuildShaderVariantFieldVec(const ...
type Runtime (line 53) | namespace Runtime {
function MaterialType (line 125) | MaterialType Material::GetType() const
FILE: Engine/Source/Runtime/Src/Asset/Mesh.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Asset/Texture.cpp
type Runtime::Internal (line 7) | namespace Runtime::Internal {
function GetTextureDimension (line 8) | static RHI::TextureDimension GetTextureDimension(TextureType inType)
function IsDepthOnlyFormat (line 21) | static bool IsDepthOnlyFormat(TextureFormat inFormat)
function IsDepthAndStencilFormat (line 27) | static bool IsDepthAndStencilFormat(TextureFormat inFormat)
function IsDepthOrStencilFormat (line 33) | static bool IsDepthOrStencilFormat(TextureFormat inFormat)
function GetTextureAspect (line 39) | static RHI::TextureAspect GetTextureAspect(TextureFormat inFormat)
function GetSubResourceIndex (line 50) | static uint32_t GetSubResourceIndex(uint8_t inMipLevel, uint8_t inArra...
type Runtime (line 56) | namespace Runtime {
function TextureType (line 76) | TextureType Texture::GetType() const
function TextureFormat (line 81) | TextureFormat Texture::GetFormat() const
function TextureType (line 339) | TextureType RenderTarget::GetType() const
function TextureFormat (line 344) | TextureFormat RenderTarget::GetFormat() const
FILE: Engine/Source/Runtime/Src/Client.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Component/Camera.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Component/Light.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Component/Player.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Component/Primitive.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Component/Scene.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Component/Transform.cpp
type Runtime (line 9) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/ECS.cpp
type Runtime (line 10) | namespace Runtime {
function RuntimeFilter (line 435) | RuntimeFilter& RuntimeFilter::IncludeDyn(CompClass inClass)
function RuntimeFilter (line 442) | RuntimeFilter& RuntimeFilter::ExcludeDyn(CompClass inClass)
function Observer (line 459) | Observer& Observer::ObConstructedDyn(CompClass inClass)
function Observer (line 464) | Observer& Observer::ObUpdatedDyn(CompClass inClass)
function Observer (line 469) | Observer& Observer::ObRemoved(CompClass inClass)
function Observer (line 542) | Observer& Observer::OnEvent(Common::Delegate<ECRegistry&, Entity>& inE...
function ECRegistry (line 656) | ECRegistry& ECRegistry::operator=(const ECRegistry& inOther)
function ECRegistry (line 664) | ECRegistry& ECRegistry::operator=(ECRegistry&& inOther) noexcept
function Entity (line 672) | Entity ECRegistry::Create()
function EventsObserverDyn (line 766) | EventsObserverDyn ECRegistry::EventsObserverDyn(CompClass inClass)
function Observer (line 798) | Observer ECRegistry::Observer()
function ScopedUpdaterDyn (line 924) | ScopedUpdaterDyn ECRegistry::UpdateDyn(CompClass inClass, Entity inEnt...
function GScopedUpdaterDyn (line 1023) | GScopedUpdaterDyn ECRegistry::GUpdateDyn(GCompClass inClass)
function SystemExecuteStrategy (line 1146) | SystemExecuteStrategy SystemGroup::GetStrategy() const
function SystemGroup (line 1167) | SystemGroup& SystemGraph::AddGroup(const std::string& inName, SystemEx...
function SystemGroup (line 1186) | SystemGroup& SystemGraph::GetGroup(const std::string& inName)
function SystemGroup (line 1193) | const SystemGroup& SystemGraph::GetGroup(const std::string& inName) const
function SystemGroup (line 1205) | SystemGroup& SystemGraph::MoveGroupTo(const std::string& inSrcName, co...
type Runtime::Internal (line 21) | namespace Runtime::Internal {
function IsGlobalCompClass (line 22) | static bool IsGlobalCompClass(GCompClass inClass)
function CompClass (line 66) | CompClass CompRtti::Class() const
function ElemPtr (line 129) | ElemPtr Archetype::EmplaceElem(Entity inEntity)
function ElemPtr (line 138) | ElemPtr Archetype::EmplaceElem(Entity inEntity, ElemPtr inSrcElem, con...
function ElemPtr (line 174) | ElemPtr Archetype::GetElem(Entity inEntity) const
function ArchetypeId (line 201) | ArchetypeId Archetype::Id() const
function CompRtti (line 222) | const CompRtti* Archetype::FindCompRtti(CompClass clazz) const
function CompRtti (line 228) | const CompRtti& Archetype::GetCompRtti(CompClass clazz) const
function ElemPtr (line 234) | ElemPtr Archetype::ElemAt(std::vector<uint8_t>& inMemory, size_t inInd...
function ElemPtr (line 239) | ElemPtr Archetype::ElemAt(size_t inIndex) const
function Entity (line 290) | Entity EntityPool::Allocate()
function ArchetypeId (line 347) | ArchetypeId EntityPool::GetArchetype(Entity inEntity) const
function SystemClass (line 392) | SystemClass SystemFactory::GetClass() const
type Runtime (line 407) | namespace Runtime {
function RuntimeFilter (line 435) | RuntimeFilter& RuntimeFilter::IncludeDyn(CompClass inClass)
function RuntimeFilter (line 442) | RuntimeFilter& RuntimeFilter::ExcludeDyn(CompClass inClass)
function Observer (line 459) | Observer& Observer::ObConstructedDyn(CompClass inClass)
function Observer (line 464) | Observer& Observer::ObUpdatedDyn(CompClass inClass)
function Observer (line 469) | Observer& Observer::ObRemoved(CompClass inClass)
function Observer (line 542) | Observer& Observer::OnEvent(Common::Delegate<ECRegistry&, Entity>& inE...
function ECRegistry (line 656) | ECRegistry& ECRegistry::operator=(const ECRegistry& inOther)
function ECRegistry (line 664) | ECRegistry& ECRegistry::operator=(ECRegistry&& inOther) noexcept
function Entity (line 672) | Entity ECRegistry::Create()
function EventsObserverDyn (line 766) | EventsObserverDyn ECRegistry::EventsObserverDyn(CompClass inClass)
function Observer (line 798) | Observer ECRegistry::Observer()
function ScopedUpdaterDyn (line 924) | ScopedUpdaterDyn ECRegistry::UpdateDyn(CompClass inClass, Entity inEnt...
function GScopedUpdaterDyn (line 1023) | GScopedUpdaterDyn ECRegistry::GUpdateDyn(GCompClass inClass)
function SystemExecuteStrategy (line 1146) | SystemExecuteStrategy SystemGroup::GetStrategy() const
function SystemGroup (line 1167) | SystemGroup& SystemGraph::AddGroup(const std::string& inName, SystemEx...
function SystemGroup (line 1186) | SystemGroup& SystemGraph::GetGroup(const std::string& inName)
function SystemGroup (line 1193) | const SystemGroup& SystemGraph::GetGroup(const std::string& inName) const
function SystemGroup (line 1205) | SystemGroup& SystemGraph::MoveGroupTo(const std::string& inSrcName, co...
FILE: Engine/Source/Runtime/Src/Engine.cpp
type Runtime (line 18) | namespace Runtime {
function Engine (line 146) | Engine& EngineHolder::Get()
FILE: Engine/Source/Runtime/Src/GameThread.cpp
type Runtime (line 7) | namespace Runtime {
function GameThread (line 8) | GameThread& GameThread::Get()
function GameWorkerThreads (line 35) | GameWorkerThreads& GameWorkerThreads::Get()
FILE: Engine/Source/Runtime/Src/Settings/Game.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/Settings/Registry.cpp
type Runtime::Internal (line 10) | namespace Runtime::Internal {
function GetConfigPathForSettings (line 11) | static Common::Path GetConfigPathForSettings(SettingsClass inClass)
type Runtime (line 17) | namespace Runtime {
function SettingsRegistry (line 18) | SettingsRegistry& SettingsRegistry::Get()
FILE: Engine/Source/Runtime/Src/System/Player.cpp
type Runtime (line 10) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/System/Render.cpp
type Runtime (line 11) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/System/Scene.cpp
type Runtime (line 11) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/System/Transform.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/SystemGraphPresets.cpp
type Runtime (line 11) | namespace Runtime {
function SystemGraph (line 12) | const SystemGraph& SystemGraphPresets::Default3DWorld()
FILE: Engine/Source/Runtime/Src/Viewport.cpp
type Runtime (line 7) | namespace Runtime {
FILE: Engine/Source/Runtime/Src/World.cpp
type Runtime (line 10) | namespace Runtime {
function PlayStatus (line 32) | PlayStatus World::PlayStatus() const
FILE: Engine/Source/Runtime/Test/AssetTest.cpp
function TEST (line 9) | TEST(AssetTest, AssetRefTest0)
function TEST (line 24) | TEST(AssetTest, AssetRefTest1)
function TEST (line 43) | TEST(AssetTest, SaveLoadTest)
function TEST (line 56) | TEST(AssetTest, AsyncLoadTest)
function TEST (line 70) | TEST(AssetTest, PolySaveLoadTest)
FILE: Engine/Source/Runtime/Test/AssetTest.h
type EClass (line 12) | struct EClass
FILE: Engine/Source/Runtime/Test/ECSTest.cpp
function TEST (line 8) | TEST(ECSTest, EntityTest)
function TEST (line 34) | TEST(ECSTest, ComponentStaticTest)
function TEST (line 104) | TEST(ECSTest, ComponentDynamicTest)
function TEST (line 186) | TEST(ECSTest, GlobalComponentStaticTest)
function TEST (line 209) | TEST(ECSTest, GlobalComponentDynamicTest)
function TEST (line 235) | TEST(ECSTest, ComponentEventStaticTest)
function TEST (line 273) | TEST(ECSTest, ComponentEventDynamicTest)
function TEST (line 312) | TEST(ECSTest, GlobalComponentEventStaticTest)
function TEST (line 344) | TEST(ECSTest, GlobalComponentEventDynamicTest)
function TEST (line 377) | TEST(ECSTest, ObserverTest)
function TEST (line 408) | TEST(ECSTest, ECRegistryCopyTest)
function TEST (line 421) | TEST(ECSTest, ECSRegistrySaveLoadTest)
FILE: Engine/Source/Runtime/Test/ECSTest.h
type EClass (line 11) | struct EClass
function explicit (line 19) | explicit CompA(int inValue)
type EClass (line 27) | struct EClass
function explicit (line 35) | explicit CompB(float inValue)
type EClass (line 43) | struct EClass
type EClass (line 59) | struct EClass
FILE: Engine/Source/Runtime/Test/WorldTest.cpp
type WorldTest (line 11) | struct WorldTest : testing::Test {
method SetUp (line 12) | void SetUp() override
method TearDown (line 21) | void TearDown() override
function TEST_F (line 102) | TEST_F(WorldTest, BasicTest)
function TEST_F (line 165) | TEST_F(WorldTest, ConcurrentTest)
FILE: Engine/Source/Runtime/Test/WorldTest.h
type EClass (line 13) | struct EClass
type EClass (line 25) | struct EClass
function GBasicTest_ExpectVerifyResult (line 37) | struct EClass(globalComp) GBasicTest_ExpectVerifyResult {
FILE: Engine/Source/Test/Include/Test/Test.h
function namespace (line 9) | namespace Test {}
FILE: Engine/Source/Test/Src/Main.cpp
function main (line 8) | int main(int argc, char* argv[])
FILE: Sample/Base/Application.cpp
type std::hash<std::pair<int, int>> (line 14) | struct std::hash<std::pair<int, int>> {
function Camera (line 259) | Camera& Application::GetCamera() const
FILE: Sample/Base/Application.h
function class (line 23) | class Application {
FILE: Sample/Base/Camera.cpp
function FMat4x4 (line 95) | FMat4x4 Camera::GetProjectionMatrix() const
function FMat4x4 (line 100) | FMat4x4 Camera::GetViewMatrix() const
FILE: Sample/Base/Camera.h
function class (line 16) | class Camera {
FILE: Sample/RHI-ParallelCompute/ParallelCompute.cpp
class ParallelCompute (line 10) | class ParallelCompute final : public Application {
method ParallelCompute (line 13) | explicit ParallelCompute(const std::string& name)
method Setup (line 18) | void Setup()
method ComputeAndSaveResult (line 28) | void ComputeAndSaveResult()
method SelectGPU (line 49) | void SelectGPU()
method RequestDeviceAndFetchQueues (line 54) | void RequestDeviceAndFetchQueues()
method PrepareDataAndCreateGPURes (line 60) | void PrepareDataAndCreateGPURes()
method DealWithPipelineBindingOBjs (line 134) | void DealWithPipelineBindingOBjs()
method CreatePipeline (line 154) | void CreatePipeline()
method CreateCmdBuffAndSyncObj (line 163) | void CreateCmdBuffAndSyncObj()
method BuildCmdBufferAndSubmit (line 169) | void BuildCmdBufferAndSubmit()
type PackedVec (line 197) | struct PackedVec {
function main (line 225) | int main(int argc, char* argv[])
FILE: Sample/RHI-SSAO/GLTFParser.cpp
function FMat4x4 (line 13) | FMat4x4 Node::LocalMatrix() const
function FMat4x4 (line 18) | FMat4x4 Node::GetMatrix()
FILE: Sample/RHI-SSAO/GLTFParser.h
type TextureData (line 16) | struct TextureData {
type MaterialData (line 26) | struct MaterialData
type Vertex (line 32) | struct Vertex {
type Mesh (line 40) | struct Mesh {
FILE: Sample/RHI-SSAO/SSAOApplication.cpp
class SSAOApplication (line 15) | class SSAOApplication final : public Application {
method SSAOApplication (line 18) | explicit SSAOApplication(const std::string& n) : Application(n) {}
method OnCreate (line 22) | void OnCreate() override
method OnDrawFrame (line 44) | void OnDrawFrame() override
method OnDestroy (line 165) | void OnDestroy() override
type Renderable (line 204) | struct Renderable {
method Renderable (line 212) | Renderable(Instance& instance, Device& device, BindGroupLayout& bind...
type UBuffer (line 291) | struct UBuffer {
type UniformBuffers (line 296) | struct UniformBuffers {
type UBOSceneParams (line 303) | struct UBOSceneParams {
type UBOSSAOParams (line 311) | struct UBOSSAOParams {
type Noise (line 318) | struct Noise {
type ShaderObjects (line 323) | struct ShaderObjects {
type Pipelines (line 342) | struct Pipelines {
type PipelineLayouts (line 349) | struct PipelineLayouts {
type BindGroupLayouts (line 358) | struct BindGroupLayouts {
type BindGroups (line 365) | struct BindGroups {
type ColorAttachment (line 372) | struct ColorAttachment {
type QuadVertex (line 389) | struct QuadVertex {
method SelectGPU (line 394) | void SelectGPU()
method RequestDeviceAndFetchQueues (line 399) | void RequestDeviceAndFetchQueues()
method CreateSwapChain (line 407) | void CreateSwapChain()
method CreateVertexBuffer (line 447) | void CreateVertexBuffer()
method CreateIndexBuffer (line 468) | void CreateIndexBuffer()
method CreateQuadBuffer (line 489) | void CreateQuadBuffer()
method CreateShaderModules (line 540) | void CreateShaderModules()
method CreateSampler (line 552) | void CreateSampler()
method CreateCommandBuffer (line 557) | void CreateCommandBuffer()
method CreateSyncObjects (line 564) | void CreateSyncObjects()
method CreateBindGroupLayoutAndPipelineLayout (line 573) | void CreateBindGroupLayoutAndPipelineLayout()
method CreateBindGroup (line 647) | void CreateBindGroup()
method PrepareOffscreen (line 696) | void PrepareOffscreen()
method PrepareUniformBuffers (line 706) | void PrepareUniformBuffers()
method CreateDepthAttachment (line 817) | void CreateDepthAttachment() {
method CreateAttachments (line 839) | void CreateAttachments(PixelFormat format, ColorAttachment& attachment)
method CompileShaderAndCreateShaderModule (line 870) | void CompileShaderAndCreateShaderModule(UniquePtr<ShaderModule>& outSh...
method CreateUniformBuffer (line 877) | void CreateUniformBuffer(BufferUsageFlags flags, UBuffer* uBuffer, siz...
method CreatePipeline (line 898) | void CreatePipeline()
method InitCamera (line 994) | void InitCamera()
method LoadGLTF (line 1012) | void LoadGLTF()
method GenerateRenderables (line 1018) | void GenerateRenderables()
function main (line 1026) | int main(int argc, char* argv[])
FILE: Sample/RHI-TexSampling/TexSampling.cpp
class TexSamplingApplication (line 13) | class TexSamplingApplication final : public Application {
method TexSamplingApplication (line 16) | explicit TexSamplingApplication(const std::string& n) : Application(n) {}
method OnCreate (line 20) | void OnCreate() override
method OnDrawFrame (line 39) | void OnDrawFrame() override
method OnDestroy (line 76) | void OnDestroy() override
type Vertex (line 86) | struct Vertex {
method SelectGPU (line 93) | void SelectGPU()
method RequestDeviceAndFetchQueues (line 98) | void RequestDeviceAndFetchQueues()
method CreateSwapChain (line 106) | void CreateSwapChain()
method CreateVertexBuffer (line 146) | void CreateVertexBuffer()
method CreateIndexBuffer (line 176) | void CreateIndexBuffer()
method CreateTextureAndSampler (line 201) | void CreateTextureAndSampler()
method UpdateMVP (line 274) | void UpdateMVP()
method CreateUniformBuffer (line 285) | void CreateUniformBuffer()
method CreateShaderModules (line 302) | void CreateShaderModules()
method CreateBindGroupLayout (line 311) | void CreateBindGroupLayout()
method CreateBindGroup (line 323) | void CreateBindGroup()
method CreatePipelineLayout (line 335) | void CreatePipelineLayout()
method CreatePipeline (line 342) | void CreatePipeline()
method CreateSyncObjects (line 364) | void CreateSyncObjects()
method CreateCommandBuffer (line 373) | void CreateCommandBuffer()
function main (line 414) | int main(int argc, char* argv[])
FILE: Sample/RHI-Triangle/Triangle.cpp
type Vertex (line 12) | struct Vertex {
class TriangleApplication (line 17) | class TriangleApplication final : public Application {
method TriangleApplication (line 20) | explicit TriangleApplication(const std::string& n) : Application(n) {}
method OnCreate (line 24) | void OnCreate() override
method OnDrawFrame (line 38) | void OnDrawFrame() override
method OnDestroy (line 74) | void OnDestroy() override
method SelectGPU (line 84) | void SelectGPU()
method RequestDeviceAndFetchQueues (line 89) | void RequestDeviceAndFetchQueues()
method CreateSwapChain (line 97) | void CreateSwapChain()
method CreateVertexBuffer (line 137) | void CreateVertexBuffer()
method CreatePipelineLayout (line 166) | void CreatePipelineLayout()
method CreatePipeline (line 171) | void CreatePipeline()
method CreateSyncObjects (line 198) | void CreateSyncObjects()
method CreateCommandBuffer (line 207) | void CreateCommandBuffer()
function main (line 237) | int main(int argc, char* argv[])
FILE: Sample/Rendering-BaseTexture/BaseTexture.cpp
type Vertex (line 17) | struct Vertex {
type VertUniform (line 22) | struct VertUniform {
class BaseTexApp (line 52) | class BaseTexApp final : public Application {
function main (line 398) | int main(int argc, char* argv[])
FILE: Sample/Rendering-SSAO/GLTFParser.cpp
function FMat4x4 (line 13) | FMat4x4 Node::LocalMatrix() const
function FMat4x4 (line 18) | FMat4x4 Node::GetMatrix()
FILE: Sample/Rendering-SSAO/GLTFParser.h
type TextureData (line 16) | struct TextureData {
type MaterialData (line 26) | struct MaterialData
type Vertex (line 32) | struct Vertex {
type Mesh (line 40) | struct Mesh {
FILE: Sample/Rendering-SSAO/SSAOApplication.cpp
type QuadVertex (line 15) | struct QuadVertex {
type UBOSceneParams (line 20) | struct UBOSceneParams {
type UBOSSAOParams (line 28) | struct UBOSSAOParams {
type RenderMaterial (line 35) | struct RenderMaterial {
class SSAOApp (line 129) | class SSAOApp final : public Application {
method SSAOApp (line 132) | explicit SSAOApp(const std::string& n) : Application(n) {}
method OnCreate (line 136) | void OnCreate() override
method OnDrawFrame (line 163) | void OnDrawFrame() override
method OnDestroy (line 435) | void OnDestroy() override
type Renderable (line 510) | struct Renderable {
method Renderable (line 515) | Renderable(uint32_t idxCount, uint32_t firstIdx, UniquePtr<Texture>&...
method CompileAllShaders (line 526) | void CompileAllShaders() const
method CreateDevice (line 537) | void CreateDevice()
method CreateSurface (line 546) | void CreateSurface()
method FetchShaderInstances (line 551) | void FetchShaderInstances()
method CreateSwapChain (line 564) | void CreateSwapChain()
method CreateVertexAndIndexBuffer (line 594) | void CreateVertexAndIndexBuffer()
method CreateQuadBuffer (line 627) | void CreateQuadBuffer()
method CreateSamplers (line 666) | void CreateSamplers()
method CreateSyncObjects (line 675) | void CreateSyncObjects()
method PrepareGBuffer (line 682) | void PrepareGBuffer()
method PrepareSSAOTextures (line 737) | void PrepareSSAOTextures()
method PrepareUniformBuffers (line 766) | void PrepareUniformBuffers()
method GenerateNoiseTexture (line 842) | void GenerateNoiseTexture()
method GenerateRenderables (line 901) | void GenerateRenderables()
method InitCamera (line 970) | void InitCamera()
method LoadGLTF (line 988) | void LoadGLTF()
function main (line 995) | int main(int argc, char* argv[])
FILE: Sample/Rendering-Triangle/Triangle.cpp
type Vertex (line 16) | struct Vertex {
type PsUniform (line 46) | struct PsUniform {
class TriangleApplication (line 50) | class TriangleApplication final : public Application {
function main (line 300) | int main(int argc, char* argv[])
FILE: TestProject/Main.cpp
function main (line 3) | int main()
FILE: ThirdParty/ConanRecipes/assimp/conanfile.py
class AssimpConan (line 10) | class AssimpConan(ConanFile):
method layout (line 20) | def layout(self):
method validate (line 23) | def validate(self):
method requirements (line 26) | def requirements(self):
method build_requirements (line 29) | def build_requirements(self):
method source (line 33) | def source(self):
method generate (line 37) | def generate(self):
method build (line 48) | def build(self):
method package (line 53) | def package(self):
method package_info (line 57) | def package_info(self):
method test (line 64) | def test(self):
FILE: ThirdParty/ConanRecipes/assimp/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/assimp/test_package/test_package.cpp
function main (line 5) | int main(int argc, char **argv) {
FILE: ThirdParty/ConanRecipes/clipp/conanfile.py
class ClippConan (line 8) | class ClippConan(ConanFile):
method export_sources (line 17) | def export_sources(self):
method layout (line 20) | def layout(self):
method source (line 25) | def source(self):
method package (line 29) | def package(self):
method package_info (line 32) | def package_info(self):
method test (line 35) | def test(self):
FILE: ThirdParty/ConanRecipes/clipp/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/clipp/test_package/test_package.cpp
function main (line 8) | int main(int argc, char* argv[]) {
FILE: ThirdParty/ConanRecipes/debugbreak/conanfile.py
class DebugBreakConan (line 8) | class DebugBreakConan(ConanFile):
method layout (line 17) | def layout(self):
method source (line 22) | def source(self):
method package (line 26) | def package(self):
method package_info (line 29) | def package_info(self):
method test (line 32) | def test(self):
FILE: ThirdParty/ConanRecipes/debugbreak/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/debugbreak/test_package/test_package.cpp
function main (line 3) | int main(void) {
FILE: ThirdParty/ConanRecipes/dxc/conanfile.py
class DXCConan (line 10) | class DXCConan(ConanFile):
method layout (line 22) | def layout(self):
method validate (line 25) | def validate(self):
method build_requirements (line 28) | def build_requirements(self):
method source (line 32) | def source(self):
method generate (line 39) | def generate(self):
method build (line 46) | def build(self):
method package (line 55) | def package(self):
method package_info (line 65) | def package_info(self):
method test (line 71) | def test(self):
FILE: ThirdParty/ConanRecipes/dxc/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/dxc/test_package/test_package.cpp
function main (line 24) | int main(void) {
FILE: ThirdParty/ConanRecipes/glfw/conanfile.py
class GlfwConan (line 10) | class GlfwConan(ConanFile):
method layout (line 22) | def layout(self):
method validate (line 25) | def validate(self):
method build_requirements (line 28) | def build_requirements(self):
method source (line 32) | def source(self):
method generate (line 38) | def generate(self):
method build (line 45) | def build(self):
method package (line 50) | def package(self):
method package_info (line 54) | def package_info(self):
method test (line 60) | def test(self):
FILE: ThirdParty/ConanRecipes/glfw/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/glfw/test_package/test_package.cpp
function main (line 3) | int main(void) {
FILE: ThirdParty/ConanRecipes/libclang/conanfile.py
class LibclangConan (line 10) | class LibclangConan(ConanFile):
method layout (line 20) | def layout(self):
method validate (line 23) | def validate(self):
method build_requirements (line 26) | def build_requirements(self):
method source (line 30) | def source(self):
method generate (line 34) | def generate(self):
method build (line 42) | def build(self):
method package (line 50) | def package(self):
method package_info (line 53) | def package_info(self):
method test (line 62) | def test(self):
FILE: ThirdParty/ConanRecipes/libclang/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/libclang/test_package/test_package.cpp
function main (line 3) | int main(void) {
FILE: ThirdParty/ConanRecipes/molten-vk/conanfile.py
class MoltenVKConan (line 13) | class MoltenVKConan(ConanFile):
method layout (line 25) | def layout(self):
method validate (line 28) | def validate(self):
method build_requirements (line 31) | def build_requirements(self):
method source (line 35) | def source(self):
method generate (line 41) | def generate(self):
method build (line 48) | def build(self):
method package (line 73) | def package(self):
method package_info (line 78) | def package_info(self):
method test (line 85) | def test(self):
FILE: ThirdParty/ConanRecipes/molten-vk/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/molten-vk/test_package/test_package.cpp
function main (line 1) | int main(int argc, char* argv[])
FILE: ThirdParty/ConanRecipes/qt/conanfile.py
class QtConan (line 11) | class QtConan(ConanFile):
method layout (line 27) | def layout(self):
method validate (line 30) | def validate(self):
method build_requirements (line 33) | def build_requirements(self):
method source (line 46) | def source(self):
method generate (line 50) | def generate(self):
method build (line 87) | def build(self):
method package (line 92) | def package(self):
method package_info (line 96) | def package_info(self):
method test (line 101) | def test(self):
FILE: ThirdParty/ConanRecipes/qt/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/qt/test_package/test_package.cpp
function main (line 5) | int main(int argc, char *argv[])
FILE: ThirdParty/ConanRecipes/rapidjson/conanfile.py
class RapidJsonConan (line 9) | class RapidJsonConan(ConanFile):
method layout (line 18) | def layout(self):
method source (line 23) | def source(self):
method package (line 29) | def package(self):
method package_info (line 32) | def package_info(self):
method test (line 35) | def test(self):
FILE: ThirdParty/ConanRecipes/rapidjson/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/rapidjson/test_package/test_package.cpp
function main (line 3) | int main(void) {
FILE: ThirdParty/ConanRecipes/vulkan-utility-libraries/conanfile.py
class VulkanUtilityLibrariesConan (line 10) | class VulkanUtilityLibrariesConan(ConanFile):
method layout (line 22) | def layout(self):
method validate (line 25) | def validate(self):
method requirements (line 28) | def requirements(self):
method build_requirements (line 32) | def build_requirements(self):
method source (line 36) | def source(self):
method generate (line 41) | def generate(self):
method build (line 48) | def build(self):
method package (line 53) | def package(self):
method package_info (line 57) | def package_info(self):
method test (line 81) | def test(self):
FILE: ThirdParty/ConanRecipes/vulkan-utility-libraries/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/vulkan-utility-libraries/test_package/test_package.cpp
function main (line 4) | int main(int argc, char* argv[])
FILE: ThirdParty/ConanRecipes/vulkan-validationlayers/conanfile.py
class VulkanValidationLayersConan (line 12) | class VulkanValidationLayersConan(ConanFile):
method export_sources (line 24) | def export_sources(self):
method layout (line 27) | def layout(self):
method validate (line 30) | def validate(self):
method requirements (line 33) | def requirements(self):
method build_requirements (line 40) | def build_requirements(self):
method source (line 44) | def source(self):
method generate (line 49) | def generate(self):
method build (line 59) | def build(self):
method package (line 64) | def package(self):
method package_info (line 69) | def package_info(self):
method test (line 76) | def test(self):
FILE: ThirdParty/ConanRecipes/vulkan-validationlayers/test_package/conanfile.py
class TestPackageConan (line 7) | class TestPackageConan(ConanFile):
method layout (line 11) | def layout(self):
method requirements (line 14) | def requirements(self):
method build (line 17) | def build(self):
method test (line 22) | def test(self):
FILE: ThirdParty/ConanRecipes/vulkan-validationlayers/test_package/test_package.cpp
function main (line 1) | int main() {
FILE: Tool/MirrorTool/ExeSrc/Main.cpp
function ProcessHeaderDirs (line 17) | static std::vector<std::string> ProcessHeaderDirs(const std::vector<std:...
function main (line 34) | int main(int argc, char* argv[]) // NOLINT
FILE: Tool/MirrorTool/Include/MirrorTool/Generator.h
function namespace (line 13) | namespace MirrorTool {
FILE: Tool/MirrorTool/Include/MirrorTool/Parser.h
function namespace (line 16) | namespace MirrorTool {
FILE: Tool/MirrorTool/Src/Generator.cpp
type MirrorTool (line 16) | namespace MirrorTool {
function GetFullName (line 17) | static std::string GetFullName(const Node& node)
function GetMetaDataCode (line 25) | static std::string GetMetaDataCode(const Node& node)
function GetBestMatchHeaderPath (line 34) | static std::string GetBestMatchHeaderPath(const std::string& inputFile...
function GetHeaderNote (line 48) | static std::string GetHeaderNote()
function GetEnumCode (line 55) | static std::string GetEnumCode(const EnumInfo& enumInfo)
function GetNamespaceEnumsCode (line 74) | static std::string GetNamespaceEnumsCode(const NamespaceInfo& ns) // N...
function GetEnumUnloadCode (line 86) | static std::string GetEnumUnloadCode(const EnumInfo& enumInfo)
function GetNamespaceEnumsUnloadCode (line 96) | static std::string GetNamespaceEnumsUnloadCode(const NamespaceInfo& ns...
function GetEnumsCode (line 108) | static std::string GetEnumsCode(const MetaInfo& metaInfo, size_t uniqu...
function GetFieldAccessStr (line 133) | static std::string GetFieldAccessStr(FieldAccess access)
function GetFunctionOverloadMap (line 144) | static std::unordered_map<std::string, std::vector<const FuncInfo*>> G...
function GetOverloadFunctionFullNameWithParams (line 156) | static std::string GetOverloadFunctionFullNameWithParams(const FuncInf...
function GetOverloadFunctionPtrType (line 173) | static std::string GetOverloadFunctionPtrType(const FuncInfo& info, co...
function GetClassCode (line 189) | static std::string GetClassCode(const ClassInfo& clazz, bool dynamic) ...
function GetNamespaceClassesCode (line 307) | static std::string GetNamespaceClassesCode(const NamespaceInfo& ns, bo...
function GetClassesCode (line 319) | static std::string GetClassesCode(const MetaInfo& metaInfo, bool dynamic)
function GetNamespaceGlobalCode (line 329) | static std::string GetNamespaceGlobalCode(const NamespaceInfo& ns) // ...
function GetNamespaceGlobalUnloadCode (line 378) | static std::string GetNamespaceGlobalUnloadCode(const NamespaceInfo& ns)
function GetGlobalCode (line 412) | static std::string GetGlobalCode(const MetaInfo& metaInfo, size_t uniq...
type MirrorTool (line 438) | namespace MirrorTool {
function GetFullName (line 17) | static std::string GetFullName(const Node& node)
function GetMetaDataCode (line 25) | static std::string GetMetaDataCode(const Node& node)
function GetBestMatchHeaderPath (line 34) | static std::string GetBestMatchHeaderPath(const std::string& inputFile...
function GetHeaderNote (line 48) | static std::string GetHeaderNote()
function GetEnumCode (line 55) | static std::string GetEnumCode(const EnumInfo& enumInfo)
function GetNamespaceEnumsCode (line 74) | static std::string GetNamespaceEnumsCode(const NamespaceInfo& ns) // N...
function GetEnumUnloadCode (line 86) | static std::string GetEnumUnloadCode(const EnumInfo& enumInfo)
function GetNamespaceEnumsUnloadCode (line 96) | static std::string GetNamespaceEnumsUnloadCode(const NamespaceInfo& ns...
function GetEnumsCode (line 108) | static std::string GetEnumsCode(const MetaInfo& metaInfo, size_t uniqu...
function GetFieldAccessStr (line 133) | static std::string GetFieldAccessStr(FieldAccess access)
function GetFunctionOverloadMap (line 144) | static std::unordered_map<std::string, std::vector<const FuncInfo*>> G...
function GetOverloadFunctionFullNameWithParams (line 156) | static std::string GetOverloadFunctionFullNameWithParams(const FuncInf...
function GetOverloadFunctionPtrType (line 173) | static std::string GetOverloadFunctionPtrType(const FuncInfo& info, co...
function GetClassCode (line 189) | static std::string GetClassCode(const ClassInfo& clazz, bool dynamic) ...
function GetNamespaceClassesCode (line 307) | static std::string GetNamespaceClassesCode(const NamespaceInfo& ns, bo...
function GetClassesCode (line 319) | static std::string GetClassesCode(const MetaInfo& metaInfo, bool dynamic)
function GetNamespaceGlobalCode (line 329) | static std::string GetNamespaceGlobalCode(const NamespaceInfo& ns) // ...
function GetNamespaceGlobalUnloadCode (line 378) | static std::string GetNamespaceGlobalUnloadCode(const NamespaceInfo& ns)
function GetGlobalCode (line 412) | static std::string GetGlobalCode(const MetaInfo& metaInfo, size_t uniq...
FILE: Tool/MirrorTool/Src/Parser.cpp
function PrintDebugInfo (line 56) | static void PrintDebugInfo(const std::string& visitorName, CXCursor cursor)
type MirrorTool (line 68) | namespace MirrorTool {
function FieldAccess (line 74) | static FieldAccess GetFieldAccess(CX_CXXAccessSpecifier accessSpecifier)
function GetPureBaseClassName (line 84) | static std::string GetPureBaseClassName(const std::string& str)
function RemoveStrSpace (line 90) | static std::string RemoveStrSpace(const std::string& value)
function ParseMetaDatas (line 95) | static void ParseMetaDatas(Node& node, const std::string& metaDataStr)
function GetOuterName (line 108) | static std::string GetOuterName(const std::string& basic, const std::s...
function PopoutIfHaveNoMetaTag (line 114) | static bool PopoutIfHaveNoMetaTag(std::vector<T>& container, const std...
function ClearMetaTag (line 132) | static void ClearMetaTag(T& node, const std::string& tag)
function ApplyMetaFilter (line 143) | static void ApplyMetaFilter(std::vector<T>& container, const std::stri...
function UpdateConstructorName (line 150) | static void UpdateConstructorName(ClassConstructorInfo& info)
function NeedProcessClassFunctionCursor (line 162) | static bool NeedProcessClassFunctionCursor(const CXCursor& cursor)
function NeedProcessConstructorCursor (line 167) | static bool NeedProcessConstructorCursor(const CXCursor& cursor)
function DeclareVisitor (line 176) | DeclareVisitor(GlobalVariableVisitor, VariableInfo)
function DeclareVisitor (line 183) | DeclareVisitor(GlobalFunctionVisitor, FunctionInfo)
function DeclareVisitor (line 190) | DeclareVisitor(ClassVariableVisitor, ClassVariableInfo)
function DeclareVisitor (line 197) | DeclareVisitor(ClassFunctionVisitor, ClassFunctionInfo)
function DeclareVisitor (line 204) | DeclareVisitor(ClassConstructorVisitor, ClassConstructorInfo)
function DeclareVisitor (line 211) | DeclareVisitor(ClassVisitor, ClassInfo)
function DeclareVisitor (line 280) | DeclareVisitor(EnumElementVisitor, EnumElementInfo)
function DeclareVisitor (line 289) | DeclareVisitor(EnumVisitor, EnumInfo)
function DeclareVisitor (line 304) | DeclareVisitor(NamespaceVisitor, NamespaceInfo)
function DeclareVisitor (line 360) | DeclareVisitor(OutermostVisitor, MetaInfo)
type MirrorTool (line 415) | namespace MirrorTool {
function FieldAccess (line 74) | static FieldAccess GetFieldAccess(CX_CXXAccessSpecifier accessSpecifier)
function GetPureBaseClassName (line 84) | static std::string GetPureBaseClassName(const std::string& str)
function RemoveStrSpace (line 90) | static std::string RemoveStrSpace(const std::string& value)
function ParseMetaDatas (line 95) | static void ParseMetaDatas(Node& node, const std::string& metaDataStr)
function GetOuterName (line 108) | static std::string GetOuterName(const std::string& basic, const std::s...
function PopoutIfHaveNoMetaTag (line 114) | static bool PopoutIfHaveNoMetaTag(std::vector<T>& container, const std...
function ClearMetaTag (line 132) | static void ClearMetaTag(T& node, const std::string& tag)
function ApplyMetaFilter (line 143) | static void ApplyMetaFilter(std::vector<T>& container, const std::stri...
function UpdateConstructorName (line 150) | static void UpdateConstructorName(ClassConstructorInfo& info)
function NeedProcessClassFunctionCursor (line 162) | static bool NeedProcessClassFunctionCursor(const CXCursor& cursor)
function NeedProcessConstructorCursor (line 167) | static bool NeedProcessConstructorCursor(const CXCursor& cursor)
function DeclareVisitor (line 176) | DeclareVisitor(GlobalVariableVisitor, VariableInfo)
function DeclareVisitor (line 183) | DeclareVisitor(GlobalFunctionVisitor, FunctionInfo)
function DeclareVisitor (line 190) | DeclareVisitor(ClassVariableVisitor, ClassVariableInfo)
function DeclareVisitor (line 197) | DeclareVisitor(ClassFunctionVisitor, ClassFunctionInfo)
function DeclareVisitor (line 204) | DeclareVisitor(ClassConstructorVisitor, ClassConstructorInfo)
function DeclareVisitor (line 211) | DeclareVisitor(ClassVisitor, ClassInfo)
function DeclareVisitor (line 280) | DeclareVisitor(EnumElementVisitor, EnumElementInfo)
function DeclareVisitor (line 289) | DeclareVisitor(EnumVisitor, EnumInfo)
function DeclareVisitor (line 304) | DeclareVisitor(NamespaceVisitor, NamespaceInfo)
function DeclareVisitor (line 360) | DeclareVisitor(OutermostVisitor, MetaInfo)
FILE: Tool/MirrorTool/Test/Main.cpp
function AssertMetaDatasEqual (line 12) | void AssertMetaDatasEqual(const MetaDataMap& lhs, const MetaDataMap& rhs)
function AssertVectorEqual (line 23) | void AssertVectorEqual(const std::vector<T>& lhs, const std::vector<T>& ...
function AssertNodeEqual (line 31) | void AssertNodeEqual(const Node& lhs, const Node& rhs)
function AssertVariableInfoEqual (line 38) | void AssertVariableInfoEqual(const VariableInfo& lhs, const VariableInfo...
function AssertParametersEqual (line 44) | void AssertParametersEqual(const std::vector<ParamNameAndType>& lhs, con...
function AssertFunctionInfoEqual (line 52) | void AssertFunctionInfoEqual(const FunctionInfo& lhs, const FunctionInfo...
function AssertClassVariableInfoEqual (line 59) | void AssertClassVariableInfoEqual(const ClassVariableInfo& lhs, const Cl...
function AssertClassFunctionInfoEqual (line 65) | void AssertClassFunctionInfoEqual(const ClassFunctionInfo& lhs, const Cl...
function AssertClassVariableInfoVectorEqual (line 71) | void AssertClassVariableInfoVectorEqual(const std::vector<ClassVariableI...
function AssertClassFunctionInfoVectorEqual (line 78) | void AssertClassFunctionInfoVectorEqual(const std::vector<ClassFunctionI...
function AssertClassInfoEqual (line 85) | void AssertClassInfoEqual(const ClassInfo& lhs, const ClassInfo& rhs)
function AssertEnumInfoEqual (line 94) | void AssertEnumInfoEqual(const EnumInfo& lhs, const EnumInfo& rhs)
function AssertNamespaceInfoEqual (line 101) | void AssertNamespaceInfoEqual(const NamespaceInfo& lhs, const NamespaceI...
function TEST (line 121) | TEST(MirrorTest, ParserTest)
function TEST (line 161) | TEST(MirrorTest, GeneratorTest)
function main (line 172) | int main(int argc, char* argv[])
FILE: Tool/MirrorTool/Test/MirrorToolInput.h
function EEnum (line 9) | enum class EEnum() TestEnum {
FILE: conanfile.py
class ExplosionConan (line 3) | class ExplosionConan(ConanFile):
method requirements (line 7) | def requirements(self):
Condensed preview — 519 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,707K chars).
[
{
"path": ".clang-format",
"chars": 1926,
"preview": "# Generated from CLion C/C++ Code Style settings\nBasedOnStyle: LLVM\nAccessModifierOffset: -4\nAlignAfterOpenBracket: Alwa"
},
{
"path": ".clang-tidy",
"chars": 947,
"preview": "Checks: >\n -*,\n bugprone-*,\n modernize-*,\n performance-*,\n portability-*,\n readability-*,\n mpi-*,\n "
},
{
"path": ".gitattributes",
"chars": 40,
"preview": "ThirdParty/ConanRecipes/**/* text eol=lf"
},
{
"path": ".gitignore",
"chars": 351,
"preview": "# JetBrains\n.idea\n\n# Visual Studio Code\n.vscode\n\n# Binaries\ncmake-build*\nbuild*\n\n# Installed\nInstalled\n\n# 3rd\nThirdParty"
},
{
"path": "CMake/Common.cmake",
"chars": 1105,
"preview": "option(USE_UNITY_BUILD \"Use unity build\" ON)\noption(EXPORT_COMPILE_COMMANDS \"Whether to export all compile commands\" OFF"
},
{
"path": "CMake/Config.cmake.in",
"chars": 275,
"preview": "@PACKAGE_INIT@\n\nfile(GLOB_RECURSE cmake_libs ${CMAKE_CURRENT_LIST_DIR}/CMake/*.cmake)\nforeach (cmake_lib ${cmake_libs})\n"
},
{
"path": "CMake/Target.cmake",
"chars": 19542,
"preview": "include(GenerateExportHeader)\ninclude(CMakePackageConfigHelpers)\n\noption(BUILD_TEST \"Build unit tests\" ON)\n\nset(GENERATE"
},
{
"path": "CMakeLists.txt",
"chars": 1167,
"preview": "cmake_minimum_required(VERSION 3.25)\n\nset(CONAN_INSTALL_BUILD_CONFIGURATIONS \"Release\" CACHE STRING \"\" FORCE)\nset(CMAKE_"
},
{
"path": "Editor/CMakeLists.txt",
"chars": 5827,
"preview": "find_package(\n Qt6\n COMPONENTS Core Gui Widgets WebEngineWidgets\n REQUIRED\n)\nset(QT_ROOT ${QT6_INSTALL_PREFIX})"
},
{
"path": "Editor/Include/Editor/EditorEngine.h",
"chars": 411,
"preview": "//\n// Created by johnk on 2024/8/21.\n//\n\n#pragma once\n\n#include <Runtime/Engine.h>\n\nnamespace Editor {\n class EditorE"
},
{
"path": "Editor/Include/Editor/EditorModule.h",
"chars": 352,
"preview": "//\n// Created by johnk on 2024/8/21.\n//\n\n#pragma once\n\n#include <Runtime/Engine.h>\n\nnamespace Editor {\n class EditorM"
},
{
"path": "Editor/Include/Editor/Qt/EngineSerialization.h",
"chars": 9157,
"preview": "// Created by Kindem on 2025/8/17.\n//\n\n#pragma once\n\n#include <QString>\n#include <QList>\n#include <QSet>\n#include <QMap>"
},
{
"path": "Editor/Include/Editor/Qt/JsonSerialization.h",
"chars": 57947,
"preview": "//\n// Created by Kindem on 2025/8/18.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <utility>\n#include <string>\n#include"
},
{
"path": "Editor/Include/Editor/Qt/MirrorTemplateView.h",
"chars": 14327,
"preview": "//\n// Created by Kindem on 2025/8/26.\n//\n\n#pragma once\n\n#include <QList>\n#include <QMap>\n\n#include <Mirror/Mirror.h>\n\nna"
},
{
"path": "Editor/Include/Editor/WebUIServer.h",
"chars": 515,
"preview": "//\n// Created by johnk on 2025/8/8.\n//\n\n#pragma once\n\n#include <httplib.h>\n\n#include <Common/Concurrent.h>\n#include <Com"
},
{
"path": "Editor/Include/Editor/Widget/Editor.h",
"chars": 212,
"preview": "//\n// Created by Kindem on 2025/3/22.\n//\n\n#pragma once\n\n#include <QWidget>\n\nnamespace Editor {\n class ExplosionEditor"
},
{
"path": "Editor/Include/Editor/Widget/GraphicsSampleWidget.h",
"chars": 1900,
"preview": "//\n// Created by Kindem on 2025/3/16.\n//\n\n#pragma once\n\n#include <QWidget>\n#include <QBoxLayout>\n\n#include <Render/Shade"
},
{
"path": "Editor/Include/Editor/Widget/GraphicsWidget.h",
"chars": 611,
"preview": "//\n// Created by Kindem on 2025/3/16.\n//\n\n#pragma once\n\n#include <QWidget>\n#include <QTimer>\n\n#include <Common/Memory.h>"
},
{
"path": "Editor/Include/Editor/Widget/ProjectHub.h",
"chars": 1617,
"preview": "//\n// Created by johnk on 2025/8/3.\n//\n\n#pragma once\n\n#include <Editor/Widget/WebWidget.h>\n#include <Mirror/Meta.h>\n#inc"
},
{
"path": "Editor/Include/Editor/Widget/WebWidget.h",
"chars": 807,
"preview": "//\n// Created by johnk on 2025/8/9.\n//\n\n#pragma once\n\n#include <QWebChannel>\n#include <QWebEngineView>\n#include <QWebEng"
},
{
"path": "Editor/Resource/ProjectTemplates/Default/CMakeLists.txt",
"chars": 104,
"preview": "cmake_minimum_required(VERSION %{cmakeMinVersion})\nproject(%{projectName}%)\n\n%{findEngineCMakeScripts}%\n"
},
{
"path": "Editor/Shader/GraphicsWindowSample.esl",
"chars": 710,
"preview": "#include <Platform.esh>\n\nstruct FragmentInput {\n float4 position : SV_POSITION;\n float4 color : COLOR;\n};\n\n#if VER"
},
{
"path": "Editor/Src/EditorEngine.cpp",
"chars": 445,
"preview": "//\n// Created by johnk on 2024/8/21.\n//\n\n#include <Editor/EditorEngine.h>\n\nnamespace Editor {\n EditorEngine::~EditorE"
},
{
"path": "Editor/Src/EditorModule.cpp",
"chars": 535,
"preview": "//\n// Created by johnk on 2024/8/21.\n//\n\n#include <Editor/EditorEngine.h>\n#include <Editor/EditorModule.h>\n\nnamespace Ed"
},
{
"path": "Editor/Src/Main.cpp",
"chars": 2979,
"preview": "//\n// Created by johnk on 2024/3/31.\n//\n\n#include <QApplication>\n#include <QNetworkProxy>\n\n#include <Core/Cmdline.h>\n#in"
},
{
"path": "Editor/Src/Qt/MirrorTemplateView.cpp",
"chars": 3323,
"preview": "//\n// Created by Kindem on 2025/8/26.\n//\n\n#include <Editor/Qt/MirrorTemplateView.h>\n\nnamespace Editor {\n QListMetaVie"
},
{
"path": "Editor/Src/WebUIServer.cpp",
"chars": 3444,
"preview": "//\n// Created by johnk on 2025/8/8.\n//\n\n#include <QtEnvironmentVariables>\n#include <QByteArrayView>\n\n#include <Core/Cmdl"
},
{
"path": "Editor/Src/Widget/Editor.cpp",
"chars": 208,
"preview": "//\n// Created by Kindem on 2025/3/22.\n//\n\n#include <Editor/Widget/Editor.h>\n#include <Editor/Widget/moc_Editor.cpp>\n\nnam"
},
{
"path": "Editor/Src/Widget/GraphicsSampleWidget.cpp",
"chars": 11091,
"preview": "//\n// Created by Kindem on 2025/3/16.\n//\n\n#include <QResizeEvent>\n\n#include <Common/Time.h>\n#include <Editor/Widget/Grap"
},
{
"path": "Editor/Src/Widget/GraphicsWidget.cpp",
"chars": 1357,
"preview": "//\n// Created by Kindem on 2025/3/16.\n//\n\n#include <Editor/Widget/GraphicsWidget.h>\n#include <Editor/Widget/moc_Graphics"
},
{
"path": "Editor/Src/Widget/ProjectHub.cpp",
"chars": 2411,
"preview": "//\n// Created by johnk on 2025/8/3.\n//\n\n#include <QFileDialog>\n\n#include <Editor/Widget/ProjectHub.h>\n#include <Editor/W"
},
{
"path": "Editor/Src/Widget/WebWidget.cpp",
"chars": 1597,
"preview": "//\n// Created by johnk on 2025/8/9.\n//\n\n#include <Editor/Widget/WebWidget.h>\n#include <Editor/Widget/moc_WebWidget.cpp>\n"
},
{
"path": "Editor/Web/.gitignore",
"chars": 297,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
},
{
"path": "Editor/Web/.npmrc",
"chars": 17,
"preview": "package-lock=true"
},
{
"path": "Editor/Web/LICENSE",
"chars": 1063,
"preview": "MIT License\n\nCopyright (c) 2024 Next UI\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof"
},
{
"path": "Editor/Web/eslint.config.mjs",
"chars": 4137,
"preview": "import path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { defineConfig, globalIgnores } from \"es"
},
{
"path": "Editor/Web/index.html",
"chars": 892,
"preview": "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/"
},
{
"path": "Editor/Web/package.json",
"chars": 2060,
"preview": "{\n \"name\": \"vite-template\",\n \"private\": true,\n \"version\": \"0.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vit"
},
{
"path": "Editor/Web/postcss.config.js",
"chars": 69,
"preview": "export default {\n plugins: {\n \"@tailwindcss/postcss\": {},\n },\n};"
},
{
"path": "Editor/Web/src/App.tsx",
"chars": 249,
"preview": "import { Route, Routes } from 'react-router-dom';\nimport ProjectHubPage from '@/pages/project-hub';\n\nfunction App() {\n "
},
{
"path": "Editor/Web/src/main.tsx",
"chars": 503,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { BrowserRouter } from 'react-router-dom';\nim"
},
{
"path": "Editor/Web/src/pages/project-hub.tsx",
"chars": 4145,
"preview": "import { useEffect, useState } from 'react';\nimport { Tabs, Tab } from '@heroui/tabs';\nimport { User } from '@heroui/use"
},
{
"path": "Editor/Web/src/provider.tsx",
"chars": 496,
"preview": "import type { NavigateOptions } from 'react-router-dom';\nimport { HeroUIProvider } from '@heroui/system';\nimport { useHr"
},
{
"path": "Editor/Web/src/qwebchannel.d.ts",
"chars": 154,
"preview": "export { QWebChannel } from './qwebchannel.js';\n\ndeclare global {\n interface Window {\n qt: any;\n backend: any;\n "
},
{
"path": "Editor/Web/src/qwebchannel.js",
"chars": 15973,
"preview": "// Copyright (C) 2016 The Qt Company Ltd.\n// Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info"
},
{
"path": "Editor/Web/src/styles/globals.css",
"chars": 58,
"preview": "@import \"tailwindcss\";\n\n@config \"../../tailwind.config.js\""
},
{
"path": "Editor/Web/src/vite-env.d.ts",
"chars": 38,
"preview": "/// <reference types=\"vite/client\" />\n"
},
{
"path": "Editor/Web/tailwind.config.js",
"chars": 416,
"preview": "import {heroui} from \"@heroui/theme\"\n\n/** @type {import('tailwindcss').Config} */\nexport default {\n content: [\n \"./i"
},
{
"path": "Editor/Web/tsconfig.json",
"chars": 652,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"useDefineForClassFields\": true,\n \"lib\": [\"ES2020\", \"DOM\", \"DOM."
},
{
"path": "Editor/Web/tsconfig.node.json",
"chars": 233,
"preview": "{\n \"compilerOptions\": {\n \"composite\": true,\n \"skipLibCheck\": true,\n \"module\": \"ESNext\",\n \"moduleResolution\""
},
{
"path": "Editor/Web/vercel.json",
"chars": 69,
"preview": "{\n \"rewrites\": [\n { \"source\": \"/(.*)\", \"destination\": \"/\" }\n ]\n}"
},
{
"path": "Editor/Web/vite.config.ts",
"chars": 292,
"preview": "import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport tsconfigPaths from \"vite-tsconfig-"
},
{
"path": "Engine/CMakeLists.txt",
"chars": 667,
"preview": "add_subdirectory(Source)\n\nfunction(get_engine_shader_resources)\n set(options \"\")\n set(singleValueArgs OUTPUT)\n "
},
{
"path": "Engine/Shader/BasePassPS.esl",
"chars": 0,
"preview": ""
},
{
"path": "Engine/Shader/BasePassVS.esl",
"chars": 0,
"preview": ""
},
{
"path": "Engine/Shader/Platform.esh",
"chars": 214,
"preview": "#ifndef __PLATFORM_H__\n#define __PLATFORM_H__\n\n#if VULKAN\n#define VkBinding(x, y) [[vk::binding(x, y)]]\n#define VkLocati"
},
{
"path": "Engine/Source/CMakeLists.txt",
"chars": 374,
"preview": "if (${BUILD_TEST})\n add_subdirectory(Test)\nendif()\n\nadd_subdirectory(Common)\nadd_subdirectory(Core)\nadd_subdirectory("
},
{
"path": "Engine/Source/Common/CMakeLists.txt",
"chars": 352,
"preview": "file(GLOB_RECURSE sources Src/*.cpp)\nexp_add_library(\n NAME Common\n TYPE STATIC\n SRC ${sources}\n PUBLIC_INC "
},
{
"path": "Engine/Source/Common/Include/Common/Concepts.h",
"chars": 5223,
"preview": "//\n// Created by johnk on 2024/8/16.\n//\n\n#pragma once\n\n#include <type_traits>\n#include <string>\n#include <optional>\n#inc"
},
{
"path": "Engine/Source/Common/Include/Common/Concurrent.h",
"chars": 3562,
"preview": "//\n// Created by johnk on 2022/7/20.\n//\n\n#pragma once\n\n#include <string>\n#include <vector>\n#include <queue>\n#include <mu"
},
{
"path": "Engine/Source/Common/Include/Common/Container.h",
"chars": 47328,
"preview": "//\n// Created by johnk on 2023/12/4.\n//\n\n#pragma once\n\n#include <set>\n#include <vector>\n#include <unordered_set>\n#includ"
},
{
"path": "Engine/Source/Common/Include/Common/Debug.h",
"chars": 1558,
"preview": "//\n// Created by johnk on 9/4/2022.\n//\n\n#pragma once\n\n#include <string>\n#include <cstdint>\n\n#define Assert(expression) C"
},
{
"path": "Engine/Source/Common/Include/Common/Delegate.h",
"chars": 4549,
"preview": "//\n// Created by johnk on 2024/11/5.\n//\n\n#pragma once\n\n#include <utility>\n#include <vector>\n#include <functional>\n\n#incl"
},
{
"path": "Engine/Source/Common/Include/Common/DynamicLibrary.h",
"chars": 1244,
"preview": "//\n// Created by johnk on 28/12/2021.\n//\n\n#pragma once\n\n#include <string>\n\n#include <Common/Memory.h>\n\n#if PLATFORM_WIND"
},
{
"path": "Engine/Source/Common/Include/Common/File.h",
"chars": 548,
"preview": "//\n// Created by johnk on 2022/7/25.\n//\n\n#pragma once\n\n#include <string>\n\n#include <rapidjson/document.h>\n\nnamespace Com"
},
{
"path": "Engine/Source/Common/Include/Common/FileSystem.h",
"chars": 1725,
"preview": "//\n// Created by johnk on 2025/1/2.\n//\n\n#pragma once\n\n#include <filesystem>\n#include <functional>\n\nnamespace Common {\n "
},
{
"path": "Engine/Source/Common/Include/Common/Hash.h",
"chars": 4645,
"preview": "//\n// Created by johnk on 2022/6/28.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <string>\n\n#include <city.h>\n\nnamespac"
},
{
"path": "Engine/Source/Common/Include/Common/IO.h",
"chars": 820,
"preview": "//\n// Created by johnk on 2024/6/6.\n//\n\n#pragma once\n\n#include <iostream>\n\nnamespace Common {\n constexpr char newline"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Box.h",
"chars": 7663,
"preview": "//\n// Created by johnk on 2023/7/8.\n//\n\n#pragma once\n\n#include <Common/Math/Vector.h>\n#include <Common/Serialization.h>\n"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Color.h",
"chars": 7704,
"preview": "//\n// Created by johnk on 2023/7/7.\n//\n\n#pragma once\n\n#include <cstdint>\n\n#include <Common/Serialization.h>\n#include <Co"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Common.h",
"chars": 819,
"preview": "//\n// Created by johnk on 2023/5/10.\n//\n\n#pragma once\n\n#include <cmath>\n#include <numbers>\n\n#include <Common/Concepts.h>"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Half.h",
"chars": 14537,
"preview": "//\n// Created by johnk on 2023/5/9.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <cmath>\n#include <bit>\n\n#include <Comm"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Math.h",
"chars": 441,
"preview": "//\n// Created by Kindem on 2025/8/21.\n//\n\n#pragma once\n\n#include <Common/Math/Common.h>\n#include <Common/Math/Half.h>\n#i"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Matrix.h",
"chars": 38197,
"preview": "//\n// Created by johnk on 2023/5/15.\n//\n\n#pragma once\n\n#include <Common/Math/Vector.h>\n#include <Common/Serialization.h>"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Projection.h",
"chars": 14532,
"preview": "//\n// Created by johnk on 2023/6/26.\n//\n\n#pragma once\n\n#include <optional>\n\n#include <Common/Math/Matrix.h>\n#include <Co"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Quaternion.h",
"chars": 19298,
"preview": "//\n// Created by johnk on 2023/6/4.\n//\n\n#pragma once\n\n#include <Common/Math/Half.h>\n#include <Common/Math/Matrix.h>\n#inc"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Rect.h",
"chars": 7159,
"preview": "//\n// Created by johnk on 2023/7/8.\n//\n\n#pragma once\n\n#include <Common/Math/Vector.h>\n#include <Common/Serialization.h>\n"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Sphere.h",
"chars": 5614,
"preview": "//\n// Created by johnk on 2023/7/8.\n//\n\n#pragma once\n\n#include <Common/Math/Vector.h>\n#include <Common/Serialization.h>\n"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Transform.h",
"chars": 16259,
"preview": "//\n// Created by johnk on 2023/6/21.\n//\n\n#pragma once\n\n#include <Common/Math/Vector.h>\n#include <Common/Math/Matrix.h>\n#"
},
{
"path": "Engine/Source/Common/Include/Common/Math/Vector.h",
"chars": 21592,
"preview": "//\n// Created by johnk on 2023/5/9.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <utility>\n\n#include <Common/Math/Half."
},
{
"path": "Engine/Source/Common/Include/Common/Math/View.h",
"chars": 4442,
"preview": "//\n// Created by johnk on 2023/7/7.\n//\n\n#pragma once\n\n#include <Common/Math/Transform.h>\n#include <Common/Serialization."
},
{
"path": "Engine/Source/Common/Include/Common/Memory.h",
"chars": 12590,
"preview": "//\n// Created by johnk on 2023/4/13.\n//\n\n#pragma once\n\n#include <memory>\n#include <mutex>\n\n#include <Common/Utility.h>\n\n"
},
{
"path": "Engine/Source/Common/Include/Common/Platform.h",
"chars": 588,
"preview": "//\n// Created by johnk on 13/3/2022.\n//\n\n#pragma once\n\n#include <string>\n\nnamespace Common {\n enum class DevelopmentP"
},
{
"path": "Engine/Source/Common/Include/Common/Serialization.h",
"chars": 55168,
"preview": "//\n// Created by johnk on 2023/7/13.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <fstream>\n#include <string>\n#include "
},
{
"path": "Engine/Source/Common/Include/Common/String.h",
"chars": 8393,
"preview": "//\n// Created by johnk on 2022/5/2.\n//\n\n#pragma once\n\n#include <array>\n#include <string>\n#include <vector>\n#include <opt"
},
{
"path": "Engine/Source/Common/Include/Common/Time.h",
"chars": 1822,
"preview": "//\n// Created by johnk on 2025/1/14.\n//\n\n#pragma once\n\n#include <chrono>\n\nnamespace Common {\n class Time;\n class A"
},
{
"path": "Engine/Source/Common/Include/Common/Utility.h",
"chars": 7271,
"preview": "//\n// Created by johnk on 2021/12/19.\n//\n\n#pragma once\n\n#include <functional>\n#include <concepts>\n#include <cstdint>\n#in"
},
{
"path": "Engine/Source/Common/Src/Concurrent.cpp",
"chars": 3643,
"preview": "//\n// Created by johnk on 2024/4/14.\n//\n\n#if PLATFORM_WINDOWS\n#include <windows.h>\n#else\n#include <pthread.h>\n#endif\n\n#i"
},
{
"path": "Engine/Source/Common/Src/Debug.cpp",
"chars": 669,
"preview": "//\n// Created by johnk on 2024/4/14.\n//\n\n#if BUILD_CONFIG_DEBUG\n#include <debugbreak.h>\n#endif\n\n#include <Common/Debug.h"
},
{
"path": "Engine/Source/Common/Src/DynamicLibrary.cpp",
"chars": 3437,
"preview": "//\n// Created by johnk on 28/12/2021.\n//\n\n#include <utility>\n\n#include <Common/DynamicLibrary.h>\n#include <Common/Debug."
},
{
"path": "Engine/Source/Common/Src/File.cpp",
"chars": 2423,
"preview": "//\n// Created by johnk on 2024/4/14.\n//\n\n#include <fstream>\n#include <cstdio>\n\n#include <rapidjson/filereadstream.h>\n#in"
},
{
"path": "Engine/Source/Common/Src/FileSystem.cpp",
"chars": 4681,
"preview": "//\n// Created by johnk on 2025/1/2.\n//\n\n#include <Common/FileSystem.h>\n#include <Common/String.h>\n\nnamespace Common::Int"
},
{
"path": "Engine/Source/Common/Src/Hash.cpp",
"chars": 660,
"preview": "//\n// Created by johnk on 2024/4/14.\n//\n\n#include <Common/Hash.h>\n\nnamespace Common {\n uint32_t HashUtils::StrCrc32(c"
},
{
"path": "Engine/Source/Common/Src/IO.cpp",
"chars": 374,
"preview": "//\n// Created by johnk on 2024/6/6.\n//\n\n#include <Common/IO.h>\n\nnamespace Common {\n ScopedCoutFlusher::ScopedCoutFlus"
},
{
"path": "Engine/Source/Common/Src/Math/Color.cpp",
"chars": 3999,
"preview": "//\n// Created by johnk on 2023/8/17.\n//\n\n#include <cmath>\n#include <sstream>\n\n#include <Common/Math/Color.h>\n#include <C"
},
{
"path": "Engine/Source/Common/Src/Platform.cpp",
"chars": 452,
"preview": "//\n// Created by johnk on 2025/12/21.\n//\n\n#if PLATFORM_WINDOWS\n#include <windows.h>\n#else\n#include <cstdlib>\n#endif\n\n#in"
},
{
"path": "Engine/Source/Common/Src/Serialization.cpp",
"chars": 358,
"preview": "//\n// Created by johnk on 2023/7/13.\n//\n\n#include <Common/Serialization.h>\n\nnamespace Common {\n BinarySerializeStream"
},
{
"path": "Engine/Source/Common/Src/String.cpp",
"chars": 3992,
"preview": "//\n// Created by johnk on 2024/4/14.\n//\n\n#include <locale>\n#include <codecvt>\n#include <regex>\n\n#include <Common/String."
},
{
"path": "Engine/Source/Common/Src/Time.cpp",
"chars": 4984,
"preview": "//\n// Created by johnk on 2025/1/14.\n//\n\n#include <sstream>\n\n#include <Common/Time.h>\n#include <Common/Concepts.h>\n#incl"
},
{
"path": "Engine/Source/Common/Test/ConcurrentTest.cpp",
"chars": 3300,
"preview": "//\n// Created by johnk on 2022/7/20.\n//\n\n#include <Test/Test.h>\n\n#include <Common/Concurrent.h>\n\nTEST(ConcurrentTest, Na"
},
{
"path": "Engine/Source/Common/Test/ContainerTest.cpp",
"chars": 12940,
"preview": "//\n// Created by johnk on 2023/12/5.\n//\n\n#include <Test/Test.h>\n#include <Common/Container.h>\nusing namespace Common;\n\ne"
},
{
"path": "Engine/Source/Common/Test/DelegateTest.cpp",
"chars": 829,
"preview": "//\n// Created by johnk on 2024/11/5.\n//\n\n#include <Common/Delegate.h>\n#include <gtest/gtest.h>\n\nstatic int counter = 0;\n"
},
{
"path": "Engine/Source/Common/Test/FileSystemTest.cpp",
"chars": 111,
"preview": "//\n// Created by johnk on 2025/1/3.\n//\n\n#include <Test/Test.h>\n\nTEST(FileSystemTest, PathTest)\n{\n // TODO\n}\n"
},
{
"path": "Engine/Source/Common/Test/FileTest.cpp",
"chars": 440,
"preview": "//\n// Created by johnk on 2025/7/8.\n//\n\n#include <Common/File.h>\n#include <Common/FileSystem.h>\n#include <Test/Test.h>\n\n"
},
{
"path": "Engine/Source/Common/Test/HashTest.cpp",
"chars": 699,
"preview": "//\n// Created by johnk on 2022/7/3.\n//\n\n#include <string_view>\n\n#include <Test/Test.h>\n\n#include <Common/Hash.h>\n\nTEST(H"
},
{
"path": "Engine/Source/Common/Test/MathTest.cpp",
"chars": 25887,
"preview": "//\n// Created by Zach Lee on 2022/9/12.\n//\n\n#include <Test/Test.h>\n\n#include <Common/Math/Vector.h>\n#include <Common/Mat"
},
{
"path": "Engine/Source/Common/Test/MemoryTest.cpp",
"chars": 3217,
"preview": "//\n// Created by johnk on 2023/4/14.\n//\n\n#include <Test/Test.h>\n\n#include <Common/Memory.h>\nusing namespace Common;\n\nstr"
},
{
"path": "Engine/Source/Common/Test/SerializationTest.cpp",
"chars": 9148,
"preview": "//\n// Created by johnk on 2023/7/13.\n//\n\n#include <Common/Memory.h>\n#include <SerializationTest.h>\n\nusing namespace Comm"
},
{
"path": "Engine/Source/Common/Test/SerializationTest.h",
"chars": 3548,
"preview": "//\n// Created by johnk on 2024/9/8.\n//\n\n#pragma once\n\n#include <rapidjson/writer.h>\n\n#include <Test/Test.h>\n#include <Co"
},
{
"path": "Engine/Source/Common/Test/StringTest.cpp",
"chars": 4089,
"preview": "//\n// Created by johnk on 2022/6/22.\n//\n\n#include <Test/Test.h>\n\n#include <Common/String.h>\nusing namespace Common;\n\nTES"
},
{
"path": "Engine/Source/Common/Test/UtilityTest.cpp",
"chars": 257,
"preview": "//\n// Created by johnk on 2024/5/4.\n//\n\n#include <Test/Test.h>\n\n#include <Common/Utility.h>\nusing namespace Common;\n\nTES"
},
{
"path": "Engine/Source/Core/CMakeLists.txt",
"chars": 457,
"preview": "set(generated_include_dir ${GENERATED_DIR}/Configure/Core/Include)\n\nconfigure_file(\n Template/EngineVersion.h.in\n "
},
{
"path": "Engine/Source/Core/Include/Core/Cmdline.h",
"chars": 4148,
"preview": "//\n// Created by johnk on 2023/7/25.\n//\n\n#pragma once\n\n#include <clipp.h>\n\n#include <string>\n#include <unordered_map>\n\n#"
},
{
"path": "Engine/Source/Core/Include/Core/Console.h",
"chars": 17919,
"preview": "//\n// Created by johnk on 2025/1/16.\n//\n\n#pragma once\n\n#include <unordered_map>\n\n#include <Common/Concepts.h>\n#include <"
},
{
"path": "Engine/Source/Core/Include/Core/Log.h",
"chars": 2153,
"preview": "//\n// Created by johnk on 2025/1/13.\n//\n\n#pragma once\n\n#include <iostream>\n#include <fstream>\n#include <format>\n\n#includ"
},
{
"path": "Engine/Source/Core/Include/Core/Module.h",
"chars": 3493,
"preview": "//\n// Created by johnk on 2023/8/2.\n//\n\n#pragma once\n\n#include <string>\n#include <optional>\n#include <unordered_map>\n\n#i"
},
{
"path": "Engine/Source/Core/Include/Core/Paths.h",
"chars": 2229,
"preview": "//\n// Created by johnk on 2023/7/31.\n//\n\n#pragma once\n\n#include <string>\n\n#include <Core/Api.h>\n#include <Common/FileSys"
},
{
"path": "Engine/Source/Core/Include/Core/Thread.h",
"chars": 943,
"preview": "//\n// Created by johnk on 2025/1/17.\n//\n\n#pragma once\n\n#include <cstdint>\n\n#include <Core/Api.h>\n\nnamespace Core {\n e"
},
{
"path": "Engine/Source/Core/Include/Core/Uri.h",
"chars": 1773,
"preview": "//\n// Created by johnk on 2023/10/11.\n//\n\n#pragma once\n\n#include <Core/Paths.h>\n#include <Common/Serialization.h>\n\nnames"
},
{
"path": "Engine/Source/Core/Src/Cmdline.cpp",
"chars": 1326,
"preview": "//\n// Created by johnk on 2023/7/25.\n//\n\n#include <sstream>\n\n#include <Core/Cmdline.h>\n#include <Core/Paths.h>\n#include "
},
{
"path": "Engine/Source/Core/Src/Console.cpp",
"chars": 4265,
"preview": "//\n// Created by johnk on 2025/1/16.\n//\n\n#include <ranges>\n#include <vector>\n\n#include <Common/File.h>\n#include <Common/"
},
{
"path": "Engine/Source/Core/Src/Log.cpp",
"chars": 2911,
"preview": "//\n// Created by johnk on 2025/1/13.\n//\n\n#include <Core/Log.h>\n#include <Common/FileSystem.h>\n#include <Common/IO.h>\n\nna"
},
{
"path": "Engine/Source/Core/Src/Module.cpp",
"chars": 5002,
"preview": "//\n// Created by johnk on 2023/8/2.\n//\n\n#include <Core/Module.h>\n#include <Core/Paths.h>\n#include <Common/String.h>\n\nnam"
},
{
"path": "Engine/Source/Core/Src/Paths.cpp",
"chars": 6676,
"preview": "//\n// Created by johnk on 2023/7/31.\n//\n\n#include <Common/Debug.h>\n#include <Common/String.h>\n#include <Core/Paths.h>\n\nn"
},
{
"path": "Engine/Source/Core/Src/Thread.cpp",
"chars": 1735,
"preview": "//\n// Created by johnk on 2025/1/17.\n//\n\n#include <thread>\n\n#include <Core/Thread.h>\n\nnamespace Core {\n static auto m"
},
{
"path": "Engine/Source/Core/Src/Uri.cpp",
"chars": 1589,
"preview": "//\n// Created by johnk on 2023/10/11.\n//\n\n#include <unordered_map>\n\n#include <Core/Uri.h>\n#include <Common/String.h>\n#in"
},
{
"path": "Engine/Source/Core/Template/EngineVersion.h.in",
"chars": 263,
"preview": "//\n// generated by cmake configure tool, do not modify this file manually\n//\n\n#pragma once\n\n#define ENGINE_VERSION_MAJOR"
},
{
"path": "Engine/Source/Core/Test/CmdlineTest.cpp",
"chars": 1293,
"preview": "//\n// Created by johnk on 2023/7/25.\n//\n\n#include <Test/Test.h>\n\n#include <Core/Cmdline.h>\n\nCore::CmdlineArgValue<bool> "
},
{
"path": "Engine/Source/Core/Test/ConsoleTest.cpp",
"chars": 742,
"preview": "//\n// Created by johnk on 2025/2/27.\n//\n\n#include <string>\n\n#include <Test/Test.h>\n#include <Core/Console.h>\n\nstatic Cor"
},
{
"path": "Engine/Source/Core/Test/UriTest.cpp",
"chars": 1622,
"preview": "//\n// Created by johnk on 2025/2/21.\n//\n\n#include <Test/Test.h>\n#include <Core/Uri.h>\n\nTEST(UriTest, BasicTest)\n{\n co"
},
{
"path": "Engine/Source/Launch/CMakeLists.txt",
"chars": 163,
"preview": "file(GLOB_RECURSE sources Src/*.cpp)\nexp_add_library(\n NAME Launch\n TYPE STATIC\n SRC ${sources}\n PUBLIC_INC "
},
{
"path": "Engine/Source/Launch/Include/Launch/GameApplication.h",
"chars": 621,
"preview": "//\n// Created by johnk on 2025/3/24.\n//\n\n#pragma once\n\n#include <Common/Memory.h>\n#include <Launch/GameViewport.h>\n#incl"
},
{
"path": "Engine/Source/Launch/Include/Launch/GameClient.h",
"chars": 490,
"preview": "//\n// Created by johnk on 2025/2/19.\n//\n\n#pragma once\n\n#include <Runtime/Client.h>\n#include <Runtime/World.h>\n\nnamespace"
},
{
"path": "Engine/Source/Launch/Include/Launch/GameViewport.h",
"chars": 1462,
"preview": "//\n// Created by johnk on 2025/2/19.\n//\n\n#pragma once\n\n#include <GLFW/glfw3.h>\n#if PLATFORM_WINDOWS\n#define GLFW_EXPOSE_"
},
{
"path": "Engine/Source/Launch/Src/GameApplication.cpp",
"chars": 2360,
"preview": "//\n// Created by johnk on 2025/3/24.\n//\n\n#include <Common/Time.h>\n#include <Launch/GameApplication.h>\n#include <Core/Cmd"
},
{
"path": "Engine/Source/Launch/Src/GameClient.cpp",
"chars": 490,
"preview": "//\n// Created by johnk on 2025/2/19.\n//\n\n#include <Launch/GameClient.h>\n#include <Launch/GameViewport.h>\n\nnamespace Laun"
},
{
"path": "Engine/Source/Launch/Src/GameViewport.cpp",
"chars": 3885,
"preview": "//\n// Created by johnk on 2025/2/19.\n//\n\n#include <Launch/GameViewport.h>\n#include <Runtime/Engine.h>\n\nnamespace Launch:"
},
{
"path": "Engine/Source/Launch/Src/Main.cpp",
"chars": 233,
"preview": "//\n// Created by johnk on 2025/2/19.\n//\n\n#include <Launch/GameApplication.h>\n\nint main(int argc, char* argv[])\n{\n Lau"
},
{
"path": "Engine/Source/Mirror/CMakeLists.txt",
"chars": 286,
"preview": "file(GLOB sources Src/*.cpp)\nexp_add_library(\n NAME Mirror\n TYPE SHARED\n SRC ${sources}\n PUBLIC_INC Include\n"
},
{
"path": "Engine/Source/Mirror/Include/Mirror/Meta.h",
"chars": 1056,
"preview": "//\n// Created by johnk on 2022/11/20.\n//\n\n#pragma once\n\n#if __clang__\n#define EProperty(...) __attribute__((annotate(\"pr"
},
{
"path": "Engine/Source/Mirror/Include/Mirror/Mirror.h",
"chars": 166122,
"preview": "//\n// Created by johnk on 2022/9/21.\n//\n\n#pragma once\n\n#include <vector>\n#include <array>\n#include <unordered_map>\n#incl"
},
{
"path": "Engine/Source/Mirror/Include/Mirror/Registry.h",
"chars": 26711,
"preview": "//\n// Created by johnk on 2022/9/10.\n//\n\n#pragma once\n\n#include <Common/Debug.h>\n#include <Common/Container.h>\n#include "
},
{
"path": "Engine/Source/Mirror/Src/Mirror.cpp",
"chars": 66718,
"preview": "//\n// Created by johnk on 2022/9/21.\n//\n\n#include <ranges>\n#include <utility>\n#include <sstream>\n\n#include <Mirror/Mirro"
},
{
"path": "Engine/Source/Mirror/Src/Registry.cpp",
"chars": 1725,
"preview": "//\n// Created by johnk on 2023/10/31.\n//\n\n#include <utility>\n\n#include <Mirror/Registry.h>\n\nnamespace Mirror::Internal {"
},
{
"path": "Engine/Source/Mirror/Test/AnyTest.cpp",
"chars": 45054,
"preview": "//\n// Created by johnk on 2022/9/5.\n//\n\n#include <string>\n#include <vector>\n#include <unordered_map>\n\n#include <Test/Tes"
},
{
"path": "Engine/Source/Mirror/Test/AnyTest.h",
"chars": 2053,
"preview": "//\n// Created by johnk on 2024/9/4.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <string>\n\n#include <Mirror/Meta.h>\n\nst"
},
{
"path": "Engine/Source/Mirror/Test/RegistryTest.cpp",
"chars": 6398,
"preview": "//\n// Created by johnk on 2022/9/29.\n//\n\n#include <Test/Test.h>\n\n#include <RegistryTest.h>\n#include <Mirror/Mirror.h>\n\n#"
},
{
"path": "Engine/Source/Mirror/Test/RegistryTest.h",
"chars": 1173,
"preview": "//\n// Created by johnk on 2024/9/4.\n//\n\n#pragma once\n\n#include <Mirror/Meta.h>\n\nEProperty(testKey=v0) extern int v0;\n\nEF"
},
{
"path": "Engine/Source/Mirror/Test/SerializationTest.cpp",
"chars": 8412,
"preview": "//\n// Created by johnk on 2023/4/23.\n//\n\n#include <rapidjson/stringbuffer.h>\n#include <rapidjson/writer.h>\n\n#include <Te"
},
{
"path": "Engine/Source/Mirror/Test/SerializationTest.h",
"chars": 1793,
"preview": "//\n// Created by johnk on 2024/9/5.\n//\n\n#pragma once\n\n#include <string>\n#include <vector>\n#include <unordered_set>\n#incl"
},
{
"path": "Engine/Source/Mirror/Test/TypeInfoTest.cpp",
"chars": 1920,
"preview": "//\n// Created by johnk on 2022/9/11.\n//\n\n#include <type_traits>\n\n#include <Test/Test.h>\n#include <Mirror/Registry.h>\n\nin"
},
{
"path": "Engine/Source/RHI/CMakeLists.txt",
"chars": 139,
"preview": "file(GLOB sources Src/*.cpp)\nexp_add_library(\n NAME RHI\n TYPE STATIC\n SRC ${sources}\n PUBLIC_INC Include\n "
},
{
"path": "Engine/Source/RHI/Include/RHI/BindGroup.h",
"chars": 1025,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#pragma once\n\n#include <variant>\n#include <utility>\n\n#include <Common/Utility.h"
},
{
"path": "Engine/Source/RHI/Include/RHI/BindGroupLayout.h",
"chars": 1448,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#pragma once\n\n#include <variant>\n#include <string>\n\n#include <Common/Utility.h>"
},
{
"path": "Engine/Source/RHI/Include/RHI/Buffer.h",
"chars": 1341,
"preview": "//\n// Created by johnk on 2022/1/23.\n//\n\n#pragma once\n\n#include <Common/Utility.h>\n#include <RHI/Common.h>\n#include <str"
},
{
"path": "Engine/Source/RHI/Include/RHI/BufferView.h",
"chars": 1696,
"preview": "//\n// Created by johnk on 20/3/2022.\n//\n\n#pragma once\n\n#include <cstddef>\n#include <variant>\n\n#include <Common/Utility.h"
},
{
"path": "Engine/Source/RHI/Include/RHI/CommandBuffer.h",
"chars": 374,
"preview": "//\n// Created by johnk on 21/2/2022.\n//\n\n#pragma once\n\n#include <Common/Utility.h>\n#include <RHI/Common.h>\n\nnamespace RH"
},
{
"path": "Engine/Source/RHI/Include/RHI/CommandRecorder.h",
"chars": 13715,
"preview": "//\n// Created by johnk on 21/2/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <optional>\n\n#include <Common/Utility."
},
{
"path": "Engine/Source/RHI/Include/RHI/Common.h",
"chars": 9074,
"preview": "//\n// Created by johnk on 10/1/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <type_traits>\n\n#include <Common/Utili"
},
{
"path": "Engine/Source/RHI/Include/RHI/Device.h",
"chars": 3347,
"preview": "//\n// Created by johnk on 15/1/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n\n#include <Common/Utility.h>\n#include <RHI/Com"
},
{
"path": "Engine/Source/RHI/Include/RHI/Gpu.h",
"chars": 633,
"preview": "//\n// Created by johnk on 12/1/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n\n#include <Common/Utility.h>\n#include <RHI/Com"
},
{
"path": "Engine/Source/RHI/Include/RHI/Instance.h",
"chars": 930,
"preview": "//\n// Created by johnk on 9/1/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n\n#include <Common/Utility.h>\n\n#include <RHI/Com"
},
{
"path": "Engine/Source/RHI/Include/RHI/Pipeline.h",
"chars": 11242,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#pragma once\n\n#include <string>\n#include <variant>\n\n#include <Common/Utility.h>"
},
{
"path": "Engine/Source/RHI/Include/RHI/PipelineLayout.h",
"chars": 1274,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <Common/Utility.h>\n#include <RHI/RHI."
},
{
"path": "Engine/Source/RHI/Include/RHI/Queue.h",
"chars": 1050,
"preview": "//\n// Created by johnk on 15/1/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n#include <vector>\n\n#include <Common/Utility.h>"
},
{
"path": "Engine/Source/RHI/Include/RHI/RHI.h",
"chars": 649,
"preview": "//\n// Created by johnk on 19/4/2022.\n//\n\n#pragma once\n\n#include <RHI/Common.h>\n#include <RHI/Instance.h>\n#include <RHI/G"
},
{
"path": "Engine/Source/RHI/Include/RHI/RHIModule.h",
"chars": 303,
"preview": "//\n// Created by johnk on 2023/8/7.\n//\n\n#pragma once\n\n#include <Core/Module.h>\n#include <RHI/Instance.h>\n\nnamespace RHI "
},
{
"path": "Engine/Source/RHI/Include/RHI/Sampler.h",
"chars": 1409,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#pragma once\n\n#include <Common/Utility.h>\n#include <RHI/Common.h>\n#include <str"
},
{
"path": "Engine/Source/RHI/Include/RHI/ShaderModule.h",
"chars": 906,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#pragma once\n\n#include <string>\n#include <vector>\n\n#include <Common/Utility.h>\n"
},
{
"path": "Engine/Source/RHI/Include/RHI/Surface.h",
"chars": 506,
"preview": "//\n// Created by johnk on 2023/4/17.\n//\n\n#pragma once\n\n#include <Common/Utility.h>\n\nnamespace RHI {\n struct SurfaceCr"
},
{
"path": "Engine/Source/RHI/Include/RHI/SwapChain.h",
"chars": 1374,
"preview": "//\n// Created by johnk on 28/3/2022.\n//\n\n#pragma once\n\n#include <cstdint>\n\n#include <Common/Utility.h>\n#include <RHI/Com"
},
{
"path": "Engine/Source/RHI/Include/RHI/Synchronous.h",
"chars": 1384,
"preview": "//\n// Created by johnk on 30/3/2022.\n//\n\n#pragma once\n\n#include <Common/Utility.h>\n#include <RHI/Common.h>\n#include <RHI"
},
{
"path": "Engine/Source/RHI/Include/RHI/Texture.h",
"chars": 1705,
"preview": "//\n// Created by johnk on 2022/1/23.\n//\n\n#pragma once\n\n#include <Common/Utility.h>\n#include <RHI/Common.h>\n#include <str"
},
{
"path": "Engine/Source/RHI/Include/RHI/TextureView.h",
"chars": 1439,
"preview": "//\n// Created by johnk on 2022/1/23.\n//\n\n#pragma once\n\n#include <Common/Utility.h>\n#include <Common/Hash.h>\n#include <RH"
},
{
"path": "Engine/Source/RHI/Src/BindGroup.cpp",
"chars": 749,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#include <RHI/BindGroup.h>\n\n#include <utility>\n\nnamespace RHI {\n BindGroupEn"
},
{
"path": "Engine/Source/RHI/Src/BindGroupLayout.cpp",
"chars": 1277,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#include <RHI/BindGroupLayout.h>\n\nnamespace RHI {\n HlslBinding::HlslBinding("
},
{
"path": "Engine/Source/RHI/Src/Buffer.cpp",
"chars": 1781,
"preview": "//\n// Created by johnk on 2022/1/23.\n//\n\n#include <RHI/Buffer.h>\n\nnamespace RHI {\n BufferCreateInfo::BufferCreateInfo"
},
{
"path": "Engine/Source/RHI/Src/BufferView.cpp",
"chars": 1965,
"preview": "//\n// Created by johnk on 20/3/2022.\n//\n\n#include <RHI/BufferView.h>\n\nnamespace RHI {\n VertexBufferViewInfo::VertexBu"
},
{
"path": "Engine/Source/RHI/Src/CommandBuffer.cpp",
"chars": 185,
"preview": "//\n// Created by johnk on 21/2/2022.\n//\n\n#include <RHI/CommandBuffer.h>\n\nnamespace RHI {\n CommandBuffer::CommandBuffe"
},
{
"path": "Engine/Source/RHI/Src/CommandRecorder.cpp",
"chars": 6329,
"preview": "//\n// Created by johnk on 21/2/2022.\n//\n\n#include <RHI/CommandRecorder.h>\n\nnamespace RHI {\n TextureSubResourceInfo::T"
},
{
"path": "Engine/Source/RHI/Src/Common.cpp",
"chars": 761,
"preview": "//\n// Created by johnk on 2023/3/25.\n//\n\n#include <RHI/Common.h>\n\nnamespace RHI {\n size_t GetBytesPerPixel(PixelForma"
},
{
"path": "Engine/Source/RHI/Src/Device.cpp",
"chars": 528,
"preview": "//\n// Created by johnk on 15/1/2022.\n//\n\n#include <RHI/Device.h>\n\nnamespace RHI {\n QueueRequestInfo::QueueRequestInfo"
},
{
"path": "Engine/Source/RHI/Src/Gpu.cpp",
"chars": 135,
"preview": "//\n// Created by johnk on 12/1/2022.\n//\n\n#include <RHI/Gpu.h>\n\nnamespace RHI {\n Gpu::Gpu() = default;\n\n Gpu::~Gpu("
},
{
"path": "Engine/Source/RHI/Src/Instance.cpp",
"chars": 2260,
"preview": "//\n// Created by johnk on 9/1/2022.\n//\n\n#include <RHI/Instance.h>\n#include <RHI/RHIModule.h>\n\nnamespace RHI {\n RHITyp"
},
{
"path": "Engine/Source/RHI/Src/Pipeline.cpp",
"chars": 12453,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#include <RHI/Pipeline.h>\n#include <Common/Hash.h>\n\nnamespace RHI {\n HlslVer"
},
{
"path": "Engine/Source/RHI/Src/PipelineLayout.cpp",
"chars": 1534,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#include <RHI/PipelineLayout.h>\n\nnamespace RHI {\n PipelineConstantLayout::Pi"
},
{
"path": "Engine/Source/RHI/Src/Queue.cpp",
"chars": 1061,
"preview": "//\n// Created by johnk on 15/1/2022.\n//\n\n#include <RHI/Queue.h>\n\nnamespace RHI {\n QueueSubmitInfo::QueueSubmitInfo()\n"
},
{
"path": "Engine/Source/RHI/Src/RHIModule.cpp",
"chars": 164,
"preview": "//\n// Created by johnk on 2023/8/7.\n//\n\n#include <RHI/RHIModule.h>\n\nnamespace RHI {\n RHIModule::RHIModule() = default"
},
{
"path": "Engine/Source/RHI/Src/Sampler.cpp",
"chars": 2246,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#include <RHI/Sampler.h>\n\nnamespace RHI {\n SamplerCreateInfo::SamplerCreateI"
},
{
"path": "Engine/Source/RHI/Src/ShaderModule.cpp",
"chars": 969,
"preview": "//\n// Created by johnk on 19/2/2022.\n//\n\n#include <RHI/ShaderModule.h>\n\nnamespace RHI {\n ShaderModuleCreateInfo::Shad"
},
{
"path": "Engine/Source/RHI/Src/Surface.cpp",
"chars": 398,
"preview": "//\n// Created by johnk on 2023/4/17.\n//\n\n#include <RHI/Surface.h>\n\nnamespace RHI {\n SurfaceCreateInfo::SurfaceCreateI"
},
{
"path": "Engine/Source/RHI/Src/SwapChain.cpp",
"chars": 1478,
"preview": "//\n// Created by johnk on 28/3/2022.\n//\n\n#include <RHI/SwapChain.h>\n\nnamespace RHI {\n SwapChainCreateInfo::SwapChainC"
},
{
"path": "Engine/Source/RHI/Src/Synchronous.cpp",
"chars": 899,
"preview": "//\n// Created by johnk on 30/3/2022.\n//\n\n#include <RHI/Synchronous.h>\n\nnamespace RHI {\n Barrier Barrier::Transition(B"
},
{
"path": "Engine/Source/RHI/Src/Texture.cpp",
"chars": 3248,
"preview": "//\n// Created by johnk on 2022/1/23.\n//\n\n#include <RHI/Texture.h>\n\nnamespace RHI {\n TextureCreateInfo::TextureCreateI"
},
{
"path": "Engine/Source/RHI/Src/TextureView.cpp",
"chars": 1871,
"preview": "//\n// Created by johnk on 2022/1/23.\n//\n\n#include <RHI/TextureView.h>\n\nnamespace RHI {\n TextureViewCreateInfo::Textur"
},
{
"path": "Engine/Source/RHI-DirectX12/CMakeLists.txt",
"chars": 198,
"preview": "file(GLOB sources Src/*.cpp)\nexp_add_library(\n NAME RHI-DirectX12\n TYPE SHARED\n SRC ${sources}\n PUBLIC_INC I"
},
{
"path": "Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/BindGroup.h",
"chars": 881,
"preview": "//\n// Created by johnk on 20/3/2022.\n//\n\n#pragma once\n\n#include <utility>\n#include <vector>\n\n#include <directx/d3dx12.h>"
},
{
"path": "Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/BindGroupLayout.h",
"chars": 1227,
"preview": "//\n// Created by johnk on 6/3/2022.\n//\n\n#pragma once\n\n#include <directx/d3dx12.h>\n\n#include <RHI/BindGroupLayout.h>\n\nnam"
},
{
"path": "Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Buffer.h",
"chars": 1019,
"preview": "//\n// Created by johnk on 2022/1/24.\n//\n\n#pragma once\n\n#include <wrl/client.h>\n#include <directx/d3dx12.h>\n\n#include <RH"
},
{
"path": "Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/BufferView.h",
"chars": 1001,
"preview": "//\n// Created by johnk on 20/3/2022.\n//\n\n#pragma once\n\n#include <wrl/client.h>\n#include <directx/d3dx12.h>\nusing Microso"
}
]
// ... and 319 more files (download for full content)
About this extraction
This page contains the full source code of the ExplosionEngine/Explosion GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 519 files (8.2 MB), approximately 2.2M tokens, and a symbol index with 1944 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.