Module: Texel::GL

Defined in:
lib/texel/gl.rb

Defined Under Namespace

Classes: Format

Constant Summary collapse

CHANNEL_FORMATS =
{
  1 => :red,
  2 => :rg,
  3 => :rgb,
  4 => :rgba
}.freeze
INTERNAL_FORMATS =
{
  u8: { 1 => :r8, 2 => :rg8, 3 => :rgb8, 4 => :rgba8 },
  u16: { 1 => :r16, 2 => :rg16, 3 => :rgb16, 4 => :rgba16 },
  f32: { 1 => :r32f, 2 => :rg32f, 3 => :rgb32f, 4 => :rgba32f }
}.freeze
TYPES =
{ u8: :unsigned_byte, u16: :unsigned_short, f32: :float }.freeze

Class Method Summary collapse

Class Method Details

.format(image) ⇒ Object

Raises:



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/texel/gl.rb', line 23

def format(image)
  raise FormatError, "expected a Texel::Image" unless image.is_a?(Image)

  internal = INTERNAL_FORMATS.fetch(image.dtype).fetch(image.channels)
  internal = :srgb8 if image.dtype == :u8 && image.color_space == :srgb && image.channels == 3
  internal = :srgb8_alpha8 if image.dtype == :u8 && image.color_space == :srgb && image.channels == 4
  Format.new(
    internal_format: internal,
    format: CHANNEL_FORMATS.fetch(image.channels),
    type: TYPES.fetch(image.dtype)
  ).freeze
end