From 864990429d956065f54b027df96aa57615eba304 Mon Sep 17 00:00:00 2001 From: David Vierra Date: Sun, 4 Jan 2015 10:53:31 -1000 Subject: [PATCH] Only cook quads when needed - speeds up world list --- src/mcedit2/rendering/blockmodels.pyx | 7 ++++++- src/mcedit2/rendering/modelmesh.pyx | 5 ++++- src/mcedit2/rendering/textureatlas.py | 2 -- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/mcedit2/rendering/blockmodels.pyx b/src/mcedit2/rendering/blockmodels.pyx index dd46fba..b477f71 100644 --- a/src/mcedit2/rendering/blockmodels.pyx +++ b/src/mcedit2/rendering/blockmodels.pyx @@ -54,6 +54,7 @@ class BlockModels(object): self.firstTextures = {} # first texture found for each block - used for icons (xxx) self.cookedModels = {} # nameAndState -> list[(xyzuvc, cullface)] self.cookedModelsByID = numpy.zeros((256*16, 16), dtype=list) # (id, meta) -> list[(xyzuvc, cullface)] + self.cooked = False for i, block in enumerate(blocktypes): if i % 100 == 0: @@ -215,6 +216,9 @@ class BlockModels(object): return iter(self._textureNames) def cookQuads(self, textureAtlas): + if self.cooked: + return + log.info("Cooking quads for %d models...", len(self.modelQuads)) cookedModels = {} cdef int l, t, w, h cdef int u1, u2, v1, v2 @@ -269,8 +273,9 @@ class BlockModels(object): cookedModels[nameAndState] = cookedQuads ID, meta = self.blocktypes.IDsByState[nameAndState] self.cookedModelsByID[ID, meta] = cookedQuads - + self.cookedModels = cookedModels + self.cooked = True def rotateVertices(self, rotation, variantXrot, variantYrot, variantZrot, xyzuvc): if rotation is not None: diff --git a/src/mcedit2/rendering/modelmesh.pyx b/src/mcedit2/rendering/modelmesh.pyx index 004352e..d25dc2b 100644 --- a/src/mcedit2/rendering/modelmesh.pyx +++ b/src/mcedit2/rendering/modelmesh.pyx @@ -39,7 +39,10 @@ class BlockModelMesh(object): if section is None: return - blockModels = self.sectionUpdate.chunkUpdate.updateTask.textureAtlas.blockModels + atlas = self.sectionUpdate.chunkUpdate.updateTask.textureAtlas + blockModels = atlas.blockModels + blockModels.cookQuads(atlas) + blocktypes = self.sectionUpdate.blocktypes areaBlocks = self.sectionUpdate.areaBlocks data = section.Data diff --git a/src/mcedit2/rendering/textureatlas.py b/src/mcedit2/rendering/textureatlas.py index aa56522..6e67457 100644 --- a/src/mcedit2/rendering/textureatlas.py +++ b/src/mcedit2/rendering/textureatlas.py @@ -200,8 +200,6 @@ class TextureAtlas(object): usedSize = sum(sum(width * height for _, _, _, width, height, _ in slot.textures) for slot in slots) * 4 log.info("Terrain atlas created for world %s (%d/%d kB)", util.displayName(self._filename), usedSize / 1024, totalSize / 1024) - if self.overrideMaxSize is None: - self.blockModels.cookQuads(self) #file("terrain-%sw-%sh.raw" % (atlasWidth, atlasHeight), "wb").write(texData.tostring()) #raise SystemExit