Add Support for Geometry Node Cache #92890
@ -3,6 +3,10 @@
|
||||
This file logs the changes that are actually interesting to users (new features,
|
||||
changed functionality, fixed bugs).
|
||||
|
||||
# Version 1.19 (in development)
|
||||
|
||||
- Add support for tracing dynamic paint caches ([#92889](https://projects.blender.org/blender/blender-asset-tracer/pulls/92889)).
|
||||
|
||||
# Version 1.18 (2024-01-11)
|
||||
|
||||
- When logging that there is no reader implemented for a certain data-block type, the filepath of the blend file that contains that data-block is now included in the message ([#92885](https://projects.blender.org/blender/blender-asset-tracer/pulls/92885)).
|
||||
|
@ -260,6 +260,7 @@ class Struct:
|
||||
b"short": endian.read_short,
|
||||
b"uint64_t": endian.read_ulong,
|
||||
b"float": endian.read_float,
|
||||
b"int8_t": endian.read_int8,
|
||||
}
|
||||
try:
|
||||
simple_reader = simple_readers[dna_type.dna_type_id]
|
||||
|
@ -28,6 +28,7 @@ import typing
|
||||
class EndianIO:
|
||||
# TODO(Sybren): note as UCHAR: struct.Struct = None and move actual structs to LittleEndianTypes
|
||||
UCHAR = struct.Struct(b"<B")
|
||||
SINT8 = struct.Struct(b"<b")
|
||||
USHORT = struct.Struct(b"<H")
|
||||
USHORT2 = struct.Struct(b"<HH") # two shorts in a row
|
||||
SSHORT = struct.Struct(b"<h")
|
||||
@ -62,6 +63,14 @@ class EndianIO:
|
||||
def write_char(cls, fileobj: typing.IO[bytes], value: int):
|
||||
return cls._write(fileobj, cls.UCHAR, value)
|
||||
|
||||
@classmethod
|
||||
def read_int8(cls, fileobj: typing.IO[bytes]):
|
||||
return cls._read(fileobj, cls.SINT8)
|
||||
|
||||
@classmethod
|
||||
def write_int8(cls, fileobj: typing.IO[bytes], value: int):
|
||||
return cls._write(fileobj, cls.SINT8, value)
|
||||
|
||||
@classmethod
|
||||
def read_ushort(cls, fileobj: typing.IO[bytes]):
|
||||
return cls._read(fileobj, cls.USHORT)
|
||||
@ -207,6 +216,7 @@ class EndianIO:
|
||||
"""
|
||||
return {
|
||||
b"char": cls.write_char,
|
||||
b"int8": cls.write_int8,
|
||||
b"ushort": cls.write_ushort,
|
||||
b"short": cls.write_short,
|
||||
b"uint": cls.write_uint,
|
||||
@ -222,6 +232,7 @@ class LittleEndianTypes(EndianIO):
|
||||
|
||||
class BigEndianTypes(LittleEndianTypes):
|
||||
UCHAR = struct.Struct(b">B")
|
||||
SINT8 = struct.Struct(b">b")
|
||||
USHORT = struct.Struct(b">H")
|
||||
USHORT2 = struct.Struct(b">HH") # two shorts in a row
|
||||
SSHORT = struct.Struct(b">h")
|
||||
|
@ -46,6 +46,7 @@ eModifierType_WeightVGEdit = 36
|
||||
eModifierType_WeightVGMix = 37
|
||||
eModifierType_WeightVGProximity = 38
|
||||
eModifierType_Ocean = 39
|
||||
eModifierType_DynamicPaint = 40
|
||||
eModifierType_MeshCache = 46
|
||||
eModifierType_MeshSequenceCache = 52
|
||||
eModifierType_Fluid = 56
|
||||
|
@ -320,6 +320,39 @@ def modifier_cloth(
|
||||
)
|
||||
|
||||
|
||||
@mod_handler(cdefs.eModifierType_DynamicPaint)
|
||||
def modifier_dynamic_paint(
|
||||
ctx: ModifierContext, modifier: blendfile.BlendFileBlock, block_name: bytes
|
||||
) -> typing.Iterator[result.BlockUsage]:
|
||||
my_log = log.getChild("modifier_dynamic_paint")
|
||||
|
||||
canvas_settings = modifier.get_pointer(b"canvas")
|
||||
if canvas_settings is None:
|
||||
my_log.debug(
|
||||
"Modifier %r (%r) has no canvas_settings",
|
||||
modifier[b"modifier", b"name"],
|
||||
block_name,
|
||||
)
|
||||
return
|
||||
|
||||
surfaces = canvas_settings.get_pointer((b"surfaces", b"first"))
|
||||
|
||||
for surf_idx, surface in enumerate(blendfile.iterators.listbase(surfaces)):
|
||||
surface_block_name = block_name + b".canvas_settings.surfaces[%d]" % (surf_idx)
|
||||
point_cache = surface.get_pointer(b"pointcache")
|
||||
if point_cache is None:
|
||||
my_log.debug(
|
||||
"Surface %r (%r) has no pointcache",
|
||||
surface[b"surface", b"name"],
|
||||
surface_block_name,
|
||||
)
|
||||
continue
|
||||
|
||||
yield from _walk_point_cache(
|
||||
ctx, surface_block_name, modifier.bfile, point_cache, cdefs.PTCACHE_EXT
|
||||
)
|
||||
|
||||
|
||||
@mod_handler(cdefs.eModifierType_Nodes)
|
||||
def modifier_nodes(
|
||||
ctx: ModifierContext, modifier: blendfile.BlendFileBlock, block_name: bytes
|
||||
|
1610
poetry.lock
generated
1610
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user