Radiant:
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:
parent
6fa612373e
commit
c3d11bca70
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user