from __future__ import division
-
+import copy
VOID, UNSIGNED, SIGNED, FIXED, FLOAT = range(5)
self.block_width = block_width
self.block_height = block_height
self.block_depth = block_depth
+ self.colorspace = colorspace
+
self.le_channels = le_channels
self.le_swizzles = le_swizzles
- self.be_channels = be_channels
- self.be_swizzles = be_swizzles
- self.colorspace = colorspace
+
+ le_shift = 0
+ for channel in self.le_channels:
+ channel.shift = le_shift
+ le_shift += channel.size
+
+ if be_channels:
+ self.be_channels = be_channels
+ self.be_swizzles = be_swizzles
+ else:
+ self.be_channels = copy.deepcopy(le_channels)
+ self.be_swizzles = le_swizzles
+
+ be_shift = 0
+ for channel in self.be_channels[3::-1]:
+ channel.shift = be_shift
+ be_shift += channel.size
+
+ assert le_shift == be_shift
+ for i in range(4):
+ assert (self.le_swizzles[i] != SWIZZLE_NONE) == (
+ self.be_swizzles[i] != SWIZZLE_NONE)
def __str__(self):
return self.name
continue
fields = [field.strip() for field in line.split(',')]
- if len (fields) == 11:
- fields += fields[5:10]
- assert len (fields) == 16
+ assert(len(fields) == 11 or len(fields) == 16)
name = fields[0]
layout = fields[1]
le_swizzles = [_swizzle_parse_map[swizzle] for swizzle in fields[9]]
le_channels = _parse_channels(fields[5:9], layout, colorspace, le_swizzles)
- be_swizzles = [_swizzle_parse_map[swizzle] for swizzle in fields[15]]
- be_channels = _parse_channels(fields[11:15], layout, colorspace, be_swizzles)
+ be_swizzles = None
+ be_channels = None
+ if len(fields) == 16:
+ be_swizzles = [_swizzle_parse_map[swizzle]
- le_shift = 0
- for channel in le_channels:
- channel.shift = le_shift
- le_shift += channel.size
+ for swizzle in fields[15]]
+ be_channels = _parse_channels(
- be_shift = 0
- for channel in be_channels[3::-1]:
- channel.shift = be_shift
- be_shift += channel.size
-
- assert le_shift == be_shift
- for i in range(4):
- assert (le_swizzles[i] != SWIZZLE_NONE) == (be_swizzles[i] != SWIZZLE_NONE)
+ fields[11:15], layout, colorspace, be_swizzles)
format = Format(name, layout, block_width, block_height, block_depth, le_channels, le_swizzles, be_channels, be_swizzles, colorspace)
formats.append(format)