8 #ifndef hifi_gpu_gl_GLState_h
9 #define hifi_gpu_gl_GLState_h
13 #include <gpu/State.h>
15 namespace gpu {
namespace gl {
18 class GLState :
public GPUObject {
20 static GLState* sync(
const State& state);
24 virtual void run(GLBackend* backend) = 0;
26 virtual ~Command() {};
29 template <
class T>
class Command1 :
public Command {
31 typedef void (GLBackend::*GLFunction)(T);
32 void run(GLBackend* backend) { (backend->*(_func))(_param); }
33 Command1(GLFunction func, T param) : _func(func), _param(param) {};
37 template <
class T,
class U>
class Command2 :
public Command {
39 typedef void (GLBackend::*GLFunction)(T, U);
40 void run(GLBackend* backend) { (backend->*(_func))(_param0, _param1); }
41 Command2(GLFunction func, T param0, U param1) : _func(func), _param0(param0), _param1(param1) {};
47 template <
class T,
class U,
class V>
class Command3 :
public Command {
49 typedef void (GLBackend::*GLFunction)(T, U, V);
50 void run(GLBackend* backend) { (backend->*(_func))(_param0, _param1, _param2); }
51 Command3(GLFunction func, T param0, U param1, V param2) : _func(func), _param0(param0), _param1(param1), _param2(param2) {};
58 typedef std::shared_ptr< Command > CommandPointer;
59 typedef std::vector< CommandPointer > Commands;
63 State::Signature _signature;
66 static const Commands _resetStateCommands;
68 friend class GLBackend;