Builders¶
Freya uses the builder pattern to provide a fluent API for constructing engine components.
Overview¶
All builders follow a consistent pattern:
WindowBuilder¶
Creates Window instances. WindowBuilder requires an EventManager, FreyaOptions, and logger references.
InstanceBuilder¶
Creates Vulkan Instance objects. InstanceBuilder automatically enables validation layers and adds SDL Vulkan extensions.
auto instance = InstanceBuilder(logger)
.SetApplicationName("My App")
.SetApplicationVersion(1, 0, 0)
.Build();
DeviceBuilder¶
Creates Vulkan logical Device.
auto device = DeviceBuilder()
.SetPhysicalDevice(physicalDevice)
.SetSurface(surface)
.SetCommandPool(commandPool)
.Build();
PhysicalDeviceBuilder¶
Selects and configures Vulkan PhysicalDevice (GPU).
auto physicalDevice = PhysicalDeviceBuilder()
.SetSurface(surface)
.SetDeviceTypePreference(vk::PhysicalDeviceType::eDiscreteGpu)
.Build();
SurfaceBuilder¶
Creates Vulkan Surface for window integration.
auto surface = SurfaceBuilder()
.SetInstance(instance)
.SetWindow(window)
.SetPhysicalDevice(physicalDevice)
.Build();
SwapChainBuilder¶
Creates Vulkan SwapChain.
auto swapChain = SwapChainBuilder()
.SetSurface(surface)
.SetPhysicalDevice(physicalDevice)
.SetDevice(device)
.SetWidth(1920)
.SetHeight(1080)
.SetVSync(true)
.Build();
RenderPassBuilder¶
Creates Vulkan RenderPass.
auto renderPass = RenderPassBuilder()
.SetSurface(surface)
.SetPhysicalDevice(physicalDevice)
.SetDevice(device)
.SetSamples(4)
.Build();
CommandPoolBuilder¶
Creates CommandPool for command buffer management.
auto commandPool = CommandPoolBuilder()
.SetDevice(device)
.SetPhysicalDevice(physicalDevice)
.Build();
RendererBuilder¶
Creates the main Renderer instance.
auto renderer = RendererBuilder(
instance, surface, physicalDevice, device,
commandPool, swapChain, renderPass, eventManager,
window, freyaOptions, serviceProvider)
.Build();
ShaderModuleBuilder¶
Creates Vulkan ShaderModule from SPIR-V.
auto shaderModule = ShaderModuleBuilder()
.SetDevice(device)
.SetShaderPath("shaders/vert.spv")
.SetStage(vk::ShaderStageFlagBits::eVertex)
.Build();
BufferBuilder¶
Creates Buffer objects for GPU data storage.
auto buffer = BufferBuilder(device)
.SetData(&myData[0])
.SetSize(sizeof(myData))
.SetUsage(BufferUsage::Vertex)
.Build();
BufferUsage Enum¶
| Value | Description |
|---|---|
Staging | Staging buffer for data transfer |
Vertex | Vertex data buffer |
Index | Index buffer |
Uniform | Uniform buffer object (UBO) |
Instance | Per-instance data buffer |
Image | Image buffer |
ImageBuilder¶
Creates Image objects (textures, render targets).
auto image = ImageBuilder(surface, device, logger, serviceProvider)
.SetUsage(ImageUsage::Texture)
.SetFormat(vk::Format::eR8G8B8A8Srgb)
.SetWidth(1024)
.SetHeight(1024)
.SetSamples(vk::SampleCountFlagBits::e1)
.SetData(imageData)
.Build();
ImageUsage Enum¶
| Value | Description |
|---|---|
Color | Color attachment |
Depth | Depth attachment |
Sampling | Sampled image |
Texture | Texture for sampling |
GBufferPosition | G-buffer position |
GBufferNormal | G-buffer normal |
GBufferAlbedo | G-buffer albedo |
FreyaOptionsBuilder¶
Configures engine options.
freya.WithOptions([](fra::FreyaOptionsBuilder& freyaOptions) {
freyaOptions.SetTitle("My App")
.SetWidth(1920)
.SetHeight(1080)
.SetVSync(false)
.SetSampleCount(8)
.SetFullscreen(false)
.SetDrawDistance(1000.0f)
.SetRenderingStrategy(fra::RenderingStrategy::Forward);
});
DeferredCompressedPassBuilder¶
Creates deferred rendering passes with G-buffer compression.
auto deferredPass = DeferredCompressedPassBuilder(device, surface, freyaOptions, serviceProvider)
.Build();
Used for deferred rendering strategies to efficiently compress G-buffer data.