Fix CMake and add MultiLevelTile

This commit is contained in:
Erik Broberg
2016-06-09 19:58:54 -04:00
parent 13c57f4931
commit f64998b517
4 changed files with 53 additions and 22 deletions

View File

@@ -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

View File

@@ -70,7 +70,7 @@ Fragment getFragment() {
//LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter);
#if USE_COLORTEXTURE
frag.color = calculateColor(
fs_uv,
levelWeights,//levelInterpolationParameter,

View File

@@ -64,8 +64,6 @@ Fragment getFragment() {
frag.color = vec4(1,1,1,1);
//LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter);
#if USE_COLORTEXTURE
frag.color = calculateColor(

View File

@@ -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