Skip to content

Commit 65a17b5

Browse files
Merge remote-tracking branch 'origin/master' into 1-import-svg-file
2 parents 7cf1ec2 + c2af463 commit 65a17b5

5 files changed

Lines changed: 134 additions & 27 deletions

File tree

FreeFrame/Helper.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using OpenTK.Graphics.OpenGL4;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Diagnostics;
5+
using System.Linq;
6+
using System.Runtime.InteropServices;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
10+
namespace FreeFrame
11+
{
12+
static class Helper
13+
{
14+
private static DebugProc _debugProcCallback = DebugCallback;
15+
static public void CheckErrors()
16+
{
17+
ErrorCode errorCode = GL.GetError();
18+
19+
while (errorCode != ErrorCode.NoError)
20+
{
21+
Console.WriteLine(errorCode.ToString());
22+
errorCode = GL.GetError();
23+
}
24+
}
25+
[DebuggerStepThrough]
26+
static private void DebugCallback(DebugSource source, DebugType type, int id, DebugSeverity severity, int length, IntPtr message, IntPtr userParam)
27+
{
28+
string messageString = Marshal.PtrToStringAnsi(message, length); // Retrieve the string from the pointer
29+
30+
Console.WriteLine($"{severity} {type} | {messageString}");
31+
32+
if (type == DebugType.DebugTypeError)
33+
throw new Exception("OpenGL error");
34+
}
35+
static public void DebugMode()
36+
{
37+
GL.DebugMessageCallback(_debugProcCallback, IntPtr.Zero);
38+
GL.Enable(EnableCap.DebugOutput);
39+
GL.Enable(EnableCap.DebugOutputSynchronous);
40+
}
41+
42+
}
43+
}

FreeFrame/Object.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using OpenTK.Graphics.OpenGL4;
7+
8+
namespace FreeFrame
9+
{
10+
class Object
11+
{
12+
Shader _shader;
13+
14+
int _vertexArrayObject;
15+
int _vertexBufferObject;
16+
int _indexBufferObject;
17+
public int VertexArrayObject { get => _vertexArrayObject; set => _vertexArrayObject = value; }
18+
public Object(float[] vertex, uint[] index)
19+
{
20+
// Create VAO
21+
VertexArrayObject = GL.GenVertexArray();
22+
GL.BindVertexArray(VertexArrayObject);
23+
24+
// Create VBO
25+
_vertexBufferObject = GL.GenBuffer();
26+
GL.BindBuffer(BufferTarget.ArrayBuffer, _vertexBufferObject);
27+
GL.BufferData(BufferTarget.ArrayBuffer, vertex.Length * sizeof(float), vertex, BufferUsageHint.StaticDraw);
28+
29+
// Create IBO
30+
_indexBufferObject = GL.GenBuffer();
31+
GL.BindBuffer(BufferTarget.ElementArrayBuffer, _indexBufferObject);
32+
GL.BufferData(BufferTarget.ElementArrayBuffer, index.Length * sizeof(uint), index, BufferUsageHint.StaticDraw);
33+
34+
// Link attributes
35+
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
36+
GL.EnableVertexAttribArray(0);
37+
38+
_shader = new Shader("Shaders/shader.vert", "Shaders/shader.frag");
39+
}
40+
41+
public void Draw()
42+
{
43+
44+
_shader.Use();
45+
GL.Uniform4(_shader.GetUniformLocation("u_Color"), 0.8f, 0.2f, 0.5f, 1.0f);
46+
GL.BindVertexArray(_vertexArrayObject);
47+
GL.DrawElements(PrimitiveType.Triangles, 6, DrawElementsType.UnsignedInt, 0);
48+
}
49+
50+
}
51+
}

FreeFrame/Shader.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public Shader(string uriVertexShader, string uriFragementShader)
4545
GL.DeleteShader(vertexShader);
4646
GL.DeleteShader(fragmentShader);
4747
}
48+
public int GetUniformLocation(string uniform) => GL.GetUniformLocation(_program, uniform);
4849
public void Use() => GL.UseProgram(_program);
4950
~Shader() => GL.DeleteProgram(_program);
5051
}

FreeFrame/Shaders/shader.frag

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
layout(location = 0) out vec4 color;
44

5+
uniform vec4 u_Color;
6+
57
void main()
68
{
7-
color = vec4(0.5, 0.5, 0.5, 1.0);
9+
color = u_Color;
810
}

