| 247 | } |
| 248 | |
| 249 | void TerrainBlock::_updateLayerTexture() |
| 250 | { |
| 251 | const U32 layerSize = mFile->mSize; |
| 252 | const Vector<U8> &layerMap = mFile->mLayerMap; |
| 253 | const U32 pixelCount = layerMap.size(); |
| 254 | |
| 255 | if ( mLayerTex.isNull() || |
| 256 | mLayerTex.getWidth() != layerSize || |
| 257 | mLayerTex.getHeight() != layerSize ) |
| 258 | mLayerTex.set( layerSize, layerSize, GFXFormatB8G8R8A8, &TerrainLayerTexProfile, "" ); |
| 259 | |
| 260 | AssertFatal( mLayerTex.getWidth() == layerSize && |
| 261 | mLayerTex.getHeight() == layerSize, |
| 262 | "TerrainBlock::_updateLayerTexture - The texture size doesn't match the requested size!" ); |
| 263 | |
| 264 | // Update the layer texture. |
| 265 | GFXLockedRect *lock = mLayerTex.lock(); |
| 266 | |
| 267 | for ( U32 i=0; i < pixelCount; i++ ) |
| 268 | { |
| 269 | lock->bits[0] = layerMap[i]; |
| 270 | |
| 271 | if ( i + 1 >= pixelCount ) |
| 272 | lock->bits[1] = lock->bits[0]; |
| 273 | else |
| 274 | lock->bits[1] = layerMap[i+1]; |
| 275 | |
| 276 | if ( i + layerSize >= pixelCount ) |
| 277 | lock->bits[2] = lock->bits[0]; |
| 278 | else |
| 279 | lock->bits[2] = layerMap[i + layerSize]; |
| 280 | |
| 281 | if ( i + layerSize + 1 >= pixelCount ) |
| 282 | lock->bits[3] = lock->bits[0]; |
| 283 | else |
| 284 | lock->bits[3] = layerMap[i + layerSize + 1]; |
| 285 | |
| 286 | lock->bits += 4; |
| 287 | } |
| 288 | |
| 289 | mLayerTex.unlock(); |
| 290 | //mLayerTex->dumpToDisk( "png", "./layerTex.png" ); |
| 291 | } |
| 292 | |
| 293 | bool TerrainBlock::_initBaseShader() |
| 294 | { |