- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
/*
Макрос генерирует внутренности функции-заглушки OpenGL.
*/
#define BWT_DECLARE_OPENGL_PROC_IMPL(PROC, PROC_TYPE, ...) \
static PROC_TYPE _##PROC = 0; \
\
if (_##PROC) \
return _##PROC(__VA_ARGS__); \
else \
{ \
_##PROC = TryToGetProcAddress<PROC_TYPE>(#PROC); return _##PROC(__VA_ARGS__); \
}
/*
Функция получает адрес функции, или возбуждает исключение, если адрес получить не удалось.
*/
template<typename proc_type>
proc_type TryToGetProcAddress(const char *proc_name) throw(error_type<VIDEO>)
{
proc_type address = reinterpret_cast<proc_type>(::SDL_GL_GetProcAddress(proc_name));
if (!address)
BWT_THROW_VIDEO_ERROR(UNDEFINED_ERROR, "OpenGL version does not supported");
return address;
}
GLAPI void APIENTRY glCullFace (GLenum mode)
{
BWT_DECLARE_OPENGL_PROC_IMPL(glCullFace, PFNGLCULLFACEPROC, mode);
}
...