FreeFrame/Window.cs

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ namespace FreeFrame
1313
{
1414
class Window : GameWindow
1515
{
16-
int _vertexBuffer;
17-
int _vertexArray;
18-
int _indexBuffer;
19-
Shader _shader;
16+
Object rectangle;
17+
//int _vertexBuffer;
18+
//int _vertexArray;
19+
//int _indexBuffer;
20+
//Shader _shader;
2021
ImGuiController _ImGuiController;
2122

2223
public readonly float[] _vertices =
@@ -39,28 +40,32 @@ protected override void OnLoad()
3940
{
4041
base.OnLoad();
4142

43+
Helper.DebugMode();
44+
4245
GL.ClearColor(0.1f, 0.1f, 0.1f, 1.0f);
4346

44-
// Vertex Buffer Object
45-
_vertexBuffer = GL.GenBuffer();
46-
GL.BindBuffer(BufferTarget.ArrayBuffer, _vertexBuffer);
47-
GL.BufferData(BufferTarget.ArrayBuffer, _vertices.Length * sizeof(float), _vertices, BufferUsageHint.StaticDraw);
47+
//// Vertex Buffer Object
48+
//_vertexBuffer = GL.GenBuffer();
49+
//GL.BindBuffer(BufferTarget.ArrayBuffer, _vertexBuffer);
50+
//GL.BufferData(BufferTarget.ArrayBuffer, _vertices.Length * sizeof(float), _vertices, BufferUsageHint.StaticDraw);
51+
52+
//// Vertex Array Object
53+
//_vertexArray = GL.GenVertexArray(); // TODO: Why a vertex array is necessary? Why not only use VertexAttribPointer?
54+
//GL.BindVertexArray(_vertexArray);
4855

49-
// Vertex Array Object
50-
_vertexArray = GL.GenVertexArray(); // TODO: Why a vertex array is necessary? Why not only use VertexAttribPointer?
51-
GL.BindVertexArray(_vertexArray);
56+
//GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
57+
//GL.EnableVertexAttribArray(0);
5258

53-
GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 3 * sizeof(float), 0);
54-
GL.EnableVertexAttribArray(0);
59+
//// Index Buffer Object
60+
//_indexBuffer = GL.GenBuffer();
61+
//GL.BindBuffer(BufferTarget.ElementArrayBuffer, _indexBuffer);
62+
//GL.BufferData(BufferTarget.ElementArrayBuffer, _indices.Length * sizeof(uint), _indices, BufferUsageHint.StaticDraw);
5563

56-
// Index Buffer Object
57-
_indexBuffer = GL.GenBuffer();
58-
GL.BindBuffer(BufferTarget.ElementArrayBuffer, _indexBuffer);
59-
GL.BufferData(BufferTarget.ElementArrayBuffer, _indices.Length * sizeof(uint), _indices, BufferUsageHint.StaticDraw);
64+
//// Shaders
65+
//_shader = new Shader("Shaders/shader.vert", "Shaders/shader.frag");
66+
//_shader.Use();
6067

61-
// Shaders
62-
_shader = new Shader("Shaders/shader.vert", "Shaders/shader.frag");
63-
_shader.Use();
68+
rectangle = new Object(_vertices, _indices);
6469

6570
_ImGuiController = new ImGuiController(ClientSize.X, ClientSize.Y);
6671
}
@@ -92,10 +97,15 @@ protected override void OnRenderFrame(FrameEventArgs e)
9297
GL.Clear(ClearBufferMask.ColorBufferBit); // Clear the color
9398

9499

95-
_shader.Use(); // Select current shader
96-
GL.BindVertexArray(_vertexArray); // Bind VAO for workspace (because ImGui binds another)
100+
//_shader.Use(); // Select current shader
101+
//GL.BindVertexArray(_vertexArray); // Bind VAO for workspace (because ImGui binds another)
102+
103+
//int uColorLocation = _shader.GetUniformLocation("u_Color");
104+
//GL.Uniform4(uColorLocation, 0.2f, 1.0f, 0.5f, 1.0f);
105+
106+
//GL.DrawElements(PrimitiveType.Triangles, _indices.Length, DrawElementsType.UnsignedInt, 0);
97107

98-
GL.DrawElements(PrimitiveType.Triangles, _indices.Length, DrawElementsType.UnsignedInt, 0);
108+
rectangle.Draw();
99109

100110
_ImGuiController.Update(this, (float)e.Time); // TODO: Explain what's the point of this. Also explain why this order is necessary
101111
//ImGui.ShowDemoWindow();
@@ -114,9 +124,9 @@ protected override void OnUnload()
114124
GL.BindVertexArray(0);
115125
GL.UseProgram(0);
116126

117-
GL.DeleteBuffer(_vertexBuffer);
118-
GL.DeleteBuffer(_indexBuffer);
119-
GL.DeleteVertexArray(_vertexArray);
127+
//GL.DeleteBuffer(_vertexBuffer);
128+
//GL.DeleteBuffer(_indexBuffer);
129+
//GL.DeleteVertexArray(_vertexArray);
120130
}
121131
}
122132
}

0 commit comments

Comments
 (0)