MCPcopy Create free account
hub / github.com/DISTRHO/DPF / createContextIfNeeded

Method createContextIfNeeded

dgl/src/OpenGL3.cpp:861–994  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

859}
860
861void Window::PrivateData::createContextIfNeeded()
862{
863 OpenGL3GraphicsContext& gl3context = reinterpret_cast<OpenGL3GraphicsContext&>(graphicsContext);
864
865 if (gl3context.program != 0)
866 return;
867
868#if defined(DISTRHO_OS_WINDOWS)
869# if defined(__GNUC__) && (__GNUC__ >= 9)
870# pragma GCC diagnostic push
871# pragma GCC diagnostic ignored "-Wcast-function-type"
872# endif
873 static bool needsInit = true;
874# define DGL_EXT(PROC, func) \
875 if (needsInit) func = (PROC) wglGetProcAddress ( #func ); \
876 DISTRHO_SAFE_ASSERT_RETURN(func != nullptr,);
877# define DGL_EXT2(PROC, func, fallback) \
878 if (needsInit) { \
879 func = (PROC) wglGetProcAddress ( #func ); \
880 if (func == nullptr) func = (PROC) wglGetProcAddress ( #fallback ); \
881 } DISTRHO_SAFE_ASSERT_RETURN(func != nullptr,);
882DGL_EXT(PFNGLACTIVETEXTUREPROC, glActiveTexture)
883DGL_EXT(PFNGLATTACHSHADERPROC, glAttachShader)
884DGL_EXT(PFNGLBINDBUFFERPROC, glBindBuffer)
885DGL_EXT(PFNGLBUFFERDATAPROC, glBufferData)
886DGL_EXT(PFNGLCOMPILESHADERPROC, glCompileShader)
887DGL_EXT(PFNGLCREATEPROGRAMPROC, glCreateProgram)
888DGL_EXT(PFNGLCREATESHADERPROC, glCreateShader)
889DGL_EXT(PFNGLDELETEBUFFERSPROC, glDeleteBuffers)
890DGL_EXT(PFNGLDELETEPROGRAMPROC, glDeleteProgram)
891DGL_EXT(PFNGLDELETESHADERPROC, glDeleteShader)
892DGL_EXT(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray)
893DGL_EXT(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray)
894DGL_EXT(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation)
895DGL_EXT(PFNGLGENBUFFERSPROC, glGenBuffers)
896DGL_EXT(PFNGLGETPROGRAMIVPROC, glGetProgramiv)
897DGL_EXT(PFNGLGETSHADERIVPROC, glGetShaderiv)
898DGL_EXT(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog)
899DGL_EXT(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation)
900DGL_EXT(PFNGLLINKPROGRAMPROC, glLinkProgram)
901DGL_EXT(PFNGLSHADERSOURCEPROC, glShaderSource)
902DGL_EXT(PFNGLUNIFORM1IPROC, glUniform1i)
903DGL_EXT(PFNGLUNIFORM4FVPROC, glUniform4fv)
904DGL_EXT(PFNGLUSEPROGRAMPROC, glUseProgram)
905DGL_EXT(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer)
906# undef DGL_EXT
907# undef DGL_EXT2
908 needsInit = false;
909# if defined(__GNUC__) && (__GNUC__ >= 9)
910# pragma GCC diagnostic pop
911# endif
912#endif
913
914 int status;
915
916 const GLuint fragment = glCreateShader(GL_FRAGMENT_SHADER);
917 DISTRHO_SAFE_ASSERT_RETURN(fragment != 0, shaderCreationFail(fragment));
918

Callers

nothing calls this directly

Calls 2

shaderCreationFailFunction · 0.85
contextCreationFailFunction · 0.85

Tested by

no test coverage detected