On Tuesday, 2 June 2015 at 16:26:30 UTC, Alex Parrill wrote:
On Tuesday, 2 June 2015 at 16:23:26 UTC, Kyoji Klyden wrote:
On Tuesday, 2 June 2015 at 15:53:33 UTC, Alex Parrill wrote:
On Tuesday, 2 June 2015 at 15:07:58 UTC, Kyoji Klyden wrote:
quick question: What is the most efficient way to covert a string to a char array?

A string is, by definition in D, a character array, specifically `immutable(char)[]`. It's not like, for example, Java in which it's a completely separate type; you can perform all the standard array operations on strings.

If you need to mutate a string, then you can create a mutable `char[]` by doing `somestring.dup` as Dennis already mentioned.

The problem I was having was actually that an opengl function (specifically glShaderSource) wouldn't accept strings. I'm still can't get it to work actually :P

glShaderSource (uint, int, const(char*)*, const(int)*)

This one function is a bugger, been going at this for hours.


On Tuesday, 2 June 2015 at 15:38:24 UTC, Meta wrote:

Note that this will allocate a new garbage collected array.

Thx for the heads up

glShaderSource accepts an array of null-terminated strings. Try this:


        import std.string : toStringz;

        string sources = source.toStringz;
        int len = source.length;

        glShaderSource(id, sources, 1, &sources, &len);

src:

        string source = readText("test.glvert");
        
        const string sources = source.toStringz;
        const int len = source.length;
        
        GLuint vertShader = glCreateShader( GL_VERTEX_SHADER );
        
        glShaderSource(vertShader, 1, &sources, &len);

pt.d(26): Error: cannot implicitly convert expression (toStringz(source)) of type immutable(char)* to const(string)

pt.d(34): Error: function pointer glShaderSource (uint, int, const(char*)*, const(int)*) is not callable using argument types (uint, int, const(string)*, const(int)*)

-

I also tried passing the char array instead but no go.. What am I missing? :\

Reply via email to