Class: SpriteKit::DrawBuffer

Inherits:
Object
  • Object
show all
Defined in:
mygame/lib/sprite_kit/draw_buffer.rb

Overview

gist.github.com/KonnorRogers/6337311772ee53733d14a520d79ca4d5 A simple output buffer designed to limit the number of draw calls and “buffer” everything into arrays before drawing.

Defined Under Namespace

Classes: RenderTargetArgumentError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDrawBuffer

Returns a new instance of DrawBuffer.



9
10
11
12
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 9

def initialize
  @primitives = []
  @render_targets = {}
end

Instance Attribute Details

#outputsObject

Returns the value of attribute outputs.



5
6
7
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 5

def outputs
  @outputs
end

#primitivesObject

Returns the value of attribute primitives.



5
6
7
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 5

def primitives
  @primitives
end

#render_targetsObject

Returns the value of attribute render_targets.



5
6
7
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 5

def render_targets
  @render_targets
end

Instance Method Details

#[](key) ⇒ Object



32
33
34
35
36
37
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 32

def [](key)
  raise RenderTargetArgumentError.new(key.inspect + " is not a string or symbol") if !(key.is_a?(String) || key.is_a?(Symbol))

  @render_targets[key] = [] if !@render_targets.key?(key)
  @render_targets[key]
end

#[]=(key, value) ⇒ Object



39
40
41
42
43
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 39

def []=(key, value)
  raise RenderTargetArgumentError.new(key.inspect + " is not a string or symbol") if !(key.is_a?(String) || key.is_a?(Symbol))

  @render_targets[key] = value
end

#add(*renderables, target: nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 14

def add(*renderables, target: nil)
  Array(renderables).each do |renderable|
    if renderable.is_a?(Array)
      if !target
        @primitives.concat(renderable)
      else
        @render_targets[target].concat(renderable)
      end
    else
      if !target
        @primitives << renderable
      else
        @render_targets[target] << renderable
      end
    end
  end
end

#clearObject

Clears arrays / hashes without rendering.



56
57
58
59
60
61
62
63
64
65
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 56

def clear
  # force nil to allow GC to run
  # @primitives = nil
  # @render_targets = nil
  # @primitives = []
  # @render_targets = {}

  @render_targets.clear
  @primitives.clear
end

#flushObject

Renders each render target and output.



46
47
48
49
50
51
52
53
# File 'mygame/lib/sprite_kit/draw_buffer.rb', line 46

def flush
  @render_targets.each do |key, value|
    @outputs[key].primitives.concat(value)
  end

  @outputs.primitives.concat(@primitives)
  clear
end