BioCore  5.0.0
A Windows .NET microscopy library and application for viewing, editing, and annotating images.
Loading...
Searching...
No Matches
Renderer.cs
Go to the documentation of this file.
1using OpenTK.Graphics.OpenGL4;
2using OpenTK.Windowing.Common;
3using OpenTK.Windowing.Desktop;
4using OpenTK.Mathematics;
5namespace BioCore
6{
7 public class GLWindow : GameWindow
8 {
9 int vao, vbo;
10 int shaderProgram;
11
12 public GLWindow(GameWindowSettings gws, NativeWindowSettings nws)
13 : base(gws, nws) { }
14
15 protected override void OnLoad()
16 {
17 base.OnLoad();
18
19 GL.ClearColor(0f, 0f, 0f, 1f);
20
21 CompileShaders();
22 SetupGeometry();
23
24 }
25
26 protected override void OnResize(ResizeEventArgs e)
27 {
28 base.OnResize(e);
29 GL.Viewport(0, 0, Size.X, Size.Y);
30 }
31
32 protected override void OnRenderFrame(FrameEventArgs args)
33 {
34 base.OnRenderFrame(args);
35
36 GL.Clear(ClearBufferMask.ColorBufferBit);
37
38 GL.UseProgram(shaderProgram);
39 GL.BindVertexArray(vao);
40 GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
41
42 SwapBuffers();
43 }
44
45 void SetupGeometry()
46 {
47 float[] vertices =
48 {
49 0f, 0.5f,
50 -0.5f, -0.5f,
51 0.5f, -0.5f
52 };
53
54 vao = GL.GenVertexArray();
55 vbo = GL.GenBuffer();
56
57 GL.BindVertexArray(vao);
58 GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
59 GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw);
60
61 GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 2 * sizeof(float), 0);
62 GL.EnableVertexAttribArray(0);
63 }
64
65 void CompileShaders()
66 {
67 string vertexShaderSource = @"
68#version 330 core
69layout (location = 0) in vec2 aPos;
70void main()
71{
72 gl_Position = vec4(aPos.xy, 0.0, 1.0);
73}";
74
75 string fragmentShaderSource = @"
76#version 330 core
77out vec4 FragColor;
78void main()
79{
80 FragColor = vec4(1,0,0,1);
81}";
82
83 int vs = GL.CreateShader(ShaderType.VertexShader);
84 GL.ShaderSource(vs, vertexShaderSource);
85 GL.CompileShader(vs);
86
87 int fs = GL.CreateShader(ShaderType.FragmentShader);
88 GL.ShaderSource(fs, fragmentShaderSource);
89 GL.CompileShader(fs);
90
91 shaderProgram = GL.CreateProgram();
92 GL.AttachShader(shaderProgram, vs);
93 GL.AttachShader(shaderProgram, fs);
94 GL.LinkProgram(shaderProgram);
95
96 GL.DeleteShader(vs);
97 GL.DeleteShader(fs);
98 }
99 }
100}
System.Drawing.Size Size
override void OnResize(ResizeEventArgs e)
Definition Renderer.cs:26
override void OnRenderFrame(FrameEventArgs args)
Definition Renderer.cs:32
override void OnLoad()
Definition Renderer.cs:15
GLWindow(GameWindowSettings gws, NativeWindowSettings nws)
Definition Renderer.cs:12