Skip to content

Commit

Permalink
MP: fixed normal problem with shader
Browse files Browse the repository at this point in the history
  • Loading branch information
gwaldron committed Feb 11, 2015
1 parent 19e380c commit 15fdef3
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 23 deletions.
7 changes: 6 additions & 1 deletion src/osgEarthDrivers/engine_mp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@
SET(TARGET_COMMON_LIBRARIES ${TARGET_COMMON_LIBRARIES} osgEarthSymbology)

set(TARGET_GLSL
MPEngine.vert.glsl
MPEngine.vert.model.glsl
MPEngine.vert.view.glsl
MPEngine.frag.glsl)

set(TARGET_IN
MPShaders.cpp.in)

set(SHADERS_CPP "${CMAKE_CURRENT_BINARY_DIR}/AutoGenShaders.cpp")

configure_shaders(
Expand Down Expand Up @@ -37,6 +41,7 @@ SET(TARGET_H
FileLocationCallback
KeyNodeFactory
MPGeometry
MPShaders
MPTerrainEngineNode
MPTerrainEngineOptions
QuickReleaseGLObjects
Expand Down
15 changes: 15 additions & 0 deletions src/osgEarthDrivers/engine_mp/MPEngine.vert.model.glsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#version $GLSL_VERSION_STR
$GLSL_DEFAULT_PRECISION_FLOAT

#pragma vp_entryPoint "oe_mp_vertModel"
#pragma vp_location "vertex_model"
#pragma vp_order "-FLT_MAX"

varying vec4 oe_layer_texc;
varying vec4 oe_layer_tilec;

void oe_mp_vertModel(inout vec4 vertexModel)
{
oe_layer_texc = gl_MultiTexCoord$MP_PRIMARY_UNIT;
oe_layer_tilec = gl_MultiTexCoord$MP_SECONDARY_UNIT;
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
#version $GLSL_VERSION_STR
$GLSL_DEFAULT_PRECISION_FLOAT

#pragma vp_entryPoint "oe_mp_setup_coloring"
#pragma vp_entryPoint "oe_mp_vertView"
#pragma vp_location "vertex_view"
#pragma vp_order "0"

uniform float oe_layer_minRange;
uniform float oe_layer_maxRange;

varying vec4 oe_layer_texc;
varying vec4 oe_layer_tilec;
varying float oe_terrain_rangeOpacity;

void oe_mp_setup_coloring(inout vec4 vertexView)
void oe_mp_vertView(inout vec4 vertexView)
{
oe_layer_texc = gl_MultiTexCoord$MP_PRIMARY_UNIT;
oe_layer_tilec = gl_MultiTexCoord$MP_SECONDARY_UNIT;

float range = -vertexView.z;

float rangeSpanSlice = 0.1*(oe_layer_maxRange-oe_layer_minRange);
Expand Down
8 changes: 5 additions & 3 deletions src/osgEarthDrivers/engine_mp/MPShaders
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ namespace osgEarth { namespace Drivers { namespace MPTerrainEngine
{
struct Shaders
{
static const char* MPVertFile;
static const char* MPVertSource;
static const char* MPFragFile;
static const char* MPVertModel;
static const char* MPVertModelSource;
static const char* MPVertView;
static const char* MPVertViewSource;
static const char* MPFrag;
static const char* MPFragSource;
};

Expand Down
13 changes: 9 additions & 4 deletions src/osgEarthDrivers/engine_mp/MPShaders.cpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@

using namespace osgEarth::Drivers::MPTerrainEngine;

const char* Shaders::MPVertFile = "MPEngine.vert.glsl";
const char* Shaders::MPVertSource = MULTILINE(
@MPEngine.vert.glsl@
const char* Shaders::MPVertModel = "MPEngine.vert.model.glsl";
const char* Shaders::MPVertModelSource = MULTILINE(
@MPEngine.vert.model.glsl@
);

const char* Shaders::MPFragFile = "MPEngine.frag.glsl";
const char* Shaders::MPVertView = "MPEngine.vert.view.glsl";
const char* Shaders::MPVertViewSource = MULTILINE(
@MPEngine.vert.view.glsl@
);

const char* Shaders::MPFrag = "MPEngine.frag.glsl";
const char* Shaders::MPFragSource = MULTILINE(
@MPEngine.frag.glsl@
);
21 changes: 13 additions & 8 deletions src/osgEarthDrivers/engine_mp/MPTerrainEngineNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -867,19 +867,24 @@ MPTerrainEngineNode::updateState()
vp->addBindAttribLocation( "oe_terrain_attr2", osg::Drawable::ATTRIBUTE_7 );

// Vertex shader:
std::string vs = ShaderLoader::load(
Shaders::MPVertFile,
Shaders::MPVertSource );
std::string vs_model = ShaderLoader::load(
Shaders::MPVertModel,
Shaders::MPVertModelSource );

osgEarth::replaceIn( vs, "$MP_PRIMARY_UNIT", Stringify() << _primaryUnit );
osgEarth::replaceIn( vs, "$MP_SECONDARY_UNIT", Stringify() << _secondaryUnit );
osgEarth::replaceIn( vs_model, "$MP_PRIMARY_UNIT", Stringify() << _primaryUnit );
osgEarth::replaceIn( vs_model, "$MP_SECONDARY_UNIT", Stringify() << _secondaryUnit );

//vp->setFunction( "oe_mp_setup_coloring", vs, ShaderComp::LOCATION_VERTEX_MODEL, 0.0 );
vp->setFunction( "oe_mp_setup_coloring", vs, ShaderComp::LOCATION_VERTEX_VIEW, 0.0 );
vp->setFunction( "oe_mp_vertModel", vs_model, ShaderComp::LOCATION_VERTEX_MODEL, 0.0 );

std::string vs_view = ShaderLoader::load(
Shaders::MPVertView,
Shaders::MPVertViewSource);

vp->setFunction( "oe_mp_vertView", vs_view, ShaderComp::LOCATION_VERTEX_VIEW, 0.0 );

// Fragment shader:
std::string fs = ShaderLoader::load(
Shaders::MPFragFile,
Shaders::MPFrag,
Shaders::MPFragSource );

bool useTerrainColor = _terrainOptions.color().isSet();
Expand Down

0 comments on commit 15fdef3

Please sign in to comment.