Do not use padding for temporal VIIRS for faster loading

This commit is contained in:
Kalle Bladin
2017-08-08 15:49:27 +02:00
parent 1265de0d50
commit 559a8063bc
11 changed files with 33 additions and 18 deletions

View File

@@ -143,7 +143,7 @@ void MemoryAwareTileCache::clear() {
void MemoryAwareTileCache::createDefaultTextureContainers() {
for (int id = 0; id < layergroupid::NUM_LAYER_GROUPS; id++) {
TileTextureInitData initData =
LayerManager::getTileTextureInitData(layergroupid::GroupID(id));
LayerManager::getTileTextureInitData(layergroupid::GroupID(id), true);
assureTextureContainerExists(initData);
}
}

View File

@@ -40,6 +40,7 @@ namespace {
const char* keySettings = "Settings";
const char* keyAdjustment = "Adjustment";
const char* KeyBlendMode = "BlendMode";
const char* KeyPadTiles = "PadTiles";
static const openspace::properties::Property::PropertyInfo TypeInfo = {
"Type",
@@ -104,7 +105,11 @@ Layer::Layer(layergroupid::GroupID id, const ghoul::Dictionary& layerDict)
layerDict.getValue(keyEnabled, enabled);
_enabled.setValue(enabled);
TileTextureInitData initData = LayerManager::getTileTextureInitData(_layerGroupId);
bool padTiles = true;
layerDict.getValue<bool>(KeyPadTiles, padTiles);
TileTextureInitData initData = LayerManager::getTileTextureInitData(_layerGroupId,
padTiles);
_padTilePixelStartOffset = initData.tilePixelStartOffset();
_padTilePixelSizeDifference = initData.tilePixelSizeDifference();

View File

@@ -117,6 +117,7 @@ void LayerManager::reset(bool includeDisabled) {
}
TileTextureInitData LayerManager::getTileTextureInitData(layergroupid::GroupID id,
bool padTiles,
size_t preferredTileSize)
{
switch (id) {
@@ -124,34 +125,34 @@ TileTextureInitData LayerManager::getTileTextureInitData(layergroupid::GroupID i
size_t tileSize = preferredTileSize ? preferredTileSize : 64;
return TileTextureInitData(tileSize, tileSize, GL_FLOAT,
ghoul::opengl::Texture::Format::Red,
true,
padTiles,
TileTextureInitData::ShouldAllocateDataOnCPU::Yes);
}
case layergroupid::GroupID::ColorLayers: {
size_t tileSize = preferredTileSize ? preferredTileSize : 512;
return TileTextureInitData(tileSize, tileSize, GL_UNSIGNED_BYTE,
ghoul::opengl::Texture::Format::BGRA, false);
ghoul::opengl::Texture::Format::BGRA, padTiles);
}
case layergroupid::GroupID::Overlays: {
size_t tileSize = preferredTileSize ? preferredTileSize : 512;
return TileTextureInitData(tileSize, tileSize, GL_UNSIGNED_BYTE,
ghoul::opengl::Texture::Format::BGRA, false);
ghoul::opengl::Texture::Format::BGRA, padTiles);
}
case layergroupid::GroupID::NightLayers: {
size_t tileSize = preferredTileSize ? preferredTileSize : 512;
return TileTextureInitData(tileSize, tileSize, GL_UNSIGNED_BYTE,
ghoul::opengl::Texture::Format::BGRA, false);
ghoul::opengl::Texture::Format::BGRA, padTiles);
}
case layergroupid::GroupID::WaterMasks: {
size_t tileSize = preferredTileSize ? preferredTileSize : 512;
return TileTextureInitData(tileSize, tileSize, GL_UNSIGNED_BYTE,
ghoul::opengl::Texture::Format::BGRA, false);
ghoul::opengl::Texture::Format::BGRA, padTiles);
}
default: {
ghoul_assert(false, "Unknown layer group ID");
size_t tileSize = preferredTileSize ? preferredTileSize : 512;
return TileTextureInitData(tileSize, tileSize, GL_UNSIGNED_BYTE,
ghoul::opengl::Texture::Format::BGRA, false);
ghoul::opengl::Texture::Format::BGRA, padTiles);
}
}
}

View File

@@ -59,7 +59,7 @@ public:
void reset(bool includingDisabled = false);
static TileTextureInitData getTileTextureInitData(layergroupid::GroupID id,
size_t preferredTileSize = 0);
bool padTiles, size_t preferredTileSize = 0);
static bool shouldPerformPreProcessingOnLayergroup(layergroupid::GroupID id);
void onChange(std::function<void(void)> callback);

View File

