----------------------------------------------------------------------------- set shader parameters -----------------------------------------------------------------------------
| 401 | // set shader parameters |
| 402 | //----------------------------------------------------------------------------- |
| 403 | void WaterBlock::setShaderParams( SceneRenderState *state, BaseMatInstance *mat, const WaterMatParams ¶mHandles) |
| 404 | { |
| 405 | // Set variables that will be assigned to shader consts within WaterCommon |
| 406 | // before calling Parent::setShaderParams |
| 407 | |
| 408 | mUndulateMaxDist = F32_MAX; |
| 409 | |
| 410 | Parent::setShaderParams( state, mat, paramHandles ); |
| 411 | |
| 412 | // Now set the rest of the shader consts that are either unique to this |
| 413 | // class or that WaterObject leaves to us to handle... |
| 414 | |
| 415 | MaterialParameters* matParams = mat->getMaterialParameters(); |
| 416 | |
| 417 | // set vertex shader constants |
| 418 | //----------------------------------- |
| 419 | |
| 420 | MatrixF modelMat( getRenderTransform() ); |
| 421 | if ( paramHandles.mModelMatSC->isValid() ) |
| 422 | matParams->set(paramHandles.mModelMatSC, modelMat, GFXSCT_Float4x4); |
| 423 | matParams->setSafe(paramHandles.mGridElementSizeSC, (F32)mGridElementSize); |
| 424 | |
| 425 | // set pixel shader constants |
| 426 | //----------------------------------- |
| 427 | |
| 428 | LinearColorF c( mWaterFogData.color ); |
| 429 | matParams->setSafe( paramHandles.mBaseColorSC, c ); |
| 430 | |
| 431 | // By default we need to show a true reflection is fullReflect is enabled and |
| 432 | // we are above water. |
| 433 | F32 reflect = mPlaneReflector.isEnabled() && !isUnderwater( state->getCameraPosition() ); |
| 434 | |
| 435 | // If we were occluded the last frame a query was fetched ( not necessarily last frame ) |
| 436 | // and we weren't updated last frame... we don't have a valid texture to show |
| 437 | // so use the cubemap / fake reflection color this frame. |
| 438 | if ( mPlaneReflector.lastUpdateMs != REFLECTMGR->getLastUpdateMs() && mPlaneReflector.isOccluded() ) |
| 439 | reflect = false; |
| 440 | |
| 441 | Point4F reflectParams( mWaterPos.z, 0.0f, 1000.0f, !reflect ); |
| 442 | matParams->setSafe( paramHandles.mReflectParamsSC, reflectParams ); |
| 443 | |
| 444 | VectorF reflectNorm = mReflectNormalUp ? VectorF(0,0,1) : static_cast<VectorF>(mPlaneReflector.refplane); |
| 445 | matParams->setSafe(paramHandles.mReflectNormalSC, reflectNorm ); |
| 446 | } |
| 447 | |
| 448 | void WaterBlock::innerRender( SceneRenderState *state ) |
| 449 | { |
nothing calls this directly
no test coverage detected