| 859 | } |
| 860 | |
| 861 | void 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,); |
| 882 | DGL_EXT(PFNGLACTIVETEXTUREPROC, glActiveTexture) |
| 883 | DGL_EXT(PFNGLATTACHSHADERPROC, glAttachShader) |
| 884 | DGL_EXT(PFNGLBINDBUFFERPROC, glBindBuffer) |
| 885 | DGL_EXT(PFNGLBUFFERDATAPROC, glBufferData) |
| 886 | DGL_EXT(PFNGLCOMPILESHADERPROC, glCompileShader) |
| 887 | DGL_EXT(PFNGLCREATEPROGRAMPROC, glCreateProgram) |
| 888 | DGL_EXT(PFNGLCREATESHADERPROC, glCreateShader) |
| 889 | DGL_EXT(PFNGLDELETEBUFFERSPROC, glDeleteBuffers) |
| 890 | DGL_EXT(PFNGLDELETEPROGRAMPROC, glDeleteProgram) |
| 891 | DGL_EXT(PFNGLDELETESHADERPROC, glDeleteShader) |
| 892 | DGL_EXT(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray) |
| 893 | DGL_EXT(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray) |
| 894 | DGL_EXT(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation) |
| 895 | DGL_EXT(PFNGLGENBUFFERSPROC, glGenBuffers) |
| 896 | DGL_EXT(PFNGLGETPROGRAMIVPROC, glGetProgramiv) |
| 897 | DGL_EXT(PFNGLGETSHADERIVPROC, glGetShaderiv) |
| 898 | DGL_EXT(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog) |
| 899 | DGL_EXT(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation) |
| 900 | DGL_EXT(PFNGLLINKPROGRAMPROC, glLinkProgram) |
| 901 | DGL_EXT(PFNGLSHADERSOURCEPROC, glShaderSource) |
| 902 | DGL_EXT(PFNGLUNIFORM1IPROC, glUniform1i) |
| 903 | DGL_EXT(PFNGLUNIFORM4FVPROC, glUniform4fv) |
| 904 | DGL_EXT(PFNGLUSEPROGRAMPROC, glUseProgram) |
| 905 | DGL_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 |
nothing calls this directly
no test coverage detected