diff --git a/modules/globebrowsing/globes/renderableglobe.cpp b/modules/globebrowsing/globes/renderableglobe.cpp index bc88e02d8d..7efdb0535f 100644 --- a/modules/globebrowsing/globes/renderableglobe.cpp +++ b/modules/globebrowsing/globes/renderableglobe.cpp @@ -305,7 +305,12 @@ namespace globebrowsing { if (tile.status != Tile::Status::OK) { return 0; } - glm::vec2 transformedUv = uvTransform.uvOffset + uvTransform.uvScale * patchUV; + //glm::vec2 transformedUv = uvTransform.uvOffset + uvTransform.uvScale * patchUV; + + glm::vec2 transformedUv = Tile::TileUvToTextureSamplePosition( + uvTransform, + patchUV, + glm::uvec2(tile.texture->dimensions())); // Sample and do linear interpolation // (could possibly be moved as a function in ghoul texture) diff --git a/modules/globebrowsing/shaders/tile.hglsl b/modules/globebrowsing/shaders/tile.hglsl index 120952c6fd..85832ba776 100644 --- a/modules/globebrowsing/shaders/tile.hglsl +++ b/modules/globebrowsing/shaders/tile.hglsl @@ -25,6 +25,12 @@ #ifndef TEXTURETILE_HGLSL #define TEXTURETILE_HGLSL +// Must match the values in tiledataset.cpp +// (could be set as shader preprocessing data so that multiple definitions +// are not needed) +#define TILE_PIXEL_START_OFFSET ivec2(-2) +#define TILE_PIXEL_SIZE_DIFFERENCE ivec2(4) + vec4 patchBorderOverlay(vec2 uv, vec3 borderColor, float borderSize) { vec2 uvOffset = uv - vec2(0.5); float thres = 0.5 - borderSize/2; @@ -83,7 +89,8 @@ vec2 compensateSourceTextureSampling(vec2 startOffset, vec2 sizeDiff, const Tile vec2 TileUVToTextureSamplePosition(const Tile tile, vec2 tileUV){ vec2 uv = tile.uvTransform.uvOffset + tile.uvTransform.uvScale * tileUV; - uv = compensateSourceTextureSampling(vec2(-2), vec2(4), tile, uv); + uv = compensateSourceTextureSampling( + TILE_PIXEL_START_OFFSET, TILE_PIXEL_SIZE_DIFFERENCE, tile, uv); return uv; } diff --git a/modules/globebrowsing/tile/tile.cpp b/modules/globebrowsing/tile/tile.cpp index 0fcfdc6ec5..e979e71427 100644 --- a/modules/globebrowsing/tile/tile.cpp +++ b/modules/globebrowsing/tile/tile.cpp @@ -66,5 +66,30 @@ namespace globebrowsing { return tile; } + glm::vec2 Tile::compensateSourceTextureSampling( + glm::vec2 startOffset, + glm::vec2 sizeDiff, + glm::uvec2 resolution, + glm::vec2 tileUV) { + glm::vec2 sourceSize = glm::vec2(resolution) + sizeDiff; + glm::vec2 currentSize = glm::vec2(resolution); + glm::vec2 sourceToCurrentSize = currentSize / sourceSize; + tileUV = sourceToCurrentSize * (tileUV - startOffset / sourceSize); + return tileUV; + } + + glm::vec2 Tile::TileUvToTextureSamplePosition( + const TileUvTransform uvTransform, + glm::vec2 tileUV, + glm::uvec2 resolution) { + glm::vec2 uv = uvTransform.uvOffset + uvTransform.uvScale * tileUV; + uv = compensateSourceTextureSampling( + TileDataset::tilePixelStartOffset, + TileDataset::tilePixelSizeDifference, + resolution, + uv); + return uv; + } + } // namespace globebrowsing -} // namespace openspace \ No newline at end of file +} // namespace openspace diff --git a/modules/globebrowsing/tile/tile.h b/modules/globebrowsing/tile/tile.h index 8adbb221fb..2bf8aafd63 100644 --- a/modules/globebrowsing/tile/tile.h +++ b/modules/globebrowsing/tile/tile.h @@ -32,6 +32,11 @@ namespace openspace { namespace globebrowsing { + struct TileUvTransform { + glm::vec2 uvOffset; + glm::vec2 uvScale; + }; + using namespace ghoul::opengl; /** @@ -84,6 +89,17 @@ namespace globebrowsing { */ static Tile createPlainTile(const glm::uvec2& size, const glm::uvec4& color); + static glm::vec2 compensateSourceTextureSampling( + glm::vec2 startOffset, + glm::vec2 sizeDiff, + glm::uvec2 resolution, + glm::vec2 tileUV); + + static glm::vec2 TileUvToTextureSamplePosition( + const TileUvTransform uvTransform, + glm::vec2 tileUV, + glm::uvec2 resolution); + /** * A tile with status unavailable that any user can return to * indicate that a tile was unavailable. diff --git a/modules/globebrowsing/tile/tileselector.h b/modules/globebrowsing/tile/tileselector.h index 9a0bde9da7..e8381a89a7 100644 --- a/modules/globebrowsing/tile/tileselector.h +++ b/modules/globebrowsing/tile/tileselector.h @@ -34,11 +34,6 @@ namespace openspace { namespace globebrowsing { - struct TileUvTransform { - glm::vec2 uvOffset; - glm::vec2 uvScale; - }; - struct TileAndTransform { Tile tile; TileUvTransform uvTransform;