aboutsummaryrefslogtreecommitdiff
Commit message (Expand)AuthorAge
...
| * Translated using Weblate (Russian)Konstantin Yeliseyev2021-04-10
| * Translated using Weblate (Polish)ResuUman2021-04-10
| * Translated using Weblate (Polish)Mateusz Mendel2021-04-10
| * Translated using Weblate (Polish)gnu-ewm2021-04-10
| * Translated using Weblate (Italian)Alessandro Mandelli2021-04-10
| * Translated using Weblate (Hungarian)Hatlábú Farkas2021-04-10
| * Translated using Weblate (French)ItsWidee2021-04-10
| * Translated using Weblate (Spanish)matiasC2021-04-10
| * Translated using Weblate (Spanish)Joaquín Villalba2021-04-10
| * Translated using Weblate (Spanish)AnthonyDe2021-04-10
| * Translated using Weblate (Greek)Michalis2021-04-10
| * Translated using Weblate (Chinese (Simplified))Yangjun Wang2021-04-10
| * Translated using Weblate (Chinese (Simplified))Liu Tao2021-04-10
| * Translated using Weblate (Chinese (Simplified))Yangjun Wang2021-04-10
| * Translated using Weblate (Spanish)David Leal2021-04-10
| * Translated using Weblate (Spanish)Joaquín Villalba2021-04-10
| * Translated using Weblate (Spanish)David Leal2021-04-10
| * Translated using Weblate (Spanish)Agustin Calderon2021-04-10
| * Translated using Weblate (Arabic)abidin toumi2021-04-10
| * Translated using Weblate (Esperanto)Tirifto2021-04-10
| * Translated using Weblate (Turkish)Oğuz Ersen2021-04-10
| * Translated using Weblate (Greek)THANOS SIOURDAKIS2021-04-10
| * Translated using Weblate (Malay)Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi2021-04-10
| * Translated using Weblate (Chinese (Simplified))winniepee2021-04-10
| * Translated using Weblate (Estonian)Ayes2021-04-10
| * Translated using Weblate (German)Wuzzy2021-04-10
| * Translated using Weblate (Slovak)Marian2021-04-10
| * Translated using Weblate (Russian)narrnika2021-04-10
| * Translated using Weblate (Polish)Mateusz Mendel2021-04-10
| * Translated using Weblate (Italian)Giov42021-04-10
| * Fix hud_change and hud_remove after hud_add (#10997)savilli2021-04-09
| * Restore minimal normal texture support (for minimap shading)Vitaliy2021-04-09
| * Don't apply connection timeout limit to locally hosted serverssfan52021-04-05
| * Fix server favorites not saving when client/serverlist/ doesn't exist already...sfan52021-04-05
| * Block & report player self-interaction (#11137)Lars Müller2021-04-05
| * Protect dropping from far node inventoriesSmallJoker2021-04-05
| * Protect per-player detached inventory actionsSmallJoker2021-04-05
| * Make pkgmgr handle modpacks containing modpacks properlyElias Fleckenstein2021-04-05
| * pkgmgr: Fix crash when .conf release field is invalidrubenwardy2021-04-05
| * Merge remote-tracking branch 'origin/stable-5' into HEADsfan52021-02-23
| |\
| | * Merge remote-tracking branch 'origin/stable-5' into HEADsfan52020-07-09
| | |\
| | | * Merge remote-tracking branch 'origin/stable-5' into HEADsfan52020-04-05
| | | |\
| | | | * Release 5.1.1rubenwardy2020-01-11
| | | | * Translated using Weblate (Japanese (Kansai))rubenwardy2020-01-11
| | | | * Translated using Weblate (Burmese)rubenwardy2020-01-11
| | | | * Translated using Weblate (Kazakh)rubenwardy2020-01-11
| | | | * Translated using Weblate (Arabic)rubenwardy2020-01-11
| | | | * Translated using Weblate (Vietnamese)rubenwardy2020-01-11
| | | | * Translated using Weblate (Portuguese)rubenwardy2020-01-11
| | | | * Translated using Weblate (Basque)rubenwardy2020-01-11
ass="hl kwc">nullptr) = 0; }; class ITextureSource : public ISimpleTextureSource { public: ITextureSource() = default; virtual ~ITextureSource() = default; virtual u32 getTextureId(const std::string &name)=0; virtual std::string getTextureName(u32 id)=0; virtual video::ITexture* getTexture(u32 id)=0; virtual video::ITexture* getTexture( const std::string &name, u32 *id = nullptr)=0; virtual video::ITexture* getTextureForMesh( const std::string &name, u32 *id = nullptr) = 0; /*! * Returns a palette from the given texture name. * The pointer is valid until the texture source is * destructed. * Should be called from the main thread. */ virtual Palette* getPalette(const std::string &name) = 0; virtual bool isKnownSourceImage(const std::string &name)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; virtual video::SColor getTextureAverageColor(const std::string &name)=0; virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; class IWritableTextureSource : public ITextureSource { public: IWritableTextureSource() = default; virtual ~IWritableTextureSource() = default; virtual u32 getTextureId(const std::string &name)=0; virtual std::string getTextureName(u32 id)=0; virtual video::ITexture* getTexture(u32 id)=0; virtual video::ITexture* getTexture( const std::string &name, u32 *id = nullptr)=0; virtual bool isKnownSourceImage(const std::string &name)=0; virtual void processQueue()=0; virtual void insertSourceImage(const std::string &name, video::IImage *img)=0; 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 normalmap_present)=0; }; IWritableTextureSource *createTextureSource(); #if ENABLE_GLES video::IImage *Align2Npot2(video::IImage *image, video::IVideoDriver *driver); #endif enum MaterialType{ TILE_MATERIAL_BASIC, TILE_MATERIAL_ALPHA, TILE_MATERIAL_LIQUID_TRANSPARENT, TILE_MATERIAL_LIQUID_OPAQUE, TILE_MATERIAL_WAVING_LEAVES, TILE_MATERIAL_WAVING_PLANTS, TILE_MATERIAL_OPAQUE, TILE_MATERIAL_WAVING_LIQUID_BASIC, TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT, TILE_MATERIAL_WAVING_LIQUID_OPAQUE, TILE_MATERIAL_PLAIN, TILE_MATERIAL_PLAIN_ALPHA }; // Material flags // Should backface culling be enabled? #define MATERIAL_FLAG_BACKFACE_CULLING 0x01 // Should a crack be drawn? #define MATERIAL_FLAG_CRACK 0x02 // Should the crack be drawn on transparent pixels (unset) or not (set)? // Ignored if MATERIAL_FLAG_CRACK is not set. #define MATERIAL_FLAG_CRACK_OVERLAY 0x04 #define MATERIAL_FLAG_ANIMATION 0x08 //#define MATERIAL_FLAG_HIGHLIGHTED 0x10 #define MATERIAL_FLAG_TILEABLE_HORIZONTAL 0x20 #define MATERIAL_FLAG_TILEABLE_VERTICAL 0x40 /* This fully defines the looks of a tile. The SMaterial of a tile is constructed according to this. */ struct FrameSpec { FrameSpec() = default; u32 texture_id = 0; video::ITexture *texture = nullptr; video::ITexture *normal_texture = nullptr; video::ITexture *flags_texture = nullptr; }; #define MAX_TILE_LAYERS 2 //! Defines a layer of a tile. struct TileLayer { TileLayer() = default; /*! * Two layers are equal if they can be merged. */ bool operator==(const TileLayer &other) const { return texture_id == other.texture_id && material_type == other.material_type && material_flags == other.material_flags && color == other.color && scale == other.scale; } /*! * Two tiles are not equal if they must have different vertices. */ bool operator!=(const TileLayer &other) const { return !(*this == other); } // Sets everything else except the texture in the material void applyMaterialOptions(video::SMaterial &material) const { switch (material_type) { case TILE_MATERIAL_OPAQUE: case TILE_MATERIAL_LIQUID_OPAQUE: case TILE_MATERIAL_WAVING_LIQUID_OPAQUE: material.MaterialType = video::EMT_SOLID; break; case TILE_MATERIAL_BASIC: case TILE_MATERIAL_WAVING_LEAVES: case TILE_MATERIAL_WAVING_PLANTS: case TILE_MATERIAL_WAVING_LIQUID_BASIC: material.MaterialTypeParam = 0.5; material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; break; case TILE_MATERIAL_ALPHA: case TILE_MATERIAL_LIQUID_TRANSPARENT: case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT: material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; break; default: break; } material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) != 0; 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 { material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) != 0; if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; material.TextureLayer[1].TextureWrapU = video::ETC_CLAMP_TO_EDGE; } if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; material.TextureLayer[1].TextureWrapV = video::ETC_CLAMP_TO_EDGE; } } bool isTileable() const { return (material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL) && (material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL); } // Ordered for size, please do not reorder video::ITexture *texture = nullptr; video::ITexture *normal_texture = nullptr; video::ITexture *flags_texture = nullptr; u32 shader_id = 0; u32 texture_id = 0; u16 animation_frame_length_ms = 0; u16 animation_frame_count = 1; u8 material_type = TILE_MATERIAL_BASIC; u8 material_flags = //0 // <- DEBUG, Use the one below MATERIAL_FLAG_BACKFACE_CULLING | MATERIAL_FLAG_TILEABLE_HORIZONTAL| MATERIAL_FLAG_TILEABLE_VERTICAL; //! If true, the tile has its own color. bool has_color = false; std::vector<FrameSpec> *frames = nullptr; /*! * The color of the tile, or if the tile does not own * a color then the color of the node owning this tile. */ video::SColor color; u8 scale; }; /*! * Defines a face of a node. May have up to two layers. */ struct TileSpec { TileSpec() = default; /*! * Returns true if this tile can be merged with the other tile. */ bool isTileable(const TileSpec &other) const { for (int layer = 0; layer < MAX_TILE_LAYERS; layer++) { if (layers[layer] != other.layers[layer]) return false; if (!layers[layer].isTileable()) return false; } return rotation == 0 && rotation == other.rotation && emissive_light == other.emissive_light; } //! If true, the tile rotation is ignored. bool world_aligned = false; //! Tile rotation. u8 rotation = 0; //! This much light does the tile emit. u8 emissive_light = 0; //! The first is base texture, the second is overlay. TileLayer layers[MAX_TILE_LAYERS]; }; std::vector<std::string> getTextureDirs();