Class: Vizcore::DSL::ShaderSourceResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/vizcore/dsl/shader_source_resolver.rb

Overview

Replaces external layer source paths with browser-ready inline payloads.

Constant Summary collapse

MEDIA_MIME_TYPES =
{
  ".gif" => "image/gif",
  ".jpg" => "image/jpeg",
  ".jpeg" => "image/jpeg",
  ".png" => "image/png",
  ".svg" => "image/svg+xml",
  ".webp" => "image/webp",
  ".mp4" => "video/mp4",
  ".ogv" => "video/ogg",
  ".webm" => "video/webm"
}.freeze

Instance Method Summary collapse

Instance Method Details

#resolve(definition:, scene_file:) ⇒ Hash

Returns deep-copied definition with resolved layer source entries.

Parameters:

  • definition (Hash)

    DSL definition payload

  • scene_file (String, Pathname)

    source scene file

Returns:

  • (Hash)

    deep-copied definition with resolved layer source entries

Raises:

  • (ArgumentError)

    when a referenced source file is missing



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/vizcore/dsl/shader_source_resolver.rb', line 26

def resolve(definition:, scene_file:)
  scene_path = Pathname.new(scene_file.to_s).expand_path
  base_dir = scene_path.dirname
  output = deep_dup(definition)
  output[:scenes] = Array(output[:scenes]).map do |scene|
    scene_hash = symbolize_hash(scene)
    scene_hash[:layers] = Array(scene_hash[:layers]).map do |layer|
      resolve_layer(layer, base_dir: base_dir)
    end
    scene_hash
  end
  output
end