Exemple #1
0
        public void InitializeDevice()
        {
            Version ver = new Version(GL.GetString(StringName.Version).Split(' ')[0]);
            Version req = new Version(2, 1);

            if (ver < req)
            {
                MessageBox.Show(string.Format("Need OpenGL {0} or newer to run. Have {1}.", req, ver));
            }

            GL.ClearColor(Color.Gray);
            GL.FrontFace(FrontFaceDirection.Cw);

            int vertexShaderHandle   = CreateShaderFromResource(ShaderType.VertexShader, "vp.cg");
            int fragmentShaderHandle = CreateShaderFromResource(ShaderType.FragmentShader, "fp.cg");

            if (vertexShaderHandle == 0 || fragmentShaderHandle == 0)
            {
                MessageBox.Show("Could not create shaders!");
                return;
            }

            shaderProgram = GL.CreateProgram();
            if (CheckGLError("CreateProgram"))
            {
                return;
            }

            GL.AttachShader(shaderProgram, vertexShaderHandle);
            if (CheckGLError("AttachShader"))
            {
                return;
            }

            GL.AttachShader(shaderProgram, fragmentShaderHandle);
            if (CheckGLError("AttachShader"))
            {
                return;
            }

            GL.LinkProgram(shaderProgram);
            if (CheckGLError("LinkProgram"))
            {
                return;
            }

            GL.UseProgram(shaderProgram);
            if (CheckGLError("UseProgram"))
            {
                return;
            }

            viewMatrixLocation          = GL.GetUniformLocation(shaderProgram, "view_matrix");
            projectionMatrixLocation    = GL.GetUniformLocation(shaderProgram, "projection_matrix");
            lightPositionVectorLocation = GL.GetUniformLocation(shaderProgram, "light_position");
            eyePositionVectorLocation   = GL.GetUniformLocation(shaderProgram, "eye_position");
            _meshFactory.SetShaderLocations(
                GL.GetUniformLocation(shaderProgram, "world_matrix"),
                GL.GetAttribLocation(shaderProgram, "position"),
                GL.GetAttribLocation(shaderProgram, "normal"),
                GL.GetUniformLocation(shaderProgram, "color")
                );

            UpdateView();
        }
Exemple #2
0
        public void InitializeDevice()
        {
            Version ver = new Version(GL.GetString(StringName.Version).Split(' ')[0]);
            Version req = new Version(3, 1, 0, 0);

            if (ver < req)
            {
                MessageBox.Show(string.Format("Need OpenGL {0:0.0} or newer to run.", req.ToString()));
            }

            GL.ClearColor(Color.Gray);

            int vertexShaderHandle   = CreateShaderFromResource(ShaderType.VertexShader, "vp.cg");
            int fragmentShaderHandle = CreateShaderFromResource(ShaderType.FragmentShader, "fp.cg");

            if (vertexShaderHandle == 0 || fragmentShaderHandle == 0)
            {
                MessageBox.Show("Could not create shaders!");
                return;
            }

            shaderProgram = GL.CreateProgram();
            if (GL.GetError() != ErrorCode.NoError)
            {
                return;
            }

            GL.AttachShader(shaderProgram, vertexShaderHandle);
            if (GL.GetError() != ErrorCode.NoError)
            {
                return;
            }

            GL.AttachShader(shaderProgram, fragmentShaderHandle);
            if (GL.GetError() != ErrorCode.NoError)
            {
                return;
            }

            GL.LinkProgram(shaderProgram);
            if (GL.GetError() != ErrorCode.NoError)
            {
                return;
            }

            //string programInfoLog;
            //GL.GetProgramInfoLog(shaderProgram, out programInfoLog);

            GL.UseProgram(shaderProgram);
            if (GL.GetError() != ErrorCode.NoError)
            {
                return;
            }

            projectionMatrixLocation     = GL.GetUniformLocation(shaderProgram, "projection_matrix");
            lightDirectionVectorLocation = GL.GetUniformLocation(shaderProgram, "light_direction");
            _meshFactory.SetShaderLocations(GL.GetUniformLocation(shaderProgram, "modelview_matrix"),
                                            GL.GetAttribLocation(shaderProgram, "position"),
                                            GL.GetAttribLocation(shaderProgram, "normal"),
                                            GL.GetUniformLocation(shaderProgram, "color")
                                            );

            UpdateView();
        }