Class: Rendering::CubemapShadowMapArray

Inherits:
Object
  • Object
show all
Defined in:
lib/engine/rendering/cubemap_shadow_map_array.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(size: 1024, layer_count: 4) ⇒ CubemapShadowMapArray

Returns a new instance of CubemapShadowMapArray.



7
8
9
10
11
12
13
# File 'lib/engine/rendering/cubemap_shadow_map_array.rb', line 7

def initialize(size: 1024, layer_count: 4)
  @size = size
  @layer_count = layer_count
  create_framebuffer
  create_depth_cubemap_array
  check_framebuffer_complete
end

Instance Attribute Details

#depth_textureObject (readonly)

Returns the value of attribute depth_texture.



5
6
7
# File 'lib/engine/rendering/cubemap_shadow_map_array.rb', line 5

def depth_texture
  @depth_texture
end

#framebufferObject (readonly)

Returns the value of attribute framebuffer.



5
6
7
# File 'lib/engine/rendering/cubemap_shadow_map_array.rb', line 5

def framebuffer
  @framebuffer
end

#layer_countObject (readonly)

Returns the value of attribute layer_count.



5
6
7
# File 'lib/engine/rendering/cubemap_shadow_map_array.rb', line 5

def layer_count
  @layer_count
end

#sizeObject (readonly)

Returns the value of attribute size.



5
6
7
# File 'lib/engine/rendering/cubemap_shadow_map_array.rb', line 5

def size
  @size
end

Instance Method Details

#bind_face(layer_index, face_index) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/engine/rendering/cubemap_shadow_map_array.rb', line 15

def bind_face(layer_index, face_index)
  raise "Layer index #{layer_index} out of bounds" if layer_index >= @layer_count
  raise "Face index #{face_index} out of bounds" if face_index >= 6

  Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @framebuffer)
  # In a cubemap array, layers are: layer0_face0, layer0_face1, ..., layer0_face5, layer1_face0, ...
  array_layer = layer_index * 6 + face_index
  Engine::GL.FramebufferTextureLayer(Engine::GL::FRAMEBUFFER, Engine::GL::DEPTH_ATTACHMENT, @depth_texture, 0, array_layer)
  Engine::GL.Viewport(0, 0, @size, @size)
  Engine::GL.Clear(Engine::GL::DEPTH_BUFFER_BIT)
end