diff --git a/extern/libphysis b/extern/libphysis index 991146e..5241b08 160000 --- a/extern/libphysis +++ b/extern/libphysis @@ -1 +1 @@ -Subproject commit 991146eeff4c154a6206d58a9f17b4ecea517d58 +Subproject commit 5241b087e4514cabd4dc825a8ec56ff33d4350ea diff --git a/renderer/src/rendersystem.cpp b/renderer/src/rendersystem.cpp index d64bbbf..d4f9d3b 100644 --- a/renderer/src/rendersystem.cpp +++ b/renderer/src/rendersystem.cpp @@ -141,8 +141,31 @@ void RenderSystem::render(uint32_t imageIndex, VkCommandBuffer commandBuffer) // hardcoded to the known pass for now if (std::string_view{"PASS_G_OPAQUE"} == pass) { for (auto &model : m_renderModels) { - // hardcoded selector for now - const u_int32_t selector = 276147857; + std::vector systemKeys; + std::vector sceneKeys = { + physis_shpk_crc("TransformViewSkin"), + physis_shpk_crc("GetAmbientLight_SH"), + physis_shpk_crc("GetReflectColor_Texture"), + physis_shpk_crc("GetAmbientOcclusion_None"), + physis_shpk_crc("ApplyDitherClipOff"), + }; + std::vector materialKeys; + for (int j = 0; j < model.shpk.num_material_keys; j++) { + materialKeys.push_back(model.shpk.material_keys[j].default_value); + } + std::vector subviewKeys = { + physis_shpk_crc("Default"), + physis_shpk_crc("SUB_VIEW_MAIN"), + }; + + const u_int32_t selector = physis_shpk_build_selector_from_all_keys(systemKeys.data(), + systemKeys.size(), + sceneKeys.data(), + sceneKeys.size(), + materialKeys.data(), + materialKeys.size(), + subviewKeys.data(), + subviewKeys.size()); const physis_SHPKNode node = physis_shpk_get_node(&model.shpk, selector); // check if invalid