On Sunday, 24 December 2017 at 03:00:16 UTC, Kevin wrote:
On Sunday, 24 December 2017 at 01:42:58 UTC, Mike Parker wrote:

I've found the problem. But first...

I making a simple static library.

I don't see a static library anywhere. You weren't "importing a static library", something which isn't possible in D anyway. You import modules, not libraries.

The reason it worked in your main source file (cube.d) and not in your buffers module is this line:


mixin glFreeFuncs!(GLVersion.gl33);

You have that in cube.d, but in buffers.d you have this:

import derelict.opengl;


If you are going to use glFreeFuncs like this, you can't import opengl that way. As per the DerelictGL3 documentation [1], the simplest way to make this work is to implement a module that publicly imports derelict.opengl and declares the mixin, then import that module elsewehre. So the first step to making your code work is this:

```
module mygl;

public import derelict.opengl;
mixin glFreeFuncs!(GLVersion.GL33);
```

That's not all, though. The documentation also explicitly says you have to define the DerelictGL3_CustomFreeFuncs version when you compile. So add this to your dub.json:

```
"versions": [
   "DerelictGL3_CustomFreeFuncs"
],
```

That should at least get you compiling. But your dependency declarations have a couple of issues that need fixing. Currently, you have this:

```
"derelict-sdl2": "~>3.0",
"derelict-gl3": "~2.0",
```

Your sdl2 dependency is syntactically correct, but what it says is that you're happy with any version of DerelictSDL2 from 3.0.x to 3.9.x, inclusive. The result is that you're actually getting version 3.1.0-alpha.3. In the near future, I'll be updating for SDL 2.0.7 and will add a new 3.2.0-alpha.1 version. If you run `dub upgrade` at that point, you'll get that version. That's a bad idea!

What you want to do is to specify the full version, major.minor.path, 3.0.0. And, since there is a 3.0.0-beta and not a 3.0.0, you'll need to append -beta.

The same applies to your gl3 dependency, but you have another problem there. The syntax is incorrect: ~2.0 instead of ~>2.0. ~foo tells dub to look for a git branch with the name "foo" -- and it's deprecated syntax. Since there happens to be a branch in the DerelictGL3 github repo named "2.0", that's what you're actually getting.

So you should update your dependencies to look like this:

```
"derelict-sdl2": "~>3.0.0-beta",
"derelict-gl3": "~>2.0.0-beta",
```

Be sure to delete your dub.selections.json after editing and before you rebuild.

With these, you'll be compiling and properly upgrading in the future if you need to.

[1] http://derelictorg.github.io/packages/gl3/

Reply via email to