Replace template function by direct position access

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2112 dfc29bdd-3216-0410-991c-e03cc46cb475
master
hybrid 2009-01-20 22:36:14 +00:00
parent d021013af2
commit a771f88caf
2 changed files with 12 additions and 27 deletions

View File

@ -518,14 +518,13 @@ namespace scene
return;
TerrainData.Position = TerrainData.Position;
video::S3DVertex2TCoords* meshVertices = (video::S3DVertex2TCoords*)Mesh.getMeshBuffer(0)->getVertices();
s32 vtxCount = Mesh.getMeshBuffer(0)->getVertexCount();
core::matrix4 rotMatrix;
rotMatrix.setRotationDegrees(TerrainData.Rotation);
for (s32 i = 0; i < vtxCount; ++i)
{
RenderBuffer->getVertexBuffer()[i].Pos = meshVertices[i].Pos * TerrainData.Scale + TerrainData.Position;
RenderBuffer->getVertexBuffer()[i].Pos = Mesh.getMeshBuffer(0)->getPosition(i) * TerrainData.Scale + TerrainData.Position;
RenderBuffer->getVertexBuffer()[i].Pos -= TerrainData.RotationPivot;
rotMatrix.inverseRotateVect(RenderBuffer->getVertexBuffer()[i].Pos);
@ -634,29 +633,16 @@ namespace scene
void CTerrainSceneNode::preRenderIndicesCalculations()
{
switch (RenderBuffer->getIndexBuffer().getType())
{
case video::EIT_16BIT:
preRenderIndicesCalculationsDirect<u16>((u16*)RenderBuffer->getIndexBuffer().pointer());
break;
case video::EIT_32BIT:
preRenderIndicesCalculationsDirect<u32>((u32*)RenderBuffer->getIndexBuffer().pointer());
break;
}
}
template<class INDEX_TYPE>
void CTerrainSceneNode::preRenderIndicesCalculationsDirect(INDEX_TYPE* IndexBuffer)
{
scene::IIndexBuffer& indexBuffer = RenderBuffer->getIndexBuffer();
IndicesToRender = 0;
indexBuffer.set_used(0);
s32 index = 0;
// Then generate the indices for all patches that are visible.
for (s32 i = 0; i < TerrainData.PatchCount; ++i)
{
for (s32 j = 0; j < TerrainData.PatchCount; ++j)
{
const s32 index = i * TerrainData.PatchCount + j;
if (TerrainData.Patches[index].CurrentLOD >= 0)
{
s32 x = 0;
@ -673,12 +659,13 @@ namespace scene
const s32 index12 = getIndex(j, i, index, x, z + step);
const s32 index22 = getIndex(j, i, index, x + step, z + step);
IndexBuffer[IndicesToRender++]= static_cast<INDEX_TYPE>(index12);
IndexBuffer[IndicesToRender++]= static_cast<INDEX_TYPE>(index11);
IndexBuffer[IndicesToRender++]= static_cast<INDEX_TYPE>(index22);
IndexBuffer[IndicesToRender++]= static_cast<INDEX_TYPE>(index22);
IndexBuffer[IndicesToRender++]= static_cast<INDEX_TYPE>(index11);
IndexBuffer[IndicesToRender++]= static_cast<INDEX_TYPE>(index21);
indexBuffer.push_back(index12);
indexBuffer.push_back(index11);
indexBuffer.push_back(index22);
indexBuffer.push_back(index22);
indexBuffer.push_back(index11);
indexBuffer.push_back(index21);
IndicesToRender+=6;
// increment index position horizontally
x += step;
@ -691,6 +678,7 @@ namespace scene
}
}
}
++index;
}
}

View File

@ -278,9 +278,6 @@ namespace scene
virtual void preRenderLODCalculations();
virtual void preRenderIndicesCalculations();
template<class INDEX_TYPE>
void preRenderIndicesCalculationsDirect(INDEX_TYPE* IndexBuffer);
//! get indices when generating index data for patches at varying levels of detail.
u32 getIndex(const s32 PatchX, const s32 PatchZ, const s32 PatchIndex, u32 vX, u32 vZ) const;