Cleanup some TODOs.

This commit is contained in:
Jeff Young
2026-01-30 19:15:57 +00:00
parent e2535b3175
commit dd65b38b4d
3 changed files with 38 additions and 63 deletions
@@ -396,44 +396,18 @@ void RENDER_3D_RAYTRACE_BASE::renderAntiAliasPackets( const SFVEC4F* aBgColorY,
unsigned int nodex1y1 = 0;
if( ( x < ( RAYPACKET_DIM - 1 ) ) && ( y < ( RAYPACKET_DIM - 1 ) )
&& idx1y1 < RAYPACKET_RAYS_PER_PACKET )
nodex1y1 = aHitPck_X0Y0[idx1y1].m_HitInfo.m_acc_node_info;
// If all notes are equal we assume there was no change on the object hits.
if( ( ( nodex0y0 == nodex1y0 ) || ( nodex1y0 == 0 ) )
&& ( ( nodex0y0 == nodex0y1 ) || ( nodex0y1 == 0 ) )
&& ( ( nodex0y0 == nodex1y1 ) || ( nodex1y1 == 0 ) )
&& ( nodex0y0 == node_AA_x0y0 ) )
if( ( x < ( RAYPACKET_DIM - 1 ) )
&& ( y < ( RAYPACKET_DIM - 1 ) )
&& idx1y1 < RAYPACKET_RAYS_PER_PACKET )
{
/// @todo Either get rid of the if statement above or do something with the
/// commented out code below.
// Option 1
// This option will give a very good quality on reflections (slow)
/*
if( m_accelerator->Intersect( rayAA, hitAA, nodex0y0 ) )
{
aOutHitColor[i] += shadeHit( aBgColorY[y], rayAA, hitAA, false, 0 );
}
else
{
if( m_accelerator->Intersect( rayAA, hitAA ) )
aOutHitColor[i] += shadeHit( aBgColorY[y], rayAA, hitAA, false, 0 );
else
aOutHitColor[i] += hitColor[i];
}
*/
// Option 2
// Trace again with the same node,
// then if miss just give the same color as before
//if( m_accelerator->Intersect( rayAA, hitAA, nodex0y0 ) )
// aOutHitColor[i] += shadeHit( aBgColorY[y], rayAA, hitAA, false, 0 );
// Option 3
// Use same color
nodex1y1 = aHitPck_X0Y0[idx1y1].m_HitInfo.m_acc_node_info;
}
else
// If all nodes are equal we assume there was no change on the object hits.
if( ( nodex0y0 != nodex1y0 && nodex1y0 != 0 )
|| ( nodex0y0 != nodex0y1 && nodex0y1 != 0 )
|| ( nodex0y0 != nodex1y1 && nodex1y1 != 0 )
|| ( nodex0y0 != node_AA_x0y0 ) )
{
// Try to intersect the different nodes
// It tests the possible combination of hitted or not hitted points
@@ -442,26 +416,40 @@ void RENDER_3D_RAYTRACE_BASE::renderAntiAliasPackets( const SFVEC4F* aBgColorY,
if( nodex0y0 != 0 )
hitted |= m_accelerator->Intersect( rayAA, hitAA, nodex0y0 );
if( ( nodex1y0 != 0 ) && ( nodex0y0 != nodex1y0 ) )
if( nodex1y0 != 0
&& nodex0y0 != nodex1y0 )
{
hitted |= m_accelerator->Intersect( rayAA, hitAA, nodex1y0 );
}
if( ( nodex0y1 != 0 ) && ( nodex0y0 != nodex0y1 ) && ( nodex1y0 != nodex0y1 ) )
if( nodex0y1 != 0
&& nodex0y0 != nodex0y1
&& nodex1y0 != nodex0y1 )
{
hitted |= m_accelerator->Intersect( rayAA, hitAA, nodex0y1 );
}
if( ( nodex1y1 != 0 ) && ( nodex0y0 != nodex1y1 ) && ( nodex0y1 != nodex1y1 ) &&
( nodex1y0 != nodex1y1 ) )
if( nodex1y1 != 0
&& nodex0y0 != nodex1y1
&& nodex0y1 != nodex1y1
&& nodex1y0 != nodex1y1 )
{
hitted |= m_accelerator->Intersect( rayAA, hitAA, nodex1y1 );
}
if( (node_AA_x0y0 != 0 ) && ( nodex0y0 != node_AA_x0y0 ) &&
( nodex0y1 != node_AA_x0y0 ) && ( nodex1y0 != node_AA_x0y0 ) &&
( nodex1y1 != node_AA_x0y0 ) )
if( node_AA_x0y0 != 0
&& nodex0y0 != node_AA_x0y0
&& nodex0y1 != node_AA_x0y0
&& nodex1y0 != node_AA_x0y0
&& nodex1y1 != node_AA_x0y0 )
{
hitted |= m_accelerator->Intersect( rayAA, hitAA, node_AA_x0y0 );
}
if( hitted )
{
// If we got any result, shade it
aOutHitColor[i] = shadeHit( aBgColorY[y], rayAA, hitAA, false, 0,
is_testShadow );
aOutHitColor[i] = shadeHit( aBgColorY[y], rayAA, hitAA, false, 0, is_testShadow );
}
else
{
@@ -470,8 +458,7 @@ void RENDER_3D_RAYTRACE_BASE::renderAntiAliasPackets( const SFVEC4F* aBgColorY,
// It was missed the 'last nodes' so, trace a ray from the beginning
if( m_accelerator->Intersect( rayAA, hitAA ) )
aOutHitColor[i] = shadeHit( aBgColorY[y], rayAA, hitAA, false, 0,
is_testShadow );
aOutHitColor[i] = shadeHit( aBgColorY[y], rayAA, hitAA, false, 0, is_testShadow );
}
}
}
@@ -1433,10 +1420,7 @@ SFVEC4F RENDER_3D_RAYTRACE_BASE::shadeHit( const SFVEC4F& aBgColor, const RAY& a
const SFVEC4F diffuseColorObj =
SFVEC4F( aHitInfo.pHitObject->GetDiffuseColor( aHitInfo ), 1.0f );
#if USE_EXPERIMENTAL_SOFT_SHADOWS
bool is_aa_enabled = m_boardAdapter.m_Cfg->m_Render.raytrace_anti_aliasing && !m_isPreview;
#endif
bool is_aa_enabled = m_boardAdapter.m_Cfg->m_Render.raytrace_anti_aliasing && !m_isPreview;
float shadow_att_factor_sum = 0.0f;
unsigned int nr_lights_that_can_cast_shadows = 0;
@@ -1460,11 +1444,10 @@ SFVEC4F RENDER_3D_RAYTRACE_BASE::shadeHit( const SFVEC4F& aBgColor, const RAY& a
if( is_testShadow && light->GetCastShadows() )
{
nr_lights_that_can_cast_shadows++;
#if USE_EXPERIMENTAL_SOFT_SHADOWS
// For rays that are recursive, just calculate one hit shadow
if( aRecursiveLevel > 0 )
{
#endif
RAY rayToLight;
rayToLight.Init( hitPoint, vectorToLight );
@@ -1473,7 +1456,6 @@ SFVEC4F RENDER_3D_RAYTRACE_BASE::shadeHit( const SFVEC4F& aBgColor, const RAY& a
if( m_accelerator->IntersectP( rayToLight, distToLight ) )
shadow_att_factor_light = 0.0f;
#if USE_EXPERIMENTAL_SOFT_SHADOWS
}
else // Experimental softshadow calculation
{
@@ -1499,16 +1481,11 @@ SFVEC4F RENDER_3D_RAYTRACE_BASE::shadeHit( const SFVEC4F& aBgColor, const RAY& a
rayToLight.Init( hitPoint, disturbed_vector_to_light );
}
// !TODO: there are multiple ways that this tests can be
// optimized. Eg: by packing rays or to test against the
// latest hit object.
if( m_accelerator->IntersectP( rayToLight, distToLight ) )
{
shadow_att_factor_light -= shadow_inc_factor;
}
}
}
#endif
shadow_att_factor_sum += shadow_att_factor_light;
}
@@ -63,8 +63,6 @@ LAYER_ITEM_2D::~LAYER_ITEM_2D()
bool LAYER_ITEM_2D::Intersects( const BBOX_2D& aBBox ) const
{
return m_bbox.Intersects( aBBox );
// !TODO: improve this implementation
//return false;
}
+1 -1
View File
@@ -72,7 +72,7 @@ STROKE_FONT* STROKE_FONT::LoadFont( const wxString& aFontName )
}
else
{
// FONT TODO: support for other stroke fonts?
// If we ever supported other stroke fonts, the code would go here.
return nullptr;
}
}