MCPcopy Create free account
hub / github.com/WiVRn/WiVRn / load_all_materials

Method load_all_materials

client/render/scene_loader.cpp:802–882  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

800 }
801
802 std::vector<std::shared_ptr<renderer::material>> load_all_materials(std::vector<std::shared_ptr<renderer::texture>> & textures, gpu_buffer & staging_buffer, const renderer::material & default_material)
803 {
804 std::vector<std::shared_ptr<renderer::material>> materials;
805 materials.reserve(gltf.materials.size());
806 for (const fastgltf::Material & gltf_material: gltf.materials)
807 {
808 size_t material_id = materials.size();
809
810 // Copy the default material, without references to its buffer or descriptor set
811 auto & material = *materials.emplace_back(std::make_shared<renderer::material>(default_material));
812 material.name = gltf_material.name;
813 material.buffer.reset();
814
815 material.double_sided = gltf_material.doubleSided;
816
817 switch (gltf_material.alphaMode)
818 {
819 case fastgltf::AlphaMode::Opaque:
820 material.fragment_shader = "lit.frag";
821 material.blend_enable = false;
822 break;
823
824 case fastgltf::AlphaMode::Mask:
825 material.fragment_shader = "lit_mask.frag";
826 material.blend_enable = false;
827 break;
828
829 case fastgltf::AlphaMode::Blend:
830 material.fragment_shader = "lit.frag";
831 material.blend_enable = true;
832 break;
833 }
834
835 if (auto it = extras.find({fastgltf::Category::Materials, material_id, "fragment_shader"}); it != extras.end())
836 material.fragment_shader = it->second;
837
838 renderer::material::gpu_data & material_data = material.staging;
839
840 material_data.base_color_factor = convert(gltf_material.pbrData.baseColorFactor);
841 material_data.base_emissive_factor = glm::vec4(convert(gltf_material.emissiveFactor), 0);
842 material_data.metallic_factor = gltf_material.pbrData.metallicFactor;
843 material_data.roughness_factor = gltf_material.pbrData.roughnessFactor;
844 material_data.alpha_cutoff = gltf_material.alphaCutoff;
845
846 auto f = [&](const auto & texture_info,
847 std::shared_ptr<renderer::texture> & texture,
848 renderer::material::texture_info & info) {
849 if (not texture_info)
850 return;
851
852 texture = textures.at(texture_info->textureIndex);
853 info.texcoord = texture_info->texCoordIndex;
854
855 if (auto & xform = texture_info->transform)
856 {
857 if (xform->texCoordIndex)
858 info.texcoord = *xform->texCoordIndex;
859

Callers 1

operator()Method · 0.80

Calls 8

convertFunction · 0.85
findMethod · 0.80
add_uniformMethod · 0.80
reserveMethod · 0.45
sizeMethod · 0.45
resetMethod · 0.45
endMethod · 0.45
atMethod · 0.45

Tested by

no test coverage detected