@@ -1404,47 +1404,48 @@ pl_finalize_terrain(plCommandBuffer* ptCmdBuffer)
14041404 uint32_t uDstRowStart = (uint32_t )((ptTile -> tWorldPos .y - gptTerrainCtx -> tMinWorldPosition .y ) / gptTerrainCtx -> fLowResMetersPerTexel );
14051405 uint32_t uDstColStart = (uint32_t )((ptTile -> tWorldPos .x - gptTerrainCtx -> tMinWorldPosition .x ) / gptTerrainCtx -> fLowResMetersPerTexel );
14061406
1407- uint32_t uDstRowCount = (uint32_t ) gptTerrainCtx -> uTileSize + uDstRowStart ;
1408- uint32_t uDstColCount = (uint32_t ) gptTerrainCtx -> uTileSize + uDstColStart ;
1407+ int iDstHorizontalPixels = (int )( gptTerrainCtx -> uHeightMapResolution / gptTerrainCtx -> uHorizontalTiles ) ;
1408+ int iDstVerticalPixels = (int )( gptTerrainCtx -> uHeightMapResolution / gptTerrainCtx -> uVerticalTiles ) ;
14091409
1410- int iHorizontalPixels = (int )(gptTerrainCtx -> fLowResMetersPerTexel / gptTerrainCtx -> fMetersPerTexel );
1411- int iVerticalPixels = (int )(gptTerrainCtx -> fLowResMetersPerTexel / gptTerrainCtx -> fMetersPerTexel );
1412- float fUvxInc = (float )iHorizontalPixels / (float )gptTerrainCtx -> uTileSize ;
1413- float fUvyInc = (float )iVerticalPixels / (float )gptTerrainCtx -> uTileSize ;
1410+ uint32_t uDstRowCount = (uint32_t )iDstVerticalPixels + uDstRowStart ;
1411+ uint32_t uDstColCount = (uint32_t )iDstHorizontalPixels + uDstColStart ;
1412+
1413+ float fUvxInc = 1.0f / (float )gptTerrainCtx -> uTileSize ;
1414+ float fUvyInc = 1.0f / (float )gptTerrainCtx -> uTileSize ;
14141415 for (uint32_t uDstRow = uDstRowStart ; uDstRow < uDstRowCount ; uDstRow ++ )
14151416 {
1416- float fUvy = (float )(uDstRow - uDstRowStart ) / (float )gptTerrainCtx -> uTileSize ;
1417+ float fUvy = (0.5f / ( float )(iDstVerticalPixels )) + ( float )( uDstRow - uDstRowStart ) / (float )iDstVerticalPixels ;
14171418 for (uint32_t uDstCol = uDstColStart ; uDstCol < uDstColCount ; uDstCol ++ )
14181419 {
14191420
1420- float fUvx = (float )(uDstCol - uDstColStart ) / (float )gptTerrainCtx -> uTileSize ;
1421+ float fUvx = (0.5f / ( float )(iDstHorizontalPixels )) + ( float )( uDstCol - uDstColStart ) / (float )iDstHorizontalPixels ;
14211422
14221423 uint32_t uResult = 0 ;
14231424 uint32_t uSumCount = 0 ;
1424- for (int x = 0 ; x < iHorizontalPixels ; x ++ )
1425+ for (int x = 0 ; x < 4 ; x ++ )
14251426 {
1426- for (int y = 0 ; y < iVerticalPixels ; y ++ )
1427+ for (int y = 0 ; y < 4 ; y ++ )
14271428 {
1428- float fUvxTap = fUvx + x * fUvxInc - fUvxInc * (iHorizontalPixels - 1 );
1429- float fUvyTap = fUvy + y * fUvyInc - fUvyInc * (iVerticalPixels - 1 );
1429+ float fUvxTap = fUvx + x * fUvxInc - fUvxInc * (4 - 1 );
1430+ float fUvyTap = fUvy + y * fUvyInc - fUvyInc * (4 - 1 );
14301431
14311432
1432- if (fUvxTap < 0.0f || fUvxTap > 1.0f || fUvyTap < 0.0f || fUvyTap > 1.0f )
1433+ if (fUvxTap < 0.0f || fUvxTap >= 1.0f || fUvyTap < 0.0f || fUvyTap >= 1.0f )
14331434 {
14341435 }
14351436 else
14361437 {
14371438 uint32_t uSrcRow = (uint32_t )(fUvyTap * (float )gptTerrainCtx -> uTileSize );
14381439 uint32_t uSrcCol = (uint32_t )(fUvxTap * (float )gptTerrainCtx -> uTileSize );
1439- // uResult += (uint32_t)puOriginalData[uSrcRow * gptTerrainCtx->uTileSize + uSrcCol];
1440- uResult = pl_max ((uint32_t )puOriginalData [uSrcRow * gptTerrainCtx -> uTileSize + uSrcCol ], uResult );
1440+ uResult += (uint32_t )puOriginalData [uSrcRow * gptTerrainCtx -> uTileSize + uSrcCol ];
1441+ // uResult = pl_max((uint32_t)puOriginalData[uSrcRow * gptTerrainCtx->uTileSize + uSrcCol], uResult);
14411442 uSumCount ++ ;
14421443 }
14431444 }
14441445 }
14451446 // TODO: make sample technique option
1446- // if(uSumCount > 0)
1447- // uResult /= uSumCount;
1447+ if (uSumCount > 0 )
1448+ uResult /= uSumCount ;
14481449
14491450 puDestData [uDstRow * gptTerrainCtx -> uHeightMapResolution + uDstCol ] = (uint16_t )uResult ;
14501451 }
0 commit comments