I am having a problem which is similar in appearance to the OP's, but it does not seem to be similar in function. When I try to execute any of the Gl functions in the (protected) DerelictGL3.gl.loadSymbols function, I get an access violation. Checking for null reveals that the functions are indeed null and therefore have not been loaded into memory.

Now for where it gets weird.

Here's the code I'm using to load DerelictGL and create an OpenGL context in my test program(to make sure all the libraries are built correctly.)

    SDL_GLContext context;

    *sdlWindow = SDL_CreateWindow("New SDL Window",
                                SDL_WINDOWPOS_UNDEFINED,
                                SDL_WINDOWPOS_UNDEFINED,
                                800, 600,
                                //SDL_WINDOW_FULLSCREEN_DESKTOP |
                                SDL_WINDOW_OPENGL);

    context = SDL_GL_CreateContext(*sdlWindow);

    /* Turn on double buffering with a 24bit Z buffer.
     * You may need to change this to 16 or 32 for your system */
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, bitsPerPixel);

    GLVersion glVersion = DerelictGL.reload();
    if(glVersion > GLVersion.GL20)
    {
        writeln("Sufficient OpenGL version found.");
        writeln("Loaded OGL version is: ", glVersion);
string glVersionStr = to!(string)(glGetString( GL_VERSION ));
        writeln("GL version reported as ", glVersionStr);
    }
    else
    {
writeln("Error: OpenGL version ", glVersion, " not supported.");
        context = null;
    }
    if(glMatrixMode is null)
        writeln("*****glMatrixMode not loaded");
    else
        writeln("*****All functions loaded properly.");

("sdlWindow" is a pointer to an SDL_Window, the reference of which is passed into the function doing all this so that I can load the window into it)

Console output for this code:

Sufficient OpenGL version found.
Loaded OGL version is: GL45
GL version reported as 4.5.0 NVIDIA 347.09
*****All functions loaded properly.

So that's good.

Now in the project that I'm actually working on, something very different happens.

Here's the code from that project:
[insert variable passing and assignments here, I'm trying to save you guys some reading.] // Flags tell SDL about the type of window we are creating. windowFlags = SDL_WINDOW_OPENGL;//|SDL_WINDOW_RESIZABLE;
            if(fullscreen)
                windowFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP;


// SDL_SetVideoMode( sdlvideoinfo.current_w, sdlvideoinfo.current_h, bpp, flags );
            thisWindow = SDL_CreateWindow(startTitle.toStringz,
                                          SDL_WINDOWPOS_UNDEFINED,
                                          SDL_WINDOWPOS_UNDEFINED,
startSize.x, startSize.y,
                                          windowFlags);
            if(thisWindow is null)
                return false;

            glContext = SDL_GL_CreateContext(thisWindow);

    GLVersion glVersion = DerelictGL.reload();
    if(glVersion > GLVersion.GL20)
    {
        writeln("Sufficient OpenGL version found.");
        writeln("Loaded OGL version is: ", glVersion);
string glVersionStr = to!(string)(glGetString( GL_VERSION ));
        writeln("GL version reported as ", glVersionStr);
    }
    else
    {
writeln("Error: OpenGL version ", glVersion, " not supported.");
        glContext = null;
    }
    if(glMatrixMode is null)
        writeln("*****glMatrixMode not loaded");
    else
        writeln("*****All functions loaded properly.");

My, doesn't that look familiar? That's because it wasn't working before, so I copied over the code from my test program, which includes diagnostic statements such as ouptutting the GL version loaded.

Console output for this code:

Sufficient OpenGL version found.
Loaded OGL version is: GL45
GL version reported as 4.5.0 NVIDIA 347.09
*****glMatrixMode not loaded

What.

As far as I know, the code on both sides is functionally the same. The build environments are as identical as I can reasonably make them, and the execution directory for the second program has at minimum any libraries that the first program has.

And of course, I'm loading the new OpenGL versions, so that's not the problem.

Reply via email to