MineClone2/mods/CORE/tga_encoder
teknomunk b582afeb1f Update documentation for Minetest rename to Luanti (#4706)
This updates the VoxeLibre documentation by replacing "Minetest" with "Luanti" and updating links.

Done:
* Update "Minetest" in documentation and comments to "Luanti"
* Update links to forums, ContentDB and Luanti project web page

Reviewed-on: https://git.minetest.land/VoxeLibre/VoxeLibre/pulls/4706
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-11-28 20:55:48 +01:00
..
tools Add 'mods/CORE/tga_encoder/' from commit 'aad231f5e406a7c1eaafe6595a64b9c55f230692' 2024-03-19 19:28:16 +01:00
colormap_generator.lua Update documentation for Minetest rename to Luanti (#4706) 2024-11-28 20:55:48 +01:00
donut.lua Add 'mods/CORE/tga_encoder/' from commit 'aad231f5e406a7c1eaafe6595a64b9c55f230692' 2024-03-19 19:28:16 +01:00
examples.lua Add 'mods/CORE/tga_encoder/' from commit 'aad231f5e406a7c1eaafe6595a64b9c55f230692' 2024-03-19 19:28:16 +01:00
init.lua Add 'mods/CORE/tga_encoder/' from commit 'aad231f5e406a7c1eaafe6595a64b9c55f230692' 2024-03-19 19:28:16 +01:00
LICENSE Add 'mods/CORE/tga_encoder/' from commit 'aad231f5e406a7c1eaafe6595a64b9c55f230692' 2024-03-19 19:28:16 +01:00
logo.lua Add 'mods/CORE/tga_encoder/' from commit 'aad231f5e406a7c1eaafe6595a64b9c55f230692' 2024-03-19 19:28:16 +01:00
mod.conf Add 'mods/CORE/tga_encoder/' from commit 'aad231f5e406a7c1eaafe6595a64b9c55f230692' 2024-03-19 19:28:16 +01:00
README.md Update documentation for Minetest rename to Luanti (#4706) 2024-11-28 20:55:48 +01:00

tga_encoder

A TGA Encoder written in Lua without the use of external Libraries.

Created by fleckenstein for VoxeLibre, then improved by erlehmann.

May be used as a Luanti mod.

See examples.lua for example code and usage hints.

Use Cases for tga_encoder

Encoding Textures for Editing

TGA images of types 1/2/3 consist of header data followed by a pixel array.

This makes it trivial to parse TGA files and even edit pixels in-place.

No checksums need to be updated on any kind of in-place texture editing.

Tip: When storing an editable image in item meta, use zlib compression.

Legacy Luanti Texture Encoding

Luanti 5.4 did not include minetest.encode_png() (or any equvivalent).

Since tga_encoder is written in pure Lua, it does not need engine support.

Tip: Look at examples.lua and the Luanti mod mcl_maps for guidance.

Advanced Texture Format Control

The function minetest.encode_png() always encodes images as 32bpp RGBA.

tga_encoder allows saving images as grayscale, 16bpp RGBA and 24bpp RGB.

For generating maps from terrain, color-mapped formats can be more useful.

Encoding Very Small Textures

Images of size 8×8 or below are often smaller than an equivalent PNG file.

Note that on many filesystems files use at least 4096 bytes (i.e. 64×64).

Therefore, saving bytes on files up to a few 100 bytes is often useless.

Encoding Reference Textures

TGA is a simple format, which makes it easy to create reference textures.

Using a hex editor, one can trivially see how all the pixels are stored.

Supported Image Types

For all types, images are encoded in a fast single pass (i.e. append-only).

Color-Mapped Images (Type 1)

These images contain a palette, followed by pixel data.

  • A1R5G5B5 (8bpp RGB)
  • B8G8R8 (8bpp RGB)
  • B8G8R8A8 (8bpp RGBA)

True-Color Images (Type 2)

These images contain uncompressed RGB(A) pixel data.

  • A1R5G5B5 (16bpp RGBA)
  • B8G8R8 (24bpp RGB)
  • B8G8R8A8 (32bpp RGBA)

Grayscale Images (Type 3)

  • Y8 (8bpp grayscale)

Run-Length Encoded (RLE), True-Color Images (Type 10)

These images contain compressed RGB(A) pixel data.

  • A1R5G5B5 (16bpp RGBA)
  • B8G8R8 (24bpp RGB)
  • B8G8R8A8 (32bpp RGBA)

TODO

  • Actually support R8G8B8A8 input for A1R5G5B5 output
  • Add both zoomable and explorable maps to mcl_maps.