mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-01 16:29:43 -05:00
Remove redundant information from RawTileData
This commit is contained in:
@@ -60,6 +60,7 @@ namespace openspace {
|
||||
|
||||
_depthTransform = calculateTileDepthTransform();
|
||||
_tileLevelDifference = calculateTileLevelDifference(_dataset, minimumPixelSize);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +110,7 @@ namespace openspace {
|
||||
// Read the data (each rasterband is a separate channel)
|
||||
for (size_t i = 0; i < _dataLayout.numRasters; i++) {
|
||||
GDALRasterBand* rasterBand = _dataset->GetRasterBand(i + 1)->GetOverview(region.overview);
|
||||
|
||||
|
||||
char* dataDestination = imageData + (i * _dataLayout.bytesPerDatum);
|
||||
|
||||
CPLErr err = rasterBand->RasterIO(
|
||||
@@ -167,17 +168,18 @@ namespace openspace {
|
||||
|
||||
delete[] imageData;
|
||||
|
||||
glm::uvec3 dims(region.numPixels.x, region.numPixels.y, 1);
|
||||
RawTileData::TextureFormat textureFormat = getTextureFormat(dataLayout.numRasters, dataLayout.gdalType);
|
||||
glm::uvec3 dims(region.numPixels, 1);
|
||||
GLuint glType = getOpenGLDataType(dataLayout.gdalType);
|
||||
RawTileData* textureDataPtr = new RawTileData(imageDataYflipped, dims,
|
||||
textureFormat, glType, region.chunkIndex);
|
||||
RawTileData* textureDataPtr = new RawTileData(imageDataYflipped, dims, region.chunkIndex);
|
||||
std::shared_ptr<RawTileData> textureData =
|
||||
std::shared_ptr<RawTileData>(textureDataPtr);
|
||||
|
||||
return textureData;
|
||||
}
|
||||
|
||||
const TileDataset::DataLayout& TileDataset::getDataLayout() const {
|
||||
return _dataLayout;
|
||||
}
|
||||
|
||||
|
||||
std::shared_ptr<TilePreprocessData> TileDataset::preprocess(std::shared_ptr<RawTileData> tileData,
|
||||
@@ -229,6 +231,7 @@ namespace openspace {
|
||||
case GDT_Float64: return [](const char* src) { return static_cast<float>(*reinterpret_cast<const GLdouble*>(src)); };
|
||||
default:
|
||||
LERROR("Unknown data type");
|
||||
ghoul_assert(false, "Unknown data type");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -245,7 +248,8 @@ namespace openspace {
|
||||
case GDT_Float32: return sizeof(GLfloat);
|
||||
case GDT_Float64: return sizeof(GLdouble);
|
||||
default:
|
||||
LERROR("Unknown data type");
|
||||
LERROR("Unknown data type");
|
||||
ghoul_assert(false, "Unknown data type");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -303,10 +307,10 @@ namespace openspace {
|
||||
}
|
||||
|
||||
|
||||
RawTileData::TextureFormat TileDataset::getTextureFormat(
|
||||
TextureFormat TileDataset::getTextureFormat(
|
||||
int rasterCount, GDALDataType gdalType)
|
||||
{
|
||||
RawTileData::TextureFormat format;
|
||||
TextureFormat format;
|
||||
|
||||
switch (rasterCount) {
|
||||
case 1: // Red
|
||||
@@ -446,14 +450,17 @@ namespace openspace {
|
||||
}
|
||||
|
||||
TileDataset::DataLayout::DataLayout() {
|
||||
|
||||
}
|
||||
|
||||
TileDataset::DataLayout::DataLayout(GDALDataset* dataSet, GLuint glType) {
|
||||
TileDataset::DataLayout::DataLayout(GDALDataset* dataSet, GLuint _glType) {
|
||||
// Assume all raster bands have the same data type
|
||||
gdalType = glType != 0 ? getGdalDataType(glType) : dataSet->GetRasterBand(1)->GetRasterDataType();
|
||||
gdalType = _glType != 0 ? getGdalDataType(glType) : dataSet->GetRasterBand(1)->GetRasterDataType();
|
||||
glType = getOpenGLDataType(gdalType);
|
||||
numRasters = dataSet->GetRasterCount();
|
||||
bytesPerDatum = numberOfBytes(gdalType);
|
||||
bytesPerPixel = bytesPerDatum * numRasters;
|
||||
textureFormat = getTextureFormat(numRasters, gdalType);
|
||||
}
|
||||
|
||||
} // namespace openspace
|
||||
|
||||
@@ -49,20 +49,16 @@ namespace openspace {
|
||||
std::vector<float> minValues;
|
||||
};
|
||||
|
||||
struct TextureFormat {
|
||||
Texture::Format ghoulFormat;
|
||||
GLuint glFormat;
|
||||
};
|
||||
|
||||
struct RawTileData {
|
||||
|
||||
struct TextureFormat {
|
||||
Texture::Format ghoulFormat;
|
||||
GLuint glFormat;
|
||||
};
|
||||
|
||||
|
||||
RawTileData(void* data, glm::uvec3 dims, TextureFormat format,
|
||||
GLuint glType, const ChunkIndex& chunkIndex)
|
||||
RawTileData(void* data, glm::uvec3 dims, const ChunkIndex& chunkIndex)
|
||||
: imageData(data)
|
||||
, dimensions(dims)
|
||||
, texFormat(format)
|
||||
, glType(glType)
|
||||
, chunkIndex(chunkIndex)
|
||||
{
|
||||
|
||||
@@ -71,14 +67,13 @@ namespace openspace {
|
||||
void* imageData;
|
||||
std::shared_ptr<TilePreprocessData> preprocessData;
|
||||
glm::uvec3 dimensions;
|
||||
TextureFormat texFormat;
|
||||
GLuint glType;
|
||||
ChunkIndex chunkIndex;
|
||||
};
|
||||
|
||||
|
||||
|
||||
struct TileIOResult {
|
||||
|
||||
CPLErr error;
|
||||
std::shared_ptr<RawTileData> rawTileData;
|
||||
};
|
||||
@@ -108,25 +103,34 @@ namespace openspace {
|
||||
|
||||
~TileDataset();
|
||||
|
||||
|
||||
struct DataLayout {
|
||||
DataLayout();
|
||||
DataLayout(GDALDataset* dataSet, GLuint glType);
|
||||
|
||||
GDALDataType gdalType;
|
||||
GLuint glType;
|
||||
|
||||
|
||||
size_t bytesPerDatum;
|
||||
size_t numRasters;
|
||||
size_t bytesPerPixel;
|
||||
|
||||
TextureFormat textureFormat;
|
||||
};
|
||||
|
||||
|
||||
|
||||
std::shared_ptr<TileIOResult> readTileData(ChunkIndex chunkIndex, bool doPreprocessing = false);
|
||||
|
||||
int getMaximumLevel() const;
|
||||
|
||||
TileDepthTransform getDepthTransform() const;
|
||||
|
||||
const DataLayout& getDataLayout() const;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// HELPER STRUCTS //
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
struct GdalDataRegion {
|
||||
|
||||
GdalDataRegion(GDALDataset* dataSet, const ChunkIndex& chunkIndex,
|
||||
@@ -142,17 +146,6 @@ namespace openspace {
|
||||
|
||||
};
|
||||
|
||||
struct DataLayout {
|
||||
DataLayout();
|
||||
DataLayout(GDALDataset* dataSet, GLuint glType);
|
||||
|
||||
GDALDataType gdalType;
|
||||
size_t bytesPerDatum;
|
||||
size_t numRasters;
|
||||
size_t bytesPerPixel;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -172,7 +165,7 @@ namespace openspace {
|
||||
|
||||
static GDALDataType getGdalDataType(GLuint glType);
|
||||
|
||||
static RawTileData::TextureFormat getTextureFormat(int rasterCount, GDALDataType gdalType);
|
||||
static TextureFormat getTextureFormat(int rasterCount, GDALDataType gdalType);
|
||||
|
||||
static size_t numberOfBytes(GDALDataType gdalType);
|
||||
|
||||
|
||||
@@ -165,12 +165,13 @@ namespace openspace {
|
||||
|
||||
std::shared_ptr<RawTileData> tileData = tileIOResult->rawTileData;
|
||||
HashKey key = tileData->chunkIndex.hashKey();
|
||||
TileDataset::DataLayout dataLayout = _asyncTextureDataProvider->getTextureDataProvider()->getDataLayout();
|
||||
Texture* texturePtr = new Texture(
|
||||
tileData->imageData,
|
||||
tileData->dimensions,
|
||||
tileData->texFormat.ghoulFormat,
|
||||
tileData->texFormat.glFormat,
|
||||
tileData->glType,
|
||||
dataLayout.textureFormat.ghoulFormat,
|
||||
dataLayout.textureFormat.glFormat,
|
||||
dataLayout.glType,
|
||||
Texture::FilterMode::Linear,
|
||||
Texture::WrappingMode::ClampToEdge);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user