record sampler informations in the material file
The main goal of this change is to have "ugly" code only in filamat. In particular, the sampler binding information is now recorded into the material file and used on the filament side to inform the backend. This means that on the filament side we only have generic code with all the "uglyness" in filamat. In particular SamplerBindingMap and SibGenerator now only exist in filamat. Files of greater interest: Material.cpp, MaterialBuilder.cpp
This commit is contained in:
committed by
Mathias Agopian
parent
3c982cae64
commit
f57224952a
@@ -46,7 +46,7 @@ SamplerInterfaceBlock::Builder& SamplerInterfaceBlock::Builder::add(
|
||||
std::string_view samplerName, Type type, Format format,
|
||||
Precision precision, bool multisample) noexcept {
|
||||
mEntries.push_back({
|
||||
{ samplerName.data(), samplerName.size() },
|
||||
{ samplerName.data(), samplerName.size() }, { },
|
||||
uint8_t(mEntries.size()), type, format, precision, multisample });
|
||||
return *this;
|
||||
}
|
||||
@@ -84,6 +84,7 @@ SamplerInterfaceBlock::SamplerInterfaceBlock(Builder const& builder) noexcept
|
||||
assert_invariant(i == e.offset);
|
||||
SamplerInfo& info = samplersInfoList[i++];
|
||||
info = e;
|
||||
info.uniformName = generateUniformName(mName.c_str(), e.name.c_str());
|
||||
infoMap[{ info.name.data(), info.name.size() }] = info.offset; // info.name.c_str() guaranteed constant
|
||||
}
|
||||
assert_invariant(i == samplersInfoList.size());
|
||||
@@ -97,7 +98,7 @@ const SamplerInterfaceBlock::SamplerInfo* SamplerInterfaceBlock::getSamplerInfo(
|
||||
return &mSamplersInfoList[pos->second];
|
||||
}
|
||||
|
||||
utils::CString SamplerInterfaceBlock::getUniformName(const char* group, const char* sampler) noexcept {
|
||||
utils::CString SamplerInterfaceBlock::generateUniformName(const char* group, const char* sampler) noexcept {
|
||||
char uniformName[256];
|
||||
|
||||
// sampler interface block name
|
||||
|
||||
Reference in New Issue
Block a user