Class: RBGL::Engine::Rasterizer

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

Defined Under Namespace

Classes: AttributeInterpolator, LineRenderer, PointRenderer, TriangleRenderer

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(framebuffer) ⇒ Rasterizer

Returns a new instance of Rasterizer.



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

def initialize(framebuffer)
  @framebuffer = framebuffer
  @viewport = { x: 0, y: 0, width: framebuffer.width, height: framebuffer.height }
  @attribute_interpolator = AttributeInterpolator.new
  @triangle_renderer = TriangleRenderer.new(
    framebuffer,
    interpolator: @attribute_interpolator,
    viewport_transform: method(:viewport_transform),
    edge_function: method(:edge_function)
  )
  @line_renderer = LineRenderer.new(
    framebuffer,
    interpolator: @attribute_interpolator,
    viewport_transform: method(:viewport_transform)
  )
  @point_renderer = PointRenderer.new(
    framebuffer,
    viewport_transform: method(:viewport_transform),
    point_pixel_offsets: method(:point_pixel_offsets)
  )
end

Instance Attribute Details

#viewportObject

Returns the value of attribute viewport.



11
12
13
# File 'lib/rbgl/engine/rasterizer.rb', line 11

def viewport
  @viewport
end

Instance Method Details

#rasterize_line(v0, v1, fragment_shader, uniforms, cull_mode: :none, depth_test: true, depth_write: true, blend_mode: :none) ⇒ Object



49
50
51
52
53
54
55
56
57
# File 'lib/rbgl/engine/rasterizer.rb', line 49

def rasterize_line(v0, v1, fragment_shader, uniforms, cull_mode: :none,
                   depth_test: true, depth_write: true, blend_mode: :none)
  @line_renderer.rasterize(v0, v1, fragment_shader, uniforms, state(
    cull_mode: cull_mode,
    depth_test: depth_test,
    depth_write: depth_write,
    blend_mode: blend_mode
  ))
end

#rasterize_point(vertex, fragment_shader, uniforms, size: 1, depth_test: true, depth_write: true, blend_mode: :none) ⇒ Object



59
60
61
62
63
64
65
66
67
# File 'lib/rbgl/engine/rasterizer.rb', line 59

def rasterize_point(vertex, fragment_shader, uniforms, size: 1,
                    depth_test: true, depth_write: true, blend_mode: :none)
  @point_renderer.rasterize(vertex, fragment_shader, uniforms, {
    size: size,
    depth_test: depth_test,
    depth_write: depth_write,
    blend_mode: blend_mode
  })
end

#rasterize_triangle(v0, v1, v2, fragment_shader, uniforms, cull_mode: :none, depth_test: true, depth_write: true, blend_mode: :none) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/rbgl/engine/rasterizer.rb', line 39

def rasterize_triangle(v0, v1, v2, fragment_shader, uniforms, cull_mode: :none,
                       depth_test: true, depth_write: true, blend_mode: :none)
  @triangle_renderer.rasterize(v0, v1, v2, fragment_shader, uniforms, state(
    cull_mode: cull_mode,
    depth_test: depth_test,
    depth_write: depth_write,
    blend_mode: blend_mode
  ))
end

#resize(width, height) ⇒ Object



35
36
37
# File 'lib/rbgl/engine/rasterizer.rb', line 35

def resize(width, height)
  @viewport = @viewport.merge(width: width, height: height)
end