Acheron
Loading...
Searching...
No Matches
agl.hpp
1#pragma once
2
3#define GLFW_INCLUDE_NONE
4#include <GLFW/glfw3.h>
5
6#include <stdexcept>
7
8#include "const.hpp"
9#include "func.hpp"
10
11namespace acheron::agl {
18 template<typename T>
19 T LoadProc(std::string name) {
20 T proc = (T)glfwGetProcAddress(name.c_str());
21 if(!proc) throw std::runtime_error("Failed to load OpenGL function '" + name + "'");
22
23 return proc;
24 }
25
29 inline void aglLoad() {
30 aglClearColor = LoadProc<ClearColorProc>("glClearColor");
31 aglClear = LoadProc<ClearProc>("glClear");
32
33 aglViewport = LoadProc<ViewportProc>("glViewport");
34
35 aglGenVertexArrays = LoadProc<GenVertexArraysProc>("glGenVertexArrays");
36 aglBindVertexArray = LoadProc<BindVertexArrayProc>("glBindVertexArray");
37 aglGenBuffers = LoadProc<GenBuffersProc>("glGenBuffers");
38 aglBindBuffer = LoadProc<BindBufferProc>("glBindBuffer");
39 aglBufferData = LoadProc<BufferDataProc>("glBufferData");
40
41 aglVertexAttribPointer = LoadProc<VertexAttribPointerProc>("glVertexAttribPointer");
42 aglVertexAttribDivisor = LoadProc<VertexAttribDivisorProc>("glVertexAttribDivisor");
43 aglEnableVertexAttribArray = LoadProc<EnableVertexAttribArrayProc>("glEnableVertexAttribArray");
44
45 aglDrawArrays = LoadProc<DrawArraysProc>("glDrawArrays");
46 aglDrawElements = LoadProc<DrawElementsProc>("glDrawElements");
47 aglDrawElementsInstanced = LoadProc<DrawElementsInstancedProc>("glDrawElements");
48
49 aglCreateShader = LoadProc<CreateShaderProc>("glCreateShader");
50 aglShaderSource = LoadProc<ShaderSourceProc>("glShaderSource");
51 aglCompileShader = LoadProc<CompileShaderProc>("glCompileShader");
52 aglGetShaderiv = LoadProc<GetShaderivProc>("glGetShaderiv");
53 aglGetShaderInfoLog = LoadProc<GetShaderInfoLogProc>("glGetShaderInfoLog");
54 aglCreateProgram = LoadProc<CreateProgramProc>("glCreateProgram");
55 aglAttachShader = LoadProc<AttachShaderProc>("glAttachShader");
56 aglLinkProgram = LoadProc<LinkProgramProc>("glLinkProgram");
57 aglGetProgramiv = LoadProc<GetProgramivProc>("glGetProgramiv");
58 aglGetProgramInfoLog = LoadProc<GetProgramInfoLogProc>("glGetProgramInfoLog");
59 aglDeleteShader = LoadProc<DeleteShaderProc>("glDeleteShader");
60 aglUseProgram = LoadProc<UseProgramProc>("glUseProgram");
61
62 aglGetUniformLocation = LoadProc<GetUniformLocationProc>("glGetUniformLocation");
63 aglUniform4fv = LoadProc<Uniform4fvProc>("glUniform4fv");
64 aglUniformMatrix4fv = LoadProc<UniformMatrix4fvProc>("glUniformMatrix4fv");
65
66 aglGetString = LoadProc<GetStringProc>("glGetString");
67 }
68}