Esempio n. 1
0
        /// <summary>
        /// Sets up and initializes the viewport by setting the Uniforms
        /// </summary>
        public void SetupViewport(ViewportInfo viewport)
        {
            Transform mv = new Transform();
            bool haveModelView = false;

            if (m_Uniforms.rglModelViewProjectionMatrix >= 0) {
                Transform mvp = viewport.GetXform (CoordinateSystem.World, CoordinateSystem.Clip);

                m_MVPXform = mvp;

                float[] modelViewProjection = mvp.ToFloatArray(false);
                GL.UniformMatrix4 (m_Uniforms.rglModelViewProjectionMatrix, 1, false, modelViewProjection);
            }

            if (m_Uniforms.rglModelViewMatrix >= 0) {
                mv = viewport.GetXform (CoordinateSystem.World, CoordinateSystem.Camera);

                m_MVXform = mv;
                haveModelView = true;

                float[] modelView = mv.ToFloatArray(false);
                GL.UniformMatrix4 (m_Uniforms.rglModelViewMatrix, 1, false, modelView);
            }

            if (m_Uniforms.rglProjectionMatrix >= 0) {
                Transform pr = viewport.GetXform (CoordinateSystem.Camera, CoordinateSystem.Clip);

                float[] projection = pr.ToFloatArray(false);
                GL.UniformMatrix4 (m_Uniforms.rglProjectionMatrix, 1, false, projection);
            }

            if (m_Uniforms.rglNormalMatrix >= 0) {

                float[] normalMatrix = new float[9];

                if (!haveModelView) {
                    mv = viewport.GetXform (CoordinateSystem.World, CoordinateSystem.Camera);
                    m_MVXform = mv;
                }

                Matrix4Dto3F (mv, ref normalMatrix, false);
                GL.UniformMatrix3 (m_Uniforms.rglNormalMatrix, 1, false, normalMatrix);
            }
        }