9 #define EEGEO_GL_API_CALL __stdcall
11 #define EEGEO_GL_API_CALL
22 : m_numOfActualSets(0)
24 , m_stateFilteringEnabled(
true)
25 , m_trySetAttempted(
false)
26 , m_numOfAttemptedSets(0)
32 , m_stateFilteringEnabled(enableStateFiltering)
36 inline void Invalidate()
41 inline int GetNumOfAttemptedSets()
const
43 return m_numOfAttemptedSets;
46 inline int GetNumOfActualSets()
const
48 return m_numOfActualSets;
51 inline void ResetCounters()
53 m_numOfAttemptedSets = 0;
54 m_numOfActualSets = 0;
57 inline void SetTrySetAttempted()
59 m_trySetAttempted =
true;
60 ++m_numOfAttemptedSets;
63 inline void ClearTrySetAttempted()
65 m_trySetAttempted =
false;
68 inline bool TrySetAttempted()
const
70 return m_trySetAttempted;
73 inline bool IsStateValid()
const
79 int m_numOfActualSets;
81 inline void SetIsValid()
83 m_stateValid = m_stateFilteringEnabled;
88 bool m_stateFilteringEnabled;
89 bool m_trySetAttempted;
90 int m_numOfAttemptedSets;
93 template<GLenum T_cap>
107 inline void Disable()
112 inline void operator () (
bool enable)
117 inline bool TrySet(
bool value)
119 SetTrySetAttempted();
121 if (!IsStateValid() || value != m_value)
129 Eegeo_GL(glEnable(T_cap));
133 Eegeo_GL(glDisable(T_cap));
142 if(stateToSet.IsStateValid())
144 return TrySet(stateToSet.m_value);
147 Eegeo_ASSERT(IsStateValid() ==
false,
"Can't set a valid from an invalid state");
151 inline bool TrySetIfNotAttempted(
const GLBoolState& stateToSet)
153 if(!TrySetAttempted())
155 return TrySet(stateToSet);
166 template<
typename T_paramA>
175 inline void operator () (T_paramA paramA)
180 inline bool TrySet(T_paramA paramA)
182 SetTrySetAttempted();
184 if (!IsStateValid() ||
190 Eegeo_GL(m_func(paramA));
198 if(stateToSet.IsStateValid())
200 return TrySet(stateToSet.m_paramA);
203 Eegeo_ASSERT(IsStateValid() ==
false,
"Can't set a valid from an invalid state");
207 inline bool TrySetIfNotAttempted(
const GLStateFunc1& stateToSet)
209 if(!TrySetAttempted())
211 return TrySet(stateToSet);
218 inline T_paramA GetValue()
const
224 void (EEGEO_GL_API_CALL *m_func)(T_paramA);
228 template<
typename T_paramA,
typename T_paramB>
232 GLStateFunc2(
void (EEGEO_GL_API_CALL *func)(T_paramA, T_paramB))
237 inline void operator () (T_paramA paramA, T_paramB paramB)
239 TrySet(paramA, paramB);
242 inline bool TrySet(T_paramA paramA, T_paramB paramB)
244 SetTrySetAttempted();
246 if (!IsStateValid() ||
247 (paramA != m_paramA) ||
248 (paramB != m_paramB))
251 #pragma clang diagnostic push
252 #pragma clang diagnostic ignored "-Wunknown-pragmas"
253 #pragma GCC diagnostic push
255 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
260 Eegeo_GL(m_func(paramA, paramB));
261 #pragma GCC diagnostic pop
262 #pragma clang diagnostic pop
270 if(stateToSet.IsStateValid())
272 return TrySet(stateToSet.m_paramA, stateToSet.m_paramB);
275 Eegeo_ASSERT(IsStateValid() ==
false,
"Can't set a valid from an invalid state");
280 inline bool TrySetIfNotAttempted(
const GLStateFunc2& stateToSet)
282 if(!TrySetAttempted())
284 return TrySet(stateToSet);
292 void (EEGEO_GL_API_CALL *m_func)(T_paramA, T_paramB);
297 template<
typename T_paramA,
typename T_paramB,
typename T_paramC>
301 GLStateFunc3(
void (EEGEO_GL_API_CALL *func)(T_paramA, T_paramB, T_paramC))
306 inline void operator () (T_paramA paramA, T_paramB paramB, T_paramC paramC)
308 TrySet(paramA, paramB, paramC);
311 inline bool TrySet(T_paramA paramA, T_paramB paramB, T_paramC paramC)
313 SetTrySetAttempted();
315 if (!IsStateValid() ||
316 (paramA != m_paramA) ||
317 (paramB != m_paramB) ||
318 (paramC != m_paramC))
326 Eegeo_GL(m_func(paramA, paramB, paramC));
334 if(stateToSet.IsStateValid())
336 return TrySet(stateToSet.m_paramA, stateToSet.m_paramB, stateToSet.m_paramC);
339 Eegeo_ASSERT(IsStateValid() ==
false,
"Can't set a valid from an invalid state");
343 inline bool TrySetIfNotAttempted(
const GLStateFunc3& stateToSet)
345 if(!TrySetAttempted())
347 return TrySet(stateToSet);
355 void (EEGEO_GL_API_CALL *m_func)(T_paramA, T_paramB, T_paramC);
361 template<
typename T_paramA,
typename T_paramB,
typename T_paramC,
typename T_paramD>
365 GLStateFunc4(
void (EEGEO_GL_API_CALL *func)(T_paramA, T_paramB, T_paramC, T_paramD))
370 inline void operator () (T_paramA paramA, T_paramB paramB, T_paramC paramC, T_paramD paramD)
372 TrySet(paramA, paramB, paramC, paramD);
375 inline bool TrySet(T_paramA paramA, T_paramB paramB, T_paramC paramC, T_paramD paramD)
377 SetTrySetAttempted();
379 if (!IsStateValid() ||
380 (paramA != m_paramA) ||
381 (paramB != m_paramB) ||
382 (paramC != m_paramC) ||
383 (paramD != m_paramD))
392 Eegeo_GL(m_func(paramA, paramB, paramC, paramD));
400 if(stateToSet.IsStateValid())
402 return TrySet(stateToSet.m_paramA, stateToSet.m_paramB, stateToSet.m_paramC, stateToSet.m_paramD);
405 Eegeo_ASSERT(IsStateValid() ==
false,
"Can't set a valid from an invalid state");
409 inline bool TrySetIfNotAttempted(
const GLStateFunc4& stateToSet)
411 if(!TrySetAttempted())
413 return TrySet(stateToSet);
420 void (EEGEO_GL_API_CALL *m_func)(T_paramA, T_paramB, T_paramC, T_paramD);
428 template<GLenum T_glEnum,
typename T_paramA>
444 , m_func(other.m_func)
448 GLStateEnumFunc1(
void (EEGEO_GL_API_CALL *func)(GLenum, T_paramA),
bool enableStateFiltering)
454 inline void operator () (T_paramA paramA)
459 inline bool TrySet(T_paramA paramA)
461 SetTrySetAttempted();
463 if (!IsStateValid() ||
470 Eegeo_GL(m_func(T_glEnum, paramA));
478 if(stateToSet.IsStateValid())
480 return TrySet(stateToSet.m_paramA);
483 Eegeo_ASSERT(IsStateValid() ==
false,
"Can't set a valid from an invalid state");
489 if(!TrySetAttempted())
491 return TrySet(stateToSet);
498 void (EEGEO_GL_API_CALL *m_func)(GLenum, T_paramA);