misc...
	* experimental fix of rendering scene and evaluating brush/patch representation TWICE on every transform (literally after every mouse move fraction)
This commit is contained in:
Garux 2017-08-02 09:48:29 +03:00
parent 6fa612373e
commit c3d11bca70
4 changed files with 24 additions and 9 deletions

View File

@ -1737,9 +1737,16 @@ void updateFiltered(){
// observer
void planeChanged(){
/* m_planeChanged vs m_transformChanged relationship is important
b4 (w/o one) cycling dependency occured:
transformModifier.set ; transformChanged() ; planeChanged() ; pivotChanged() ; sceneChangeNotify() ;
sceneRender() ; localAABB ; evaluateBRep ; buildBRep() ; evaluateTransform ; !!!problem starts here!!!! planeChanged() ; pivotChanged() ; sceneChangeNotify() ;
sceneRender() ; localAABB ; evaluateBRep ; buildBRep() ; */
if( !m_transformChanged ){
m_planeChanged = true;
aabbChanged();
m_lightsChanged();
}
}
void shaderChanged(){
updateFiltered();
@ -1754,16 +1761,18 @@ void evaluateBRep() const {
}
void transformChanged(){
m_transformChanged = true;
//m_transformChanged = true;
planeChanged();
m_transformChanged = true; //experimental fix of cyclic dependency
}
typedef MemberCaller<Brush, &Brush::transformChanged> TransformChangedCaller;
void evaluateTransform(){
if ( m_transformChanged ) {
m_transformChanged = false;
//m_transformChanged = false;
revertTransform();
m_evaluateTransform();
m_transformChanged = false; //experimental fix of cyclic dependency
}
}
const Matrix4& localToParent() const {

View File

@ -1492,7 +1492,8 @@ std::size_t planeNormalIndex( const Vector3& normal ) {
void Texdef_transformLocked( TextureProjection& projection, std::size_t width, std::size_t height, const Plane3& plane, const Matrix4& identity2transformed, const Vector3 centroid ){
if( identity2transformed == g_matrix4_identity ){
return; //TODO FIXME !!! this (and whole pipeline?) is called with g_matrix4_identity after every transform
//globalOutputStream() << "identity2transformed == g_matrix4_identity\n";
return; //TODO FIXME !!! this (and whole pipeline?) is called with g_matrix4_identity after every transform //now only on freezeTransform, it seems
}
if ( g_bp_globals.m_texdefTypeId == TEXDEFTYPEID_BRUSHPRIMITIVES ) {
#if 1

View File

@ -302,6 +302,7 @@ void Patch::UpdateCachedData(){
}
#endif
if( !m_transformChanged ) //experimental! fixing extra sceneChangeNotify call during scene rendering
SceneChangeNotify();
}
@ -750,6 +751,7 @@ void Patch::AccumulateBBox(){
aabb_extend_by_point_safe( m_aabb_local, ( *i ).m_vertex );
}
if( !m_transformChanged ) //experimental! fixing extra sceneChangeNotify call during scene rendering
m_boundsChanged();
m_lightsChanged();
}

View File

@ -619,6 +619,7 @@ const Matrix4& localToParent() const {
return g_matrix4_identity;
}
const AABB& localAABB() const {
const_cast<Patch*>( this )->evaluateTransform(); //experimental! fixing extra sceneChangeNotify call during scene rendering
return m_aabb_local;
}
VolumeIntersectionValue intersectVolume( const VolumeTest& test, const Matrix4& localToWorld ) const {
@ -673,6 +674,7 @@ void transform( const Matrix4& matrix ){
}
void transformChanged(){
m_transformChanged = true;
m_boundsChanged(); //experimental! fixing extra sceneChangeNotify call during scene rendering
m_lightsChanged();
SceneChangeNotify();
}
@ -680,9 +682,10 @@ typedef MemberCaller<Patch, &Patch::transformChanged> TransformChangedCaller;
void evaluateTransform(){
if ( m_transformChanged ) {
m_transformChanged = false;
//m_transformChanged = false;
revertTransform();
m_evaluateTransform();
m_transformChanged = false; //experimental! fixing extra sceneChangeNotify call during scene rendering
}
}