26#ifndef _ACF_UTILS_GLEW_H_
27#define _ACF_UTILS_GLEW_H_
54#if LIN || APL || defined(__MINGW32__) || defined(ACFUTILS_DLL)
78#ifndef LACF_GLEW_USE_NATIVE_TLS
80#define LACF_GLEW_USE_NATIVE_TLS 1
82#define LACF_GLEW_USE_NATIVE_TLS 0
86#if LACF_GLEW_USE_NATIVE_TLS
88extern THREAD_LOCAL GLEWContext lacf_glew_per_thread_ctx;
90#define lacf_glew_dllmain_hook(reason)
91#define lacf_glew_init()
92#define lacf_glew_thread_fini()
93#define lacf_glew_fini()
95static inline GLEWContext *
98 return (&lacf_glew_per_thread_ctx);
110extern pthread_key_t lacf_glew_ctx_key;
111extern pthread_once_t lacf_glew_ctx_once;
113void lacf_glew_ctx_make_key(
void);
115#define lacf_glew_dllmain_hook(reason)
116#define lacf_glew_init()
117#define lacf_glew_thread_fini()
118#define lacf_glew_fini()
120static inline GLEWContext *
125 (void) pthread_once(&lacf_glew_ctx_once, lacf_glew_ctx_make_key);
126 ctx = (GLEWContext *)pthread_getspecific(lacf_glew_ctx_key);
129 (void) pthread_setspecific(lacf_glew_ctx_key, ctx);
137API_EXPORT_DATA DWORD lacf_glew_ctx_key;
139API_EXPORT
void lacf_glew_dllmain_hook(DWORD reason);
140API_EXPORT
void lacf_glew_init(
void);
141API_EXPORT
void lacf_glew_thread_fini(
void);
142API_EXPORT
void lacf_glew_fini(
void);
144static inline GLEWContext *
149 ASSERT(lacf_glew_ctx_key != 0);
150 ctx = (GLEWContext *)TlsGetValue(lacf_glew_ctx_key);
153 VERIFY(TlsSetValue(lacf_glew_ctx_key, (
void *)ctx));
void * lacf_malloc(size_t n)
static void * safe_malloc(size_t size)