diff --git a/chunk.py b/chunk.py index ecfda39..13a387b 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") 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: diff --git a/textures.py b/textures.py index 499ce6f..4c93b98 100644 --- a/textures.py +++ b/textures.py @@ -749,42 +749,50 @@ def prepareLeafTexture(color): currentBiomeFile = None currentBiomeData = None +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") - t = sys.modules[__name__] - # 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 +800,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