Class: WGPU::RenderPass

Inherits:
Object
  • Object
show all
Includes:
NativeResource
Defined in:
lib/wgpu/commands/render_pass.rb,
sig/wgpu.rbs

Constant Summary

Constants included from NativeResource

NativeResource::GUARDED_METHOD_EXEMPTIONS

Instance Attribute Summary collapse

Attributes included from NativeResource

#label

Instance Method Summary collapse

Methods included from NativeResource

included, #inspect, #released?, #use

Constructor Details

#initialize(encoder, label: nil, color_attachments:, depth_stencil_attachment: nil, occlusion_query_set: nil, timestamp_writes: nil, max_draw_count: nil) ⇒ RenderPass

Begins a render pass owned by the command encoder.

Parameters:

  • encoder (CommandEncoder)

    owning encoder

  • label (String, nil) (defaults to: nil)

    optional debug label

  • color_attachments (Array<Hash>)

    color attachment descriptors

  • depth_stencil_attachment (Hash, nil) (defaults to: nil)

    depth/stencil attachment descriptor

  • occlusion_query_set (QuerySet, nil) (defaults to: nil)

    query set for occlusion queries

  • timestamp_writes (Hash, nil) (defaults to: nil)

    beginning and ending timestamp query settings

  • max_draw_count (Integer, nil) (defaults to: nil)

    implementation hint for the maximum draw count

Raises:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/wgpu/commands/render_pass.rb', line 16

def initialize(encoder, label: nil, color_attachments:, depth_stencil_attachment: nil, occlusion_query_set: nil, timestamp_writes: nil, max_draw_count: nil)
  @encoder = encoder
  @pointers = []
  @max_draw_count = max_draw_count
  @ended = false

  desc = Native::RenderPassDescriptor.new
  desc[:next_in_chain] = nil
  setup_label(desc, label)

  color_attachments_ptr = setup_color_attachments(color_attachments)
  desc[:color_attachment_count] = color_attachments.size
  desc[:color_attachments] = color_attachments_ptr

  if depth_stencil_attachment
    ds_ptr = setup_depth_stencil_attachment(depth_stencil_attachment)
    desc[:depth_stencil_attachment] = ds_ptr
  else
    desc[:depth_stencil_attachment] = nil
  end

  desc[:occlusion_query_set] = occlusion_query_set&.handle
  if timestamp_writes
    ts = Native::RenderPassTimestampWrites.new
    ts[:query_set] = timestamp_writes.fetch(:query_set).handle
    ts[:beginning_of_pass_write_index] = timestamp_writes[:beginning_of_pass_write_index] || 0xFFFFFFFF
    ts[:end_of_pass_write_index] = timestamp_writes[:end_of_pass_write_index] || 0xFFFFFFFF
    @pointers << ts
    desc[:timestamp_writes] = ts.to_ptr
  else
    desc[:timestamp_writes] = nil
  end

  @handle = Native.wgpuCommandEncoderBeginRenderPass(encoder.handle, desc)
  raise CommandError, "Failed to begin render pass" if @handle.null?
end

Instance Attribute Details

#handleObject (readonly)

Returns the value of attribute handle.

Returns:

  • (Object)


5
6
7
# File 'lib/wgpu/commands/render_pass.rb', line 5

def handle
  @handle
end

Instance Method Details

#begin_occlusion_query(query_index) ⇒ void

This method returns an undefined value.

Begins an occlusion query for subsequent draw calls.

Parameters:

  • query_index (Integer)

    destination index in the pass query set

  • (Integer)


191
192
193
# File 'lib/wgpu/commands/render_pass.rb', line 191

def begin_occlusion_query(query_index)
  Native.wgpuRenderPassEncoderBeginOcclusionQuery(@handle, query_index)
end

#draw(vertex_count, instance_count: 1, first_vertex: 0, first_instance: 0) ⇒ void

This method returns an undefined value.

Records a non-indexed draw.

Parameters:

  • (Integer)
  • instance_count: (Integer) (defaults to: 1)
  • first_vertex: (Integer) (defaults to: 0)
  • first_instance: (Integer) (defaults to: 0)


100
101
102
# File 'lib/wgpu/commands/render_pass.rb', line 100

def draw(vertex_count, instance_count: 1, first_vertex: 0, first_instance: 0)
  Native.wgpuRenderPassEncoderDraw(@handle, vertex_count, instance_count, first_vertex, first_instance)
end

#draw_indexed(index_count, instance_count: 1, first_index: 0, base_vertex: 0, first_instance: 0) ⇒ void

This method returns an undefined value.

Records an indexed draw.

Parameters:

  • (Integer)
  • (Object)


106
107
108
# File 'lib/wgpu/commands/render_pass.rb', line 106

def draw_indexed(index_count, instance_count: 1, first_index: 0, base_vertex: 0, first_instance: 0)
  Native.wgpuRenderPassEncoderDrawIndexed(@handle, index_count, instance_count, first_index, base_vertex, first_instance)
end

#draw_indexed_indirect(buffer, offset: 0) ⇒ void

This method returns an undefined value.

Draws using indexed arguments stored in a buffer.

Parameters:

  • buffer (Buffer)

    buffer containing the indirect arguments

  • offset (Integer) (defaults to: 0)

    byte offset of the arguments

  • (Buffer)
  • offset: (Integer) (defaults to: 0)


172
173
174
# File 'lib/wgpu/commands/render_pass.rb', line 172

def draw_indexed_indirect(buffer, offset: 0)
  Native.wgpuRenderPassEncoderDrawIndexedIndirect(@handle, buffer.handle, offset)
end

#draw_indirect(buffer, offset: 0) ⇒ void

This method returns an undefined value.

Draws using non-indexed arguments stored in a buffer.

Parameters:

  • buffer (Buffer)

    buffer containing the indirect arguments

  • offset (Integer) (defaults to: 0)

    byte offset of the arguments

  • (Buffer)
  • offset: (Integer) (defaults to: 0)


163
164
165
# File 'lib/wgpu/commands/render_pass.rb', line 163

def draw_indirect(buffer, offset: 0)
  Native.wgpuRenderPassEncoderDrawIndirect(@handle, buffer.handle, offset)
end

#endvoid

This method returns an undefined value.

Ends the pass.



245
246
247
# File 'lib/wgpu/commands/render_pass.rb', line 245

def end
  end_pass
end

#end_occlusion_queryvoid

This method returns an undefined value.

Ends the active occlusion query.



198
199
200
# File 'lib/wgpu/commands/render_pass.rb', line 198

def end_occlusion_query
  Native.wgpuRenderPassEncoderEndOcclusionQuery(@handle)
end

#end_passvoid

This method returns an undefined value.

Ends the pass if it has not already ended.



235
236
237
238
239
240
241
# File 'lib/wgpu/commands/render_pass.rb', line 235

def end_pass
  return if @ended

  Native.wgpuRenderPassEncoderEnd(@handle)
  @ended = true
  @encoder.send(:pass_ended, self)
end

#ended?Boolean

Reports whether the pass has ended.

Returns:

  • (Boolean)


251
252
253
# File 'lib/wgpu/commands/render_pass.rb', line 251

def ended?
  @ended
end

#execute_bundles(bundles) ⇒ void

This method returns an undefined value.

Executes pre-recorded render bundles.

Parameters:



180
181
182
183
184
185
# File 'lib/wgpu/commands/render_pass.rb', line 180

def execute_bundles(bundles)
  bundle_handles = bundles.map(&:handle)
  bundles_ptr = FFI::MemoryPointer.new(:pointer, bundle_handles.size)
  bundles_ptr.write_array_of_pointer(bundle_handles)
  Native.wgpuRenderPassEncoderExecuteBundles(@handle, bundle_handles.size, bundles_ptr)
end

#insert_debug_marker(label) ⇒ void

This method returns an undefined value.

Inserts a labeled point in GPU debugging tools.

Parameters:

  • label (String)

    marker label

  • (String)


225
226
227
228
229
230
231
# File 'lib/wgpu/commands/render_pass.rb', line 225

def insert_debug_marker(label)
  label_view = Native::StringView.new
  label_ptr = FFI::MemoryPointer.from_string(label)
  label_view[:data] = label_ptr
  label_view[:length] = label.bytesize
  Native.wgpuRenderPassEncoderInsertDebugMarker(@handle, label_view)
end

#pop_debug_groupvoid

This method returns an undefined value.

Ends the most recently pushed debug group.



217
218
219
# File 'lib/wgpu/commands/render_pass.rb', line 217

def pop_debug_group
  Native.wgpuRenderPassEncoderPopDebugGroup(@handle)
end

#push_debug_group(label) ⇒ void

This method returns an undefined value.

Starts a labeled group in GPU debugging tools.

Parameters:

  • label (String)

    group label

  • (String)


206
207
208
209
210
211
212
# File 'lib/wgpu/commands/render_pass.rb', line 206

def push_debug_group(label)
  label_view = Native::StringView.new
  label_ptr = FFI::MemoryPointer.from_string(label)
  label_view[:data] = label_ptr
  label_view[:length] = label.bytesize
  Native.wgpuRenderPassEncoderPushDebugGroup(@handle, label_view)
end

#releasevoid

This method returns an undefined value.

Releases the native render pass encoder handle.

Calling this method more than once has no effect.



259
260
261
262
263
# File 'lib/wgpu/commands/render_pass.rb', line 259

def release
  return if @handle.null?
  Native.wgpuRenderPassEncoderRelease(@handle)
  @handle = FFI::Pointer::NULL
end

#set_bind_group(index, bind_group, dynamic_offsets: []) ⇒ void

This method returns an undefined value.

Binds a resource group for subsequent draws.

Parameters:

  • index (Integer)

    bind group index

  • bind_group (BindGroup)

    group to bind

  • dynamic_offsets (Array<Integer>) (defaults to: [])

    dynamic buffer offsets

  • (Integer)
  • (BindGroup)
  • dynamic_offsets: (Array[Integer]) (defaults to: [])


65
66
67
68
69
70
71
72
73
# File 'lib/wgpu/commands/render_pass.rb', line 65

def set_bind_group(index, bind_group, dynamic_offsets: [])
  if dynamic_offsets.empty?
    Native.wgpuRenderPassEncoderSetBindGroup(@handle, index, bind_group.handle, 0, nil)
  else
    offsets_ptr = FFI::MemoryPointer.new(:uint32, dynamic_offsets.size)
    offsets_ptr.write_array_of_uint32(dynamic_offsets)
    Native.wgpuRenderPassEncoderSetBindGroup(@handle, index, bind_group.handle, dynamic_offsets.size, offsets_ptr)
  end
end

#set_blend_constant(r: 0.0, g: 0.0, b: 0.0, a: 1.0) ⇒ void

This method returns an undefined value.

Sets the constant color used by blend factors.

Parameters:

  • r (Numeric) (defaults to: 0.0)

    red component

  • g (Numeric) (defaults to: 0.0)

    green component

  • b (Numeric) (defaults to: 0.0)

    blue component

  • a (Numeric) (defaults to: 1.0)

    alpha component

  • r: (Numeric) (defaults to: 0.0)
  • g: (Numeric) (defaults to: 0.0)
  • b: (Numeric) (defaults to: 0.0)
  • a: (Numeric) (defaults to: 1.0)


141
142
143
144
145
146
147
148
# File 'lib/wgpu/commands/render_pass.rb', line 141

def set_blend_constant(r: 0.0, g: 0.0, b: 0.0, a: 1.0)
  color = Native::Color.new
  color[:r] = r
  color[:g] = g
  color[:b] = b
  color[:a] = a
  Native.wgpuRenderPassEncoderSetBlendConstant(@handle, color.to_ptr)
end

#set_index_buffer(buffer, format, offset: 0, size: nil) ⇒ void

This method returns an undefined value.

Binds an index buffer for indexed draws.

