On Tuesday, 9 May 2017 at 05:52:28 UTC, Mike Parker wrote:
On Tuesday, 9 May 2017 at 05:38:24 UTC, ag0aep6g wrote:

You have to create a new array of pointers. As rikki cattermole has pointed out, you also have to null-terminate the individual strings, and pass the amount of pointers in a separate parameter.

----
import std.algorithm.iteration: map;
import std.array: array;
import std.conv: to;
import std.string: toStringz;

string[] strs = ["foo", "bar", "baz"];

/* convert string[] to char*[]: */
immutable(char)*[] chptrs = strs.map!toStringz.array;

immutable(char)** ppEnabledLayerNames = chptrs.ptr;
uint enabledLayerCount = chptrs.length.to!uint;
----

Although, if it's known that the array was populated with literals, toStringz isn't needed. String literals are automatically nul terminated.

Thanks for all your answers.

The strings are all predefined statically for the moment, with a '\0' character at the end.

I take from this that there's no way to avoid allocating then? I had hoped... :(

If indeed there is no way to avoid allocation, do the allocations have to remain 'alive' for the duration of the instance? Or can I deallocate immediately afterwards? I can't seem to find it in the Vulkan spec.

Reply via email to