This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch experimental in repository osgearth.
commit e3bde5b0d8b95e8875686d64132f6aa3839d25a8 Author: Bas Couwenberg <sebas...@xs4all.nl> Date: Fri Sep 9 20:12:19 2016 +0200 Imported Upstream version 2.8~rc2+dfsg --- CMakeLists.txt | 2 +- docs/source/user/tools.rst | 4 ++-- src/applications/osgearth_package/osgearth_package.cpp | 2 +- src/applications/osgearth_seed/osgearth_seed.cpp | 2 +- src/osgEarth/GPUClamping.vert.lib.glsl | 2 +- src/osgEarth/ThreadingUtils.cpp | 13 +++++++++++-- src/osgEarth/Version | 2 +- src/osgEarthDrivers/engine_mp/MPGeometry.cpp | 13 +++++++++++-- src/osgEarthDrivers/engine_rex/TileNode.cpp | 13 ++++++++++++- src/osgEarthDrivers/osg/OSGTileSource.cpp | 2 +- src/osgEarthFeatures/ExtrudeGeometryFilter.cpp | 2 +- src/osgEarthSplat/Splat.frag.glsl | 15 ++++++++++++--- src/osgEarthSplat/Splat.util.glsl | 5 +++-- src/osgEarthUtil/Graticule.vert.glsl | 5 ++++- 14 files changed, 62 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b0a89a..0f0b284 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ SET_PROPERTY( GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake Targets" ) PROJECT(OSGEARTH) SET(OSGEARTH_MAJOR_VERSION 2) -SET(OSGEARTH_MINOR_VERSION 9) +SET(OSGEARTH_MINOR_VERSION 8) SET(OSGEARTH_PATCH_VERSION 0) SET(OSGEARTH_SOVERSION 0) diff --git a/docs/source/user/tools.rst b/docs/source/user/tools.rst index 071931c..e436b5e 100644 --- a/docs/source/user/tools.rst +++ b/docs/source/user/tools.rst @@ -95,7 +95,7 @@ The most common usage of osgearth_cache is to populate a cache in a non-interact +-------------------------------------+--------------------------------------------------------------------+ | ``--mt`` | Use multithreading to process the tiles. | +-------------------------------------+--------------------------------------------------------------------+ -| ``--concurrency`` | The number of threads or proceses to use if --mp or --mt | +| ``--concurrency`` | The number of threads or processes to use if --mp or --mt | | | are provided | +-------------------------------------+--------------------------------------------------------------------+ | ``--min-level level`` | Lowest LOD level to seed (default=0) | @@ -160,7 +160,7 @@ osgearth_package creates a redistributable `TMS`_ based package from an earth fi +------------------------------------+--------------------------------------------------------------------+ | ``--mt`` | Use multithreading to process the tiles. | +------------------------------------+--------------------------------------------------------------------+ -| ``--concurrency`` | The number of threads or proceses to use if --mp or --mt | +| ``--concurrency`` | The number of threads or processes to use if --mp or --mt | | | are provided | +------------------------------------+--------------------------------------------------------------------+ | ``--alpha-mask`` | Mask out imagery that isn't in the provided extents. | diff --git a/src/applications/osgearth_package/osgearth_package.cpp b/src/applications/osgearth_package/osgearth_package.cpp index 9cebc51..eea47d4 100644 --- a/src/applications/osgearth_package/osgearth_package.cpp +++ b/src/applications/osgearth_package/osgearth_package.cpp @@ -71,7 +71,7 @@ usage( const std::string& msg = "" ) << " [--db-options] : db options string to pass to the image writer in quotes (e.g., \"JPEG_QUALITY 60\")\n" << " [--mp] ; Use multiprocessing to process the tiles. Useful for GDAL sources as this avoids the global GDAL lock" << std::endl << " [--mt] ; Use multithreading to process the tiles." << std::endl - << " [--concurrency] ; The number of threads or proceses to use if --mp or --mt are provided." << std::endl + << " [--concurrency] ; The number of threads or processes to use if --mp or --mt are provided." << std::endl << " [--alpha-mask] ; Mask out imagery that isn't in the provided extents." << std::endl << std::endl << " [--verbose] ; Displays progress of the operation" << std::endl; diff --git a/src/applications/osgearth_seed/osgearth_seed.cpp b/src/applications/osgearth_seed/osgearth_seed.cpp index 5957a6a..788ed56 100644 --- a/src/applications/osgearth_seed/osgearth_seed.cpp +++ b/src/applications/osgearth_seed/osgearth_seed.cpp @@ -89,7 +89,7 @@ int << " [--index shapefile] ; Use the feature extents in a shapefile to set the bounding boxes for seeding" << std::endl << " [--mp] ; Use multiprocessing to process the tiles. Useful for GDAL sources as this avoids the global GDAL lock" << std::endl << " [--mt] ; Use multithreading to process the tiles." << std::endl - << " [--concurrency] ; The number of threads or proceses to use if --mp or --mt are provided." << std::endl + << " [--concurrency] ; The number of threads or processes to use if --mp or --mt are provided." << std::endl << " [--verbose] ; Displays progress of the seed operation" << std::endl << std::endl << " --purge file.earth ; Purges a layer cache in a .earth file (interactive)" << std::endl diff --git a/src/osgEarth/GPUClamping.vert.lib.glsl b/src/osgEarth/GPUClamping.vert.lib.glsl index 3c24583..a8ca86e 100644 --- a/src/osgEarth/GPUClamping.vert.lib.glsl +++ b/src/osgEarth/GPUClamping.vert.lib.glsl @@ -27,7 +27,7 @@ void oe_getClampedViewVertex(in vec4 vertView, out vec4 out_clampedVertView, out out_clampedVertView = oe_clamp_depthClip2cameraView * clampedVertDepthClip; } -// Returns a vector indiciating the "down" direction. +// Returns a vector indicating the "down" direction. void oe_getClampingUpVector(out vec3 up) { up = normalize(mat3(oe_clamp_depthClip2cameraView) * vec3(0,0,-1)); diff --git a/src/osgEarth/ThreadingUtils.cpp b/src/osgEarth/ThreadingUtils.cpp index a38124e..9c22e1c 100644 --- a/src/osgEarth/ThreadingUtils.cpp +++ b/src/osgEarth/ThreadingUtils.cpp @@ -20,9 +20,11 @@ #ifdef _WIN32 extern "C" unsigned long __stdcall GetCurrentThreadId(); -#else +#elif defined(__APPLE__) || defined(__LINUX__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # include <unistd.h> # include <sys/syscall.h> +#else +# include <pthread.h> #endif using namespace osgEarth::Threading; @@ -40,7 +42,14 @@ unsigned osgEarth::Threading::getCurrentThreadId() return ::syscall(SYS_thread_selfid); #elif __ANDROID__ return gettid(); -#else +#elif __LINUX__ return (unsigned)::syscall(SYS_gettid); +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + long tid; + syscall(SYS_thr_self, &tid); + return (unsigned)tid; +#else + /* :XXX: this truncates to 32 bits, but better than nothing */ + return (unsigned)pthread_self(); #endif } diff --git a/src/osgEarth/Version b/src/osgEarth/Version index f70e95c..51e55d5 100644 --- a/src/osgEarth/Version +++ b/src/osgEarth/Version @@ -31,7 +31,7 @@ extern "C" { #define OSGEARTH_MINOR_VERSION 8 #define OSGEARTH_PATCH_VERSION 0 #define OSGEARTH_SOVERSION 0 -#define OSGEARTH_RC_VERSION 1 +#define OSGEARTH_RC_VERSION 2 #define OSGEARTH_DEVEL_VERSION 0 // 0 = release; >0 = interim devel version /* Convenience macro that can be used to decide whether a feature is present or not i.e. diff --git a/src/osgEarthDrivers/engine_mp/MPGeometry.cpp b/src/osgEarthDrivers/engine_mp/MPGeometry.cpp index d408441..141065c 100644 --- a/src/osgEarthDrivers/engine_mp/MPGeometry.cpp +++ b/src/osgEarthDrivers/engine_mp/MPGeometry.cpp @@ -91,10 +91,19 @@ _elevUnit(0), _supportsGLSL(false) { _supportsGLSL = Registry::capabilities().supportsGLSL(); - + + // Encode the tile key in a uniform. Note! The X and Y components are scaled + // to that we don't use precision on the GPU when the values get large. + // If you need the raw X and Y, you must scale them back up on the GPU. unsigned tw, th; key.getProfile()->getNumTiles(key.getLOD(), tw, th); - _tileKeyValue.set( key.getTileX(), th-key.getTileY()-1.0f, key.getLOD(), -1.0f ); + + const float tileXYScale = 0.0625f; // 1/16 + _tileKeyValue.set( + tileXYScale * (float)(key.getTileX()), + tileXYScale * (float)(th-key.getTileY()-1.0f), + (float)key.getLOD(), + -1.0f); _imageUnitParent = _imageUnit + 1; // temp diff --git a/src/osgEarthDrivers/engine_rex/TileNode.cpp b/src/osgEarthDrivers/engine_rex/TileNode.cpp index f38376b..40c5e39 100644 --- a/src/osgEarthDrivers/engine_rex/TileNode.cpp +++ b/src/osgEarthDrivers/engine_rex/TileNode.cpp @@ -210,10 +210,21 @@ TileNode::updateTileUniforms(const SelectionInfo& selectionInfo) const osg::BoundingBox& bbox = _surface->getAlignedBoundingBox(); float width = std::max( (bbox.xMax()-bbox.xMin()), (bbox.yMax()-bbox.yMin()) ); + + // Encode the tile key in a uniform. Note! The X and Y components are scaled + // to that we don't use precision on the GPU when the values get large. + // If you need the raw X and Y, you must scale them back up on the GPU. unsigned tw, th; _key.getProfile()->getNumTiles(_key.getLOD(), tw, th); - _tileKeyUniform->set(osg::Vec4f(_key.getTileX(), th-_key.getTileY()-1.0f, _key.getLOD(), width)); + const float tileXYScale = 0.0625f; // 1/16 + + _tileKeyUniform->set(osg::Vec4f( + tileXYScale * (float)(_key.getTileX()), + tileXYScale * (float)(th-_key.getTileY()-1.0f), + (float)_key.getLOD(), + width)); + // update the morph constants diff --git a/src/osgEarthDrivers/osg/OSGTileSource.cpp b/src/osgEarthDrivers/osg/OSGTileSource.cpp index ce6b88b..7fe5a7e 100644 --- a/src/osgEarthDrivers/osg/OSGTileSource.cpp +++ b/src/osgEarthDrivers/osg/OSGTileSource.cpp @@ -88,7 +88,7 @@ public: if ( !image.valid() ) { - return Status::Error( Status::ResourceUnavailable, Stringify() << "Faild to load data from \"" << _options.url()->full() << "\"" ); + return Status::Error( Status::ResourceUnavailable, Stringify() << "Failed to load data from \"" << _options.url()->full() << "\"" ); } // calculate and store the maximum LOD for which to return data diff --git a/src/osgEarthFeatures/ExtrudeGeometryFilter.cpp b/src/osgEarthFeatures/ExtrudeGeometryFilter.cpp index 28f1e15..f45d1c6 100644 --- a/src/osgEarthFeatures/ExtrudeGeometryFilter.cpp +++ b/src/osgEarthFeatures/ExtrudeGeometryFilter.cpp @@ -1222,7 +1222,7 @@ ExtrudeGeometryFilter::push( FeatureList& input, FilterContext& context ) AllocateAndMergeBufferObjectsVisitor allocAndMerge; group->accept( allocAndMerge ); - // set a uniform indiciating that clamping attributes are available. + // set a uniform indicating that clamping attributes are available. Clamping::installHasAttrsUniform( group->getOrCreateStateSet() ); // if we drew outlines, apply a poly offset too. diff --git a/src/osgEarthSplat/Splat.frag.glsl b/src/osgEarthSplat/Splat.frag.glsl index 78787a1..8af4f79 100644 --- a/src/osgEarthSplat/Splat.frag.glsl +++ b/src/osgEarthSplat/Splat.frag.glsl @@ -35,7 +35,8 @@ uniform float oe_splat_warp; uniform float oe_splat_blur; uniform sampler2D oe_splat_coverageTex; uniform sampler2DArray oe_splatTex; -uniform float oe_splat_scaleOffset; +//uniform float oe_splat_scaleOffset; +uniform int oe_splat_scaleOffsetInt; uniform float oe_splat_detailRange; uniform float oe_splat_noiseScale; @@ -260,8 +261,15 @@ void oe_splat_simple(inout vec4 color) env.slope = oe_splat_getSlope(); env.noise = oe_splat_getNoise(noiseCoords); env.elevation = 0.0; + + float lod0; + float rangeOuter, rangeInner; + oe_splat_getLodBlend(oe_splat_range, lod0, rangeOuter, rangeInner, env.range); + vec2 tc = oe_splat_getSplatCoords(oe_layer_tilec.st, lod0 + float(oe_splat_scaleOffsetInt)); + + color = oe_splat_bilinear(tc, env); - color = oe_splat_bilinear(oe_layer_tilec.st, env); + //color = mix(color, vec4(tc.s, tc.t, 0.0, 1.0), 0.5); } // Main entry point for fragment shader. @@ -278,7 +286,8 @@ void oe_splat_complex(inout vec4 color) env.elevation = 0.0; // quantize the scale offset so we take the hit in the FS - float scaleOffset = oe_splat_scaleOffset >= 0.0 ? ceil(oe_splat_scaleOffset) : floor(oe_splat_scaleOffset); + //float scaleOffset = oe_splat_scaleOffset >= 0.0 ? ceil(oe_splat_scaleOffset) : floor(oe_splat_scaleOffset); + float scaleOffset = float(oe_splat_scaleOffsetInt); // Calculate the 2 LODs we need to blend. We have to do this in the FS because // it's quite possible for a single triangle to span more than 2 LODs. diff --git a/src/osgEarthSplat/Splat.util.glsl b/src/osgEarthSplat/Splat.util.glsl index 170a872..848dbd4 100644 --- a/src/osgEarthSplat/Splat.util.glsl +++ b/src/osgEarthSplat/Splat.util.glsl @@ -5,7 +5,7 @@ uniform vec4 oe_tile_key; // osgEarth TileKey // Number of LOD range. Do not increase this past 25; doing so will result in precision errors // and rendering artifacts when the camera is very close to the ground. -#define LOD_COUNT 25 +#define LOD_COUNT 26 const float oe_SplatRanges[LOD_COUNT] = float[]( 100000000.0, // 0 @@ -32,7 +32,8 @@ const float oe_SplatRanges[LOD_COUNT] = float[]( 25.0, // 21 12.0, // 22 6.0, // 23 - 3.0 // 24 + 3.0, // 24 + 1.0 // 25 ); /** diff --git a/src/osgEarthUtil/Graticule.vert.glsl b/src/osgEarthUtil/Graticule.vert.glsl index 20c53f5..1e78ee8 100644 --- a/src/osgEarthUtil/Graticule.vert.glsl +++ b/src/osgEarthUtil/Graticule.vert.glsl @@ -8,9 +8,12 @@ uniform vec4 oe_tile_key; out vec4 oe_layer_tilec; out vec2 oe_graticule_coord; +// oe_tile_key.xy are scaled by 1/16 for precision +#define TILE_XY_SCALE_FACTOR 16 + void oe_graticule_vertex(inout vec4 vertex) { // calculate long and lat from [0..1] across the profile: - vec2 r = (oe_tile_key.xy + oe_layer_tilec.xy)/exp2(oe_tile_key.z); + vec2 r = (oe_tile_key.xy*TILE_XY_SCALE_FACTOR + oe_layer_tilec.xy)/exp2(oe_tile_key.z); oe_graticule_coord = vec2(0.5*r.x, r.y); } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/osgearth.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel