From 2e2bbaff0d49705dad41f2d93ca1a9b2b2cee485 Mon Sep 17 00:00:00 2001 From: kurethedead Date: Thu, 27 Feb 2020 13:35:33 -0800 Subject: [PATCH] Added newlines to group includes, added prefix to material_revert_render_settings. Added enum option instead of boolean for dynamic/static display lists in order to add option for material dynamic display lists. --- fast64_internal/f3d_gbi.py | 55 +++++++++++++----------- fast64_internal/f3d_writer.py | 6 +-- fast64_internal/sm64_geolayout_writer.py | 12 +++--- fast64_internal/sm64_level_writer.py | 6 +-- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/fast64_internal/f3d_gbi.py b/fast64_internal/f3d_gbi.py index 85fd1f6..1bc48e5 100644 --- a/fast64_internal/f3d_gbi.py +++ b/fast64_internal/f3d_gbi.py @@ -6,6 +6,12 @@ import os from .utility import getNameFromPath, PluginError import copy +dlTypeEnum = [ + ('STATIC', "Static", "Static"), + ('MATERIAL', 'Dynamic Material', 'Dynamic Material'), + ('PROCEDURAL', 'Procedural', 'Procedural'), +] + lightIndex = { 'LIGHT_1' : 1, 'LIGHT_2' : 2, @@ -1550,21 +1556,22 @@ class FModel: if self.materialRevert is not None: self.materialRevert.save_binary(romfile, self.f3d, segments) - def to_c(self, static): + # See dlTypeEnum at top of f3d_gbi.py + def to_c(self, dlType): data = '' for name, light in self.lights.items(): data += light.to_c() + '\n' for info, texture in self.textures.items(): data += texture.to_c() + '\n' for (material, drawLayer), (fMaterial, texDimensions) in self.materials.items(): - data += fMaterial.to_c(static) + '\n' + data += fMaterial.to_c(dlType == 'STATIC') + '\n' for name, meshGroup in self.meshGroups.items(): - data += meshGroup.to_c(static) + '\n' + data += meshGroup.to_c(dlType) + '\n' if self.materialRevert is not None: - data += self.materialRevert.to_c(static) + '\n' + data += self.materialRevert.to_c(dlType == 'STATIC') + '\n' return data - def save_c_tex_separate(self, static, texDir, dirpath, texSeparate, texFileName): + def save_c_tex_separate(self, dlType, texDir, dirpath, texSeparate, texFileName): data = '' texC = '' @@ -1604,11 +1611,11 @@ class FModel: image.filepath = oldpath for (material, drawLayer), (fMaterial, texDimensions) in self.materials.items(): - data += fMaterial.to_c(static) + '\n' + data += fMaterial.to_c(dlType == 'STATIC') + '\n' for name, meshGroup in self.meshGroups.items(): - data += meshGroup.to_c(static) + '\n' + data += meshGroup.to_c(dlType) + '\n' if self.materialRevert is not None: - data += self.materialRevert.to_c(static) + '\n' + data += self.materialRevert.to_c(dlType == 'STATIC') + '\n' modelPath = os.path.join(dirpath, 'model.inc.c') modelFile = open(modelPath, 'w') @@ -1629,14 +1636,14 @@ class FModel: if texInfo[1] == 'PAL': bpy.data.images.remove(image) - def to_c_def(self, static): + def to_c_def(self, dlType): data = '' #for (material, drawLayer), (fMaterial, texDimensions) in self.materials.items(): # data += fMaterial.to_c_def(static) for name, meshGroup in self.meshGroups.items(): - data += meshGroup.to_c_def(static) + data += meshGroup.to_c_def(dlType) if self.materialRevert is not None: - data += self.materialRevert.to_c_def(static) + data += self.materialRevert.to_c_def(dlType == 'STATIC') return data + '\n' class FMeshGroup: @@ -1672,20 +1679,20 @@ class FMeshGroup: if self.skinnedMesh is not None: self.skinnedMesh.save_binary(romfile, f3d, segments) - def to_c(self, static): + def to_c(self, dlType): data = "" if self.mesh is not None: - data += self.mesh.to_c(static) + '\n' + data += self.mesh.to_c(dlType) + '\n' if self.skinnedMesh is not None: - data += self.skinnedMesh.to_c(static) + '\n' + data += self.skinnedMesh.to_c(dlType) + '\n' return data - def to_c_def(self, static): + def to_c_def(self, dlType): data = "" if self.mesh is not None: - data += self.mesh.to_c_def(static) + data += self.mesh.to_c_def(dlType) if self.skinnedMesh is not None: - data += self.skinnedMesh.to_c_def(static) + data += self.skinnedMesh.to_c_def(dlType) return data class FMesh: @@ -1732,21 +1739,21 @@ class FMesh: for materialTuple, drawOverride in self.drawMatOverrides.items(): drawOverride.save_binary(romfile, f3d, segments) - def to_c(self, static): + def to_c(self, dlType): data = self.vertexList.to_c() + '\n' for triangleList in self.triangleLists: - data += triangleList.to_c(static) + '\n' - data += self.draw.to_c(static) + '\n' + data += triangleList.to_c(dlType != 'PROCEDURAL') + '\n' + data += self.draw.to_c(dlType == 'STATIC') + '\n' for materialTuple, drawOverride in self.drawMatOverrides.items(): - data += drawOverride.to_c(static) + '\n' + data += drawOverride.to_c(dlType == 'STATIC') + '\n' return data - def to_c_def(self, static): - data = self.draw.to_c_def(static) + def to_c_def(self, dlType): + data = self.draw.to_c_def(dlType == 'STATIC') #for triangleList in self.triangleLists: # data += triangleList.to_c_def(static) for materialTuple, drawOverride in self.drawMatOverrides.items(): - data += drawOverride.to_c_def(static) + data += drawOverride.to_c_def(dlType == 'STATIC') return data class FMaterial: diff --git a/fast64_internal/f3d_writer.py b/fast64_internal/f3d_writer.py index cb5069e..377eda2 100644 --- a/fast64_internal/f3d_writer.py +++ b/fast64_internal/f3d_writer.py @@ -184,19 +184,19 @@ def exportF3DtoC(dirPath, obj, isStatic, transformMatrix, os.mkdir(modelDirPath) if savePNG: - fModel.save_c_tex_separate(isStatic, texDir, modelDirPath, texSeparate, 'texture.inc.c') + fModel.save_c_tex_separate("STATIC" if isStatic else "PROCEDURAL", texDir, modelDirPath, texSeparate, 'texture.inc.c') fModel.freePalettes() else: fModel.freePalettes() modelPath = os.path.join(modelDirPath, 'model.inc.c') - data = fModel.to_c(isStatic) + data = fModel.to_c("STATIC" if isStatic else "PROCEDURAL") outFile = open(modelPath, 'w') outFile.write(data) outFile.close() headerPath = os.path.join(modelDirPath, 'header.h') - cDefine = fModel.to_c_def(isStatic) + cDefine = fModel.to_c_def("STATIC" if isStatic else "PROCEDURAL") cDefFile = open(headerPath, 'w') cDefFile.write(cDefine) cDefFile.close() diff --git a/fast64_internal/sm64_geolayout_writer.py b/fast64_internal/sm64_geolayout_writer.py index a060f32..971e88b 100644 --- a/fast64_internal/sm64_geolayout_writer.py +++ b/fast64_internal/sm64_geolayout_writer.py @@ -65,7 +65,7 @@ def getCameraObj(camera): ' is no longer in the scene.') def appendRevertToGeolayout(geolayoutGraph, fModel): - fModel.materialRevert = GfxList('material_revert_render_settings') + fModel.materialRevert = GfxList(fModel.name + "_" + 'material_revert_render_settings') revertMatAndEndDraw(fModel.materialRevert, [DPSetEnvColor(0xFF, 0xFF, 0xFF, 0xFF), DPSetAlphaCompare("G_AC_NONE")]) @@ -191,12 +191,12 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG, os.mkdir(geoDirPath) if savePNG: - fModel.save_c_tex_separate(True, texDir, geoDirPath, texSeparate, 'texture.inc.c') + fModel.save_c_tex_separate("STATIC", texDir, geoDirPath, texSeparate, 'texture.inc.c') fModel.freePalettes() else: fModel.freePalettes() modelPath = os.path.join(geoDirPath, 'model.inc.c') - dlData = fModel.to_c(True) + dlData = fModel.to_c("STATIC") dlFile = open(modelPath, 'w') dlFile.write(dlData) dlFile.close() @@ -204,7 +204,7 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG, # group.c include if groupName is not None: groupPathC = os.path.join(dirPath, groupName + ".c") - writeIfNotFound(groupPathC, '#include "' + dirName + '/model.inc.c"', False) + writeIfNotFound(groupPathC, '#include "' + dirName + '/model.inc.c"\n', False) geoPath = os.path.join(geoDirPath, 'geo.inc.c') geoData = geolayoutGraph.to_c() @@ -215,7 +215,7 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG, # group_geo.c include if groupName is not None: groupPathGeoC = os.path.join(dirPath, groupName + "_geo.c") - writeIfNotFound(groupPathGeoC, '#include "' + dirName + '/geo.inc.c"', False) + writeIfNotFound(groupPathGeoC, '#include "' + dirName + '/geo.inc.c"\n', False) cDefine = geolayoutGraph.to_c_def() + fModel.to_c_def(True) if writeDefinitionsFile: @@ -227,7 +227,7 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG, # group.h declaration if groupName is not None: groupPathH = os.path.join(dirPath, groupName + ".h") - writeIfNotFound(groupPathH, '#include "' + dirName + '/geo_declarations.h"', True) + writeIfNotFound(groupPathH, '#include "' + dirName + '/geo_declarations.h"\n', True) return cDefine diff --git a/fast64_internal/sm64_level_writer.py b/fast64_internal/sm64_level_writer.py index c9d34c1..8030f66 100644 --- a/fast64_internal/sm64_level_writer.py +++ b/fast64_internal/sm64_level_writer.py @@ -96,18 +96,18 @@ def exportLevelC(obj, transformMatrix, f3dType, isHWv1, levelName, exportDir, shutil.rmtree(os.path.join(levelDir, f)) if savePNG: - fModel.save_c_tex_separate(True, 'levels/' + levelName, levelDir, True, 'texture_include.inc.c') + fModel.save_c_tex_separate("STATIC", 'levels/' + levelName, levelDir, True, 'texture_include.inc.c') fModel.freePalettes() else: fModel.freePalettes() modelPath = os.path.join(levelDir, 'model.inc.c') - dlData = fModel.to_c(True) + dlData = fModel.to_c("STATIC") dlFile = open(modelPath, 'w') dlFile.write(dlData) dlFile.close() levelDataString += '#include "levels/' + levelName + '/model.inc.c"\n' - headerString += fModel.to_c_def(True) + headerString += fModel.to_c_def("STATIC") #headerString += '\nextern const LevelScript level_' + levelName + '_entry[];\n' #headerString += '\n#endif\n'