Radegast.Rendering.SceneWindow.RenderWater C# (CSharp) Method

RenderWater() public method

public RenderWater ( ) : void
return void
        public void RenderWater()
        {
            float z = Client.Network.CurrentSim.WaterHeight;
            GL.Color4(0.09f, 0.28f, 0.63f, 0.84f);

            if (RenderSettings.WaterReflections)
            {
                waterProgram.Start();

                // Reflection texture unit
                GL.ActiveTexture(TextureUnit.Texture0);
                GL.Enable(EnableCap.Texture2D);
                GL.BindTexture(TextureTarget.Texture2D, reflectionTexture);
                GL.Uniform1(waterProgram.Uni("reflection"), 0);

                // Refraction texture unit
                GL.ActiveTexture(TextureUnit.Texture1);
                GL.Enable(EnableCap.Texture2D);
                GL.BindTexture(TextureTarget.Texture2D, refractionTexture);
                GL.Uniform1(waterProgram.Uni("refraction"), 1);

                // Normal map
                GL.ActiveTexture(TextureUnit.Texture2);
                GL.Enable(EnableCap.Texture2D);
                GL.BindTexture(TextureTarget.Texture2D, normalmap);
                GL.Uniform1(waterProgram.Uni("normalMap"), 2);

                //// DUDV map
                GL.ActiveTexture(TextureUnit.Texture3);
                GL.Enable(EnableCap.Texture2D);
                GL.BindTexture(TextureTarget.Texture2D, dudvmap);
                GL.Uniform1(waterProgram.Uni("dudvMap"), 3);

                //// Depth map
                GL.ActiveTexture(TextureUnit.Texture4);
                GL.Enable(EnableCap.Texture2D);
                GL.BindTexture(TextureTarget.Texture2D, depthTexture);
                GL.Uniform1(waterProgram.Uni("depthMap"), 4);

                int lightPos = GL.GetUniformLocation(waterProgram.ID, "lightPos");
                GL.Uniform4(lightPos, 0f, 0f, z + 100, 1f); // For now sun reflection in the water comes from the south west sim corner
                int cameraPos = GL.GetUniformLocation(waterProgram.ID, "cameraPos");
                GL.Uniform4(cameraPos, Camera.RenderPosition.X, Camera.RenderPosition.Y, Camera.RenderPosition.Z, 1f);
                int waterColor = GL.GetUniformLocation(waterProgram.ID, "waterColor");
                GL.Uniform4(waterColor, 0.09f, 0.28f, 0.63f, 0.84f);
            }

            GL.Begin(PrimitiveType.Quads);
            for (float x = -256f * 2; x <= 256 * 2; x += 256f)
                for (float y = -256f * 2; y <= 256 * 2; y += 256f)
                    DrawWaterQuad(x, y, z);
            GL.End();

            if (RenderSettings.WaterReflections)
            {
                GL.ActiveTexture(TextureUnit.Texture4);
                GL.Disable(EnableCap.Texture2D);

                GL.ActiveTexture(TextureUnit.Texture3);
                GL.Disable(EnableCap.Texture2D);

                GL.ActiveTexture(TextureUnit.Texture2);
                GL.Disable(EnableCap.Texture2D);

                GL.ActiveTexture(TextureUnit.Texture1);
                GL.Disable(EnableCap.Texture2D);

                GL.ActiveTexture(TextureUnit.Texture0);
                GL.Disable(EnableCap.Texture2D);

                ShaderProgram.Stop();
            }
        }
SceneWindow