Source code for scfile.structures.textures

"""
Data structures for textures.
"""

from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from typing import TypeVar

from scfile.consts import CubemapFaces


[docs] @dataclass class Texture(ABC): """Base class for texture data.""" @property @abstractmethod def image(self) -> bytes: ... @property @abstractmethod def linear_size(self) -> int: ...
TextureType = TypeVar("TextureType", bound=Texture)
[docs] @dataclass class DefaultTexture(Texture): """Standard 2D texture with mipmaps.""" uncompressed: list[int] = field(default_factory=list) compressed: list[int] = field(default_factory=list) mipmaps: list[bytes] = field(default_factory=list) @property def image(self): return b"".join(self.mipmaps) @property def linear_size(self): return self.uncompressed[0]
[docs] @dataclass class CubemapTexture(Texture): """Cubemap texture with face separated mipmaps.""" uncompressed: list[list[int]] = field(default_factory=list) compressed: list[list[int]] = field(default_factory=list) faces: list[list[bytes]] = field(default_factory=lambda: [[] for _ in range(CubemapFaces.COUNT)]) @property def image(self): return b"".join(b"".join(face) for face in self.faces) @property def linear_size(self): return self.uncompressed[0][0]