Skip to content
Permalink
Browse files
Move TransformedAABBoxSSE::mInsideViewFrustum flag to array in AABBox…
…RasterizerSSE
  • Loading branch information
rygorous committed Feb 2, 2013
1 parent 7779f10 commit 28e1833
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 15 deletions.
@@ -20,6 +20,7 @@
AABBoxRasterizerSSE::AABBoxRasterizerSSE()
: mNumModels(0),
mpTransformedAABBox(NULL),
mpBBoxVisible(NULL),
mpNumTriangles(NULL),
mpRenderTargetPixels(NULL),
mpCamera(NULL),
@@ -44,6 +45,7 @@ AABBoxRasterizerSSE::~AABBoxRasterizerSSE()
_aligned_free(mProjMatrix);
SAFE_DELETE_ARRAY(mpVisible);
SAFE_DELETE_ARRAY(mpTransformedAABBox);
SAFE_DELETE_ARRAY(mpBBoxVisible);
SAFE_DELETE_ARRAY(mpNumTriangles);
}

@@ -72,6 +74,7 @@ void AABBoxRasterizerSSE::CreateTransformedAABBoxes(CPUTAssetSet **pAssetSet, UI

mpVisible = new bool[mNumModels];
mpTransformedAABBox = new TransformedAABBoxSSE[mNumModels];
mpBBoxVisible = new bool[mNumModels];
mpNumTriangles = new UINT[mNumModels];

for(UINT assetId = 0, modelId = 0; assetId < numAssetSets; assetId++)
@@ -38,10 +38,7 @@ class AABBoxRasterizerSSE : public AABBoxRasterizer

inline void ResetInsideFrustum()
{
for(UINT i = 0; i < mNumModels; i++)
{
mpTransformedAABBox[i].SetInsideViewFrustum(true);
}
memset(mpBBoxVisible, 0, sizeof(bool) * mNumModels);
}

void SetViewProjMatrix(float4x4 *viewMatrix, float4x4 *projMatrix);
@@ -92,6 +89,7 @@ class AABBoxRasterizerSSE : public AABBoxRasterizer
protected:
UINT mNumModels;
TransformedAABBoxSSE *mpTransformedAABBox;
bool *mpBBoxVisible;
UINT *mpNumTriangles;
__m128 *mViewMatrix;
__m128 *mProjMatrix;
@@ -75,7 +75,7 @@ void AABBoxRasterizerSSEMT::IsInsideViewFrustum(UINT taskId, UINT taskCount)

for(UINT i = start; i < end; i++)
{
mpTransformedAABBox[i].IsInsideViewFrustum(mpCamera);
mpBBoxVisible[i] = mpTransformedAABBox[i].IsInsideViewFrustum(mpCamera);
}
}

@@ -129,7 +129,7 @@ void AABBoxRasterizerSSEMT::TransformAABBoxAndDepthTest(UINT taskId)
mpVisible[i] = false;
mpTransformedAABBox[i].SetVisible(&mpVisible[i]);

if(mpTransformedAABBox[i].IsInsideViewFrustum() && !mpTransformedAABBox[i].IsTooSmall(mViewMatrix, mProjMatrix, mpCamera))
if(mpBBoxVisible[i] && !mpTransformedAABBox[i].IsTooSmall(mViewMatrix, mProjMatrix, mpCamera))
{
mpTransformedAABBox[i].TransformAABBox();
mpTransformedAABBox[i].RasterizeAndDepthTestAABBox(mpRenderTargetPixels);
@@ -36,7 +36,7 @@ void AABBoxRasterizerSSEST::IsInsideViewFrustum(CPUTCamera *pCamera)
mpCamera = pCamera;
for(UINT i = 0; i < mNumModels; i++)
{
mpTransformedAABBox[i].IsInsideViewFrustum(mpCamera);
mpBBoxVisible[i] = mpTransformedAABBox[i].IsInsideViewFrustum(mpCamera);
}
}

@@ -55,7 +55,7 @@ void AABBoxRasterizerSSEST::TransformAABBoxAndDepthTest()
mpVisible[i] = false;
mpTransformedAABBox[i].SetVisible(&mpVisible[i]);

if(mpTransformedAABBox[i].IsInsideViewFrustum() && !mpTransformedAABBox[i].IsTooSmall(mViewMatrix, mProjMatrix, mpCamera))
if(mpBBoxVisible[i] && !mpTransformedAABBox[i].IsTooSmall(mViewMatrix, mProjMatrix, mpCamera))
{
mpTransformedAABBox[i].TransformAABBox();
mpTransformedAABBox[i].RasterizeAndDepthTestAABBox(mpRenderTargetPixels);
@@ -47,7 +47,6 @@ static const UINT sBBIndexList[AABB_INDICES] =
TransformedAABBoxSSE::TransformedAABBoxSSE()
: mpCPUTModel(NULL),
mVisible(NULL),
mInsideViewFrustum(true),
mOccludeeSizeThreshold(0.0f)
{
mWorldMatrix = (__m128*)_aligned_malloc(sizeof(float) * 4 * 4, 16);
@@ -106,9 +105,9 @@ void TransformedAABBoxSSE::CreateAABBVertexIndexList(CPUTModelDX11 *pModel)
//----------------------------------------------------------------
// Determine is model is inside view frustum
//----------------------------------------------------------------
void TransformedAABBoxSSE::IsInsideViewFrustum(CPUTCamera *pCamera)
bool TransformedAABBoxSSE::IsInsideViewFrustum(CPUTCamera *pCamera)
{
mInsideViewFrustum = pCamera->mFrustum.IsVisible(mBBCenterWS, mBBHalfWS);
return pCamera->mFrustum.IsVisible(mBBCenterWS, mBBHalfWS);
}

//----------------------------------------------------------------------------
@@ -29,7 +29,7 @@ class TransformedAABBoxSSE : public HelperSSE
TransformedAABBoxSSE();
~TransformedAABBoxSSE();
void CreateAABBVertexIndexList(CPUTModelDX11 *pModel);
void IsInsideViewFrustum(CPUTCamera *pCamera);
bool IsInsideViewFrustum(CPUTCamera *pCamera);
void TransformAABBoxAndDepthTest();

bool IsTooSmall(__m128 *pViewMatrix, __m128 *pProjMatrix, CPUTCamera *pCamera);
@@ -38,8 +38,6 @@ class TransformedAABBoxSSE : public HelperSSE

void RasterizeAndDepthTestAABBox(UINT *pRenderTargetPixels);

inline void SetInsideViewFrustum(bool insideVF){mInsideViewFrustum = insideVF;}
inline bool IsInsideViewFrustum(){ return mInsideViewFrustum;}
inline void SetVisible(bool *visible){mVisible = visible;}
inline void SetOccludeeSizeThreshold(float occludeeSizeThreshold){mOccludeeSizeThreshold = occludeeSizeThreshold;}

@@ -55,7 +53,6 @@ class TransformedAABBoxSSE : public HelperSSE

float3 mBBCenter;
float3 mBBHalf;
bool mInsideViewFrustum;
float3 mBBCenterWS;
float3 mBBHalfWS;

0 comments on commit 28e1833

Please sign in to comment.