private void openGLControl1_OpenGLInitialized(object sender, EventArgs e) { gl = openGLControl1.OpenGL; gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f); gl.LineWidth(1.5f); gl.PointSize(6.0f); // viewMatrix = new mat4(1.0f); /** * 使用sharpGL封装过的方式创建openGL Program 不用执行编译shader到链接一系列操作 * 两program 他们实际上是共用变换矩阵 emmm 可能会有一些小问题 */ mainGlProgram = new ShaderProgram(); mainGlProgram.Create(gl, vertexShaderSource, simpleFragmentShaderSource, null); mainGlProgram.BindAttributeLocation(gl, index_in_vPosition, "vPosition"); mainGlProgram.AssertValid(gl); axisGlProgram = new ShaderProgram(); axisGlProgram.Create(gl, vertexShaderSource, colorFragmentShaderSource, null); axisGlProgram.BindAttributeLocation(gl, index_in_vPosition, "vPosition"); axisGlProgram.BindAttributeLocation(gl, index_in_vColor, "vColor"); axisGlProgram.AssertValid(gl); arcBallManipulater.Bind(openGLControl1, viewMatrix, new Action <mat4>((mat4 => { viewMatrix = mat4; }))); }
private ShaderProgram InitShader(OpenGL gl, RenderMode renderMode) { String vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"Grids.HexahedronGrid.vert"); String fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"Grids.HexahedronGrid.frag"); ShaderProgram shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); //shaderProgram.BindAttributeLocation(gl, ATTRIB_INDEX_POSITION, in_position); //shaderProgram.BindAttributeLocation(gl, ATTRIB_INDEX_COLOUR, in_uv); { int location = shaderProgram.GetAttributeLocation(gl, in_Position); if (location < 0) { throw new ArgumentException(); } this.ATTRIB_INDEX_POSITION = (uint)location; } { int location = shaderProgram.GetAttributeLocation(gl, in_uv); if (location < 0) { throw new ArgumentException(); } this.ATTRIB_INDEX_UV = (uint)location; } shaderProgram.AssertValid(gl); return(shaderProgram); }
/// <summary> /// Инициализация OpenGL. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args) { OpenGL gl = openGLControl.OpenGL; gl.ClearColor(0.23529f, 0.23529f, 0.46666f, 0); // Create the shader program. var vertexShaderSource = ManifestResourceLoader.LoadTextFile("Shader2.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("Shader2.frag"); shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); shaderProgram.BindAttributeLocation(gl, attributeIndexNormal, "in_Norm"); shaderProgram.AssertValid(gl); // Create a perspective projection matrix. const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f; projectionMatrix = glm.perspective(rads, (float)gl.RenderContextProvider.Width / (float)gl.RenderContextProvider.Height, 0.01f, 600.0f); // Create a view matrix to move us back a bit. viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f)); // Create a model matrix rotate model. modelMatrix = glm.rotate(mat4.identity(), 1.1f, new vec3(0, 1, 0)); }
private void InitializeOpenGL(OpenGL gl, int width, int height) { // Set a blue clear colour. this.gl = gl; gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.PolygonMode(SharpGL.Enumerations.FaceMode.Front, SharpGL.Enumerations.PolygonMode.Lines); gl.Enable(OpenGL.GL_CULL_FACE); gl.CullFace(OpenGL.GL_BACK); // Create the shader program. var vertexShaderSource = ManifestResourceLoader.LoadTextFile("OpenGLRenderer\\Shaders\\VertexShader - Copy.glsl"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("OpenGLRenderer\\Shaders\\FragmentShader - Copy.glsl"); //for(int i = 0; i<100; i++) { shaderProgram = new ShaderProgram(); //var shaderTime = _stopwatch.ElapsedMilliseconds; shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); //File.AppendAllText("shader" + ".txt", (_stopwatch.ElapsedMilliseconds - shaderTime).ToString() + "\n"); //} shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); shaderProgram.BindAttributeLocation(gl, attributeIndexNormal, "in_Normal"); shaderProgram.AssertValid(gl); // Now create the geometry for the square. _poStructs = new List <poStruct>(); foreach (var po in _primordialObject) { _poStructs.Add(new poStruct { _vertexBufferArray = CreateVertexBufferArray(gl, po), _primordialObject = po }); } }
protected void InitializeShader(out ShaderProgram shaderProgram) { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"DemoSimplePointSpriteElement.vert"); string fragmentShaderSource = string.Empty; switch (this.fragShaderType) { case FragShaderType.Simple: fragmentShaderSource = ManifestResourceLoader.LoadTextFile( @"DemoSimplePointSpriteElement_Simple.frag"); break; case FragShaderType.Analytic: fragmentShaderSource = ManifestResourceLoader.LoadTextFile( @"DemoSimplePointSpriteElement_Analytic.frag"); break; default: throw new NotImplementedException(); } shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(); }
/// <summary> /// Initialises the scene. /// </summary> /// <param name="gl">The OpenGL instance.</param> /// <param name="width">The width of the screen.</param> /// <param name="height">The height of the screen.</param> public void Initialise(OpenGL gl, float width, float height) { // Set a blue clear colour. gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f); // Create the shader program. var vertexShaderSource = ManifestResourceLoader.LoadTextFile("Shader.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("Shader.frag"); shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); shaderProgram.AssertValid(gl); // Create a perspective projection matrix. const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f; projectionMatrix = glm.perspective(rads, width / height, 0.1f, 100.0f); // Create a view matrix to move us back a bit. viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f)); // Create a model matrix to make the model a little bigger. modelMatrix = glm.scale(new mat4(1.0f), new vec3(2.5f)); // Now create the geometry for the square. CreateVerticesForSquare(gl); }
/// <summary> /// Initialises the scene. /// </summary> /// <param name="gl">The OpenGL instance.</param> public void Initialise(OpenGL gl) { time = DateTime.Now.Millisecond / 1000; // Set a blue clear colour. //gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f); // Create the shader program. var vertexShaderSource = ResourceHelper.LoadTextFromRecource("cymatics.Shaders.Main.vert"); try { shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, FragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, AttributeIndexPosition, "position"); shaderProgram.AssertValid(gl); } catch (ShaderCompilationException se) { CompilationFailureText = $"-----------\r\n{se.Message}\r\n----------\r\n {se.CompilerOutput} \r\n {se.HelpLink}"; Debug.WriteLine(" shader compilation failure"); Debug.WriteLine(" -------------- "); Debug.WriteLine(CompilationFailureText); Debug.WriteLine(" -------------- "); isValid = false; _needsRefresh = false; OnCompilationEvent(new EventArgs()); return; } catch (Exception e) { Debug.WriteLine(e); isValid = false; _needsRefresh = true; OnCompilationEvent(new EventArgs()); return; } //Generate Textures //gl.GenTextures(2, _glTextureArray); //shaderProgram.BindAttributeLocation(gl, glTextureArray[0], "iChannel0"); //shaderProgram.BindAttributeLocation(gl, glTextureArray[1], "iChannel1"); //var ch0Loc = shaderProgram.GetUniformLocation(gl, "iChannel0"); //gl.ActiveTexture(OpenGL.GL_TEXTURE0); //gl.BindTexture(OpenGL.GL_TEXTURE_2D, _glTextureArray[0]); //gl.Uniform1(ch0Loc, 0); //var ch1Loc = shaderProgram.GetUniformLocation(gl, "iChannel1"); //gl.ActiveTexture(OpenGL.GL_TEXTURE1); //gl.BindTexture(OpenGL.GL_TEXTURE_2D, _glTextureArray[1]); //gl.Uniform1(ch1Loc, 1); // Now create the geometry for the square. CreateVerticesForSquare(gl); _needsRefresh = false; isValid = true; OnCompilationEvent(new EventArgs()); }
protected void InitializeShader(OpenGL gl, out ShaderProgram shaderProgram) { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"TexturedCube.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"TexturedCube.frag"); shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(gl); }
protected void InitializeShader(out ShaderProgram shaderProgram) { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"SceneElements.AxisElement.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"SceneElements.AxisElement.frag"); shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(); }
private void InitShaderProgram() { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"SceneElements.FontElement.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"SceneElements.FontElement.frag"); var shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(); this.shaderProgram = shaderProgram; }
protected ShaderProgram InitializeShader() { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIRect.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIRect.frag"); shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(); return(shaderProgram); }
private void InitShaderProgram() { // Create the shader program. var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"PointSpriteStringElement.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"PointSpriteStringElement.frag"); var shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); this.attributeIndexPosition = shaderProgram.GetAttributeLocation("in_Position"); shaderProgram.AssertValid(); this.shaderProgram = shaderProgram; }
public static ShaderProgram GetPickingShaderProgram() { var vertexShaderSource = GetShaderSource(ShaderTypes.VertexShader); string fragmentShaderSource = GetShaderSource(ShaderTypes.FragmentShader); var shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(); return(shaderProgram); }
//static readonly object synObj = new object(); public static ShaderProgram GetPickingShaderProgram() { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"ColorCodedPicking.PickingShader.vert"); string fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"ColorCodedPicking.PickingShader.frag"); var shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(); return(shaderProgram); }
protected ShaderProgram InitializeShader() { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"DemoColorCodedPickingElement.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"DemoColorCodedPickingElement.frag"); var shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); shaderProgram.AssertValid(); return(shaderProgram); }
} // end sub #endregion protected override void DoInitialize() { // Now create a simple program to visualize the result basicShaderProgram = new ShaderProgram(); basicShaderProgram.Create(basicVertexShader, basicFragmentShader, null); basicShaderProgram.AssertValid(); base_model_matrix_pos = GL.GetUniformLocation(basicShaderProgram.ShaderProgramObject, "model_matrix"); base_projection_matrix_pos = GL.GetUniformLocation(basicShaderProgram.ShaderProgramObject, "projection_matrix"); fur_prog = GL.CreateProgram(); ShaderHelper.vglAttachShaderSource(fur_prog, ShaderType.VertexShader, furVertexShader); ShaderHelper.vglAttachShaderSource(fur_prog, ShaderType.GeometryShader, furGeometryShader); ShaderHelper.vglAttachShaderSource(fur_prog, ShaderType.FragmentShader, furFragmentShader); GL.LinkProgram(fur_prog); GL.UseProgram(fur_prog); fur_model_matrix_pos = GL.GetUniformLocation(fur_prog, "model_matrix"); fur_projection_matrix_pos = GL.GetUniformLocation(fur_prog, "projection_matrix"); GL.GenTextures(1, fur_texture); UnmanagedArray <byte> tex = new UnmanagedArray <byte>(1024 * 1024 * 4); Random random = new Random(); for (int n = 0; n < 256; n++) { for (int m = 0; m < 1270; m++) { int x = random.Next() & 0x3FF; int y = random.Next() & 0x3FF; tex[(y * 1024 + x) * 4 + 0] = (byte)((random.Next() & 0x3F) + 0xC0); tex[(y * 1024 + x) * 4 + 1] = (byte)((random.Next() & 0x3F) + 0xC0); tex[(y * 1024 + x) * 4 + 2] = (byte)((random.Next() & 0x3F) + 0xC0); tex[(y * 1024 + x) * 4 + 3] = (byte)(n); //tex[(y * 1024 + x) * 4 + 0] = (byte)(random.Next()); //tex[(y * 1024 + x) * 4 + 1] = (byte)(random.Next()); //tex[(y * 1024 + x) * 4 + 2] = (byte)(random.Next()); //tex[(y * 1024 + x) * 4 + 3] = (byte)(random.Next()); } } GL.BindTexture(GL.GL_TEXTURE_2D, fur_texture[0]); GL.TexImage2D(TexImage2DTargets.Texture2D, 0, TexImage2DFormats.RGBA, 1024, 1024, 0, TexImage2DFormats.RGBA, TexImage2DTypes.UnsignedByte, tex.Header); GL.TexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, (int)GL.GL_LINEAR); GL.TexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, (int)GL.GL_LINEAR); tex.Dispose(); vboObject.LoadFromVBM(@"media\ninja.vbm", 0, 1, 2); base.BeforeRendering += LightingExample_BeforeRendering; base.AfterRendering += LightingExample_AfterRendering; }
protected ShaderProgram InitializeShader() { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIColorIndicatorBar.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIColorIndicatorBar.frag"); shaderProgram = new ShaderProgram(); shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null); in_PositionLocation = shaderProgram.GetAttributeLocation(strin_Position); in_ColorLocation = shaderProgram.GetAttributeLocation(strin_Color); shaderProgram.AssertValid(); return(shaderProgram); }
/// <summary> /// Initialises the scene. /// </summary> /// <param name="gl">The OpenGL instance.</param> /// <param name="width">The width of the screen.</param> /// <param name="height">The height of the screen.</param> public void Initialise(OpenGL gl, float width, float height) { // Set a blue clear colour. gl.ClearColor(0.4f, 0.6f, 0.9f, 0.5f); { // Create the shader program. var vertexShaderSource = ManifestResourceLoader.LoadTextFile("Shader.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("Shader.frag"); var shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); shaderProgram.AssertValid(gl); this.shaderProgram = shaderProgram; } { // Create the shader program. var vertexShaderSource = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.VertexShader); var fragmentShaderSource = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.FragmentShader); var shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); shaderProgram.AssertValid(gl); this.pickingShaderProgram = shaderProgram; } // Create a perspective projection matrix. const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f; projectionMatrix = glm.perspective(rads, width / height, 0.1f, 100.0f); // Create a view matrix to move us back a bit. viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f)); // Create a model matrix to make the model a little bigger. modelMatrix = glm.scale(new mat4(1.0f), new vec3(2.5f)); IPerspectiveCamera camera = this.cameraRotation.Camera; projectionMatrix = camera.GetProjectionMat4(); viewMatrix = this.cameraRotation.Camera.GetViewMat4(); modelMatrix = mat4.identity(); // Now create the geometry for the square. CreateVertices(gl); }
} // end sub #endregion protected override void DoInitialize() { // Now create a simple program to visualize the result shaderProgram = new ShaderProgram(); shaderProgram.Create(render_vs, render_fs, null); shaderProgram.AssertValid(); //mv_mat_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "model_matrix"); //prj_mat_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "proj_matrix"); //col_amb_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "color_ambient"); //col_diff_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "color_diffuse"); //col_spec_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "color_specular"); vboObject.LoadFromVBM(@"media\unit_torus.vbm", 0, 1, 2); base.BeforeRendering += LightingExample_BeforeRendering; base.AfterRendering += LightingExample_AfterRendering; }
/// <summary> /// Initialises the scene. /// </summary> /// <param name="gl">The OpenGL instance.</param> public void Initialise(OpenGL gl) { time = DateTime.Now.Millisecond / 1000; // Set a blue clear colour. //gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f); // Create the shader program. var vertexShaderSource = ResourceHelper.LoadTextFromRecource("ShaderToy.NET.Shaders.main.vert"); var fragmentShaderSource = ResourceHelper.LoadTextFromRecource( $"ShaderToy.NET.Shaders.{ActiveShader.ResourceName}.frag"); shaderProgram = new DynamicShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "position"); shaderProgram.AssertValid(gl); //Generate Textures gl.GenTextures(2, glTextureArray); //shaderProgram.BindAttributeLocation(gl, glTextureArray[0], "iChannel0"); //shaderProgram.BindAttributeLocation(gl, glTextureArray[1], "iChannel1"); var ch0loc = shaderProgram.GetUniformLocation(gl, "iChannel0"); gl.ActiveTexture(OpenGL.GL_TEXTURE0); gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[0]); gl.Uniform1(ch0loc, 0); var ch1loc = shaderProgram.GetUniformLocation(gl, "iChannel1"); gl.ActiveTexture(OpenGL.GL_TEXTURE1); gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[1]); gl.Uniform1(ch1loc, 1); /*gl.ActiveTexture(OpenGL.GL_TEXTURE0); * gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[0]); * gl.ActiveTexture(OpenGL.GL_TEXTURE1); * gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[1]);*/ // Now create the geometry for the square. CreateVerticesForSquare(gl); needsRefresh = false; }
protected void InitShaderProgram(SharpGL.OpenGL gl, out SharpGL.Shaders.ShaderProgram shaderProgram) { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"Well.PointSpriteStringElement.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"Well.PointSpriteStringElement.frag"); shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); int position = shaderProgram.GetAttributeLocation(gl, "in_Position"); if (position >= 0) { attributeIndexPosition = (uint)position; } //int color = shaderProgram.GetAttributeLocation(gl, "in_Color"); //if (color >= 0) { attributeIndexColour = (uint)color; } //int radius = shaderProgram.GetAttributeLocation(gl, "in_radius"); //if (radius >= 0) { attributeIndexRadius = (uint)radius; } //int visible = shaderProgram.GetAttributeLocation(gl, "in_visible"); //if (visible >= 0) { attributeIndexVisible = (uint)visible; } shaderProgram.AssertValid(gl); }
private void InitProgram() { { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"TransformFeedback.transform.vert"); transformProgram = new TransformShaderProgram(); transformProgram.Create(vertexShaderSource); transformProgram.AssertValid(); } { var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"TransformFeedback.feedback.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"TransformFeedback.feedback.frag"); feedbackProgram = new ShaderProgram(); feedbackProgram.Create(vertexShaderSource, fragmentShaderSource, null); feedbackProgram.AssertValid(); } { var index = GL.GetUniformBlockIndex(transformProgram.ShaderProgramObject, "transform"); GL.UniformBlockBinding(transformProgram.ShaderProgramObject, index, (uint)UniformType.TRANSFORM0); } }
/// <summary> /// Handles the OpenGLInitialized event of the openGLControl1 control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param> private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args) { // TODO: Initialise OpenGL here. // Get the OpenGL object. OpenGL gl = openGLControl.OpenGL; gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT); // Set a blue clear colour. gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f); gl.ClearColor(0f, 0f, 0f, 0.0f); // Create the shader program. var vertexShaderSource = ManifestResourceLoader.LoadTextFile("vertex_shader.glsl"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("fragment_shader.glsl"); shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); attribute_vpos = (uint)gl.GetAttribLocation(shaderProgram.ShaderProgramObject, "vPosition"); attribute_vcol = (uint)gl.GetAttribLocation(shaderProgram.ShaderProgramObject, "vColor"); shaderProgram.AssertValid(gl); InitializeFixedBufferContents(); }
/// <summary> /// Initialises the scene. /// </summary> /// <param name="gl">The OpenGL instance.</param> /// <param name="width">The width of the screen.</param> /// <param name="height">The height of the screen.</param> public void Initialise(OpenGL gl) { // Set a blue clear colour. gl.ClearColor(0.4f, 0.6f, 0.9f, 0.5f); { // Create the shader program. var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"Model\Shader.vert"); var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"Model\Shader.frag"); var shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); shaderProgram.AssertValid(gl); this.shaderProgram = shaderProgram; } { // Create the picking shader program. var vertexShaderSource = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.VertexShader); var fragmentShaderSource = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.FragmentShader); var shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null); shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position"); shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color"); shaderProgram.AssertValid(gl); this.pickingShaderProgram = shaderProgram; } unsafe { // Create the vertex array object. vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(gl); vertexBufferArray.Bind(gl); // Create a vertex buffer for the vertex data. var vertexDataBuffer = new VertexBuffer(); vertexDataBuffer.Create(gl); vertexDataBuffer.Bind(gl); //vertexDataBuffer.SetData(gl, 0, //this.Model.VertexCount * sizeof(Vertex), (IntPtr)this.Model.Positions, false, 3, OpenGL.GL_FLOAT); vertexDataBuffer.SetData(gl, 0, this.Model.Positions, false, 3); // Now do the same for the colour data. var colourDataBuffer = new VertexBuffer(); colourDataBuffer.Create(gl); colourDataBuffer.Bind(gl); //colourDataBuffer.SetData(gl, 1, //this.Model.VertexCount * sizeof(ByteColor), (IntPtr)this.Model.Colors, false, 3, OpenGL.GL_BYTE); colourDataBuffer.SetData(gl, 1, this.Model.Colors, false, 3); // Unbind the vertex array, we've finished specifying data for it. vertexBufferArray.Unbind(gl); } //// Create a perspective projection matrix. //const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f; //projectionMatrix = glm.perspective(rads, width / height, 0.1f, 100.0f); //// Create a view matrix to move us back a bit. //viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f)); //// Create a model matrix to make the model a little bigger. //modelMatrix = glm.scale(new mat4(1.0f), new vec3(2.5f)); ////IPerspectiveCamera camera = this.cameraRotation.Camera; ////projectionMatrix = camera.GetProjectionMat4(); ////viewMatrix = this.cameraRotation.Camera.GetViewMat4(); ////modelMatrix = mat4.identity(); //// Now create the geometry for the square. //CreateVertices(gl); this.initialised = true; }
public GL_GUI_Context(Window window, float width, float height) { this.window = window; this.Width = width; this.Height = height; context = SDL.SDL_GL_CreateContext(window.Handle); SDL.SDL_GL_MakeCurrent(window.Handle, context); gl = new OpenGL(); gl.Enable(OpenGL.GL_TEXTURE_2D); shaderProgram = new ShaderProgram(); shaderProgram.Create(gl, VERTEX_SHADER, FRAGMENT_SHADER, null); shaderProgram.BindAttributeLocation(gl, 0, "in_Position"); shaderProgram.BindAttributeLocation(gl, 1, "in_Color"); shaderProgram.AssertValid(gl); gl.GenFramebuffersEXT(1, framebuffers); gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, framebuffers[0]); gl.GenTextures(1, framebufferTargets); gl.BindTexture(OpenGL.GL_TEXTURE_2D, framebufferTargets[0]); gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, OpenGL.GL_RGB, window.DisplayWidth, window.DisplayHeight, 0, OpenGL.GL_RGB, OpenGL.GL_UNSIGNED_BYTE, IntPtr.Zero); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_NEAREST); gl.FramebufferTexture(OpenGL.GL_FRAMEBUFFER_EXT, OpenGL.GL_COLOR_ATTACHMENT0_EXT, framebufferTargets[0], 0); gl.DrawBuffers(1, new uint[] { OpenGL.GL_COLOR_ATTACHMENT0_EXT }); if (gl.CheckFramebufferStatusEXT(OpenGL.GL_FRAMEBUFFER_EXT) != OpenGL.GL_FRAMEBUFFER_COMPLETE_EXT) { throw new Exception("Frame buffer setup not complete"); } gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, 0); gl.BindTexture(OpenGL.GL_TEXTURE_2D, 0); ortho = new float[] { 2.0f / Width, 0.0f, 0.0f, 0.0f, 0.0f, -2.0f / Height, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f, }; gl.Viewport(0, 0, window.DisplayWidth, window.DisplayHeight); gl.Enable(OpenGL.GL_BLEND); gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE_MINUS_SRC_ALPHA); gl.Disable(OpenGL.GL_CULL_FACE); gl.Disable(OpenGL.GL_DEPTH_TEST); gl.ActiveTexture(OpenGL.GL_TEXTURE0); gl.Enable(OpenGL.GL_SCISSOR_TEST); shaderProgram.Bind(gl); shaderProgram.SetUniformMatrix4(gl, "projectionMatrix", ortho); vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(gl); vertexBufferArray.Bind(gl); }