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 // observer
void planeChanged(){ void planeChanged(){
m_planeChanged = true; /* m_planeChanged vs m_transformChanged relationship is important
aabbChanged(); b4 (w/o one) cycling dependency occured:
m_lightsChanged(); 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(){ void shaderChanged(){
updateFiltered(); updateFiltered();
@ -1754,16 +1761,18 @@ void evaluateBRep() const {
} }
void transformChanged(){ void transformChanged(){
m_transformChanged = true; //m_transformChanged = true;
planeChanged(); planeChanged();
m_transformChanged = true; //experimental fix of cyclic dependency
} }
typedef MemberCaller<Brush, &Brush::transformChanged> TransformChangedCaller; typedef MemberCaller<Brush, &Brush::transformChanged> TransformChangedCaller;
void evaluateTransform(){ void evaluateTransform(){
if ( m_transformChanged ) { if ( m_transformChanged ) {
m_transformChanged = false; //m_transformChanged = false;
revertTransform(); revertTransform();
m_evaluateTransform(); m_evaluateTransform();
m_transformChanged = false; //experimental fix of cyclic dependency
} }
} }
const Matrix4& localToParent() const { 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 ){ 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 ){ 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 ( g_bp_globals.m_texdefTypeId == TEXDEFTYPEID_BRUSHPRIMITIVES ) {
#if 1 #if 1

View File

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

View File

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