mirror of
https://github.com/Garux/netradiant-custom.git
synced 2026-09-28 00:00:03 +02:00
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:
+14
-5
@@ -1737,9 +1737,16 @@ void updateFiltered(){
|
||||
|
||||
// observer
|
||||
void planeChanged(){
|
||||
m_planeChanged = true;
|
||||
aabbChanged();
|
||||
m_lightsChanged();
|
||||
/* 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
|
||||
|
||||
+4
-2
@@ -302,7 +302,8 @@ void Patch::UpdateCachedData(){
|
||||
}
|
||||
#endif
|
||||
|
||||
SceneChangeNotify();
|
||||
if( !m_transformChanged ) //experimental! fixing extra sceneChangeNotify call during scene rendering
|
||||
SceneChangeNotify();
|
||||
}
|
||||
|
||||
void Patch::InvertMatrix(){
|
||||
@@ -750,7 +751,8 @@ void Patch::AccumulateBBox(){
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user