MCPcopy Create free account
hub / github.com/crownengine/crown / load

Method load

src/world/shader_manager.cpp:60–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

58}
59
60void *ShaderManager::load(File &file, Allocator &a)
61{
62 BinaryReader br(file);
63 u32 version;
64 br.read(version);
65 CE_ASSERT(version == RESOURCE_HEADER(RESOURCE_VERSION_SHADER), "Wrong version");
66
67 u32 num;
68 br.read(num);
69
70 ShaderResource *sr = CE_NEW(a, ShaderResource)(a);
71 array::resize(sr->_data, num);
72
73 for (u32 i = 0; i < num; ++i) {
74 br.read(sr->_data[i].name._id);
75 br.read(sr->_data[i].state);
76 br.read(sr->_data[i].stencil_front);
77 br.read(sr->_data[i].stencil_back);
78
79 u32 num_samplers;
80 br.read(num_samplers);
81 CE_ENSURE(num_samplers <= countof(sr->_data[i].samplers));
82 sr->_data[i].num_samplers = num_samplers;
83
84 for (u32 s = 0; s < num_samplers; ++s) {
85 ShaderResource::Sampler &sampler = sr->_data[i].samplers[s];
86 br.read(sampler.name);
87 br.read(sampler.state);
88 br.read(sampler.stage);
89 }
90
91 u32 num_codes;
92 br.read(num_codes);
93 CE_ENSURE(num_codes > 0 && num_codes <= countof(sr->_data[i].codes));
94 sr->_data[i].num_codes = num_codes;
95
96 for (u32 c = 0; c < num_codes; ++c) {
97 ShaderResource::Code &code = sr->_data[i].codes[c];
98
99 br.read(code.backend);
100 CE_ENSURE(code.backend < ShaderBackend::COUNT);
101
102 br.read(code.vs_size);
103 CE_ENSURE(code.vs_size > 0);
104 code.vs_data = (u8 *)a.allocate(code.vs_size);
105 br.read(code.vs_data, code.vs_size);
106
107 br.read(code.fs_size);
108 CE_ENSURE(code.fs_size > 0);
109 code.fs_data = (u8 *)a.allocate(code.fs_size);
110 br.read(code.fs_data, code.fs_size);
111 }
112 }
113
114 return sr;
115}
116
117void ShaderManager::online(StringId64 id, ResourceManager &rm)

Callers

nothing calls this directly

Calls 3

resizeFunction · 0.50
readMethod · 0.45
allocateMethod · 0.45

Tested by

no test coverage detected