Parameters:

  • buffer (Buffer)

    index data buffer

  • format (Symbol, Integer)

    index element format

  • offset (Integer) (defaults to: 0)

    first byte to bind

  • size (Integer, nil) (defaults to: nil)

    number of bytes to bind

  • (Buffer)
  • (enum_value)
  • offset: (Integer) (defaults to: 0)
  • size: (Integer, nil) (defaults to: nil)


92
93
94
95
96
# File 'lib/wgpu/commands/render_pass.rb', line 92

def set_index_buffer(buffer, format, offset: 0, size: nil)
  size ||= buffer.size - offset
  format_value = Native::EnumHelper.coerce(Native::IndexFormat, format, name: "index format")
  Native.wgpuRenderPassEncoderSetIndexBuffer(@handle, buffer.handle, format_value, offset, size)
end

#set_pipeline(pipeline) ⇒ void

This method returns an undefined value.

Selects the render pipeline used by subsequent draws.

Parameters:



56
57
58
# File 'lib/wgpu/commands/render_pass.rb', line 56

def set_pipeline(pipeline)
  Native.wgpuRenderPassEncoderSetPipeline(@handle, pipeline.handle)
end

#set_scissor_rect(x, y, width, height) ⇒ void

This method returns an undefined value.

Restricts rasterization to a rectangular region.

Parameters:

  • x (Integer)

    left coordinate in pixels

  • y (Integer)

    top coordinate in pixels

  • width (Integer)

    rectangle width in pixels

  • height (Integer)

    rectangle height in pixels

  • (Integer)
  • (Integer)
  • (Integer)
  • (Integer)


130
131
132
# File 'lib/wgpu/commands/render_pass.rb', line 130

def set_scissor_rect(x, y, width, height)
  Native.wgpuRenderPassEncoderSetScissorRect(@handle, x, y, width, height)
end

#set_stencil_reference(reference) ⇒ void

This method returns an undefined value.

Sets the stencil reference used by subsequent draw calls.

Parameters:

  • reference (Integer)

    unsigned stencil reference

  • (Integer)


154
155
156
# File 'lib/wgpu/commands/render_pass.rb', line 154

def set_stencil_reference(reference)
  Native.wgpuRenderPassEncoderSetStencilReference(@handle, reference)
end

#set_vertex_buffer(slot, buffer, offset: 0, size: nil) ⇒ void

This method returns an undefined value.

Binds a vertex buffer to a slot.

Parameters:

  • slot (Integer)

    vertex buffer slot

  • buffer (Buffer)

    vertex data buffer

  • offset (Integer) (defaults to: 0)

    first byte to bind

  • size (Integer, nil) (defaults to: nil)

    number of bytes to bind

  • (Integer)
  • (Buffer)
  • offset: (Integer) (defaults to: 0)
  • size: (Integer, nil) (defaults to: nil)


81
82
83
84
# File 'lib/wgpu/commands/render_pass.rb', line 81

def set_vertex_buffer(slot, buffer, offset: 0, size: nil)
  size ||= buffer.size - offset
  Native.wgpuRenderPassEncoderSetVertexBuffer(@handle, slot, buffer.handle, offset, size)
end

#set_viewport(x, y, width, height, min_depth: 0.0, max_depth: 1.0) ⇒ void

This method returns an undefined value.

Sets the viewport used by subsequent draw calls.

Parameters:

  • x (Numeric)

    left coordinate in pixels

  • y (Numeric)

    top coordinate in pixels

  • width (Numeric)

    viewport width in pixels

  • height (Numeric)

    viewport height in pixels

  • min_depth (Numeric) (defaults to: 0.0)

    minimum depth value

  • max_depth (Numeric) (defaults to: 1.0)

    maximum depth value

  • (Numeric)
  • (Numeric)
  • (Numeric)
  • (Numeric)
  • min_depth: (Numeric) (defaults to: 0.0)
  • max_depth: (Numeric) (defaults to: 1.0)


119
120
121
# File 'lib/wgpu/commands/render_pass.rb', line 119

def set_viewport(x, y, width, height, min_depth: 0.0, max_depth: 1.0)
  Native.wgpuRenderPassEncoderSetViewport(@handle, x, y, width, height, min_depth, max_depth)
end