mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
69 lines
2.5 KiB
C++
69 lines
2.5 KiB
C++
#include "stdafx.h"
|
|
#include "Mangler.h"
|
|
|
|
// Link against OpenGL
|
|
#pragma comment(lib, "opengl32.lib")
|
|
|
|
#define INITIALIZE_ROUTINE(fn, proc) proc = (fn)Mangler::LoadOpenGLProc(#proc)
|
|
|
|
namespace MGL
|
|
{
|
|
bool Mangler::Initalize()
|
|
{
|
|
// Initialize the APIs
|
|
INITIALIZE_ROUTINE(FnDeleteBuffers, glDeleteBuffers);
|
|
INITIALIZE_ROUTINE(FnGenBuffers, glGenBuffers);
|
|
INITIALIZE_ROUTINE(FnBindBuffer, glBindBuffer);
|
|
INITIALIZE_ROUTINE(FnBindBufferBase, glBindBufferBase);
|
|
INITIALIZE_ROUTINE(FnBufferData, glBufferData);
|
|
INITIALIZE_ROUTINE(FnBindVertexArray, glBindVertexArray);
|
|
INITIALIZE_ROUTINE(FnDeleteVertexArrays, glDeleteVertexArrays);
|
|
INITIALIZE_ROUTINE(FnGenVertexArrays, glGenVertexArrays);
|
|
INITIALIZE_ROUTINE(FnCompileShader, glCompileShader);
|
|
INITIALIZE_ROUTINE(FnCreateProgram, glCreateProgram);
|
|
INITIALIZE_ROUTINE(FnCreateShader, glCreateShader);
|
|
INITIALIZE_ROUTINE(FnActiveTexture, glActiveTexture);
|
|
INITIALIZE_ROUTINE(FnDeleteProgram, glDeleteProgram);
|
|
INITIALIZE_ROUTINE(FnDeleteShader, glDeleteShader);
|
|
INITIALIZE_ROUTINE(FnDetachShader, glDetachShader);
|
|
INITIALIZE_ROUTINE(FnUseProgram, glUseProgram);
|
|
INITIALIZE_ROUTINE(FnShaderSource, glShaderSource);
|
|
INITIALIZE_ROUTINE(FnAttachShader, glAttachShader);
|
|
INITIALIZE_ROUTINE(FnGetUniformLocation, glGetUniformLocation);
|
|
INITIALIZE_ROUTINE(FnLinkProgram, glLinkProgram);
|
|
INITIALIZE_ROUTINE(FnUniformMatrix4fv, glUniformMatrix4fv);
|
|
INITIALIZE_ROUTINE(FnVertexAttribPointer, glVertexAttribPointer);
|
|
INITIALIZE_ROUTINE(FnEnableVertexAttribArray, glEnableVertexAttribArray);
|
|
INITIALIZE_ROUTINE(FnDisableVertexAttribArray, glDisableVertexAttribArray);
|
|
INITIALIZE_ROUTINE(FnGetShaderiv, glGetShaderiv);
|
|
INITIALIZE_ROUTINE(FnGetShaderInfoLog, glGetShaderInfoLog);
|
|
INITIALIZE_ROUTINE(FnUniform3fv, glUniform3fv);
|
|
INITIALIZE_ROUTINE(FnUniform1iv, glUniform1iv);
|
|
INITIALIZE_ROUTINE(FnCompressedTexImage2D, glCompressedTexImage2D);
|
|
|
|
// Initialize the WGL APIs
|
|
INITIALIZE_ROUTINE(WFnSwapIntervalEXT, wglSwapIntervalEXT);
|
|
INITIALIZE_ROUTINE(WFnChoosePixelFormatARB, wglChoosePixelFormatARB);
|
|
|
|
// Success
|
|
return true;
|
|
}
|
|
|
|
uintptr_t Mangler::LoadOpenGLProc(const char* Name)
|
|
{
|
|
// Try extensions first
|
|
auto Proc = (void*)wglGetProcAddress(Name);
|
|
|
|
// Check for errors during load
|
|
if (Proc == 0 || (Proc == (void*)0x1) || (Proc == (void*)0x2) || (Proc == (void*)0x3) || (Proc == (void*)-1))
|
|
{
|
|
// This is a built-in, not an extension
|
|
auto Module = LoadLibraryA("opengl32.dll");
|
|
Proc = (void*)GetProcAddress(Module, Name);
|
|
}
|
|
|
|
// Return address
|
|
return (uintptr_t)Proc;
|
|
}
|
|
}
|