| 1011 | } |
| 1012 | |
| 1013 | void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat ) |
| 1014 | { |
| 1015 | if ( overrideMat || (!mShader && !_initShader()) ) |
| 1016 | return; |
| 1017 | |
| 1018 | GFXTransformSaver saver; |
| 1019 | |
| 1020 | if ( mVB.isNull() || mPrimBuffer.isNull() ) |
| 1021 | _initVBIB(); |
| 1022 | |
| 1023 | GFX->setShader( mShader ); |
| 1024 | GFX->setShaderConstBuffer( mShaderConsts ); |
| 1025 | |
| 1026 | Point4F sphereRadii( mSphereOuterRadius, mSphereOuterRadius * mSphereOuterRadius, |
| 1027 | mSphereInnerRadius, mSphereInnerRadius * mSphereInnerRadius ); |
| 1028 | |
| 1029 | Point4F scatteringCoeffs( mRayleighScattering * mSkyBrightness, mRayleighScattering4PI, |
| 1030 | mMieScattering * mSkyBrightness, mMieScattering4PI ); |
| 1031 | |
| 1032 | Point4F invWavelength( 1.0f / mWavelength4[0], |
| 1033 | 1.0f / mWavelength4[1], |
| 1034 | 1.0f / mWavelength4[2], 1.0f ); |
| 1035 | |
| 1036 | Point3F camPos( 0, 0, smViewerHeight ); |
| 1037 | Point4F miscParams( camPos.z, camPos.z * camPos.z, mScale, mScale / mRayleighScaleDepth ); |
| 1038 | |
| 1039 | Frustum frust = state->getCameraFrustum(); |
| 1040 | frust.setFarDist( smEarthRadius + smAtmosphereRadius ); |
| 1041 | MatrixF proj( true ); |
| 1042 | frust.getProjectionMatrix( &proj ); |
| 1043 | |
| 1044 | Point3F camPos2 = state->getCameraPosition(); |
| 1045 | MatrixF xfm(true); |
| 1046 | xfm.setPosition(Point3F( |
| 1047 | camPos2.x, |
| 1048 | camPos2.y, |
| 1049 | mZOffset) ); |
| 1050 | |
| 1051 | GFX->multWorld(xfm); |
| 1052 | |
| 1053 | MatrixF xform(proj);//GFX->getProjectionMatrix()); |
| 1054 | xform *= GFX->getViewMatrix(); |
| 1055 | xform *= GFX->getWorldMatrix(); |
| 1056 | |
| 1057 | mShaderConsts->setSafe( mModelViewProjSC, xform ); |
| 1058 | mShaderConsts->setSafe( mMiscSC, miscParams ); |
| 1059 | mShaderConsts->setSafe( mSphereRadiiSC, sphereRadii ); |
| 1060 | mShaderConsts->setSafe( mScatteringCoefficientsSC, scatteringCoeffs ); |
| 1061 | mShaderConsts->setSafe( mCamPosSC, camPos ); |
| 1062 | mShaderConsts->setSafe( mLightDirSC, mLightDir ); |
| 1063 | mShaderConsts->setSafe( mSunDirSC, mSunDir ); |
| 1064 | mShaderConsts->setSafe( mNightColorSC, mNightColor ); |
| 1065 | mShaderConsts->setSafe( mInverseWavelengthSC, invWavelength ); |
| 1066 | mShaderConsts->setSafe( mNightInterpolantAndExposureSC, Point2F( mExposure, mNightInterpolant ) ); |
| 1067 | mShaderConsts->setSafe( mColorizeSC, mColorize*mColorizeAmt ); |
| 1068 | |
| 1069 | if ( GFXDevice::getWireframe() ) |
| 1070 | { |
nothing calls this directly
no test coverage detected