mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-06 03:29:40 -06:00
Toggle show chunk edges from gui and calculate level weights only once per vertex
This commit is contained in:
@@ -107,6 +107,7 @@ namespace openspace {
|
||||
bool blendWaterMask;
|
||||
bool blendOverlay;
|
||||
bool atmosphereEnabled;
|
||||
bool showChunkEdges;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@ namespace openspace {
|
||||
, blendOverlay(properties::BoolProperty("blendOverlay", "blendOverlay", true))
|
||||
, blendWaterMask(properties::BoolProperty("blendWaterMask", "blendWaterMask", true))
|
||||
, atmosphereEnabled(properties::BoolProperty("atmosphereEnabled", "atmosphereEnabled", false))
|
||||
, showChunkEdges(properties::BoolProperty("showChunkEdges", "showChunkEdges", false))
|
||||
{
|
||||
setName("RenderableGlobe");
|
||||
|
||||
@@ -86,6 +87,7 @@ namespace openspace {
|
||||
addProperty(blendOverlay);
|
||||
addProperty(blendWaterMask);
|
||||
addProperty(atmosphereEnabled);
|
||||
addProperty(showChunkEdges);
|
||||
|
||||
doFrustumCulling.setValue(true);
|
||||
doHorizonCulling.setValue(true);
|
||||
@@ -200,6 +202,7 @@ namespace openspace {
|
||||
_chunkedLodGlobe->blendOverlay = blendOverlay.value();
|
||||
_chunkedLodGlobe->blendWaterMask = blendWaterMask.value();
|
||||
_chunkedLodGlobe->atmosphereEnabled = atmosphereEnabled.value();
|
||||
_chunkedLodGlobe->showChunkEdges = showChunkEdges.value();
|
||||
|
||||
std::vector<TileProviderManager::TileProviderWithName>& colorTextureProviders =
|
||||
_tileProviderManager->colorTextureProviders();
|
||||
|
||||
@@ -82,6 +82,7 @@ public:
|
||||
properties::BoolProperty blendOverlay;
|
||||
properties::BoolProperty blendWaterMask;
|
||||
properties::BoolProperty atmosphereEnabled;
|
||||
properties::BoolProperty showChunkEdges;
|
||||
|
||||
private:
|
||||
std::string _frame;
|
||||
|
||||
@@ -187,6 +187,12 @@ namespace openspace {
|
||||
"useAtmosphere",
|
||||
std::to_string(chunk.owner()->atmosphereEnabled)));
|
||||
|
||||
layeredTexturePreprocessingData.keyValuePairs.push_back(
|
||||
std::pair<std::string, std::string>(
|
||||
"showChunkEdges",
|
||||
std::to_string(chunk.owner()->showChunkEdges)));
|
||||
|
||||
|
||||
// Now the shader program can be accessed
|
||||
ProgramObject* programObject =
|
||||
layeredTextureShaderProvider->getUpdatedShaderProgram(
|
||||
|
||||
@@ -60,20 +60,20 @@ in vec3 ellipsoidNormalCameraSpace;
|
||||
in vec4 fs_position;
|
||||
in vec2 fs_uv;
|
||||
|
||||
in float levelInterpolationParameter;
|
||||
in LevelWeights levelWeights;
|
||||
|
||||
Fragment getFragment() {
|
||||
Fragment frag;
|
||||
|
||||
frag.color = vec4(0.1,0.1,0.1,1);
|
||||
|
||||
|
||||
//LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
|
||||
#if USE_COLORTEXTURE
|
||||
|
||||
frag.color = calculateColor(
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,//levelInterpolationParameter,
|
||||
colorTiles,
|
||||
colorTilesParent1,
|
||||
colorTilesParent2);
|
||||
@@ -85,7 +85,7 @@ Fragment getFragment() {
|
||||
frag.color = calculateWater(
|
||||
frag.color,
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,
|
||||
waterTiles,
|
||||
waterTilesParent1,
|
||||
waterTilesParent2);
|
||||
@@ -97,7 +97,7 @@ Fragment getFragment() {
|
||||
frag.color = calculateNight(
|
||||
frag.color,
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,
|
||||
nightTiles,
|
||||
nightTilesParent1,
|
||||
nightTilesParent2,
|
||||
@@ -114,14 +114,16 @@ Fragment getFragment() {
|
||||
frag.color = calculateOverlay(
|
||||
frag.color,
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,
|
||||
overlayTiles,
|
||||
overlayTilesParent1,
|
||||
overlayTilesParent2);
|
||||
|
||||
#endif // USE_OVERLAY
|
||||
|
||||
//frag.color += patchBorderOverlay(fs_uv, vec3(0,1,0), 0.02);
|
||||
#if SHOW_CHUNK_EDGES
|
||||
frag.color += patchBorderOverlay(fs_uv, vec3(0,1,0), 0.02);
|
||||
#endif // SHOW_CHUNK_EDGES
|
||||
|
||||
frag.depth = fs_position.w;
|
||||
|
||||
|
||||
@@ -54,9 +54,8 @@ layout(location = 1) in vec2 in_uv;
|
||||
out vec2 fs_uv;
|
||||
out vec4 fs_position;
|
||||
out vec3 ellipsoidNormalCameraSpace;
|
||||
// levelInterpolationParameter is used to interpolate between a tile and its parent tiles
|
||||
// The value increases with the distance from the vertex (or fragment) to the camera
|
||||
out float levelInterpolationParameter;
|
||||
|
||||
out LevelWeights levelWeights;
|
||||
|
||||
PositionNormalPair globalInterpolation() {
|
||||
vec2 lonLatInput;
|
||||
@@ -74,8 +73,8 @@ void main()
|
||||
float projectedScaleFactor = distanceScaleFactor / distToVertexOnEllipsoid;
|
||||
float desiredLevel = log2(projectedScaleFactor);
|
||||
|
||||
levelInterpolationParameter = chunkLevel - desiredLevel;
|
||||
|
||||
float levelInterpolationParameter = chunkLevel - desiredLevel;
|
||||
levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
float height = 0;
|
||||
|
||||
#if USE_HEIGHTMAP
|
||||
@@ -84,7 +83,7 @@ void main()
|
||||
// Before any heightmapping is done
|
||||
height = calculateHeight(
|
||||
in_uv,
|
||||
levelInterpolationParameter, // Variable to determine which texture to sample from
|
||||
levelWeights, // Variable to determine which texture to sample from
|
||||
heightTiles, heightTilesParent1, heightTilesParent2); // Three textures to sample from
|
||||
|
||||
#endif // USE_HEIGHTMAP
|
||||
|
||||
@@ -53,7 +53,7 @@ uniform Tile waterTilesParent2[NUMLAYERS_WATERMASK];
|
||||
|
||||
// levelInterpolationParameter is used to interpolate between a tile and its parent tiles
|
||||
// The value increases with the distance from the vertex (or fragment) to the camera
|
||||
in float levelInterpolationParameter;
|
||||
in LevelWeights levelWeights;
|
||||
|
||||
in vec4 fs_position;
|
||||
in vec2 fs_uv;
|
||||
@@ -64,11 +64,13 @@ Fragment getFragment() {
|
||||
|
||||
frag.color = vec4(1,1,1,1);
|
||||
|
||||
//LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
|
||||
#if USE_COLORTEXTURE
|
||||
|
||||
frag.color = calculateColor(
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,
|
||||
colorTiles,
|
||||
colorTilesParent1,
|
||||
colorTilesParent2);
|
||||
@@ -81,7 +83,7 @@ Fragment getFragment() {
|
||||
frag.color = calculateWater(
|
||||
frag.color,
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,
|
||||
waterTiles,
|
||||
waterTilesParent1,
|
||||
waterTilesParent2);
|
||||
@@ -94,7 +96,7 @@ Fragment getFragment() {
|
||||
frag.color = calculateNight(
|
||||
frag.color,
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,
|
||||
nightTiles,
|
||||
nightTilesParent1,
|
||||
nightTilesParent2,
|
||||
@@ -111,14 +113,17 @@ Fragment getFragment() {
|
||||
frag.color = calculateOverlay(
|
||||
frag.color,
|
||||
fs_uv,
|
||||
levelInterpolationParameter,
|
||||
levelWeights,
|
||||
overlayTiles,
|
||||
overlayTilesParent1,
|
||||
overlayTilesParent2);
|
||||
|
||||
#endif // USE_OVERLAY
|
||||
|
||||
//frag.color += patchBorderOverlay(fs_uv, vec3(1,0,0), 0.02);
|
||||
#if SHOW_CHUNK_EDGES
|
||||
frag.color += patchBorderOverlay(fs_uv, vec3(1,0,0), 0.02);
|
||||
#endif // SHOW_CHUNK_EDGES
|
||||
|
||||
|
||||
frag.depth = fs_position.w;
|
||||
|
||||
|
||||
@@ -59,9 +59,7 @@ out vec2 fs_uv;
|
||||
out vec4 fs_position;
|
||||
out vec3 ellipsoidNormalCameraSpace;
|
||||
|
||||
// levelInterpolationParameter is used to interpolate between a tile and its parent tiles
|
||||
// The value increases with the distance from the vertex (or fragment) to the camera
|
||||
out float levelInterpolationParameter;
|
||||
out LevelWeights levelWeights;
|
||||
|
||||
vec3 bilinearInterpolation(vec2 uv) {
|
||||
// Bilinear interpolation
|
||||
@@ -84,7 +82,8 @@ void main()
|
||||
float projectedScaleFactor = distanceScaleFactor / distToVertexOnEllipsoid;
|
||||
float desiredLevel = log2(projectedScaleFactor);
|
||||
|
||||
levelInterpolationParameter = chunkLevel - desiredLevel;
|
||||
float levelInterpolationParameter = chunkLevel - desiredLevel;
|
||||
levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
|
||||
#if USE_HEIGHTMAP
|
||||
|
||||
@@ -92,7 +91,7 @@ void main()
|
||||
// Before any heightmapping is done
|
||||
height = calculateHeight(
|
||||
in_uv,
|
||||
levelInterpolationParameter, // Variable to determine which texture to sample from
|
||||
levelWeights, // Variable to determine which texture to sample from
|
||||
heightTiles, heightTilesParent1, heightTilesParent2); // Three textures to sample from
|
||||
|
||||
#endif // USE_HEIGHTMAP
|
||||
|
||||
@@ -29,78 +29,37 @@
|
||||
#include <${MODULE_GLOBEBROWSING}/shaders/blending.hglsl>
|
||||
|
||||
// First layer type from LayeredTextureShaderProvider is height map
|
||||
#ifndef NUMLAYERS_HEIGHTMAP
|
||||
#define NUMLAYERS_HEIGHTMAP #{lastLayerIndexHeight} + 1
|
||||
#endif // NUMLAYERS_HEIGHTMAP
|
||||
|
||||
#ifndef USE_HEIGHTMAP
|
||||
#define USE_HEIGHTMAP #{useHeightMap}
|
||||
#endif // USE_HEIGHTMAP
|
||||
|
||||
#ifndef HEIGHTMAP_BLENDING_ENABLED
|
||||
#define HEIGHTMAP_BLENDING_ENABLED #{heightMapBlendingEnabled}
|
||||
#endif // HEIGHTMAP_BLENDING_ENABLED
|
||||
|
||||
// Second layer type from LayeredTextureShaderProvider is color texture
|
||||
#ifndef NUMLAYERS_COLORTEXTURE
|
||||
#define NUMLAYERS_COLORTEXTURE #{lastLayerIndexColor} + 1
|
||||
#endif // NUMLAYERS_COLORTEXTURE
|
||||
|
||||
#ifndef USE_COLORTEXTURE
|
||||
#define USE_COLORTEXTURE #{useColorTexture}
|
||||
#endif // USE_COLORTEXTURE
|
||||
|
||||
#ifndef COLORTEXTURE_BLENDING_ENABLED
|
||||
#define COLORTEXTURE_BLENDING_ENABLED #{colorTextureBlendingEnabled}
|
||||
#endif // COLORTEXTURE_BLENDING_ENABLED
|
||||
|
||||
// Third layer type from LayeredTextureShaderProvider is water mask
|
||||
#ifndef NUMLAYERS_WATERMASK
|
||||
#define NUMLAYERS_WATERMASK #{lastLayerIndexWater} + 1
|
||||
#endif // NUMLAYERS_WATERMASK
|
||||
|
||||
#ifndef USE_WATERMASK
|
||||
#define USE_WATERMASK #{useWaterMask}
|
||||
#endif // USE_WATERMASK
|
||||
|
||||
#ifndef WATERMASK_BLENDING_ENABLED
|
||||
#define WATERMASK_BLENDING_ENABLED #{waterMaskBlendingEnabled}
|
||||
#endif // WATERMASK_BLENDING_ENABLED
|
||||
|
||||
// Fourth layer type from LayeredTextureShaderProvider is night texture
|
||||
#ifndef NUMLAYERS_NIGHTTEXTURE
|
||||
#define NUMLAYERS_NIGHTTEXTURE #{lastLayerIndexNight} + 1
|
||||
#endif // NUMLAYERS_NIGHTTEXTURE
|
||||
|
||||
#ifndef USE_NIGHTTEXTURE
|
||||
#define USE_NIGHTTEXTURE #{useNightTexture}
|
||||
#endif // USE_NIGHTTEXTURE
|
||||
|
||||
#ifndef NIGHTTEXTURE_BLENDING_ENABLED
|
||||
#define NIGHTTEXTURE_BLENDING_ENABLED #{nightTextureBlendingEnabled}
|
||||
#endif // NIGHTTEXTURE_BLENDING_ENABLED
|
||||
|
||||
// Fifth layer type from LayeredTextureShaderProvider is overlay
|
||||
#ifndef NUMLAYERS_OVERLAY
|
||||
#define NUMLAYERS_OVERLAY #{lastLayerIndexOverlay} + 1
|
||||
#endif // NUMLAYERS_OVERLAY
|
||||
|
||||
#ifndef USE_OVERLAY
|
||||
#define USE_OVERLAY #{useOverlay}
|
||||
#endif // USE_OVERLAY
|
||||
|
||||
#ifndef OVERLAY_BLENDING_ENABLED
|
||||
#define OVERLAY_BLENDING_ENABLED #{overlayBlendingEnabled}
|
||||
#endif // OVERLAY_BLENDING_ENABLED
|
||||
|
||||
// Other key value pairs used for settings
|
||||
#ifndef USE_ATMOSPHERE
|
||||
#define USE_ATMOSPHERE #{useAtmosphere}
|
||||
#endif // USE_ATMOSPHERE
|
||||
#define SHOW_CHUNK_EDGES #{showChunkEdges}
|
||||
|
||||
float calculateHeight(
|
||||
const vec2 uv,
|
||||
const float levelInterpolationParameter,
|
||||
LevelWeights levelWeights,
|
||||
const Tile heightTiles[NUMLAYERS_HEIGHTMAP],
|
||||
const Tile heightTilesParent1[NUMLAYERS_HEIGHTMAP],
|
||||
const Tile heightTilesParent2[NUMLAYERS_HEIGHTMAP]) {
|
||||
@@ -109,10 +68,7 @@ float calculateHeight(
|
||||
|
||||
// The shader compiler will remove unused code when variables are multiplied by
|
||||
// a constant 0
|
||||
LevelWeights levelWeights;
|
||||
#if HEIGHTMAP_BLENDING_ENABLED
|
||||
levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
#else // HEIGHTMAP_BLENDING_ENABLED
|
||||
#if !HEIGHTMAP_BLENDING_ENABLED
|
||||
levelWeights = getDefaultLevelWeights();
|
||||
#endif // HEIGHTMAP_BLENDING_ENABLED
|
||||
|
||||
@@ -133,7 +89,7 @@ float calculateHeight(
|
||||
|
||||
vec4 calculateColor(
|
||||
const vec2 uv,
|
||||
const float levelInterpolationParameter,
|
||||
LevelWeights levelWeights,
|
||||
const Tile colorTiles[NUMLAYERS_COLORTEXTURE],
|
||||
const Tile colorTilesParent1[NUMLAYERS_COLORTEXTURE],
|
||||
const Tile colorTilesParent2[NUMLAYERS_COLORTEXTURE]) {
|
||||
@@ -142,10 +98,7 @@ vec4 calculateColor(
|
||||
|
||||
// The shader compiler will remove unused code when variables are multiplied by
|
||||
// a constant 0
|
||||
LevelWeights levelWeights;
|
||||
#if COLORTEXTURE_BLENDING_ENABLED
|
||||
levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
#else // COLORTEXTURE_BLENDING_ENABLED
|
||||
#if !COLORTEXTURE_BLENDING_ENABLED
|
||||
levelWeights = getDefaultLevelWeights();
|
||||
#endif // COLORTEXTURE_BLENDING_ENABLED
|
||||
|
||||
@@ -166,7 +119,7 @@ vec4 calculateColor(
|
||||
vec4 calculateNight(
|
||||
const vec4 currentColor,
|
||||
const vec2 uv,
|
||||
const float levelInterpolationParameter,
|
||||
LevelWeights levelWeights,
|
||||
const Tile nightTiles[NUMLAYERS_NIGHTTEXTURE],
|
||||
const Tile nightTilesParent1[NUMLAYERS_NIGHTTEXTURE],
|
||||
const Tile nightTilesParent2[NUMLAYERS_NIGHTTEXTURE],
|
||||
@@ -179,10 +132,7 @@ vec4 calculateNight(
|
||||
|
||||
// The shader compiler will remove unused code when variables are multiplied by
|
||||
// a constant 0
|
||||
LevelWeights levelWeights;
|
||||
#if NIGHTTEXTURE_BLENDING_ENABLED
|
||||
levelWeights = getLevelWeights(levelInterpolationParameter)
|
||||
#else // NIGHTTEXTURE_BLENDING_ENABLED
|
||||
#if !NIGHTTEXTURE_BLENDING_ENABLED
|
||||
levelWeights = getDefaultLevelWeights();
|
||||
#endif // NIGHTTEXTURE_BLENDING_ENABLED
|
||||
|
||||
@@ -206,7 +156,7 @@ vec4 calculateNight(
|
||||
vec4 calculateOverlay(
|
||||
const vec4 currentColor,
|
||||
const vec2 uv,
|
||||
const float levelInterpolationParameter,
|
||||
LevelWeights levelWeights,
|
||||
const Tile overlayTiles[NUMLAYERS_OVERLAY],
|
||||
const Tile overlayTilesParent1[NUMLAYERS_OVERLAY],
|
||||
const Tile overlayTilesParent2[NUMLAYERS_OVERLAY]) {
|
||||
@@ -215,10 +165,7 @@ vec4 calculateOverlay(
|
||||
|
||||
// The shader compiler will remove unused code when variables are multiplied by
|
||||
// a constant 0
|
||||
LevelWeights levelWeights;
|
||||
#if OVERLAY_BLENDING_ENABLED
|
||||
levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
#else // OVERLAY_BLENDING_ENABLED
|
||||
#if !OVERLAY_BLENDING_ENABLED
|
||||
levelWeights = getDefaultLevelWeights();
|
||||
#endif // OVERLAY_BLENDING_ENABLED
|
||||
|
||||
@@ -239,7 +186,7 @@ vec4 calculateOverlay(
|
||||
vec4 calculateWater(
|
||||
const vec4 currentColor,
|
||||
const vec2 uv,
|
||||
const float levelInterpolationParameter,
|
||||
LevelWeights levelWeights,
|
||||
const Tile waterTiles[NUMLAYERS_WATERMASK],
|
||||
const Tile waterTilesParent1[NUMLAYERS_WATERMASK],
|
||||
const Tile waterTilesParent2[NUMLAYERS_WATERMASK]) {
|
||||
@@ -248,10 +195,7 @@ vec4 calculateWater(
|
||||
|
||||
// The shader compiler will remove unused code when variables are multiplied by
|
||||
// a constant 0
|
||||
LevelWeights levelWeights;
|
||||
#if WATERMASK_BLENDING_ENABLED
|
||||
levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
#else // WATERMASK_BLENDING_ENABLED
|
||||
#if !WATERMASK_BLENDING_ENABLED
|
||||
levelWeights = getDefaultLevelWeights();
|
||||
#endif // WATERMASK_BLENDING_ENABLED
|
||||
|
||||
|
||||
Reference in New Issue
Block a user