On Monday, 22 May 2017 at 16:56:10 UTC, Mike Parker wrote:
On Monday, 22 May 2017 at 16:37:51 UTC, Andrew Edwards wrote:

Specific context at the following links:


https://github.com/glfw/glfw/blob/66ff4aae89572419bb130c5613798e34d7521fc7/deps/glad/glad.h#L24-L48

Generally, any functions in the Windows-specific sections with APIENTRY in their declarations need to be declared in D as extern(Windows). APIENTRY itself can be left out of the D binding.


There isn't any Windows specific section. Every function pointer in the library is decorated in one of the following two forms

    void (APIENTRY *NAME)(PARAMS)

or

    void (APIENTRYP NAME)(PARAMS)

Both happen to be the exact same. So does mean that for every function pointer in the file, I need to duplicate as such?

version (Windows)
{
    extern(Windows)
    {
        alias NAME = void function(PARAMS);
    }
}
else
{
    extern(C)
    {
        alias NAME = void function(PARAMS);
    }
}

https://github.com/glfw/glfw/blob/66ff4aae89572419bb130c5613798e34d7521fc7/deps/glad/glad.h#L57-L81


Again, GLAPI is a Windows-specific thing. [...]

You can safely ignore this one, unless you're planning to do a pure D port (not binding) of the library and intend to compile as a shared lib. It tells you which functions need to be exported from the shared lib to match the C API.

So if I'm understanding correctly, on Windows platforms this:

    typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap);
    GLAPI PFNGLDISABLEPROC glad_glDisable;
    #define glDisable glad_glDisable

is technically:

    typedef void (__syscall* PFNGLDISABLEPROC)(GLenum cap);
    extern "C" PFNGLDISABLEPROC glad_glDisable;
    #define glDisable glad_glDisable

which in D is:

// extern (Windows) obviated by the fact that the following line exports to the C API?
    extern (C) alias glad_glDisable = void function(GLenum cap);
    glad_glDisable glDisable;

https://github.com/glfw/glfw/blob/66ff4aae89572419bb130c5613798e34d7521fc7/deps/glad/glad.h#L88-L124
[...]
This one can also be ignored on the D side.

Got it.

Reply via email to