Class: Vulkan::RenderPass

Inherits:
Object
  • Object
show all
Includes:
Checks, Conversions, Finalizer
Defined in:
lib/vulkan/render_pass.rb,
lib/vulkan/render_pass/subpass.rb

Defined Under Namespace

Classes: Subpass

Constant Summary

Constants included from Conversions

Conversions::ACCESS_MASK_BITS, Conversions::BORDER_COLORS, Conversions::BUFFER_USAGE_BITS, Conversions::COMPARE_OPS, Conversions::DEPENDENCY_FLAG_BITS, Conversions::DESCRIPTOR_TYPES, Conversions::DYNAMIC_STATES, Conversions::FILTERS, Conversions::FORMAT_FEATURE_BITS, Conversions::IMAGE_ASPECT_BITS, Conversions::IMAGE_CREATE_BITS, Conversions::IMAGE_FORMATS, Conversions::IMAGE_TILING, Conversions::IMAGE_TYPES, Conversions::IMAGE_USAGE_BITS, Conversions::MEMORY_PROPERTIES, Conversions::PIPELINE_STAGE_BITS, Conversions::PRESENT_MODES, Conversions::SAMPLER_ADDRESS_MODES, Conversions::SAMPLER_MIPMAP_MODES, Conversions::SHADER_STAGE_BITS, Conversions::SHARING_MODES, Conversions::SURFACE_TRANSFORMS, Conversions::VERTEX_INPUT_RATES

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Finalizer

#finalize_with, #hexaddr, included

Methods included from Conversions

#array_of_pointers, #array_of_structures, #array_of_uint32s, #bool_to_vk, #buffer_usage_flags_to_syms, #const_to_symbol, #cstr_to_rbstr, #flags_to_symbols, #flags_to_syms, #num_to_samples, #present_mode_to_sym, #queue_family_to_index, #struct_to_hash, #sym_to_blend_factor, #sym_to_blend_op, #sym_to_border_color, #sym_to_color_component_bit, #sym_to_command_buffer_level, #sym_to_command_buffer_usage, #sym_to_compare_op, #sym_to_cull_mode, #sym_to_descriptor_type, #sym_to_dynamic_state, #sym_to_filter, #sym_to_front_face, #sym_to_image_format, #sym_to_image_layout, #sym_to_image_tiling, #sym_to_image_type, #sym_to_index_type, #sym_to_load_op, #sym_to_pipeline_bind_point, #sym_to_polygon_mode, #sym_to_present_mode, #sym_to_sampler_address_mode, #sym_to_sampler_mipmap_mode, #sym_to_samples, #sym_to_sharing_mode, #sym_to_store_op, #sym_to_subpass_contents, #sym_to_topology, #sym_to_val, #sym_to_vertex_input_rate, #syms_to_access_mask, #syms_to_buffer_usage_flags, #syms_to_dependency_flags, #syms_to_descriptor_set_layout_type_flags, #syms_to_flags, #syms_to_format_feature_flags, #syms_to_image_aspect_flags, #syms_to_image_create_flags, #syms_to_image_usage_flags, #syms_to_memory_properties, #syms_to_pipeline_stage_flags, #syms_to_shader_stage_flags, #syms_to_surface_transforms, #vk_make_version, #vk_parse_version

Methods included from Checks

#check_result

Constructor Details

#initialize(vk) ⇒ RenderPass

Returns a new instance of RenderPass.



9
10
11
12
13
# File 'lib/vulkan/render_pass.rb', line 9

def initialize(vk)
  @vk = vk
  @attachments = []
  @subpasses = []
end

Instance Attribute Details

#attachmentsObject (readonly)

Returns the value of attribute attachments.



7
8
9
# File 'lib/vulkan/render_pass.rb', line 7

def attachments
  @attachments
end

Instance Method Details

#add_attachment(format:, samples: 1, load_op: :clear, store_op: :store, stencil_load_op: :dont_care, stencil_store_op: :dont_care, initial_layout: nil, final_layout: :presentation_src) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/vulkan/render_pass.rb', line 44

def add_attachment(format:,
                   samples: 1,
                   load_op: :clear,
                   store_op: :store,
                   stencil_load_op: :dont_care,
                   stencil_store_op: :dont_care,
                   initial_layout: nil,
                   final_layout: :presentation_src)
  attachment = VkAttachmentDescription.malloc
  attachment.format         = sym_to_image_format(format)
  attachment.samples        = num_to_samples(samples)
  attachment.loadOp         = sym_to_load_op(load_op)
  attachment.storeOp        = sym_to_store_op(store_op)
  attachment.stencilLoadOp  = sym_to_load_op(stencil_load_op)
  attachment.stencilStoreOp = sym_to_store_op(stencil_store_op)
  attachment.initialLayout  = sym_to_image_layout(initial_layout)
  attachment.finalLayout    = sym_to_image_layout(final_layout)
  @attachments << attachment
  @attachments.size - 1
end

#add_subpass(**args) ⇒ Object



65
66
67
68
69
# File 'lib/vulkan/render_pass.rb', line 65

def add_subpass(**args)
  subpass = Vulkan::RenderPass::Subpass.new(@vk, **args)
  @subpasses << subpass
  subpass
end

#commitObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/vulkan/render_pass.rb', line 19

def commit
  render_pass_info = VkRenderPassCreateInfo.malloc
  render_pass_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
  render_pass_info.attachmentCount = @attachments.size
  render_pass_info.pAttachments = array_of_structures(@attachments)
  render_pass_info.subpassCount = @subpasses.size
  render_pass_info.pSubpasses = array_of_structures(@subpasses)

  dependency = VkSubpassDependency.malloc
  dependency.srcSubpass = VK_SUBPASS_EXTERNAL
  dependency.dstSubpass = 0
  dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
  dependency.srcAccessMask = 0
  dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
  dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
  
  render_pass_info.dependencyCount = 1
  render_pass_info.pDependencies = dependency

  render_pass_p = Vulkan.create_value('void *', nil)
  check_result @vk.vkCreateRenderPass(@vk.device, render_pass_info, nil, render_pass_p)
  @handle = render_pass_p.value
  finalize_with @vk, :vkDestroyRenderPass, @vk.device, @handle, nil
end

#to_ptrObject



15
16
17
# File 'lib/vulkan/render_pass.rb', line 15

def to_ptr
  super || raise(RuntimeError, 'call #commit first')
end