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(); }
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(); }