From 0136cc1eba7079e27543011a26b5b8dce9158b4c Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Fri, 31 Dec 2010 17:59:14 -0500 Subject: [PATCH 1/4] changed textures.py to use global declarations instead of sys.modules[__name__] --- textures.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/textures.py b/textures.py index 499ce6f..a019037 100644 --- a/textures.py +++ b/textures.py @@ -749,42 +749,46 @@ def prepareLeafTexture(color): currentBiomeFile = None currentBiomeData = None +grasscolor = None +foliagecolor = None def prepareBiomeData(worlddir): biomeDir = os.path.join(worlddir, "EXTRACTEDBIOMES") if not os.path.exists(biomeDir): raise Exception("EXTRACTEDBIOMES not found") - t = sys.modules[__name__] + global grasscolor, foliagecolor # try to find the biome color images. If _find_file can't locate them # then try looking in the EXTRACTEDBIOMES folder try: - t.grasscolor = list(Image.open(_find_file("grasscolor.png")).getdata()) - t.foliagecolor = list(Image.open(_find_file("foliagecolor.png")).getdata()) + grasscolor = list(Image.open(_find_file("grasscolor.png")).getdata()) + foliagecolor = list(Image.open(_find_file("foliagecolor.png")).getdata()) except IOError: try: - t.grasscolor = list(Image.open(os.path.join(biomeDir,"grasscolor.png")).getdata()) - t.foliagecolor = list(Image.open(os.path.join(biomeDir,"foliagecolor.png")).getdata()) + grasscolor = list(Image.open(os.path.join(biomeDir,"grasscolor.png")).getdata()) + foliagecolor = list(Image.open(os.path.join(biomeDir,"foliagecolor.png")).getdata()) except: - t.grasscolor = None - t.foliagecolor = None + # clear anything that managed to get set + grasscolor = None + foliagecolor = None def getBiomeData(worlddir, chunkX, chunkY): '''Opens the worlddir and reads in the biome color information from the .biome files. See also: http://www.minecraftforum.net/viewtopic.php?f=25&t=80902 ''' - t = sys.modules[__name__] + + global currentBiomeFile, currentBiomeData biomeFile = "%d.%d.biome" % ( int(math.floor(chunkX/8)*8), int(math.floor(chunkY/8)*8) ) - if biomeFile == t.currentBiomeFile: + if biomeFile == currentBiomeFile: return currentBiomeData - t.currentBiomeFile = biomeFile + currentBiomeFile = biomeFile f = open(os.path.join(worlddir, "EXTRACTEDBIOMES", biomeFile), "rb") rawdata = f.read() @@ -792,7 +796,7 @@ def getBiomeData(worlddir, chunkX, chunkY): data = numpy.frombuffer(rawdata, dtype=numpy.dtype(">u2")) - t.currentBiomeData = data + currentBiomeData = data return data # This set holds block ids that require special pre-computing. These are typically From b2d8c415caea0f2dc70ba119901d281b274cf0ff Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Sat, 1 Jan 2011 15:43:45 -0800 Subject: [PATCH 2/4] added check to textures.py prepareBiomeData so it will only run once per process --- textures.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/textures.py b/textures.py index a019037..4c93b98 100644 --- a/textures.py +++ b/textures.py @@ -753,12 +753,16 @@ grasscolor = None foliagecolor = None def prepareBiomeData(worlddir): + global grasscolor, foliagecolor + + # skip if the color files are already loaded + if grasscolor and foliagecolor: + return + biomeDir = os.path.join(worlddir, "EXTRACTEDBIOMES") if not os.path.exists(biomeDir): raise Exception("EXTRACTEDBIOMES not found") - global grasscolor, foliagecolor - # try to find the biome color images. If _find_file can't locate them # then try looking in the EXTRACTEDBIOMES folder try: From 0ab56ce1d9db4f7686ffd450c7c7287705679919 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Sat, 1 Jan 2011 15:45:36 -0800 Subject: [PATCH 3/4] made sure biome color arrays are loaded in each thread --- chunk.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/chunk.py b/chunk.py index b3e702c..573fbb5 100644 --- a/chunk.py +++ b/chunk.py @@ -211,6 +211,8 @@ class ChunkRenderer(object): if self.world.useBiomeData: + # make sure we've at least *tried* to load the color arrays in this process... + textures.prepareBiomeData(self.world.worlddir) if not textures.grasscolor or not textures.foliagecolor: raise Exception("Can't find grasscolor.png or foliagecolor.png") From c43e7c0dbf6f5037f73e5fdf5cf5d3711cb36714 Mon Sep 17 00:00:00 2001 From: Aaron Griffith Date: Sat, 1 Jan 2011 19:00:44 -0500 Subject: [PATCH 4/4] alpha_over warning will now only print once per run --- composite.py | 2 +- gmap.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/composite.py b/composite.py index 45719a9..abe5562 100644 --- a/composite.py +++ b/composite.py @@ -28,7 +28,7 @@ try: from _composite import alpha_over as _extension_alpha_over extension_alpha_over = _extension_alpha_over except ImportError: - logging.warning("alpha_over extension not found; using default PIL paste()") + pass def alpha_over(dest, src, pos_or_rect=(0, 0), mask=None): """Composite src over dest, using mask as the alpha channel (if diff --git a/gmap.py b/gmap.py index 8a41c40..51d97bc 100755 --- a/gmap.py +++ b/gmap.py @@ -28,6 +28,7 @@ import multiprocessing import time import logging import optimizeimages +import composite logging.basicConfig(level=logging.INFO,format="%(asctime)s [%(levelname)s] %(message)s") @@ -118,6 +119,8 @@ def main(): logging.info("Welcome to Minecraft Overviewer!") logging.debug("Current log level: {0}".format(logging.getLogger().level)) + if not composite.extension_alpha_over: + logging.info("Notice: alpha_over extension not found; using default PIL paste()") useBiomeData = os.path.exists(os.path.join(worlddir, 'EXTRACTEDBIOMES')) if not useBiomeData: