digitalmars.D.learn - raylib LoadTexture Mismatch between
- Decabytes (37/37) Feb 19 2021 Dlang and curly brace language noob here. I'm trying to work with
- Steven Schveighoffer (17/37) Feb 19 2021 raylib-d does not have D wrappers for everything. You are supposed to
- Decabytes (3/21) Feb 19 2021 I see now. Thank you Steve!
Dlang and curly brace language noob here. I'm trying to work with the raylib-d library. I downloaded raylib-d using dub, and I installed raylib with my package manager on Manjaro. I'm getting a mismatch in the arguments I'm passing to LoadTexture. source/app.d(7,32): Error: function raylib.LoadTexture(const(char)* fileName) is not callable using argument types (string) In the raylib-d docs/cheatsheet it says LoadTexture uses a string as an argument.The original raylib docs/cheatsheet says it's a const(char)* value. So it seems I'm using the C version instead of the D version? The relevant section of the code below is import raylib; void main() { InitWindow(800, 600, "Hello, Raylib-D!"); string fname = "assets/tile_022.png"; Texture2D player = LoadTexture(fname); while (!WindowShouldClose()){ ... } { "authors": [ "Me" ], "copyright": "Copyright © 2021, Me", "dependencies": { "raylib-d": "~>3.0.3" }, "description": "A minimal D application.", "libs": [ "raylib" ], "license": "proprietary", "name": "raylib_test" } Does anyone know why this is happening?
Feb 19 2021
On 2/19/21 5:26 PM, Decabytes wrote:Dlang and curly brace language noob here. I'm trying to work with the raylib-d library. I downloaded raylib-d using dub, and I installed raylib with my package manager on Manjaro. I'm getting a mismatch in the arguments I'm passing to LoadTexture. source/app.d(7,32): Error: function raylib.LoadTexture(const(char)* fileName) is not callable using argument types (string) In the raylib-d docs/cheatsheet it says LoadTexture uses a string as an argument.The original raylib docs/cheatsheet says it's a const(char)* value. So it seems I'm using the C version instead of the D version? The relevant section of the code below is import raylib; void main() { InitWindow(800, 600, "Hello, Raylib-D!"); string fname = "assets/tile_022.png"; Texture2D player = LoadTexture(fname);raylib-d does not have D wrappers for everything. You are supposed to use the C functions. D's string literals are null-terminated. However, the language only allows actual literals to be implicitly converted to immutable(char)* as literals, not as general strings. So this will work: Texture2D player = LoadTexture("assets/tile_022.png"); And this will work too (because string literals are null terminated): string fname = "assets/tile_022.png"; Texture2D player = LoadTexture(fname.ptr); If you have a string that you aren't sure is a string literal, you can use std.string.toStringz to convert it, but this will allocate another string (possibly). import std.string; Texture2D player = LoadTexture(fname.toStringz); -Steve
Feb 19 2021
On Friday, 19 February 2021 at 23:29:18 UTC, Steven Schveighoffer wrote:On 2/19/21 5:26 PM, Decabytes wrote:raylib-d does not have D wrappers for everything. You are supposed to use the C functions. D's string literals are null-terminated. However, the language only allows actual literals to be implicitly converted to immutable(char)* as literals, not as general strings. So this will work: Texture2D player = LoadTexture("assets/tile_022.png"); And this will work too (because string literals are null terminated): string fname = "assets/tile_022.png"; Texture2D player = LoadTexture(fname.ptr); If you have a string that you aren't sure is a string literal, you can use std.string.toStringz to convert it, but this will allocate another string (possibly). import std.string; Texture2D player = LoadTexture(fname.toStringz); -SteveI see now. Thank you Steve!
Feb 19 2021