Using bindbc-sdl with D
ryuukk_
ryuukk.dev at gmail.com
Sun Mar 12 02:52:27 UTC 2023
On Sunday, 12 March 2023 at 02:12:45 UTC, idsize wrote:
> I started learning D a few weeks ago and am enjoying it so far.
> I would like to use SDL with D and found bindbc-sdl, but I
> cannot figure out how to make it work.
>
> From my understanding, I'll need to use 'dub fetch bindbc-sdl'
> to download it, and then run 'dub build bindbc-sdl' to build
> it, before I can use it. Fetching it works, but it always fails
> to build. I get this error: 'failed launching cl.exe /P
> /Zc:preprocessor /PD /nologo ... '.
>
> Additionally, a more general question about bindbc, is it
> possible to skip using dub altogether? Like would placing the
> bindbc files inside of 'C:\D\dmd2\src\druntime\import' work
> directly?
Hello, and welcome!
Looks like the new version of that library is broken, i am having
the same issue
Reverting to previous (1.2.4) one is working (delete the
dub.selection.json):
Download SDL:
https://github.com/libsdl-org/SDL/releases/tag/release-2.26.4
And put the dll in your project folder
```json
{
"name": "hellosdl",
"dependencies": {
"bindbc-sdl": "1.2.4",
},
"versions": [
"SDL_2_26"
],
}
```
```D
import bindbc.sdl;
import core.stdc.stdio;
void main()
{
// here we load the dll
auto ret = loadSDL();
// here handle cases where it failed to load the dll
if (ret != sdlSupport)
{
if (ret == SDLSupport.noLibrary)
{
// dll not found
}
else if (ret == SDLSupport.badLibrary)
{
// wrong DLL, perhaps 32bit vs 64bit?
}
return;
}
// all good, let's use SDL
SDL_Window* window = null;
SDL_Surface* screenSurface = null;
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
fprintf(stderr, "could not initialize sdl2: %s\n",
SDL_GetError());
return;
}
window = SDL_CreateWindow("hello_sdl2",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
if (window == null)
{
fprintf(stderr, "could not create window: %s\n",
SDL_GetError());
return;
}
screenSurface = SDL_GetWindowSurface(window);
bool running = true;
while (running)
{
SDL_Event ev;
while (SDL_PollEvent(&ev))
{
switch (ev.type)
{
case SDL_QUIT:
running = false;
break;
default:
break;
}
}
SDL_FillRect(screenSurface, null,
SDL_MapRGB(screenSurface.format, 0x00, 0x00, 0xFF));
SDL_UpdateWindowSurface(window);
}
SDL_DestroyWindow(window);
SDL_Quit();
}
```
I filled an issue on the tracker:
https://github.com/BindBC/bindbc-sdl/issues/50
More information about the Digitalmars-d-learn
mailing list