@@ -49,6 +49,7 @@ namespace {
const char* KeyFilePath = "FilePath";
const char* KeyBasePath = "BasePath";
const char* KeyPreCacheLevel = "PreCacheLevel";
const char* KeyPadTiles = "PadTiles";
static const openspace::properties::Property::PropertyInfo FilePathInfo = {
"FilePath",
@@ -98,8 +99,12 @@ DefaultTileProvider::DefaultTileProvider(const ghoul::Dictionary& dictionary)
LDEBUG("Default pixel size overridden: " << pixelSize);
tilePixelSize = static_cast<int>(pixelSize);
}
_padTiles = true;
dictionary.getValue<bool>(KeyPadTiles, _padTiles);
TileTextureInitData initData(LayerManager::getTileTextureInitData(
_layerGroupID, tilePixelSize));
_layerGroupID, _padTiles, tilePixelSize));
_tilePixelSize.setValue(initData.dimensionsWithoutPadding().x);
_performPreProcessing =
@@ -136,7 +141,7 @@ void DefaultTileProvider::update() {
if (_asyncTextureDataProvider->shouldBeDeleted()) {
_asyncTextureDataProvider = nullptr;
TileTextureInitData initData(LayerManager::getTileTextureInitData(
_layerGroupID, _tilePixelSize));
_layerGroupID, _padTiles, _tilePixelSize));
initAsyncTileDataReader(initData);
}
}
@@ -149,7 +154,7 @@ void DefaultTileProvider::reset() {
}
else {
TileTextureInitData initData(LayerManager::getTileTextureInitData(
_layerGroupID, _tilePixelSize));
_layerGroupID, _padTiles, _tilePixelSize));
initAsyncTileDataReader(initData);
}
}

View File

@@ -86,6 +86,7 @@ private:
std::string _basePath;
int _preCacheLevel;
bool _performPreProcessing;
bool _padTiles;
};
} // namespace openspace::globebrowsing::tileprovider

View File

@@ -43,7 +43,8 @@ namespace {
namespace openspace::globebrowsing::tileprovider {
SizeReferenceTileProvider::SizeReferenceTileProvider(const ghoul::Dictionary& dictionary)
: TextTileProvider(LayerManager::getTileTextureInitData(layergroupid::GroupID::ColorLayers))
: TextTileProvider(
LayerManager::getTileTextureInitData(layergroupid::GroupID::ColorLayers, false))
, _backgroundTile(Tile::TileUnavailable)
{
_fontSize = 50;

View File

@@ -32,7 +32,8 @@ namespace openspace::globebrowsing::tileprovider {
TileIndexTileProvider::TileIndexTileProvider(const ghoul::Dictionary&)
: TextTileProvider(LayerManager::getTileTextureInitData(
layergroupid::GroupID::ColorLayers
layergroupid::GroupID::ColorLayers,
false
))
{}

View File

@@ -29,8 +29,6 @@
#include <ghoul/logging/logmanager.h>
namespace {
const char* _loggerCat = "TileProviderByLevel";
const char* KeyProviders = "LevelTileProviders";
const char* KeyMaxLevel = "MaxLevel";
const char* KeyTileProvider = "TileProvider";

View File

@@ -28,13 +28,14 @@
namespace openspace::globebrowsing {
const glm::ivec2 TileTextureInitData::TilePixelStartOffset = glm::ivec2(-2);
const glm::ivec2 TileTextureInitData::TilePixelSizeDifference = glm::ivec2(4);
const glm::ivec2 TileTextureInitData::TilePixelStartOffset = glm::ivec2(-1);
const glm::ivec2 TileTextureInitData::TilePixelSizeDifference = glm::ivec2(2);
TileTextureInitData::TileTextureInitData(size_t width, size_t height, GLenum glType,
Format textureFormat, bool padTiles, ShouldAllocateDataOnCPU shouldAllocateDataOnCPU)
: _glType(glType)
, _ghoulTextureFormat(textureFormat)
, _padTiles(padTiles)
, _shouldAllocateDataOnCPU(shouldAllocateDataOnCPU)
{
_tilePixelStartOffset = padTiles ? TilePixelStartOffset : glm::ivec2(0);
@@ -59,6 +60,7 @@ TileTextureInitData::TileTextureInitData(const TileTextureInitData& original)
original.dimensionsWithoutPadding().y,
original.glType(),
original.ghoulTextureFormat(),
original._padTiles,
original.shouldAllocateDataOnCPU() ? ShouldAllocateDataOnCPU::Yes : ShouldAllocateDataOnCPU::No)
{ };

View File

@@ -87,6 +87,7 @@ private:
size_t _bytesPerLine;
size_t _totalNumBytes;
bool _shouldAllocateDataOnCPU;
bool _padTiles;
};
} // namespace openspace::globebrowsing