diff --git a/cmake/AddPlatformExecutable.cmake b/cmake/AddPlatformExecutable.cmake index c22a198..24be87d 100755 --- a/cmake/AddPlatformExecutable.cmake +++ b/cmake/AddPlatformExecutable.cmake @@ -45,6 +45,12 @@ function(add_platform_executable) ExtraLibrariesPlatform ) + # there's no point in including the base assets if it doesn't need data at all, + # and this prevents a cyclic dependency with assetpipeline, modelcompiler, etc. + if(NOT ${add_platform_executable_SKIP_DATA}) + add_dependencies(${add_platform_executable_TARGET} EngineBase) + endif() + if("${add_platform_executable_APP_NAME}") set_target_properties(${add_platform_executable_TARGET} PROPERTIES XCODE_ATTRIBUTE_EXECUTABLE_NAME ${add_platform_executable_APP_NAME}) set_target_properties(${add_platform_executable_TARGET} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME ${add_platform_executable_APP_NAME}) diff --git a/cmake/BuildAssets.cmake b/cmake/BuildAssets.cmake new file mode 100644 index 0000000..761a432 --- /dev/null +++ b/cmake/BuildAssets.cmake @@ -0,0 +1,8 @@ +function(add_content_directory target content_dir game_dir) + + add_custom_target(base_run_${target}_pipeline + COMMAND AssetPipeline ${content_dir} ${game_dir}) + + add_dependencies(${target} base_run_${target}_pipeline) + +endfunction() \ No newline at end of file diff --git a/cmake/BuildShaders.cmake b/cmake/BuildShaders.cmake index edf07bd..d1c2218 100755 --- a/cmake/BuildShaders.cmake +++ b/cmake/BuildShaders.cmake @@ -5,7 +5,7 @@ function(add_shader_command) cmake_path(REMOVE_EXTENSION ARGS_FILENAME LAST_ONLY OUTPUT_VARIABLE FILENAME_WITHOUT_EXT) set(SRC_FILENAME ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_FILENAME}) - set(OUTPUT_FILENAME ${CMAKE_BINARY_DIR}/bin/${FILENAME_WITHOUT_EXT}.${ARGS_LANG}) + set(OUTPUT_FILENAME ${CMAKE_BINARY_DIR}/${FILENAME_WITHOUT_EXT}.${ARGS_LANG}) message(${SRC_FILENAME}) message("new output filename " .. ${OUTPUT_FILENAME}) @@ -61,4 +61,4 @@ function(add_shaders) endfunction() # make the shader directory if it doesnt exist already -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/shaders) +file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/shaders) diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 4966162..5a52768 100755 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -9,50 +9,9 @@ add_subdirectory(log) add_subdirectory(asset) add_subdirectory(shadercompiler) add_subdirectory(platform) +add_subdirectory(base) if(NOT ENABLE_IOS AND NOT ENABLE_TVOS) add_subdirectory(audio) add_subdirectory(tests) -endif() - -include(../cmake/BuildShaders.cmake) - -add_shaders(TARGET Renderer - SHADERS - shaders/mesh.vert.nocompile.glsl - shaders/post.vert.glsl - shaders/post.frag.glsl - shaders/imgui.vert.glsl - shaders/imgui.frag.glsl - shaders/debug.vert.glsl - shaders/debug.frag.glsl - shaders/gaussian.vert.glsl - shaders/gaussian.frag.glsl - shaders/shadow.vert.nocompile.glsl - shaders/shadow.frag.glsl - shaders/color.vert.glsl - shaders/color.frag.glsl - shaders/omnishadow.frag.glsl - shaders/edge.vert.glsl - shaders/edge.frag.glsl - shaders/blend.vert.glsl - shaders/blend.frag.glsl - shaders/sky.vert.glsl - shaders/sky.frag.glsl - shaders/billboard.vert.glsl - shaders/billboard.frag.glsl - shaders/scenecapture.vert.nocompile.glsl - shaders/irradiance.vert.glsl - shaders/irradiance.frag.glsl - shaders/filter.vert.glsl - shaders/filter.frag.glsl - shaders/brdf.vert.glsl - shaders/brdf.frag.glsl - shaders/rendering.nocompile.glsl - shaders/common.nocompile.glsl - shaders/dof.vert.glsl - shaders/dof.frag.glsl - shaders/histogram.comp.glsl - shaders/histogram-average.comp.glsl - shaders/expose.frag.glsl - shaders/expose.vert.glsl) +endif() \ No newline at end of file diff --git a/engine/asset/src/asset.cpp b/engine/asset/src/asset.cpp index 207514c..e59531f 100644 --- a/engine/asset/src/asset.cpp +++ b/engine/asset/src/asset.cpp @@ -278,7 +278,7 @@ std::unique_ptr load_material(const prism::path& path) { p.type = property["type"]; if(!property["asset_value"].get().empty()) { - p.value_tex = assetm->get(prism::app_domain / property["asset_value"].get()); + p.value_tex = assetm->get(prism::game_domain / property["asset_value"].get()); } return p; diff --git a/engine/base/CMakeLists.txt b/engine/base/CMakeLists.txt new file mode 100644 index 0000000..6c09f32 --- /dev/null +++ b/engine/base/CMakeLists.txt @@ -0,0 +1,62 @@ +include(../../cmake/BuildShaders.cmake) +include(../../cmake/BuildAssets.cmake) + +add_custom_target(EngineBase) + +add_shaders(TARGET EngineBase + SHADERS + shaders/mesh.vert.nocompile.glsl + shaders/post.vert.glsl + shaders/post.frag.glsl + shaders/imgui.vert.glsl + shaders/imgui.frag.glsl + shaders/debug.vert.glsl + shaders/debug.frag.glsl + shaders/gaussian.vert.glsl + shaders/gaussian.frag.glsl + shaders/shadow.vert.nocompile.glsl + shaders/shadow.frag.glsl + shaders/color.vert.glsl + shaders/color.frag.glsl + shaders/omnishadow.frag.glsl + shaders/edge.vert.glsl + shaders/edge.frag.glsl + shaders/blend.vert.glsl + shaders/blend.frag.glsl + shaders/sky.vert.glsl + shaders/sky.frag.glsl + shaders/billboard.vert.glsl + shaders/billboard.frag.glsl + shaders/scenecapture.vert.nocompile.glsl + shaders/irradiance.vert.glsl + shaders/irradiance.frag.glsl + shaders/filter.vert.glsl + shaders/filter.frag.glsl + shaders/brdf.vert.glsl + shaders/brdf.frag.glsl + shaders/rendering.nocompile.glsl + shaders/common.nocompile.glsl + shaders/dof.vert.glsl + shaders/dof.frag.glsl + shaders/histogram.comp.glsl + shaders/histogram-average.comp.glsl + shaders/expose.frag.glsl + shaders/expose.vert.glsl) + +add_content_directory(EngineBase + ${CMAKE_CURRENT_SOURCE_DIR}/content + ${CMAKE_CURRENT_SOURCE_DIR}/game) + +file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/base) + +# copy shaders target +add_custom_target(base_copy_shaders + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/shaders ${CMAKE_BINARY_DIR}/bin/base/shaders) + +add_dependencies(EngineBase base_copy_shaders) + +# copy game target +add_custom_target(base_copy_game + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/game ${CMAKE_BINARY_DIR}/bin/base) + +add_dependencies(EngineBase base_copy_game) \ No newline at end of file diff --git a/example/content/models/cube.fbx b/engine/base/content/models/cube.fbx similarity index 100% rename from example/content/models/cube.fbx rename to engine/base/content/models/cube.fbx diff --git a/example/game/OpenSans-Regular.ttf b/engine/base/game/OpenSans-Regular.ttf similarity index 100% rename from example/game/OpenSans-Regular.ttf rename to engine/base/game/OpenSans-Regular.ttf diff --git a/example/game/models/arrow.model b/engine/base/game/models/arrow.model similarity index 100% rename from example/game/models/arrow.model rename to engine/base/game/models/arrow.model diff --git a/example/game/models/cube.model b/engine/base/game/models/cube.model similarity index 100% rename from example/game/models/cube.model rename to engine/base/game/models/cube.model diff --git a/example/game/models/plane.model b/engine/base/game/models/plane.model similarity index 100% rename from example/game/models/plane.model rename to engine/base/game/models/plane.model diff --git a/example/game/models/sphere.model b/engine/base/game/models/sphere.model similarity index 100% rename from example/game/models/sphere.model rename to engine/base/game/models/sphere.model diff --git a/example/game/render_options.cfg b/engine/base/game/render_options.cfg similarity index 100% rename from example/game/render_options.cfg rename to engine/base/game/render_options.cfg diff --git a/example/game/textures/aperture.png b/engine/base/game/textures/aperture.png similarity index 100% rename from example/game/textures/aperture.png rename to engine/base/game/textures/aperture.png diff --git a/example/game/textures/point.png b/engine/base/game/textures/point.png similarity index 100% rename from example/game/textures/point.png rename to engine/base/game/textures/point.png diff --git a/example/game/textures/probe.png b/engine/base/game/textures/probe.png similarity index 100% rename from example/game/textures/probe.png rename to engine/base/game/textures/probe.png diff --git a/example/game/textures/spot.png b/engine/base/game/textures/spot.png similarity index 100% rename from example/game/textures/spot.png rename to engine/base/game/textures/spot.png diff --git a/example/game/textures/sun.png b/engine/base/game/textures/sun.png similarity index 100% rename from example/game/textures/sun.png rename to engine/base/game/textures/sun.png diff --git a/engine/shaders/atmosphere.glsl b/engine/base/shaders/atmosphere.glsl similarity index 100% rename from engine/shaders/atmosphere.glsl rename to engine/base/shaders/atmosphere.glsl diff --git a/engine/shaders/billboard.frag.glsl b/engine/base/shaders/billboard.frag.glsl similarity index 100% rename from engine/shaders/billboard.frag.glsl rename to engine/base/shaders/billboard.frag.glsl diff --git a/engine/shaders/billboard.vert.glsl b/engine/base/shaders/billboard.vert.glsl similarity index 100% rename from engine/shaders/billboard.vert.glsl rename to engine/base/shaders/billboard.vert.glsl diff --git a/engine/shaders/blend.frag.glsl b/engine/base/shaders/blend.frag.glsl similarity index 100% rename from engine/shaders/blend.frag.glsl rename to engine/base/shaders/blend.frag.glsl diff --git a/engine/shaders/blend.vert.glsl b/engine/base/shaders/blend.vert.glsl similarity index 100% rename from engine/shaders/blend.vert.glsl rename to engine/base/shaders/blend.vert.glsl diff --git a/engine/shaders/brdf.frag.glsl b/engine/base/shaders/brdf.frag.glsl similarity index 100% rename from engine/shaders/brdf.frag.glsl rename to engine/base/shaders/brdf.frag.glsl diff --git a/engine/shaders/brdf.vert.glsl b/engine/base/shaders/brdf.vert.glsl similarity index 100% rename from engine/shaders/brdf.vert.glsl rename to engine/base/shaders/brdf.vert.glsl diff --git a/engine/shaders/color.frag.glsl b/engine/base/shaders/color.frag.glsl similarity index 100% rename from engine/shaders/color.frag.glsl rename to engine/base/shaders/color.frag.glsl diff --git a/engine/shaders/color.vert.glsl b/engine/base/shaders/color.vert.glsl similarity index 100% rename from engine/shaders/color.vert.glsl rename to engine/base/shaders/color.vert.glsl diff --git a/engine/shaders/common.nocompile.glsl b/engine/base/shaders/common.nocompile.glsl similarity index 100% rename from engine/shaders/common.nocompile.glsl rename to engine/base/shaders/common.nocompile.glsl diff --git a/engine/shaders/debug.frag.glsl b/engine/base/shaders/debug.frag.glsl similarity index 100% rename from engine/shaders/debug.frag.glsl rename to engine/base/shaders/debug.frag.glsl diff --git a/engine/shaders/debug.vert.glsl b/engine/base/shaders/debug.vert.glsl similarity index 100% rename from engine/shaders/debug.vert.glsl rename to engine/base/shaders/debug.vert.glsl diff --git a/engine/shaders/dof.frag.glsl b/engine/base/shaders/dof.frag.glsl similarity index 100% rename from engine/shaders/dof.frag.glsl rename to engine/base/shaders/dof.frag.glsl diff --git a/engine/shaders/dof.vert.glsl b/engine/base/shaders/dof.vert.glsl similarity index 100% rename from engine/shaders/dof.vert.glsl rename to engine/base/shaders/dof.vert.glsl diff --git a/engine/shaders/edge.frag.glsl b/engine/base/shaders/edge.frag.glsl similarity index 100% rename from engine/shaders/edge.frag.glsl rename to engine/base/shaders/edge.frag.glsl diff --git a/engine/shaders/edge.vert.glsl b/engine/base/shaders/edge.vert.glsl similarity index 100% rename from engine/shaders/edge.vert.glsl rename to engine/base/shaders/edge.vert.glsl diff --git a/engine/shaders/expose.frag.glsl b/engine/base/shaders/expose.frag.glsl similarity index 100% rename from engine/shaders/expose.frag.glsl rename to engine/base/shaders/expose.frag.glsl diff --git a/engine/shaders/expose.vert.glsl b/engine/base/shaders/expose.vert.glsl similarity index 100% rename from engine/shaders/expose.vert.glsl rename to engine/base/shaders/expose.vert.glsl diff --git a/engine/shaders/filter.frag.glsl b/engine/base/shaders/filter.frag.glsl similarity index 100% rename from engine/shaders/filter.frag.glsl rename to engine/base/shaders/filter.frag.glsl diff --git a/engine/shaders/filter.vert.glsl b/engine/base/shaders/filter.vert.glsl similarity index 100% rename from engine/shaders/filter.vert.glsl rename to engine/base/shaders/filter.vert.glsl diff --git a/engine/shaders/gaussian.frag.glsl b/engine/base/shaders/gaussian.frag.glsl similarity index 100% rename from engine/shaders/gaussian.frag.glsl rename to engine/base/shaders/gaussian.frag.glsl diff --git a/engine/shaders/gaussian.vert.glsl b/engine/base/shaders/gaussian.vert.glsl similarity index 100% rename from engine/shaders/gaussian.vert.glsl rename to engine/base/shaders/gaussian.vert.glsl diff --git a/engine/shaders/histogram-average.comp.glsl b/engine/base/shaders/histogram-average.comp.glsl similarity index 100% rename from engine/shaders/histogram-average.comp.glsl rename to engine/base/shaders/histogram-average.comp.glsl diff --git a/engine/shaders/histogram.comp.glsl b/engine/base/shaders/histogram.comp.glsl similarity index 100% rename from engine/shaders/histogram.comp.glsl rename to engine/base/shaders/histogram.comp.glsl diff --git a/engine/shaders/imgui.frag.glsl b/engine/base/shaders/imgui.frag.glsl similarity index 100% rename from engine/shaders/imgui.frag.glsl rename to engine/base/shaders/imgui.frag.glsl diff --git a/engine/shaders/imgui.vert.glsl b/engine/base/shaders/imgui.vert.glsl similarity index 100% rename from engine/shaders/imgui.vert.glsl rename to engine/base/shaders/imgui.vert.glsl diff --git a/engine/shaders/irradiance.frag.glsl b/engine/base/shaders/irradiance.frag.glsl similarity index 100% rename from engine/shaders/irradiance.frag.glsl rename to engine/base/shaders/irradiance.frag.glsl diff --git a/engine/shaders/irradiance.vert.glsl b/engine/base/shaders/irradiance.vert.glsl similarity index 100% rename from engine/shaders/irradiance.vert.glsl rename to engine/base/shaders/irradiance.vert.glsl diff --git a/engine/shaders/mesh.vert.nocompile.glsl b/engine/base/shaders/mesh.vert.nocompile.glsl similarity index 100% rename from engine/shaders/mesh.vert.nocompile.glsl rename to engine/base/shaders/mesh.vert.nocompile.glsl diff --git a/engine/shaders/omnishadow.frag.glsl b/engine/base/shaders/omnishadow.frag.glsl similarity index 100% rename from engine/shaders/omnishadow.frag.glsl rename to engine/base/shaders/omnishadow.frag.glsl diff --git a/engine/shaders/post.frag.glsl b/engine/base/shaders/post.frag.glsl similarity index 100% rename from engine/shaders/post.frag.glsl rename to engine/base/shaders/post.frag.glsl diff --git a/engine/shaders/post.vert.glsl b/engine/base/shaders/post.vert.glsl similarity index 100% rename from engine/shaders/post.vert.glsl rename to engine/base/shaders/post.vert.glsl diff --git a/engine/shaders/rendering.nocompile.glsl b/engine/base/shaders/rendering.nocompile.glsl similarity index 100% rename from engine/shaders/rendering.nocompile.glsl rename to engine/base/shaders/rendering.nocompile.glsl diff --git a/engine/shaders/scenecapture.vert.nocompile.glsl b/engine/base/shaders/scenecapture.vert.nocompile.glsl similarity index 100% rename from engine/shaders/scenecapture.vert.nocompile.glsl rename to engine/base/shaders/scenecapture.vert.nocompile.glsl diff --git a/engine/shaders/shadow.frag.glsl b/engine/base/shaders/shadow.frag.glsl similarity index 100% rename from engine/shaders/shadow.frag.glsl rename to engine/base/shaders/shadow.frag.glsl diff --git a/engine/shaders/shadow.vert.nocompile.glsl b/engine/base/shaders/shadow.vert.nocompile.glsl similarity index 100% rename from engine/shaders/shadow.vert.nocompile.glsl rename to engine/base/shaders/shadow.vert.nocompile.glsl diff --git a/engine/shaders/sky.frag.glsl b/engine/base/shaders/sky.frag.glsl similarity index 100% rename from engine/shaders/sky.frag.glsl rename to engine/base/shaders/sky.frag.glsl diff --git a/engine/shaders/sky.vert.glsl b/engine/base/shaders/sky.vert.glsl similarity index 100% rename from engine/shaders/sky.vert.glsl rename to engine/base/shaders/sky.vert.glsl diff --git a/engine/shaders/smaa.glsl b/engine/base/shaders/smaa.glsl similarity index 100% rename from engine/shaders/smaa.glsl rename to engine/base/shaders/smaa.glsl diff --git a/engine/shaders/smaa_common.glsl b/engine/base/shaders/smaa_common.glsl similarity index 100% rename from engine/shaders/smaa_common.glsl rename to engine/base/shaders/smaa_common.glsl diff --git a/engine/core/CMakeLists.txt b/engine/core/CMakeLists.txt index e841389..c49fabd 100755 --- a/engine/core/CMakeLists.txt +++ b/engine/core/CMakeLists.txt @@ -46,4 +46,4 @@ target_link_libraries(Core PUBLIC BulletDynamics BulletCollision LinearMath) -set_engine_properties(Core) +set_engine_properties(Core) \ No newline at end of file diff --git a/engine/core/src/engine.cpp b/engine/core/src/engine.cpp index d76ce0e..0b936c9 100755 --- a/engine/core/src/engine.cpp +++ b/engine/core/src/engine.cpp @@ -82,7 +82,7 @@ void engine::set_app(prism::app* p_app) { ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; } - console::load_cfg(prism::app_domain / "render_options.cfg"); + console::load_cfg(prism::base_domain / "render_options.cfg"); } prism::app* engine::get_app() const { @@ -166,7 +166,7 @@ Scene* engine::load_scene(const prism::path& path) { for(auto& obj : j["objects"]) { if(obj.contains("prefabPath")) { - Object o = add_prefab(*scene, prism::app_domain / obj["prefabPath"].get()); + Object o = add_prefab(*scene, prism::game_domain / obj["prefabPath"].get()); scene->get(o).name = obj["name"]; diff --git a/engine/core/src/file.cpp b/engine/core/src/file.cpp index 5036a43..ffce9cf 100755 --- a/engine/core/src/file.cpp +++ b/engine/core/src/file.cpp @@ -30,12 +30,12 @@ std::optional prism::open_file(const prism::path& path, const bool prism::path prism::get_file_path(const prism::path& path) { auto fixed_path = path; auto root = root_path(path); - if(root == app_domain) { - fixed_path = domain_data[static_cast(domain::app)] / path.lexically_relative(root_path(path)); - } else if(root == internal_domain) { - fixed_path = domain_data[static_cast(domain::internal)] / path.lexically_relative(root_path(path)); + if(root == game_domain) { + fixed_path = domain_data[static_cast(domain::game)] / path.lexically_relative(root_path(path)); + } else if(root == base_domain) { + fixed_path = domain_data[static_cast(domain::base)] / path.lexically_relative(root_path(path)); } - + return fixed_path; } diff --git a/engine/core/src/scene.cpp b/engine/core/src/scene.cpp index 2f14d81..ede312e 100755 --- a/engine/core/src/scene.cpp +++ b/engine/core/src/scene.cpp @@ -19,10 +19,10 @@ void load_transform_component(nlohmann::json j, Transform& t) { void load_renderable_component(nlohmann::json j, Renderable& t) { if(j.contains("path")) - t.mesh = assetm->get(prism::app_domain / j["path"].get()); + t.mesh = assetm->get(prism::game_domain / j["path"].get()); for(auto& material : j["materials"]) - t.materials.push_back(assetm->get(prism::app_domain / material.get())); + t.materials.push_back(assetm->get(prism::game_domain / material.get())); } void load_camera_component(nlohmann::json j, Camera& camera) { diff --git a/engine/gfx/vulkan/src/gfx_vulkan.cpp b/engine/gfx/vulkan/src/gfx_vulkan.cpp index c8ffd2d..bf8f356 100755 --- a/engine/gfx/vulkan/src/gfx_vulkan.cpp +++ b/engine/gfx/vulkan/src/gfx_vulkan.cpp @@ -906,7 +906,7 @@ GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreateInfo& info) { sizeof(uint32_t)); } else { auto vertex_shader = prism::open_file( - prism::internal_domain / + prism::base_domain / (info.shaders.vertex_src.as_path().string() + ".spv"), true); vertex_shader->read_all(); @@ -961,7 +961,7 @@ GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreateInfo& info) { sizeof(uint32_t)); } else { auto fragment_shader = prism::open_file( - prism::internal_domain / + prism::base_domain / (info.shaders.fragment_src.as_path().string() + ".spv"), true); fragment_shader->read_all(); @@ -1274,7 +1274,7 @@ GFXVulkan::create_compute_pipeline(const GFXComputePipelineCreateInfo& info) { shader_vector.data(), shader_vector.size() * sizeof(uint32_t)); } else { auto shader = - prism::open_file(prism::internal_domain / + prism::open_file(prism::base_domain / (info.compute_src.as_path().string() + ".spv"), true); shader->read_all(); diff --git a/engine/platform/include/file.hpp b/engine/platform/include/file.hpp index 13ca73a..da1dc91 100755 --- a/engine/platform/include/file.hpp +++ b/engine/platform/include/file.hpp @@ -12,9 +12,8 @@ namespace prism { enum class domain { - system, - internal, - app + game, + base }; /// Represents a file handle. The file may or may not be fully loaded in memory. @@ -133,7 +132,7 @@ namespace prism { path root_path(const path& path); path get_file_path(const path& path); - inline path internal_domain = "/internal", app_domain = "/app"; + inline path base_domain = "/base", game_domain = "/game"; } inline std::array domain_data; diff --git a/engine/renderer/src/dofpass.cpp b/engine/renderer/src/dofpass.cpp index a4027b4..73407f4 100755 --- a/engine/renderer/src/dofpass.cpp +++ b/engine/renderer/src/dofpass.cpp @@ -9,7 +9,7 @@ AssetPtr aperture_texture; DoFPass::DoFPass(GFX* gfx) { - aperture_texture = assetm->get(prism::app_domain / "textures/aperture.png"); + aperture_texture = assetm->get(prism::base_domain / "textures/aperture.png"); GFXRenderPassCreateInfo renderPassInfo = {}; renderPassInfo.label = "Depth of Field"; @@ -28,9 +28,9 @@ DoFPass::DoFPass(GFX* gfx) { height_constant.value = extent.height; GFXGraphicsPipelineCreateInfo create_info = {}; - create_info.shaders.vertex_src = ShaderSource(prism::path("dof.vert")); + create_info.shaders.vertex_src = ShaderSource(prism::path("shaders/dof.vert")); create_info.shaders.vertex_constants = {width_constant, height_constant}; - create_info.shaders.fragment_src = ShaderSource(prism::path("dof.frag")); + create_info.shaders.fragment_src = ShaderSource(prism::path("shaders/dof.frag")); create_info.shader_input.bindings = { {0, GFXBindingType::StorageImage}, diff --git a/engine/renderer/src/imguipass.cpp b/engine/renderer/src/imguipass.cpp index 86bbfb2..90bda4f 100755 --- a/engine/renderer/src/imguipass.cpp +++ b/engine/renderer/src/imguipass.cpp @@ -23,8 +23,8 @@ void ImGuiPass::create_render_target_resources(RenderTarget& target) { if(pipeline == nullptr) { GFXGraphicsPipelineCreateInfo createInfo; createInfo.label = "ImGui"; - createInfo.shaders.vertex_src = ShaderSource(prism::path("imgui.vert")); - createInfo.shaders.fragment_src = ShaderSource(prism::path("imgui.frag")); + createInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/imgui.vert")); + createInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/imgui.frag")); GFXVertexInput vertexInput = {}; vertexInput.stride = sizeof(ImDrawVert); @@ -160,7 +160,7 @@ void ImGuiPass::load_font(const std::string_view filename) { ImGuiIO& io = ImGui::GetIO(); if(io.Fonts->Fonts.empty()) { - auto file = prism::open_file(prism::app_domain / filename); + auto file = prism::open_file(prism::base_domain / filename); if(file != std::nullopt) { font_file = std::make_unique(std::move(file.value())); diff --git a/engine/renderer/src/materialcompiler.cpp b/engine/renderer/src/materialcompiler.cpp index ea686bd..a56132b 100755 --- a/engine/renderer/src/materialcompiler.cpp +++ b/engine/renderer/src/materialcompiler.cpp @@ -8,7 +8,7 @@ #include "renderer.hpp" ShaderSource get_shader(const std::string& filename, bool skinned, bool cubemap) { - auto shader_file = prism::open_file(prism::internal_domain / filename); + auto shader_file = prism::open_file(prism::base_domain / filename); if(!shader_file.has_value()) { prism::log("Failed to open shader file {}!", filename); return {}; diff --git a/engine/renderer/src/renderer.cpp b/engine/renderer/src/renderer.cpp index 0896879..f0d4d87 100755 --- a/engine/renderer/src/renderer.cpp +++ b/engine/renderer/src/renderer.cpp @@ -60,7 +60,7 @@ struct SkyPushConstant { renderer::renderer(GFX* gfx, const bool enable_imgui) : gfx(gfx) { Expects(gfx != nullptr); - shader_compiler.set_include_path(prism::get_domain_path(prism::domain::internal).string()); + shader_compiler.set_include_path(prism::get_domain_path(prism::domain::base).string() + "/shaders"); create_dummy_texture(); create_histogram_resources(); @@ -516,8 +516,8 @@ void renderer::create_mesh_pipeline(Material& material) const { GFXGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.label = "Mesh " + material.path; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("mesh.vert")); - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("mesh.frag")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/mesh.vert")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/mesh.frag")); pipelineInfo.shaders.vertex_constants = {materials_constant, lights_constant, spot_lights_constant, probes_constant}; pipelineInfo.shaders.fragment_constants = {materials_constant, lights_constant, spot_lights_constant, probes_constant}; @@ -638,8 +638,8 @@ void renderer::create_post_pipelines() { GFXGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.label = "Post"; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("post.vert")); - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("post.frag")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/post.vert")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/post.frag")); pipelineInfo.shader_input.bindings = { {4, GFXBindingType::PushConstant}, @@ -655,8 +655,8 @@ void renderer::create_post_pipelines() { post_pipeline = gfx->create_graphics_pipeline(pipelineInfo); pipelineInfo.label = "Expose"; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("expose.vert")); - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("expose.frag")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/expose.vert")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/expose.frag")); pipelineInfo.render_pass = unorm_render_pass; pipelineInfo.shader_input.bindings = { @@ -674,8 +674,8 @@ void renderer::create_sky_pipeline() { pipelineInfo.label = "Sky"; pipelineInfo.render_pass = offscreen_render_pass; - pipelineInfo.shaders.vertex_src = register_shader("sky.vert"); - pipelineInfo.shaders.fragment_src = register_shader("sky.frag"); + pipelineInfo.shaders.vertex_src = register_shader("shaders/sky.vert"); + pipelineInfo.shaders.fragment_src = register_shader("shaders/sky.frag"); pipelineInfo.shader_input.bindings = { {1, GFXBindingType::PushConstant} @@ -688,14 +688,6 @@ void renderer::create_sky_pipeline() { pipelineInfo.depth.depth_mode = GFXDepthMode::LessOrEqual; sky_pipeline = gfx->create_graphics_pipeline(pipelineInfo); - - associate_shader_reload("sky.vert", [this] { - create_sky_pipeline(); - }); - - associate_shader_reload("sky.frag", [this] { - create_sky_pipeline(); - }); } void renderer::generate_brdf() { @@ -709,8 +701,8 @@ void renderer::generate_brdf() { GFXGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.label = "BRDF"; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("brdf.vert")); - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("brdf.frag")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/brdf.vert")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/brdf.frag")); pipelineInfo.render_pass = brdf_render_pass; @@ -757,7 +749,7 @@ void renderer::generate_brdf() { void renderer::create_histogram_resources() { GFXComputePipelineCreateInfo create_info = {}; create_info.label = "Histogram"; - create_info.compute_src = ShaderSource(prism::path("histogram.comp")); + create_info.compute_src = ShaderSource(prism::path("shaders/histogram.comp")); create_info.workgroup_size_x = 16; create_info.workgroup_size_y = 16; @@ -774,7 +766,7 @@ void renderer::create_histogram_resources() { histogram_pipeline = gfx->create_compute_pipeline(create_info); create_info.label = "Histogram Average"; - create_info.compute_src = ShaderSource(prism::path("histogram-average.comp")); + create_info.compute_src = ShaderSource(prism::path("shaders/histogram-average.comp")); create_info.workgroup_size_x = 256; create_info.workgroup_size_y = 1; diff --git a/engine/renderer/src/scenecapture.cpp b/engine/renderer/src/scenecapture.cpp index a54d586..7659501 100755 --- a/engine/renderer/src/scenecapture.cpp +++ b/engine/renderer/src/scenecapture.cpp @@ -67,7 +67,7 @@ const std::array sceneTransforms = { inline AssetPtr cubeMesh; SceneCapture::SceneCapture(GFX* gfx) { - cubeMesh = assetm->get(prism::app_domain / "models/cube.model"); + cubeMesh = assetm->get(prism::base_domain / "models/cube.model"); // render pass GFXRenderPassCreateInfo renderPassInfo = {}; @@ -411,8 +411,8 @@ void SceneCapture::createSkyResources() { pipelineInfo.label = "Sky Scene Capture"; pipelineInfo.render_pass = renderPass; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("sky.vert")); - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("sky.frag")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/sky.vert")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/sky.frag")); pipelineInfo.shader_input.bindings = { {1, GFXBindingType::PushConstant} @@ -455,8 +455,8 @@ void SceneCapture::createIrradianceResources() { GFXGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.label = "Irradiance Convolution"; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("irradiance.vert")); - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("irradiance.frag")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/irradiance.vert")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/irradiance.frag")); GFXVertexInput input; input.stride = sizeof(prism::float3); @@ -507,8 +507,8 @@ void SceneCapture::createPrefilterResources() { GFXGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.label = "Prefilter"; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("filter.vert")); - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("filter.frag")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/filter.vert")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/filter.frag")); pipelineInfo.shaders.fragment_constants = {size_constant}; diff --git a/engine/renderer/src/shadowpass.cpp b/engine/renderer/src/shadowpass.cpp index d26caa2..c6a5e09 100755 --- a/engine/renderer/src/shadowpass.cpp +++ b/engine/renderer/src/shadowpass.cpp @@ -333,7 +333,7 @@ void ShadowPass::create_pipelines() { GFXGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.shaders.vertex_constants = {point_light_max_constant}; - pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shadow.vert")); + pipelineInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/shadow.vert")); pipelineInfo.shaders.fragment_constants = { point_light_max_constant }; @@ -377,7 +377,7 @@ void ShadowPass::create_pipelines() { { pipelineInfo.label = "Point Shadow"; - pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("omnishadow.frag")); + pipelineInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/omnishadow.frag")); auto [static_pipeline, skinned_pipeline] = material_compiler.create_pipeline_permutations(pipelineInfo, true); diff --git a/engine/renderer/src/smaapass.cpp b/engine/renderer/src/smaapass.cpp index 2f42e06..d4f621e 100755 --- a/engine/renderer/src/smaapass.cpp +++ b/engine/renderer/src/smaapass.cpp @@ -142,8 +142,8 @@ void SMAAPass::create_pipelines() { GFXGraphicsPipelineCreateInfo createInfo = {}; createInfo.label = "SMAA Edge"; - createInfo.shaders.vertex_src = ShaderSource(prism::path("edge.vert")); - createInfo.shaders.fragment_src = ShaderSource(prism::path("edge.frag")); + createInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/edge.vert")); + createInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/edge.frag")); createInfo.render_pass = render_pass; @@ -160,8 +160,8 @@ void SMAAPass::create_pipelines() { edge_pipeline = gfx->create_graphics_pipeline(createInfo); createInfo.label = "SMAA Blend"; - createInfo.shaders.vertex_src = ShaderSource(prism::path("blend.vert")); - createInfo.shaders.fragment_src = ShaderSource(prism::path("blend.frag")); + createInfo.shaders.vertex_src = ShaderSource(prism::path("shaders/blend.vert")); + createInfo.shaders.fragment_src = ShaderSource(prism::path("shaders/blend.frag")); createInfo.shader_input.bindings.push_back({3, GFXBindingType::Texture}); blend_pipeline = gfx->create_graphics_pipeline(createInfo); diff --git a/example/src/example.cpp b/example/src/example.cpp index a55a59d..3bbd14b 100644 --- a/example/src/example.cpp +++ b/example/src/example.cpp @@ -8,9 +8,6 @@ #include "path.hpp" void app_main(prism::engine*) { - prism::set_domain_path(prism::domain::app, "{resource_dir}/game"); - prism::set_domain_path(prism::domain::internal, "{resource_dir}/shaders"); - platform::open_window("Example", {-1, -1, 1280, 720}, WindowFlags::Resizable); } @@ -48,16 +45,16 @@ void ExampleApp::initialize_render() { main_object = scene->add_object(); auto& sphere_render = scene->add(main_object); - sphere_render.mesh = assetm->get(prism::path(prism::app_domain / "models/bunny.model")); - sphere_render.materials = { assetm->get(prism::path(prism::app_domain / "materials/Material.material")) }; + sphere_render.mesh = assetm->get(prism::path(prism::game_domain / "models/bunny.model")); + sphere_render.materials = { assetm->get(prism::path(prism::game_domain / "materials/Material.material")) }; auto sibenik_obj = scene->add_object(); auto& sibenik_render = scene->add(sibenik_obj); - sibenik_render.mesh = assetm->get(prism::path(prism::app_domain / "models/sibenik.model")); + sibenik_render.mesh = assetm->get(prism::path(prism::game_domain / "models/sibenik.model")); scene->get(sibenik_obj).position.y = 13.5; for(auto& part : sibenik_render.mesh->parts) { - sibenik_render.materials.push_back(assetm->get(prism::path(prism::app_domain / "materials" / (part.material_hint + ".material")))); + sibenik_render.materials.push_back(assetm->get(prism::path(prism::game_domain / "materials" / (part.material_hint + ".material")))); } auto probe_obj = scene->add_object(); diff --git a/platforms/sdl/CMakeLists.txt b/platforms/sdl/CMakeLists.txt index 2247fb8..c050697 100644 --- a/platforms/sdl/CMakeLists.txt +++ b/platforms/sdl/CMakeLists.txt @@ -44,19 +44,6 @@ add_platform( ) function(add_platform_commands target data_directory skip_data) - if(ENABLE_MACOS) - set(DUMMY_NAME ${target}-CopyShaders) - - add_custom_target(${DUMMY_NAME} ALL DEPENDS ${CMAKE_BINARY_DIR}/${target}-dummy) - - add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${target}-dummy - COMMAND ${CMAKE_COMMAND} -E make_directory $/../Resources/shaders - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/bin/shaders $/../Resources/shaders - ) - - add_dependencies(${target} ${DUMMY_NAME}) - endif() - if(NOT skip_data) if(ENABLE_MACOS) add_custom_target(${target}_copy_assets diff --git a/platforms/sdl/main.cpp.in b/platforms/sdl/main.cpp.in index f51d88d..75aee09 100644 --- a/platforms/sdl/main.cpp.in +++ b/platforms/sdl/main.cpp.in @@ -471,6 +471,9 @@ int main(int argc, char* argv[]) { return -1; } + prism::set_domain_path(prism::domain::game, "{resource_dir}/game"); + prism::set_domain_path(prism::domain::base, "{resource_dir}/base"); + app = new @APP_CLASS@(); engine->set_app(app); diff --git a/tools/common/include/commoneditor.hpp b/tools/common/include/commoneditor.hpp index c1db369..3f3e8cd 100755 --- a/tools/common/include/commoneditor.hpp +++ b/tools/common/include/commoneditor.hpp @@ -277,7 +277,7 @@ public: current_asset_type = get_asset_type(); open_asset_popup = true; on_asset_select = [&asset, this](auto p) { - asset = assetm->get(prism::app_domain / p); + asset = assetm->get(prism::game_domain / p); has_asset_edit_changed = true; }; } @@ -368,7 +368,7 @@ inline void editPath(const char* label, std::string& path, bool editable = true, if(ImGui::Button("...")) { engine->get_imgui().open_dialog(false, [&path, &on_selected](std::string p) { - path = prism::get_relative_path(prism::domain::app, p).string(); + path = prism::get_relative_path(prism::domain::game, p).string(); if(on_selected != nullptr) on_selected(); diff --git a/tools/common/src/commoneditor.cpp b/tools/common/src/commoneditor.cpp index 0b8dcf6..31b825b 100755 --- a/tools/common/src/commoneditor.cpp +++ b/tools/common/src/commoneditor.cpp @@ -43,9 +43,6 @@ const std::map imToPl = { }; CommonEditor::CommonEditor(const std::string_view id) : id(id) { - prism::set_domain_path(prism::domain::app, "{resource_dir}/game"); - prism::set_domain_path(prism::domain::internal, "{resource_dir}/shaders"); - ImGuiIO& io = ImGui::GetIO(); iniFileName = (prism::get_writeable_directory() / "imgui.ini").string(); @@ -254,7 +251,7 @@ void CommonEditor::begin_frame() { int column = 0; for(auto& [p, a_type] : asset_files) { if(current_asset_type == a_type) { - if(ImGui::ImageButton(get_asset_thumbnail(prism::app_domain / p), ImVec2(64, 64))) { + if(ImGui::ImageButton(get_asset_thumbnail(prism::game_domain / p), ImVec2(64, 64))) { on_asset_select(p); ImGui::CloseCurrentPopup(); } @@ -767,8 +764,8 @@ void CommonEditor::drawAssets() { for(auto& [p, type] : asset_files) { ImGui::PushID(&p); - if(ImGui::ImageButton(get_asset_thumbnail(prism::app_domain / p), ImVec2(64, 64))) - asset_selected(prism::app_domain / p, type); + if(ImGui::ImageButton(get_asset_thumbnail(prism::game_domain / p), ImVec2(64, 64))) + asset_selected(prism::game_domain / p, type); if(ImGui::BeginPopupContextItem()) { ImGui::TextDisabled("%s", p.string().c_str()); @@ -776,7 +773,7 @@ void CommonEditor::drawAssets() { ImGui::Separator(); if(ImGui::Button("Regenerate thumbnail")) { - asset_thumbnails.erase(asset_thumbnails.find((prism::app_domain / p).string())); + asset_thumbnails.erase(asset_thumbnails.find((prism::game_domain / p).string())); } ImGui::EndPopup(); @@ -798,8 +795,8 @@ GFXTexture* CommonEditor::get_material_preview(Material& material) { Scene scene; auto sphere = scene.add_object(); - scene.add(sphere).mesh = assetm->get(prism::app_domain / "models" / "sphere.model"); - scene.get(sphere).materials.push_back(assetm->get(prism::app_domain / material.path)); // we throw away our material handle here :-( + scene.add(sphere).mesh = assetm->get(prism::base_domain / "models" / "sphere.model"); + scene.get(sphere).materials.push_back(assetm->get(prism::game_domain / material.path)); // we throw away our material handle here :-( scene.get(sphere).rotation = euler_to_quat(prism::float3(radians(90.0f), 0, 0)); @@ -810,7 +807,7 @@ GFXTexture* CommonEditor::get_mesh_preview(Mesh& mesh) { Scene scene; auto mesh_obj = scene.add_object(); - scene.add(mesh_obj).mesh = assetm->get(prism::app_domain / mesh.path); + scene.add(mesh_obj).mesh = assetm->get(prism::game_domain / mesh.path); float biggest_component = 0.0f; for(const auto& part : scene.get(mesh_obj).mesh->parts) { @@ -824,7 +821,7 @@ GFXTexture* CommonEditor::get_mesh_preview(Mesh& mesh) { find_biggest_component(part.bounding_box.min); find_biggest_component(part.bounding_box.max); - scene.get(mesh_obj).materials.push_back(assetm->get(prism::app_domain / "materials" / "Material.material")); + scene.get(mesh_obj).materials.push_back(assetm->get(prism::game_domain / "materials" / "Material.material")); } return generate_common_preview(scene, prism::float3(biggest_component * 2.0f)); diff --git a/tools/common/src/debugpass.cpp b/tools/common/src/debugpass.cpp index f66f1c1..5160e19 100755 --- a/tools/common/src/debugpass.cpp +++ b/tools/common/src/debugpass.cpp @@ -45,14 +45,14 @@ void DebugPass::initialize() { primitive_pipeline = engine->get_gfx()->create_graphics_pipeline(createInfo); - cubeMesh = assetm->get(prism::app_domain / "models/cube.model"); - sphereMesh = assetm->get(prism::app_domain / "models/sphere.model"); + cubeMesh = assetm->get(prism::base_domain / "models/cube.model"); + sphereMesh = assetm->get(prism::base_domain / "models/sphere.model"); createInfo.rasterization.polygon_type = GFXPolygonType::Fill; arrow_pipeline = engine->get_gfx()->create_graphics_pipeline(createInfo); - arrowMesh = assetm->get(prism::app_domain / "models/arrow.model"); + arrowMesh = assetm->get(prism::base_domain / "models/arrow.model"); } { @@ -161,10 +161,10 @@ void DebugPass::initialize() { billboard_pipeline = engine->get_gfx()->create_graphics_pipeline(pipelineInfo); - pointTexture = assetm->get(prism::app_domain / "textures/point.png"); - spotTexture = assetm->get(prism::app_domain / "textures/spot.png"); - sunTexture = assetm->get(prism::app_domain / "textures/sun.png"); - probeTexture = assetm->get(prism::app_domain / "textures/probe.png"); + pointTexture = assetm->get(prism::base_domain / "textures/point.png"); + spotTexture = assetm->get(prism::base_domain / "textures/spot.png"); + sunTexture = assetm->get(prism::base_domain / "textures/sun.png"); + probeTexture = assetm->get(prism::base_domain / "textures/probe.png"); } }