secondlife/viewer-issues#72: Material preview shouldRender should return false if no render needed
parent
1552ee3a5d
commit
3e4e414011
|
|
@ -118,6 +118,8 @@ BOOL LLViewerDynamicTexture::render()
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLViewerDynamicTexture::preRender(BOOL clear_depth)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_UI;
|
||||
|
||||
//use the bottom left corner
|
||||
mOrigin.set(0, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,15 @@ LLGLTFPreviewTexture::MaterialLoadLevels::MaterialLoadLevels()
|
|||
}
|
||||
}
|
||||
|
||||
bool LLGLTFPreviewTexture::MaterialLoadLevels::isFullyLoaded()
|
||||
{
|
||||
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
|
||||
{
|
||||
if (levels[i] != FULLY_LOADED) { return false; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
S32& LLGLTFPreviewTexture::MaterialLoadLevels::operator[](size_t i)
|
||||
{
|
||||
llassert(i >= 0 && i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT);
|
||||
|
|
@ -187,17 +196,26 @@ LLPointer<LLGLTFPreviewTexture> LLGLTFPreviewTexture::create(LLPointer<LLFetched
|
|||
return new LLGLTFPreviewTexture(material, LLPipeline::MAX_BAKE_WIDTH);
|
||||
}
|
||||
|
||||
void LLGLTFPreviewTexture::preRender(BOOL clear_depth)
|
||||
BOOL LLGLTFPreviewTexture::needsRender()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_UI;
|
||||
|
||||
if (!mShouldRender && mBestLoad.isFullyLoaded()) { return false; }
|
||||
MaterialLoadLevels current_load = get_material_load_levels(*mGLTFMaterial.get());
|
||||
if (current_load < mBestLoad)
|
||||
{
|
||||
mShouldRender = true;
|
||||
mBestLoad = current_load;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLGLTFPreviewTexture::preRender(BOOL clear_depth)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_UI;
|
||||
|
||||
llassert(mShouldRender);
|
||||
if (!mShouldRender) { return; }
|
||||
|
||||
LLViewerDynamicTexture::preRender(clear_depth);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public:
|
|||
// Width scales with size of material's textures
|
||||
static LLPointer<LLGLTFPreviewTexture> create(LLPointer<LLFetchedGLTFMaterial> material);
|
||||
|
||||
BOOL needsRender() override { return mNeedsRender; }
|
||||
BOOL needsRender() override;
|
||||
void preRender(BOOL clear_depth = TRUE) override;
|
||||
BOOL render() override;
|
||||
void postRender(BOOL success) override;
|
||||
|
|
@ -50,15 +50,12 @@ public:
|
|||
S32 levels[LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT];
|
||||
|
||||
MaterialLoadLevels();
|
||||
|
||||
bool isFullyLoaded();
|
||||
S32& operator[](size_t i);
|
||||
|
||||
const S32& operator[](size_t i) const;
|
||||
|
||||
// Less is better
|
||||
// Returns false if lhs is not strictly less or equal for all levels
|
||||
bool operator<(const MaterialLoadLevels& other) const;
|
||||
|
||||
// Less is better
|
||||
// Returns false if lhs is not strictly greater or equal for all levels
|
||||
bool operator>(const MaterialLoadLevels& other) const;
|
||||
|
|
@ -66,7 +63,6 @@ public:
|
|||
|
||||
private:
|
||||
LLPointer<LLFetchedGLTFMaterial> mGLTFMaterial;
|
||||
bool mNeedsRender = true;
|
||||
bool mShouldRender = true;
|
||||
MaterialLoadLevels mBestLoad;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue