Взаимодействие с языком Си
object f64
val min "DBL_MIN" : f64
val max "DBL_MAX" : f64
val epsilon "DBL_EPSILON" : f64
Внешние константы DBL_MIN
, DBL_MAX
и DBL_EPSILON
представлены полями объекта f64
.
Типы
type i32 @c
type CChar "char"
Атрибут @c
нужен в случае, если имя типа совпадает с внешним.
type VkInstance = MutPtr
type CString = ptr CChar
Именованный кортеж с единственным элементом в Си коде представлен как тип элемента, поэтому в объявлениях внешних функций VkInstance
и CString
можно использовать вместо void*
и const char*
.
typealias DebugUtilsMessengerCallbackExt = fn
(message_severity : DebugUtilsMessageSeverityFlagsExt)
* (message_types : DebugUtilsMessageTypeFlagsExt)
* (callback_data : ptr DebugUtilsMessengerCallbackDataExt)
* (user_data : MutPtr) -> u32
typealias CharFun = fn GlfwWindow * u32 -> Unit
Псевдонимы для типов указателей на функцию.
type SampleCountFlags = flags
| 1
| 2
| 4
| 8
| 16
| 32
| 64
Символы флагов могут быть числами или начинаться с цифры.
type InstanceCreateInfo = struct
type : StructureType
next : Ptr
flags : InstanceCreateFlags
application_info : ptr ApplicationInfo
enabled_layer_count : u32
enabled_layer_names : ptr CString
enabled_extension_count : u32
enabled_extension_names : ptr CString
type ClearValue = union
color : ClearColorValue
depth_stencil : ClearDepthStencilValue
Структуры и объединения соответствуют одноимённым конструкциям Си.
Функции
module vk
def create_semaphore "vkCreateSemaphore"
(device : VkDevice)
(create_info : ptr SemaphoreCreateInfo)
(allocator : Allocator)
(semaphore : mut ptr VkSemaphore) : Result
endmodule
Библиотечная функция vkCreateSemaphore
доступна под именем vk/create_semaphore
.
def create_semaphore (device : VkDevice) =
let semaphore_create_info = SemaphoreCreateInfo
type = StructureType/SemaphoreCreateInfo
next = null
flags = SemaphoreCreateFlags@zero
let mut semaphore = null
vk/create_semaphore device semaphore_create_info@ptr null
semaphore@mut_ptr
|> assert_success
semaphore
Модификаторы @ptr
и @mut_ptr
возвращают указатель на значение, @fn
— указатель на функцию, @zero
— обнулённый блок памяти.
type f32 @c =
def sin "sinf" : f32
def cos "cosf" : f32
type f64 @c =
def sin @c : f64
def cos @c : f64
Внешняя функция может быть методом.