diff options
author | Masy98 <masy@antheruscraft.de> | 2014-09-26 18:32:31 +0200 |
---|---|---|
committer | Masy98 <masy@antheruscraft.de> | 2014-09-26 18:32:31 +0200 |
commit | 2feee3b316bf5cad87f9b9540c6b49f1775ada6e (patch) | |
tree | 7e508a2cc3d2c8586327e8074337da537cbbad5f /Tools/QtBiomeVisualiser/ChunkCache.h | |
parent | Added slime block to slime balls recipe (diff) | |
parent | Fixed issue with casting (diff) | |
download | cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.gz cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.bz2 cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.lz cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.xz cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.zst cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.zip |
Diffstat (limited to 'Tools/QtBiomeVisualiser/ChunkCache.h')
-rw-r--r-- | Tools/QtBiomeVisualiser/ChunkCache.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Tools/QtBiomeVisualiser/ChunkCache.h b/Tools/QtBiomeVisualiser/ChunkCache.h new file mode 100644 index 000000000..8d198f02f --- /dev/null +++ b/Tools/QtBiomeVisualiser/ChunkCache.h @@ -0,0 +1,72 @@ +#pragma once + +#include <QObject> +#include <QCache> +#include <QMutex> +#include <memory> + + + + + +class Chunk; +typedef std::shared_ptr<Chunk> ChunkPtr; + +class ChunkSource; + + + + + +/** Caches chunk data for reuse */ +class ChunkCache : + public QObject +{ + typedef QObject super; + Q_OBJECT + +public: + explicit ChunkCache(QObject * parent = NULL); + + /** Retrieves the specified chunk from the cache. + Only returns valid chunks; if the chunk is invalid, queues it for rendering and returns an empty ptr. */ + ChunkPtr fetch(int a_ChunkX, int a_ChunkZ); + + /** Replaces the chunk source used by the biome view to get the chunk biome data. + The cache is then invalidated. */ + void setChunkSource(std::shared_ptr<ChunkSource> a_ChunkSource); + + /** Returns true iff the chunk source has been initialized. */ + bool hasData() const { return (m_ChunkSource.get() != nullptr); } + + /** Reloads the current chunk source. */ + void reload(); + +signals: + void chunkAvailable(int a_ChunkX, int a_ChunkZ); + +protected slots: + void gotChunk(int a_ChunkX, int a_ChunkZ); + +protected: + /** The cache of the chunks */ + QCache<quint32, ChunkPtr> m_Cache; + + /** Locks te cache against multithreaded access */ + QMutex m_Mtx; + + /** The source used to get the biome data. */ + std::shared_ptr<ChunkSource> m_ChunkSource; + + + /** Returns the hash used by the chunk in the cache */ + quint32 getChunkHash(int a_ChunkX, int a_ChunkZ); + + /** Queues the specified chunk for rendering by m_ChunkSource. */ + void queueChunkRender(int a_ChunkX, int a_ChunkZ, ChunkPtr & a_Chunk); +}; + + + + + |