command 0x2A: TexImageParam

This commit is contained in:
red031000 2024-11-11 20:55:32 +02:00
parent 6e3a3e9011
commit 9b1787c162
No known key found for this signature in database
GPG Key ID: D27E50C050AE0CE1
3 changed files with 96 additions and 54 deletions

View File

@ -1,4 +1,4 @@
from .utils import error, read32, np_fixed_to_float, fixed_to_float, to_rgb, vec10_to_vec, PolygonMode, CullMode from .utils import error, read32, np_fixed_to_float, fixed_to_float, to_rgb, vec10_to_vec, PolygonMode, CullMode, TexturePalette0Mode, TextureFlip, TextureRepeat, TextureTSize, TextureSSize, TextureConversionMode, TextureFormat
from enum import IntEnum from enum import IntEnum
import numpy as np import numpy as np
@ -137,6 +137,12 @@ def parse_dl_command(data, offset, commandData, report_func):
polyAttr = DLCommandPolygonAttr() polyAttr = DLCommandPolygonAttr()
polyAttr.parse(attributes) polyAttr.parse(attributes)
commands.append(polyAttr) commands.append(polyAttr)
elif command == 0x2A:
attributes = read32(data, offset)
offset += 4
texImageParam = DLCommandTexImageParam()
texImageParam.parse(attributes)
commands.append(texImageParam)
#todo more commands #todo more commands
return commands, offset return commands, offset
@ -305,3 +311,39 @@ class DLCommandPolygonAttr(DLCommand):
self.depthTest = (attributes >> 14) & 0x1 != 0 self.depthTest = (attributes >> 14) & 0x1 != 0
self.fog = (attributes >> 15) & 0x1 != 0 self.fog = (attributes >> 15) & 0x1 != 0
class DLCommandTexImageParam(DLCommand):
def __init__(self):
super().__init__(0x2A)
self.texturePalette0Mode = TexturePalette0Mode.USE
self.textureFlip = TextureFlip.NONE
self.textureRepeat = TextureRepeat.NONE
self.textureTSize = TextureTSize.T8
self.textureSSize = TextureSSize.S8
self.textureConversionMode = TextureConversionMode.NONE
self.textureFormat = TextureFormat.NONE
self.textureAddress = 0
def parse(self, attributes):
texturePalette0Mode = (attributes >> 29) & 0x1
self.texturePalette0Mode = TexturePalette0Mode(texturePalette0Mode)
textureFlip = (attributes >> 18) & 0x3
self.textureFlip = TextureFlip(textureFlip)
textureRepeat = (attributes >> 16) & 0x3
self.textureRepeat = TextureRepeat(textureRepeat)
textureTSize = (attributes >> 23) & 0x7
self.textureTSize = TextureTSize(textureTSize)
textureSSize = (attributes >> 20) & 0x7
self.textureSSize = TextureSSize(textureSSize)
textureConversionMode = (attributes >> 30) & 0x3
self.textureConversionMode = TextureConversionMode(textureConversionMode)
textureFormat = (attributes >> 26) & 0x7
self.textureFormat = TextureFormat(textureFormat)
self.textureAddress = attributes & 0xFFFF

View File

@ -1,6 +1,6 @@
from enum import IntEnum, IntFlag from enum import IntEnum, IntFlag
from os.path import isfile from os.path import isfile
from .utils import read8, read16, read32, read_str, log, debug, parse_dictionary, fixed_to_float, to_rgb, PolygonMode, CullMode from .utils import read8, read16, read32, read_str, log, debug, parse_dictionary, fixed_to_float, to_rgb, PolygonMode, CullMode, TexturePalette0Mode, TextureFlip, TextureRepeat, TextureTSize, TextureSSize, TextureConversionMode, TextureFormat
from .g3_commands import parse_dl from .g3_commands import parse_dl
import numpy as np import numpy as np
@ -198,58 +198,6 @@ class NSBMDMaterialPolygonAttributes():
self.fog = (attributes >> 15) & 0x1 != 0 self.fog = (attributes >> 15) & 0x1 != 0
log('Fog: %s' % self.fog, report_func) log('Fog: %s' % self.fog, report_func)
class TextureFormat(IntEnum):
NONE = 0
A3I5 = 1
PLTT4 = 2
PLTT16 = 3
PLTT256 = 4
COMP4X4 = 5
A5I3 = 6
DIRECT = 7
class TextureConversionMode(IntEnum):
NONE = 0
TEXCOORD = 1
NORMAL = 2
VERTEX = 3
class TextureSSize(IntEnum):
S8 = 0
S16 = 1
S32 = 2
S64 = 3
S128 = 4
S256 = 5
S512 = 6
S1024 = 7
class TextureTSize(IntEnum):
T8 = 0
T16 = 1
T32 = 2
T64 = 3
T128 = 4
T256 = 5
T512 = 6
T1024 = 7
class TextureRepeat(IntEnum):
NONE = 0
S = 1
T = 2
ST = 3
class TextureFlip(IntEnum):
NONE = 0
S = 1
T = 2
ST = 3
class TexturePalette0Mode(IntEnum):
USE = 0
TRANSPARENT = 1
class NSBMDMaterialTextureImageParameters(): class NSBMDMaterialTextureImageParameters():
def __init__(self): def __init__(self):
self.address = 0 self.address = 0

View File

@ -77,3 +77,55 @@ class CullMode(IntEnum):
FRONT = 1 FRONT = 1
BACK = 2 BACK = 2
BOTH = 3 BOTH = 3
class TexturePalette0Mode(IntEnum):
USE = 0
TRANSPARENT = 1
class TextureFlip(IntEnum):
NONE = 0
S = 1
T = 2
ST = 3
class TextureRepeat(IntEnum):
NONE = 0
S = 1
T = 2
ST = 3
class TextureTSize(IntEnum):
T8 = 0
T16 = 1
T32 = 2
T64 = 3
T128 = 4
T256 = 5
T512 = 6
T1024 = 7
class TextureSSize(IntEnum):
S8 = 0
S16 = 1
S32 = 2
S64 = 3
S128 = 4
S256 = 5
S512 = 6
S1024 = 7
class TextureConversionMode(IntEnum):
NONE = 0
TEXCOORD = 1
NORMAL = 2
VERTEX = 3
class TextureFormat(IntEnum):
NONE = 0
A3I5 = 1
PLTT4 = 2
PLTT16 = 3
PLTT256 = 4
COMP4X4 = 5
A5I3 = 6
DIRECT = 7