Module: Rendering::UI::StencilManager

Defined in:
lib/engine/rendering/ui/stencil_manager.rb

Class Method Summary collapse

Class Method Details

.resetObject



27
28
29
30
# File 'lib/engine/rendering/ui/stencil_manager.rb', line 27

def reset
  Engine::GL.Disable(Engine::GL::STENCIL_TEST)
  @current_chain = nil
end

.setup_for_rect(rect) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/engine/rendering/ui/stencil_manager.rb', line 7

def setup_for_rect(rect)
  chain = rect.ancestor_masks

  if chain.empty?
    Engine::GL.Disable(Engine::GL::STENCIL_TEST)
    return
  end

  # Rebuild stencil if chain changed
  if chain != @current_chain
    rebuild_stencil(chain)
    @current_chain = chain
  end

  # Configure stencil test: only draw where stencil == chain.length (intersection of all masks)
  Engine::GL.Enable(Engine::GL::STENCIL_TEST)
  Engine::GL.StencilFunc(Engine::GL::EQUAL, chain.length, 0xFF)
  Engine::GL.StencilOp(Engine::GL::KEEP, Engine::GL::KEEP, Engine::GL::KEEP)
end