Revision: 8634
http://ogre.svn.sourceforge.net/ogre/?rev=8634&view=rev
Author: sinbad
Date: 2009-05-27 09:56:29 +0000 (Wed, 27 May 2009)
Log Message:
-----------
Change terrain geometry format - pack delta in UV rather than position so it can be always there even in fixed-function (so you can flip between FF and shaders for testing appearance)
Modified Paths:
--------------
trunk/Components/Terrain/src/OgreTerrainQuadTreeNode.cpp
Modified: trunk/Components/Terrain/src/OgreTerrainQuadTreeNode.cpp
===================================================================
--- trunk/Components/Terrain/src/OgreTerrainQuadTreeNode.cpp 2009-05-27 09:48:25 UTC (rev 8633)
+++ trunk/Components/Terrain/src/OgreTerrainQuadTreeNode.cpp 2009-05-27 09:56:29 UTC (rev 8634)
@@ -399,22 +399,13 @@
// Vertex declaration
// TODO: consider vertex compression
size_t offset = 0;
- // POSITION binding depends on whether we're geomorphing
- // TODO - should we check that materials have geomorphing?
- if (mTerrain->getUseLodMorph() &&
- Root::getSingleton().getRenderSystem()->getCapabilities()->hasCapability(RSC_VERTEX_PROGRAM))
- {
- // float4(x, y, z, delta)
- offset += dcl->addElement(0, offset, VET_FLOAT4, VES_POSITION).getSize();
- }
- else
- {
- // float3(x, y, z)
- offset += dcl->addElement(0, offset, VET_FLOAT3, VES_POSITION).getSize();
- }
+ // POSITION
+ // float3(x, y, z)
+ offset += dcl->addElement(0, offset, VET_FLOAT3, VES_POSITION).getSize();
+ // UV0
+ // float3(u, v, delta)
+ offset += dcl->addElement(0, offset, VET_FLOAT3, VES_TEXTURE_COORDINATES).getSize();
- offset += dcl->addElement(0, offset, VET_FLOAT2, VES_TEXTURE_COORDINATES).getSize();
-
// Calculate number of vertices
// Base geometry size * size
size_t baseNumVerts = Math::Sqr(mVertexDataRecord->size);
@@ -450,9 +441,6 @@
// potentially reset our bounds depending on coverage of the update
resetBounds(rect);
- bool morph = mTerrain->getUseLodMorph() &&
- Root::getSingleton().getRenderSystem()->getCapabilities()->hasCapability(RSC_VERTEX_PROGRAM);
-
long destOffsetX = rect.left - mOffsetX;
long destOffsetY = rect.top - mOffsetY;
// Fill the buffers
@@ -496,16 +484,14 @@
*pBuf++ = pos.x;
*pBuf++ = pos.y;
*pBuf++ = pos.z;
- if (morph)
- {
- *pBuf++ = *pDelta;
- pDelta += inc;
- }
// UVs - base UVs vary from 0 to 1, all other values
// will be derived using scalings
*pBuf++ = x * uvScale;
*pBuf++ = 1.0 - (y * uvScale);
+ // delta
+ *pBuf++ = *pDelta;
+ pDelta += inc;
// Update bounds
mergeIntoBounds(x, y, pos);
@@ -556,12 +542,12 @@
*pBuf++ = pos.x;
*pBuf++ = pos.y;
*pBuf++ = pos.z;
- if (morph)
- *pBuf++ = 0; // no morphing
// UVs - same as base
*pBuf++ = x * uvScale;
*pBuf++ = 1.0 - (y * uvScale);
+ // delta (none)
+ *pBuf++ = 0;
}
pBaseHeight += mTerrain->getSize() * skirtSpacing;
pRowBuf += destRowSkip;
@@ -589,12 +575,12 @@
*pBuf++ = pos.x;
*pBuf++ = pos.y;
*pBuf++ = pos.z;
- if (morph)
- *pBuf++ = 0; // no morphing
// UVs - same as base
*pBuf++ = x * uvScale;
*pBuf++ = 1.0 - (y * uvScale);
+ // delta (none)
+ *pBuf++ = 0;
}
pRowBuf += destRowSkip;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|