Skip to content

Latest commit

 

History

History
74 lines (53 loc) · 2.39 KB

File metadata and controls

74 lines (53 loc) · 2.39 KB

Using Vulkan with GLFW in Pascal

This guide explains how to use the Vulkan-related functions included in glfw.pas. To make this code work, you must include a unit that defines Vulkan data types (such as VkInstance, VkSurfaceKHR, etc.).

Checking for Support

Before attempting to create any Vulkan resources, you must verify if the system (hardware + driver) supports it:

if glfwVulkanSupported = GLFW_TRUE then
  Writeln('Vulkan is available on this system.')
else
  Writeln('Vulkan is not supported.');

Required Extensions

Vulkan is an explicit API. To create an instance that can communicate with a GLFW window, you need to know which extensions the operating system requires:

var
  Count: uint32_t;
  Extensions: PPChar;
begin
  // Extensions is a pointer to an array of strings
  Extensions := glfwGetRequiredInstanceExtensions(@Count);
  // These extension names must be passed to vkCreateInstance
end;

Creating the Surface

This is the most critical step. GLFW abstracts the platform-specific complexity (Win32, X11, Wayland, Cocoa) to create the rendering surface:

var
  Result: VkResult;
  Surface: VkSurfaceKHR;
begin
  // 'Instance' is your previously created VkInstance
  // 'Window' is the PGLFWwindow created with GLFW
  Result := glfwCreateWindowSurface(Instance, Window, nil, @Surface);

  if Result = VK_SUCCESS then
    Writeln('Vulkan surface created successfully.')
  else
    Writeln('Failed to create Vulkan surface.');
end;

Important Notes

No OpenGL Context: When creating a window for Vulkan, remember to disable the default OpenGL context creation to save resources:

glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
Window := glfwCreateWindow(Width, Height, 'Vulkan Window', nil, nil);

Memory Management: GLFW does not automatically destroy the Vulkan surface. You must call vkDestroySurfaceKHR (using your Vulkan loader) before closing the application.

Recommended Vulkan Loaders for Pascal

To obtain the necessary type definitions (VkInstance, etc.), you can use:

PasVulkan: The most complete and modern framework for Vulkan in Pascal.