Class: RBGL::Engine::Rasterizer::PointRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/rbgl/engine/rasterizer/point_renderer.rb

Instance Method Summary collapse

Constructor Details

#initialize(framebuffer, viewport_transform:, point_pixel_offsets:) ⇒ PointRenderer

Returns a new instance of PointRenderer.



7
8
9
10
11
# File 'lib/rbgl/engine/rasterizer/point_renderer.rb', line 7

def initialize(framebuffer, viewport_transform:, point_pixel_offsets:)
  @framebuffer = framebuffer
  @viewport_transform = viewport_transform
  @point_pixel_offsets = point_pixel_offsets
end

Instance Method Details

#rasterize(vertex, fragment_shader, uniforms, state) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rbgl/engine/rasterizer/point_renderer.rb', line 13

def rasterize(vertex, fragment_shader, uniforms, state)
  point = @viewport_transform.call(vertex[:position])
  x = point.x.round
  y = point.y.round
  depth = point.z
  x_offsets, y_offsets = @point_pixel_offsets.call(state[:size])

  y_offsets.each do |dy|
    x_offsets.each do |dx|
      frag_output = fragment_shader.process(vertex, uniforms)
      @framebuffer.write_pixel(
        x + dx, y + dy, frag_output[:color], depth,
        depth_test: state[:depth_test],
        depth_write: state[:depth_write],
        blend_mode: state[:blend_mode]
      )
    end
  end
end