Dub / Derelict confusion

Paul via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Nov 20 12:57:08 PST 2014


On Wednesday, 19 November 2014 at 10:07:56 UTC, Mike Parker wrote:
> On 11/19/2014 6:12 PM, Paul wrote:
>> I would like to create a simple program using SDL. I've read 
>> this page
>> http://dblog.aldacron.net/derelict-help/using-derelict/ and 
>> this one
>> http://code.dlang.org/about and decided that using 'dub' would 
>> be the
>> sensible option for a beginner so I downloaded the dub 
>> executable and
>> put it in the same directory as my source file 'test.d'.
>
> It doesn't need to be in the same directory as the source. Put 
> it somewhere on the global path.
>
>>
>> As per the example at the above url, I created a dub.json file 
>> in the
>> same directory with contents as so:
>>
>> "dependencies": {
>> "derelict-sdl2":"~>1.0.0",
>> "derelict-gl3":"~master",
>> }
>
> You shouldn't be depending on ~master for anything anymore. The 
> newest version of dub will complain about dependencies on git 
> branches. For derelict-gl3, you can use >=1.0.0.
>
>>
>> If I have the relevant import statements in test.d, am I right 
>> in
>> thinking I can use dub to build my program (not just download 
>> and build
>> the derelict libraries)?
>
> Yes, assuming that your dub.json is properly configured.
>
>> The command dub build test.d gives me a 'failed
>> to load package' error.
>
> That's the right command, but the wrong parameters. If you are 
> going to pass a parameter to the build command, it should be 
> the name of a dub package, not the name of a file. Typically, 
> you don't need to pass it a package name if all is properly 
> configured.
>
> Try this:
>
> 1 -- make sure dub is on the global path.
>
> 2 --
> mkdir dubtest
> cd dubtest
> dub init
>
> You should see the following output in side the dubtest dir
>
> -dub.json
> ---source
> -----app.d
>
> 3 --
> Edit dub.json and add the following dependencies:
>
> "derelict-sdl2":"~>1.0.0",
> "derelict-gl3":">=1.0.0"
>
> 4 --
> Edit app.d to look like this:
>
> import derelict.opengl3.gl3,
>        derelict.sdl2.sdl;
>
> void main()
> {
>     DerelictGL3.load();
>     DerelictSDL2.load();
>
>     import std.stdio : writeln;
>     writeln( "Success!");
> }
>
> 5--
> Execute the following command:
> dub
>
> You'll see some messages about fetching and building the 
> Derelict packages and then, assuming you have SDL2 and OpenGL 
> on your system library search path, you should see it print 
> "Success!". Otherwise, you'll get a DerelictException of one 
> kind or another.
>
> Note that I didn't give dub a command option. Executing 'dub' 
> with no options will cause it to build and run whatever package 
> is in the current directory. By default, dub will look for 
> source/app.d if you don't configure something differently in 
> dub.json.
>
> Executing 'dub build' will build the executable, but will not 
> run it.

This is a tad off topic now but I'm struggling to get a window on 
screen as SDL_CreateWindow is failing, here's what I've got:

try{
	DerelictSDL2.load();
}catch(Exception e){
	writeln("Failed to load DerelictSDL2 :( %s", e.msg);
	return;
}

try{
	SDL_Init(SDL_INIT_EVERYTHING);
}catch(Exception e){
	 writeln("Can't init SDL :( %s", e.msg);
	 return;
}


SDL_Window *testWindow;
//temporary magic numbers ahoy
testWindow = SDL_CreateWindow( "Test Window", 
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, 
SDL_WINDOW_RESIZABLE );
if( testWindow == null ) {
	writeln("Window could not be created!");
	return;
} 	else {
	SDL_Surface* testSurface;
	testSurface = SDL_GetWindowSurface(testWindow);
}

Everything seems to initialise ok but SDL_CreateWindow always 
returns null. For some reason I can't use DerelictException which 
I guess might help me dig deeper. AFAIK there are no issues with 
this machine's hardware - I can certainly run other SDL-based 
apps on it.






More information about the Digitalmars-d-learn mailing list