1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
// Main.cpp
//--------------------------------
#include <iostream>
#include "Shader.h"
#include "Errors.h"
#include "Overload.h"
int
main()
{
unsigned int x {1}, y{2};
Shader shader;
GLCheck(&Shader::Bind, shader); // works fine
GLCheck(&Shader::AttachShaders, shader, x, y); // works fine
}
//--------------------------------
// Shader.h
//--------------------------------
#pragma once
class Shader
{
public:
Shader();
void AttachShaders(unsigned int &vertex_shader, unsigned int &fragment_shader);
void Bind() const;
};
//--------------------------------
// Shader.cpp
//--------------------------------
#include "Shader.h"
#include "Overload.h"
Shader::Shader()
{
// create shader, etc..
unsigned int x{1}, y{2};
GLCheck(&Shader::AttachShaders, this, x, y); // 'GLCheck': identifier not found
GLCheck(&Shader::Bind, this); // 'GLCheck': identifier not found
}
void
Shader::AttachShaders(unsigned int &vertex_shader, unsigned int &fragment_shader)
{
// attach shaders
}
void
Shader::Bind() const
{
// bind shader
}
//--------------------------------
// Overload.h
//--------------------------------
#pragma once
#include "Shader.h"
#include "Errors.h"
typedef void (Shader::*void_uir_uir) (unsigned int &, unsigned int &);
void GLCheck(void_uir_uir Function, Shader & object, unsigned int &vertex_shader,
unsigned int &fragment_shader);
typedef void (Shader::*void__const) () const;
void GLCheck(void__const Function, Shader & object);
//--------------------------------
// Overload.cpp
//--------------------------------
void GLCheck(void_uir_uir Function, Shader & object, unsigned int &vertex_shader,
unsigned int &fragment_shader)
{
ClearErrors();
(object.*Function) (vertex_shader, fragment_shader);
CheckErrors();
}
void GLCheck(void__const Function, Shader & object)
{
ClearErrors(); // clear pre-existing errors
(object.*Function) (); // call passed function
CheckErrors();
}
//--------------------------------
// Errors.h
//--------------------------------
|