Small adjustment to landscape vp parameter setting

This commit is contained in:
kaetemi 2013-09-10 16:24:45 +02:00
parent 26f4073ad7
commit 7462d731f1

View file

@ -1199,22 +1199,26 @@ void CLandscape::render(const CVector &refineCenter, const CVector &frontVecto
uint nbvp = uprogstate ? CLandscapeVBAllocator::MaxVertexProgram : 1; uint nbvp = uprogstate ? CLandscapeVBAllocator::MaxVertexProgram : 1;
for (uint i = 0; i < nbvp; ++i) for (uint i = 0; i < nbvp; ++i)
{ {
// activate the program to set the uniforms in the program state for all programs
// note: when uniforms are driver state, the indices must be the same across programs
if (uprogstate) _TileVB.activateVP(i);
CVertexProgramLandscape *program = _TileVB.getVP(i); CVertexProgramLandscape *program = _TileVB.getVP(i);
// c[0..3] take the ModelViewProjection Matrix. if (program)
driver->setUniformMatrix(IDriver::VertexProgram, program->getUniformIndex(CGPUProgramIndex::ModelViewProjection), IDriver::ModelViewProjection, IDriver::Identity); {
// c[4] take useful constants. // activate the program to set the uniforms in the program state for all programs
driver->setUniform4f(IDriver::VertexProgram, program->idx().ProgramConstants0, 0, 1, 0.5f, 0); // note: when uniforms are driver state, the indices must be the same across programs
// c[5] take RefineCenter if (uprogstate) _TileVB.activateVP(i);
driver->setUniform3f(IDriver::VertexProgram, program->idx().RefineCenter, refineCenter);
// c[6] take info for Geomorph trnasition to TileNear. // c[0..3] take the ModelViewProjection Matrix.
driver->setUniform2f(IDriver::VertexProgram, program->idx().TileDist, CLandscapeGlobals::TileDistFarSqr, CLandscapeGlobals::OOTileDistDeltaSqr); driver->setUniformMatrix(IDriver::VertexProgram, program->getUniformIndex(CGPUProgramIndex::ModelViewProjection), IDriver::ModelViewProjection, IDriver::Identity);
// c[10] take the fog vector. // c[4] take useful constants.
driver->setUniformFog(IDriver::VertexProgram, program->getUniformIndex(CGPUProgramIndex::Fog)); driver->setUniform4f(IDriver::VertexProgram, program->idx().ProgramConstants0, 0, 1, 0.5f, 0);
// c[12] take the current landscape Center / delta Pos to apply // c[5] take RefineCenter
driver->setUniform3f(IDriver::VertexProgram, program->idx().PZBModelPosition, _PZBModelPosition); driver->setUniform3f(IDriver::VertexProgram, program->idx().RefineCenter, refineCenter);
// c[6] take info for Geomorph trnasition to TileNear.
driver->setUniform2f(IDriver::VertexProgram, program->idx().TileDist, CLandscapeGlobals::TileDistFarSqr, CLandscapeGlobals::OOTileDistDeltaSqr);
// c[10] take the fog vector.
driver->setUniformFog(IDriver::VertexProgram, program->getUniformIndex(CGPUProgramIndex::Fog));
// c[12] take the current landscape Center / delta Pos to apply
driver->setUniform3f(IDriver::VertexProgram, program->idx().PZBModelPosition, _PZBModelPosition);
}
} }
} }