From f64998b5174b257014ca8b765612248d4dac6f20 Mon Sep 17 00:00:00 2001 From: Erik Broberg Date: Thu, 9 Jun 2016 19:58:54 -0400 Subject: [PATCH] Fix CMake and add MultiLevelTile --- modules/globebrowsing/CMakeLists.txt | 2 +- .../shaders/globalchunkedlodpatch_fs.glsl | 2 +- .../shaders/localchunkedlodpatch_fs.glsl | 2 - modules/globebrowsing/shaders/tile.hglsl | 69 ++++++++++++++----- 4 files changed, 53 insertions(+), 22 deletions(-) diff --git a/modules/globebrowsing/CMakeLists.txt b/modules/globebrowsing/CMakeLists.txt index d9df98bb2e..c3c5d5a322 100644 --- a/modules/globebrowsing/CMakeLists.txt +++ b/modules/globebrowsing/CMakeLists.txt @@ -98,7 +98,7 @@ source_group("Source Files" FILES ${SOURCE_FILES}) set(SHADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/shaders/blending.hglsl ${CMAKE_CURRENT_SOURCE_DIR}/shaders/ellipsoid.hglsl - ${CMAKE_CURRENT_SOURCE_DIR}/shaders/texturetile.hglsl + ${CMAKE_CURRENT_SOURCE_DIR}/shaders/tile.hglsl ${CMAKE_CURRENT_SOURCE_DIR}/shaders/texturetilemapping.hglsl ${CMAKE_CURRENT_SOURCE_DIR}/shaders/globalchunkedlodpatch_vs.glsl diff --git a/modules/globebrowsing/shaders/globalchunkedlodpatch_fs.glsl b/modules/globebrowsing/shaders/globalchunkedlodpatch_fs.glsl index 515418a4d3..3c7b4bf19a 100644 --- a/modules/globebrowsing/shaders/globalchunkedlodpatch_fs.glsl +++ b/modules/globebrowsing/shaders/globalchunkedlodpatch_fs.glsl @@ -70,7 +70,7 @@ Fragment getFragment() { //LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter); #if USE_COLORTEXTURE - + frag.color = calculateColor( fs_uv, levelWeights,//levelInterpolationParameter, diff --git a/modules/globebrowsing/shaders/localchunkedlodpatch_fs.glsl b/modules/globebrowsing/shaders/localchunkedlodpatch_fs.glsl index 0469acf8e4..659f491c30 100644 --- a/modules/globebrowsing/shaders/localchunkedlodpatch_fs.glsl +++ b/modules/globebrowsing/shaders/localchunkedlodpatch_fs.glsl @@ -64,8 +64,6 @@ Fragment getFragment() { frag.color = vec4(1,1,1,1); - //LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter); - #if USE_COLORTEXTURE frag.color = calculateColor( diff --git a/modules/globebrowsing/shaders/tile.hglsl b/modules/globebrowsing/shaders/tile.hglsl index 61c4b0991c..c00b6e40f1 100644 --- a/modules/globebrowsing/shaders/tile.hglsl +++ b/modules/globebrowsing/shaders/tile.hglsl @@ -25,16 +25,45 @@ #ifndef TEXTURETILE_HGLSL #define TEXTURETILE_HGLSL +vec4 patchBorderOverlay(vec2 uv, vec3 borderColor, float borderSize) { + vec2 uvOffset = uv - vec2(0.5); + float thres = 0.5 - borderSize/2; + bool isBorder = abs(uvOffset.x) > thres || abs(uvOffset.y) > thres; + vec3 color = isBorder ? borderColor : vec3(0); + return vec4(color, 0); +} + + +///////////////////////////////////////////////////////////////////// +// Tile Depth Transform // +///////////////////////////////////////////////////////////////////// + struct TileDepthTransform { float depthScale; float depthOffset; }; +float getTransformedTexVal(const TileDepthTransform transform, const float val){ + return transform.depthOffset + transform.depthScale * val; +} + +vec4 getTransformedTexVal(const TileDepthTransform transform, const vec4 val){ + return transform.depthOffset + transform.depthScale * val; +} + +///////////////////////////////////////////////////////////////////// +// Tile UV Transform // +///////////////////////////////////////////////////////////////////// + struct TileUvTransform { vec2 uvOffset; vec2 uvScale; }; + +///////////////////////////////////////////////////////////////////// +// Tile // +///////////////////////////////////////////////////////////////////// struct Tile { sampler2D textureSampler; @@ -42,6 +71,24 @@ struct Tile { TileUvTransform uvTransform; }; + +vec4 getTexVal(const Tile tile, const vec2 tileUV){ + vec2 samplePos = tile.uvTransform.uvOffset + tile.uvTransform.uvScale * tileUV; + vec4 texVal = texture(tile.textureSampler, samplePos); + return texVal; +} + + + +///////////////////////////////////////////////////////////////////// +// Multi Level Tile // +///////////////////////////////////////////////////////////////////// +struct MultiLevelTile { + Tile tile0; + Tile tile1; + Tile tile2; +}; + struct LevelWeights { float w1; float w2; @@ -65,26 +112,12 @@ LevelWeights getDefaultLevelWeights(){ } -vec4 patchBorderOverlay(vec2 uv, vec3 borderColor, float borderSize) { - vec2 uvOffset = uv - vec2(0.5); - float thres = 0.5 - borderSize/2; - bool isBorder = abs(uvOffset.x) > thres || abs(uvOffset.y) > thres; - vec3 color = isBorder ? borderColor : vec3(0); - return vec4(color, 0); +vec4 getTexVal(const MultiLevelTile multiLevelTile, const LevelWeights w, const vec2 uv){ + return w.w1 * getTexVal(multiLevelTile.tile0, uv) + + w.w2 * getTexVal(multiLevelTile.tile1, uv) + + w.w3 * getTexVal(multiLevelTile.tile2, uv); } -vec4 getTexVal(const Tile tile, const vec2 tileUV){ - vec2 samplePos = tile.uvTransform.uvOffset + tile.uvTransform.uvScale * tileUV; - vec4 texVal = texture(tile.textureSampler, samplePos); - return texVal; -} -vec4 getTransformedTexVal(const TileDepthTransform transform, const vec4 val){ - return transform.depthOffset + transform.depthScale * val; -} - -float getTransformedTexVal(const TileDepthTransform transform, const float val){ - return transform.depthOffset + transform.depthScale * val; -} #endif // TEXTURETILE_HGLSL \ No newline at end of file