// IRenderable void PreRender(const RenderParam& param, RenderParamOut* paramOut){ if (mSelf->HasObjFlag(SceneObjectFlag::Hide)) return; if (mLastPreRendered == gpTimer->GetFrame()) return; mLastPreRendered = gpTimer->GetFrame(); if (mBlendingSkySphere && mBlendingSkySphere->GetAlpha() == 1.0f){ mBlendingSkySphere->PreRender(param, paramOut); return; } if (mInterpolating) { mCurInterpolationTime += gpTimer->GetDeltaTime(); float normTime = mCurInterpolationTime / mInterpolationTime; if (normTime >= 1.0f) { normTime = 1.0f; mInterpolating = false; if (!mUseAlphaBlend) { SceneObjectFactory::GetInstance().UpdateEnvMapInNextFrame(mSelfPtr.lock()); } } for (int i = 0; i < 5; i++) { mMaterial->SetMaterialParameter(i, Lerp(mMaterialParamCur[i], mMaterialParamDest[i], normTime)); if (mMaterialOCC) { mMaterialOCC->SetMaterialParameter(i, Lerp(mMaterialParamCur[i], mMaterialParamDest[i], normTime)); } } } if (mBlendingSkySphere && mBlendingSkySphere->GetAlpha() != 0.f){ mBlendingSkySphere->PreRender(param, paramOut); } }
void Render(const RenderParam& param, RenderParamOut* paramOut){ if (mSelf->HasObjFlag(SceneObjectFlag::Hide)) return; if (mBlendingSkySphere && mBlendingSkySphere->GetAlpha() == 1.0f){ mBlendingSkySphere->Render(param, paramOut); return; } if (!mMaterial) { assert(0); return; } auto& renderer = Renderer::GetInstance(); renderer.SetPrimitiveTopology(PRIMITIVE_TOPOLOGY_TRIANGLELIST); renderer.UnbindInputLayout(); renderer.UnbindVertexBuffers(); if (mMaterialOCC && param.mRenderPass == RENDER_PASS::PASS_GODRAY_OCC_PRE) { RenderEventMarker mark("SkySphere_OCC"); mMaterialOCC->Bind(false); renderer.Draw(3, 0); } else if (param.mRenderPass == RENDER_PASS::PASS_NORMAL) { RenderEventMarker mark("SkySphere"); mMaterial->Bind(false); if (mUseAlphaBlend) { renderer.GetResourceProvider()->BindBlendState(ResourceTypes::BlendStates::AlphaBlend); } renderer.Draw(3, 0); } if (mBlendingSkySphere && mBlendingSkySphere->GetAlpha() != 0.f){ mBlendingSkySphere->Render(param, paramOut); } }