Skip to content

Commit 52bab85

Browse files
Refactor of createMistubaLeaf
1 parent a52d012 commit 52bab85

4 files changed

Lines changed: 217 additions & 333 deletions

File tree

include/nbl/ext/MitsubaLoader/CMitsubaMaterialCompilerFrontend.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,9 @@ class CMitsubaMaterialCompilerFrontend
2929
EIVS_COUNT
3030
};
3131

32-
front_and_back_t compileToIRTree(asset::material_compiler::IR* ir, const CElementBSDF* _bsdf);
33-
3432
private:
3533
using tex_ass_type = std::tuple<core::smart_refctd_ptr<asset::ICPUImageView>,core::smart_refctd_ptr<asset::ICPUSampler>,float>;
3634

37-
const SContext* m_loaderContext;
38-
39-
std::pair<const CElementTexture*,float> unwindTextureScale(const CElementTexture* _element) const;
40-
4135
tex_ass_type getTexture(const CElementTexture* _element, const E_IMAGE_VIEW_SEMANTIC semantic=EIVS_IDENTITIY) const;
4236
#endif
4337
};

include/nbl/ext/MitsubaLoader/SContext.h

Lines changed: 7 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,13 @@ struct SContext final
6161
using frontend_emitter_t = frontend_ir_t::typed_pointer_type<const frontend_ir_t::CMul>;
6262
frontend_material_t genMaterial(const CElementBSDF* bsdf, system::ISystem* debugFileWriter);
6363
frontend_emitter_t genEmitter(const CElementEmitter* emitter, system::ISystem* debugFileWriter);
64-
frontend_ir_t::SParameter getProfile(const CElementEmissionProfile* profile);
6564
//
6665
void writeDot3File(system::ISystem* system, const system::path& filepath, frontend_ir_t::SDotPrinter& printer);
66+
//
67+
hlsl::float32_t2x3 getParameters(const std::span<frontend_ir_t::SParameter> out, const CElementTexture::FloatOrTexture& src);
68+
hlsl::float32_t2x3 getParameters(const std::span<frontend_ir_t::SParameter,3> out, const CElementTexture::SpectrumOrTexture& src);
69+
frontend_ir_t::SParameter getTexture(const CElementTexture* tex, hlsl::float32_t2x3* outUvTransform);
70+
frontend_ir_t::SParameter genProfile(const CElementEmissionProfile* profile);
6771

6872
//
6973
core::unordered_map<const CElementShape*,CMitsubaMetadata::SGeometryCollectionMetaPair> shapeCache;
@@ -79,61 +83,10 @@ struct SContext final
7983
using tex_ass_type = std::tuple<core::smart_refctd_ptr<asset::ICPUImageView>,core::smart_refctd_ptr<asset::ICPUSampler>>;
8084
//image, scale
8185
core::map<core::smart_refctd_ptr<asset::ICPUImage>,float> derivMapCache;
82-
83-
84-
static auto computeSamplerParameters(const CElementTexture::Bitmap& bitmap)
85-
{
86-
asset::ICPUSampler::SParams params;
87-
auto getWrapMode = [](CElementTexture::Bitmap::WRAP_MODE mode)
88-
{
89-
switch (mode)
90-
{
91-
case CElementTexture::Bitmap::WRAP_MODE::CLAMP:
92-
return asset::ISampler::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE;
93-
break;
94-
case CElementTexture::Bitmap::WRAP_MODE::MIRROR:
95-
return asset::ISampler::E_TEXTURE_CLAMP::ETC_MIRROR;
96-
break;
97-
case CElementTexture::Bitmap::WRAP_MODE::ONE:
98-
_NBL_DEBUG_BREAK_IF(true); // TODO : replace whole texture?
99-
break;
100-
case CElementTexture::Bitmap::WRAP_MODE::ZERO:
101-
_NBL_DEBUG_BREAK_IF(true); // TODO : replace whole texture?
102-
break;
103-
default:
104-
break;
105-
}
106-
return asset::ISampler::E_TEXTURE_CLAMP::ETC_REPEAT;
107-
};
108-
params.TextureWrapU = getWrapMode(bitmap.wrapModeU);
109-
params.TextureWrapV = getWrapMode(bitmap.wrapModeV);
110-
params.TextureWrapW = asset::ISampler::E_TEXTURE_CLAMP::ETC_REPEAT;
111-
params.BorderColor = asset::ISampler::ETBC_FLOAT_OPAQUE_BLACK;
112-
switch (bitmap.filterType)
113-
{
114-
case CElementTexture::Bitmap::FILTER_TYPE::EWA:
115-
[[fallthrough]]; // we dont support this fancy stuff
116-
case CElementTexture::Bitmap::FILTER_TYPE::TRILINEAR:
117-
params.MinFilter = asset::ISampler::ETF_LINEAR;
118-
params.MaxFilter = asset::ISampler::ETF_LINEAR;
119-
params.MipmapMode = asset::ISampler::ESMM_LINEAR;
120-
break;
121-
default:
122-
params.MinFilter = asset::ISampler::ETF_NEAREST;
123-
params.MaxFilter = asset::ISampler::ETF_NEAREST;
124-
params.MipmapMode = asset::ISampler::ESMM_NEAREST;
125-
break;
126-
}
127-
params.AnisotropicFilter = core::max(hlsl::findMSB<uint32_t>(bitmap.maxAnisotropy),1u);
128-
params.CompareEnable = false;
129-
params.CompareFunc = asset::ISampler::ECO_NEVER;
130-
params.LodBias = 0.f;
131-
params.MaxLod = 10000.f;
132-
params.MinLod = 0.f;
133-
return params;
134-
}
13586
#endif
13687
core::smart_refctd_ptr<frontend_ir_t> frontIR;
88+
// common frontend nodes
89+
frontend_ir_t::typed_pointer_type<const frontend_ir_t::CDeltaTransmission> deltaTransmission;
13790
// Common Debug Names
13891
enum class ECommonDebug : uint16_t
13992
{

0 commit comments

Comments
 (0)