我目前正在尝试DerelictSDL2(D的SDL2库绑定),我编写了一个代码,可以成功加载JPG图像并在窗口中显示.也就是说,当它用dmd编译时.当我尝试使用gdc(并且没有代码修改)时,它会编译,但它不会在运行时加载图像.
我相信我做得对:
SDL_Init(SDL_INIT_VIDEO)
然后
IMG_Init(IMG_INIT_JPG)
在那之后的某个地方
this.data = IMG_LoadTexture(Window.renderer, name.ptr)
其中Window.renderer是(明显)的SDL_Renderer*和name.ptr是一个char*指向图像的名称来加载.但是,与GDC,编译时IMG_Load和IMG_LoadTexture两回null,而与DMD他们返回一个指针到新创建的质感...
我忘记了别的东西(毕竟,使用dmd它甚至没有工作IMG_Init)?Derelict是否仅适用于dmd(即使它只与C函数接口)?
dmd:2.065
gdc:4.9.1
编辑:
事实证明问题完全不同.IMG_LoadTexture为第二个参数获取指向数据的指针,但name.ptr似乎只适用于dmd.但是,如果我尝试使用这样的硬编码参数:
IMG_LoadTexture(renderer, "../test/res/image.jpg")
它适用于dmd和gdc.
我正在学习D并且在C#方面经验丰富.具体来说,我正在尝试使用Derelict3绑定到SDL2.我已经能够使一些基本功能正常工作,但我已经厌倦了如何为特定调用创建数组参数.
该库包含一个电话
SDL_RenderDrawLines(SDL_Renderer*, const(SDL_Point)*, int) //Derelict3 Binding
Run Code Online (Sandbox Code Playgroud)
我无法正确地形成论据
const(SDL_Point)*
Run Code Online (Sandbox Code Playgroud)
此函数的SDL文档声明此参数是一个数组SDL_Point,但我不清楚如何创建一个适当的数组来传递给这个函数.
这是我目前所拥有的一个例子:
void DrawShape(SDL_Renderer* renderer)
{
SDL_Point a = { x:10, y:10};
SDL_Point b = { x:500, y:500};
const(SDL_Point[2]) points = [a,b];
Uint8 q = 255;
SDL_SetRenderDrawColor(renderer,q,q,q,q);
SDL_RenderDrawLines(renderer,points,1);
}
Run Code Online (Sandbox Code Playgroud)
并且编译器抱怨我没有为const(SDL_Point)*in 传递正确类型的参数points.
Error: function pointer SDL_RenderDrawLines (SDL_Renderer*, const(SDL_Point)*, int)
is not callable using argument types (SDL_Renderer*, const(SDL_Point[2u]), int)
Run Code Online (Sandbox Code Playgroud)
我怀疑这是我的一个根本误解所以任何帮助将不胜感激.