| 135 | // ----------------------------------------------------------------------- |
| 136 | |
| 137 | START_NAMESPACE_DGL |
| 138 | |
| 139 | NVGcontext* nvgCreateGL(int flags) |
| 140 | { |
| 141 | #if defined(DISTRHO_OS_WINDOWS) |
| 142 | # if defined(__GNUC__) && (__GNUC__ >= 9) |
| 143 | # pragma GCC diagnostic push |
| 144 | # pragma GCC diagnostic ignored "-Wcast-function-type" |
| 145 | # endif |
| 146 | static bool needsInit = true; |
| 147 | # define DGL_EXT(PROC, func) \ |
| 148 | if (needsInit) func = (PROC) wglGetProcAddress ( #func ); \ |
| 149 | DISTRHO_SAFE_ASSERT_RETURN(func != nullptr, nullptr); |
| 150 | # define DGL_EXT2(PROC, func, fallback) \ |
| 151 | if (needsInit) { \ |
| 152 | func = (PROC) wglGetProcAddress ( #func ); \ |
| 153 | if (func == nullptr) func = (PROC) wglGetProcAddress ( #fallback ); \ |
| 154 | } DISTRHO_SAFE_ASSERT_RETURN(func != nullptr, nullptr); |
| 155 | DGL_EXT(PFNGLACTIVETEXTUREPROC, glActiveTexture) |
| 156 | DGL_EXT(PFNGLATTACHSHADERPROC, glAttachShader) |
| 157 | DGL_EXT(PFNGLBINDATTRIBLOCATIONPROC, glBindAttribLocation) |
| 158 | DGL_EXT(PFNGLBINDBUFFERPROC, glBindBuffer) |
| 159 | DGL_EXT(PFNGLBUFFERDATAPROC, glBufferData) |
| 160 | DGL_EXT(PFNGLCOMPILESHADERPROC, glCompileShader) |
| 161 | DGL_EXT(PFNGLCREATEPROGRAMPROC, glCreateProgram) |
| 162 | DGL_EXT(PFNGLCREATESHADERPROC, glCreateShader) |
| 163 | DGL_EXT(PFNGLDELETEBUFFERSPROC, glDeleteBuffers) |
| 164 | DGL_EXT(PFNGLDELETEPROGRAMPROC, glDeleteProgram) |
| 165 | DGL_EXT(PFNGLDELETESHADERPROC, glDeleteShader) |
| 166 | DGL_EXT(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray) |
| 167 | DGL_EXT(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray) |
| 168 | DGL_EXT(PFNGLGENBUFFERSPROC, glGenBuffers) |
| 169 | DGL_EXT(PFNGLGETPROGRAMIVPROC, glGetProgramiv) |
| 170 | DGL_EXT(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog) |
| 171 | DGL_EXT(PFNGLGETSHADERIVPROC, glGetShaderiv) |
| 172 | DGL_EXT(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog) |
| 173 | DGL_EXT(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation) |
| 174 | DGL_EXT(PFNGLLINKPROGRAMPROC, glLinkProgram) |
| 175 | DGL_EXT(PFNGLSHADERSOURCEPROC, glShaderSource) |
| 176 | DGL_EXT(PFNGLSTENCILOPSEPARATEPROC, glStencilOpSeparate) |
| 177 | DGL_EXT(PFNGLUNIFORM1IPROC, glUniform1i) |
| 178 | DGL_EXT(PFNGLUNIFORM2FVPROC, glUniform2fv) |
| 179 | DGL_EXT(PFNGLUNIFORM4FVPROC, glUniform4fv) |
| 180 | DGL_EXT(PFNGLUSEPROGRAMPROC, glUseProgram) |
| 181 | DGL_EXT(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer) |
| 182 | DGL_EXT(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate) |
| 183 | # ifdef DGL_USE_NANOVG_FBO |
| 184 | DGL_EXT(PFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus) |
| 185 | DGL_EXT2(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer, glBindFramebufferEXT) |
| 186 | DGL_EXT2(PFNGLBINDRENDERBUFFERPROC, glBindRenderbuffer, glBindRenderbufferEXT) |
| 187 | DGL_EXT2(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers, glDeleteFramebuffersEXT) |
| 188 | DGL_EXT2(PFNGLDELETERENDERBUFFERSPROC, glDeleteRenderbuffers, glDeleteRenderbuffersEXT) |
| 189 | DGL_EXT2(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D, glFramebufferTexture2DEXT) |
| 190 | DGL_EXT2(PFNGLFRAMEBUFFERRENDERBUFFERPROC, glFramebufferRenderbuffer, glFramebufferRenderbufferEXT) |
| 191 | DGL_EXT2(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers, glGenFramebuffersEXT) |
| 192 | DGL_EXT2(PFNGLGENRENDERBUFFERSPROC, glGenRenderbuffers, glGenRenderbuffersEXT) |
| 193 | DGL_EXT2(PFNGLRENDERBUFFERSTORAGEPROC, glRenderbufferStorage, glRenderbufferStorageEXT) |
| 194 | # endif |