검색해도 답을 못 찾았는데, ziglings에서 보고 그냥 잊었을 가능성도 꽤 있어요.
Zig 0.17.0에서 translate_c로 시스템 라이브러리인 Vulkan을 가져오고 있어요. 생성된 선언은 이렇습니다:
pub extern fn vkEnumeratePhysicalDevices(instance: VkInstance, pPhysicalDeviceCount: [*c]u32, pPhysicalDevices: [*c]VkPhysicalDevice) VkResult;
[*c]의 뜻이 헷갈려요. 단순히 배열의 첫 원소를 가리키는 포인터라는 뜻인가요?
아래처럼 하니 드디어 컴파일됐지만, 더 관용적인 작성법이 있을 것 같아요.
var adapters = try allocator.alloc(vulkan.VkPhysicalDevice, adapter_count);
_ = vulkan.vkEnumeratePhysicalDevices(instance, &adapter_count,
@ptrCast(&adapters[0]));
도움 주실 분께 미리 감사드려요!
영어에서 번역·원문 보기Searching hasn't turned up an answer for me, although this may well have appeared in ziglings and slipped my memory.
I'm bringing in Vulkan as a system library using translate_c on Zig 0.17.0. The resulting declaration looks like this:
pub extern fn vkEnumeratePhysicalDevices(instance: VkInstance, pPhysicalDeviceCount: [*c]u32, pPhysicalDevices: [*c]VkPhysicalDevice) VkResult;
What puzzles me is the meaning of [*c]. Does it merely say this should point at an array's initial element?
The following finally compiled for me, although I suspect there's a more conventional way to write it.
var adapters = try allocator.alloc(vulkan.VkPhysicalDevice, adapter_count);
_ = vulkan.vkEnumeratePhysicalDevices(instance, &adapter_count,
@ptrCast(&adapters[0]));
Thanks beforehand for any pointers!