Class: Rgltf::BufferResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/rgltf/buffer_resolver.rb

Constant Summary collapse

DATA_URI_PATTERN =
/\Adata:([^,]*?),(.*)\z/m

Instance Method Summary collapse

Constructor Details

#initialize(base_dir:, glb_bin: nil, supplied_buffers: nil) ⇒ BufferResolver

Returns a new instance of BufferResolver.



9
10
11
12
13
14
# File 'lib/rgltf/buffer_resolver.rb', line 9

def initialize(base_dir:, glb_bin: nil, supplied_buffers: nil)
  @base_dir = base_dir && File.expand_path(base_dir)
  @glb_bin = glb_bin&.b
  @supplied_buffers = supplied_buffers
  @cache = {}
end

Instance Method Details

#release!Object



28
29
30
31
32
# File 'lib/rgltf/buffer_resolver.rb', line 28

def release!
  @cache.clear
  @glb_bin = nil
  @supplied_buffers = nil
end

#resolve(buffer) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/rgltf/buffer_resolver.rb', line 16

def resolve(buffer)
  return @cache[buffer.index] if @cache.key?(buffer.index)

  bytes = supplied(buffer.index) || resolve_uri(buffer)
  if bytes.bytesize < buffer.byte_length
    raise FormatError,
          "buffer #{buffer.index} is shorter than byteLength (#{bytes.bytesize} < #{buffer.byte_length})"
  end

  @cache[buffer.index] = bytes.b.freeze
end

#resolve_resource(uri) ⇒ Object



34
35
36
37
38
# File 'lib/rgltf/buffer_resolver.rb', line 34

def resolve_resource(uri)
  return decode_data_uri(uri) if uri.start_with?('data:')

  resolve_external(uri)
end