diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 02bf2c124..424d32177 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -16,9 +16,6 @@ varying vec3 lightVec; varying vec3 tsLightVec; bool normalTexturePresent = false; -bool texTileableHorizontal = false; -bool texTileableVertical = false; -bool texSeamless = false; const float e = 2.718281828459; const float BS = 10.0; @@ -29,45 +26,6 @@ void get_texture_flags() if (flags.r > 0.5) { normalTexturePresent = true; } - if (flags.g > 0.5) { - texTileableHorizontal = true; - } - if (flags.b > 0.5) { - texTileableVertical = true; - } - if (texTileableHorizontal && texTileableVertical) { - texSeamless = true; - } -} - -vec2 validate_displacement(vec2 uv, vec2 ds, float dist) -{ - if (texSeamless) { - uv += dist * ds; - } else if (texTileableVertical == false) { - vec2 uv2 = uv + dist * ds; - // limit vertical texure displacement - if ((uv.y + uv2.y) < 0.0) { - uv.y = 0.0; - } else if ((uv.y + uv2.y) > 1.999) { - uv.y = 0.999; - } else { - uv.y = uv2.y; - } - uv.x = uv2.x; - } else { - vec2 uv2 = uv + dist * ds; - // limit horizontal texure displacement - if ((uv.x + uv2.x) < 0.0) { - uv.x = 0.0; - } else if ((uv.x + uv2.x) > 1.999) { - uv.x = 0.999; - } else { - uv.x = uv2.x; - } - uv.y = uv2.y; - } - return uv; } float intensity(vec3 color) @@ -77,11 +35,7 @@ float intensity(vec3 color) float get_rgb_height(vec2 uv) { - if (texSeamless) { - return intensity(texture2D(baseTexture, uv).rgb); - } else { - return intensity(texture2D(baseTexture, clamp(uv, 0.0, 0.999)).rgb); - } + return intensity(texture2D(baseTexture, uv).rgb); } vec4 get_normal_map(vec2 uv) @@ -144,18 +98,13 @@ void main(void) // Relief mapping if (normalTexturePresent && area_enable_parallax > 0.0) { vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; - // offset the texture by maximum possible displacement, - // this will help align seamless and non seamless textures - uv -= ds; float dist = find_intersection(uv, ds); - uv = validate_displacement(uv, ds, dist); - + uv += dist * ds; #endif } else if (GENERATE_NORMALMAPS == 1 && area_enable_parallax > 0.0) { vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; - uv -= ds; float dist = find_intersectionRGB(uv, ds); - uv = validate_displacement(uv, ds, dist); + uv += dist * ds; } #endif diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index acdaa47d1..53d5c92d0 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -94,7 +94,7 @@ void main(void) // Don't generate heightmaps when too far from the eye float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); - if (dist > 300.0) { + if (dist > 150.0) { area_enable_parallax = 0.0; } diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 79ed4a072..a28b40c65 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -385,8 +385,7 @@ public: video::ITexture* getNormalTexture(const std::string &name); video::SColor getTextureAverageColor(const std::string &name); - video::ITexture *getShaderFlagsTexture( - bool normamap_present, bool tileable_vertical, bool tileable_horizontal); + video::ITexture *getShaderFlagsTexture(bool normamap_present); private: @@ -2054,14 +2053,11 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) } -video::ITexture *TextureSource::getShaderFlagsTexture( - bool normalmap_present, bool tileable_vertical, bool tileable_horizontal) +video::ITexture *TextureSource::getShaderFlagsTexture(bool normalmap_present) { std::string tname = "__shaderFlagsTexture"; tname += normalmap_present ? "1" : "0"; - tname += tileable_horizontal ? "1" : "0"; - tname += tileable_vertical ? "1" : "0"; - + if (isKnownSourceImage(tname)) { return getTexture(tname); } else { @@ -2069,11 +2065,7 @@ video::ITexture *TextureSource::getShaderFlagsTexture( video::IImage *flags_image = driver->createImage( video::ECF_A8R8G8B8, core::dimension2d(1, 1)); sanity_check(flags_image != NULL); - video::SColor c( - 255, - normalmap_present ? 255 : 0, - tileable_horizontal ? 255 : 0, - tileable_vertical ? 255 : 0); + video::SColor c(255, normalmap_present ? 255 : 0, 0, 0); flags_image->setPixel(0, 0, c); insertSourceImage(tname, flags_image); flags_image->drop(); diff --git a/src/client/tile.h b/src/client/tile.h index c08ffc8ad..3098a79b9 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -113,8 +113,7 @@ public: const TextureFromMeshParams ¶ms)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(bool normamap_present, - bool tileable_vertical, bool tileable_horizontal)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; class IWritableTextureSource : public ITextureSource @@ -137,8 +136,7 @@ public: virtual void rebuildImagesAndTextures()=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; - virtual video::ITexture *getShaderFlagsTexture(bool normamap_present, - bool tileable_vertical, bool tileable_horizontal)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; IWritableTextureSource* createTextureSource(IrrlichtDevice *device); @@ -218,9 +216,7 @@ struct TileSpec alpha == other.alpha && material_type == other.material_type && material_flags == other.material_flags && - rotation == other.rotation && - (material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL) && - (material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL) + rotation == other.rotation ); } @@ -254,12 +250,6 @@ struct TileSpec } material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; - if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { - material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; - } - if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { - material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; - } } void applyMaterialOptionsWithShaders(video::SMaterial &material) const diff --git a/src/nodedef.cpp b/src/nodedef.cpp index daaa871f9..269c2b9d6 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1012,9 +1012,7 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, if (use_normal_texture) { tile->normal_texture = tsrc->getNormalTexture(tiledef->name); } - tile->flags_texture = tsrc->getShaderFlagsTexture( - tile->normal_texture ? true : false, - tiledef->tileable_vertical, tiledef->tileable_horizontal); + tile->flags_texture = tsrc->getShaderFlagsTexture(tile->normal_texture ? true : false); // Material flags tile->material_flags = 0; diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index 391a456ab..bc2977a0e 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -302,7 +302,7 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, material.setFlag(video::EMF_USE_MIP_MAPS, false); #endif if (m_enable_shaders) { - material.setTexture(2, tsrc->getShaderFlagsTexture(false, true, true)); + material.setTexture(2, tsrc->getShaderFlagsTexture(false)); } }