50 lines
1.4 KiB
Lua
Executable File
50 lines
1.4 KiB
Lua
Executable File
------------------------------------------------------------------
|
|
-- A simple TGA loader.
|
|
-- Loads the TGA file with the given fileName.
|
|
-- Supports only 24 or 32 bits color TGAs with no compression.
|
|
------------------------------------------------------------------
|
|
function LoadTGA(fileName)
|
|
local file = io.open(fileName, "rb")
|
|
|
|
if file == nil then
|
|
return nil, "Unnable to open file '" .. fileName .. "'."
|
|
end
|
|
|
|
local texture = {}
|
|
local header = file:read(18)
|
|
|
|
if header == nil then
|
|
return nil, "Error loading header data."
|
|
end
|
|
|
|
texture.components = header:byte(17) / 8
|
|
texture.width = header:byte(14) * 256 + header:byte(13)
|
|
texture.height = header:byte(16) * 256 + header:byte(15)
|
|
texture.target = "TEXTURE_2D"
|
|
texture.type = "UNSIGNED_BYTE"
|
|
texture.format = (texture.components == 4) and "RGBA" or "RGB"
|
|
|
|
if header:byte(3) ~= 2 then
|
|
return nil, "Unsupported tga type. Only 24/32 bits uncompressed images are supported."
|
|
end
|
|
|
|
for j=1, texture.height do
|
|
local line = {}
|
|
for i=1, texture.width do
|
|
data = file:read(texture.components)
|
|
|
|
if data == nil then
|
|
return nil, "Error loading data."
|
|
end
|
|
table.insert(line, data:byte(3))
|
|
table.insert(line, data:byte(2))
|
|
table.insert(line, data:byte(1))
|
|
if texture.components == 4 then table.insert(line, data:byte(4)) end
|
|
end
|
|
table.insert(texture, line)
|
|
end
|
|
|
|
file:close()
|
|
return texture
|
|
end
|