MCPcopy Create free account
hub / github.com/carbonengine/trinity / UsedWithScreenSize

Method UsedWithScreenSize

trinity/Shader/Parameter/TriTextureParameter.cpp:53–103  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

51}
52
53void TriTextureParameter::UsedWithScreenSize( float screenSize, float worldRadius, const std::vector<float>& uvDensities )
54{
55 if( m_textureRes )
56 {
57 uint32_t requestedLod = 0;
58 if( m_textureLodEnabled && !uvDensities.empty() )
59 {
60 size_t i = 0;
61 float resolution = 0;
62
63 {
64 auto density = worldRadius * m_uvDensityScale[0];
65 if( density > 0 )
66 {
67 resolution = std::max( resolution, screenSize / density );
68 }
69 }
70
71 for( auto uv : uvDensities )
72 {
73 auto scale = m_uvDensityScale[1 + i++];
74 auto density = uv * scale;
75 if( density > 0 )
76 {
77 resolution = std::max( resolution, screenSize / density );
78 }
79 }
80 if( resolution != 0 )
81 {
82 auto requestedResolution = std::max( 1.f, resolution );
83 auto resolutionChange = (uint32_t)( m_textureRes->GetOriginalResolutionAsFloat() / requestedResolution );
84 if( resolutionChange > 0 )
85 {
86 // quickly calculate log2 of resolutionChange, which gives us the required LOD
87#if __APPLE__
88 requestedLod = 31 - (uint32_t)__builtin_clz( resolutionChange );
89#else
90 unsigned long reverse;
91 _BitScanReverse( &reverse, resolutionChange );
92 requestedLod = reverse;
93#endif
94 }
95 }
96 m_textureRes->RequestResolution( requestedLod );
97 }
98 else
99 {
100 m_textureRes->RequestResolution( requestedLod );
101 }
102 }
103}
104
105// -------------------------------------------------------------
106// Description:

Callers

nothing calls this directly

Calls 3

emptyMethod · 0.80
RequestResolutionMethod · 0.80

Tested by

no test coverage detected