private void ShadowChange() { if (UseShadows.get()) { if (MyEffect.get() == null || MyEffect.getPath().Equals("Deferred/PointLightNoShadows")) { MyEffect.set("Deferred/PointLightShadows"); } ShadowCube = AssetManager.RequestCubeMap((int)ShadowMapSize.get(), SurfaceFormat.HalfSingle, DepthFormat.Depth24Stencil8, ShadowCube); if (MyEffect.Holder != null) { DeferredLightEffect effect3D = (DeferredLightEffect)(MyEffect.Holder); if (ShadowCube.Value != null) { effect3D.ShadowReference.SetValue(ShadowCube.Value); } } DrawShadows(); } else { if (MyEffect.get() == null || MyEffect.getPath().Equals("Effects/Deferred/PointLightShadows")) { MyEffect.set("Deferred/PointLightNoShadows"); } AssetManager.FreeRenderTarget(ShadowCube); } }
public override void Draw3D(Camera3D camera, GameObjectTag DrawTag) { if (lightState == BasicLight.LightState.Dead) { base.Draw3D(camera, DrawTag); return; } if (DrawTag == GameObjectTag._3DPreDraw) { if (RealtimeShadows.get()) { DrawShadows(); } } else { #if EDITOR && WINDOWS if (DrawTag == GameObjectTag._3DForward) { if (EditorSelected) { Vector4 Col = Vector4.One; ShapeRenderer.DrawSphere(WorldMatrix, camera, Col); } if (ShadowCube != null) { ShapeRenderer.DrawSphere(WorldMatrix, camera, ShadowCube.Value); } } else #endif if (MyEffect.Holder != null) { Game1.graphicsDevice.RasterizerState = RasterizerState.CullClockwise; DeferredLightEffect effect3D = (DeferredLightEffect)MyEffect.Holder; effect3D.SetTextureSize(ParentScene.WindowSize); effect3D.SetUV(camera); effect3D.SetInverseCamera(camera); effect3D.SetLight(Position.get(), Scale.get() / 2); effect3D.SetFromObject(this); effect3D.SetFromCamera(camera); effect3D.MyEffect.CurrentTechnique.Passes[0].Apply(); Render.DrawModel(SphereModel, MyEffect.get()); } } base.Draw3D(camera, DrawTag); }
public override void Draw3D(Camera3D camera, GameObjectTag DrawTag) { if (lightState == BasicLight.LightState.Dead || MyEffect.Holder != null) { base.Draw3D(camera, DrawTag); return; } DeferredLightEffect effect3D = (DeferredLightEffect)MyEffect.Holder; effect3D.SetTextureSize(ParentScene.WindowSize); effect3D.SetInverseCamera(camera); effect3D.MyEffect.CurrentTechnique.Passes[0].Apply(); FullscreenQuad.Draw(); base.Draw3D(camera, DrawTag); }