mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-23 15:40:39 +00:00
Lunatic: in shade table 'remap16' method, allow sparse table, document it.
Add shadexfog.createremap() convenience function. git-svn-id: https://svn.eduke32.com/eduke32@4332 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
00a6a058ef
commit
e68d5a14b3
3 changed files with 30 additions and 11 deletions
|
@ -2192,21 +2192,34 @@ When running in EDuke32, there are additional restrictions:
|
||||||
variable in the global environment that indicates whether the Lua game state
|
variable in the global environment that indicates whether the Lua game state
|
||||||
is created for the very first time and the game is not yet running.)
|
is created for the very first time and the game is not yet running.)
|
||||||
|
|
||||||
//////////
|
|
||||||
===== Shade table methods
|
===== Shade table methods
|
||||||
|
|
||||||
`newsht = sht:remap16(tab)`::
|
`newsht = sht:remap16(tab)`::
|
||||||
|
|
||||||
Rearranges consecutive runs of 16 values of every shade 256-tuple of `sht` by
|
Returns a new shade table with consecutive runs of 16 values of every 256-tuple
|
||||||
the 0-based selection given by the 0-based sequence `tab`.
|
of `sht` remapped as specified by `tab`. Specifically, `tab` must be a table
|
||||||
|
whose keys in [0 .. 15] may be set to values in [0 .. 15]. For a shade index
|
||||||
|
`sh` and a color index `i`, the returned shade table `newsht` then has
|
||||||
|
+
|
||||||
|
==========
|
||||||
|
`newsht[sh][i]` = `sht[sh][newi]`,
|
||||||
|
==========
|
||||||
|
+
|
||||||
|
where
|
||||||
|
+
|
||||||
|
==========
|
||||||
|
`newi` = `16*tab[math.floor(i/16)] + i%16` {nbsp} [gray]#// if `tab[math.floor(i/16)]` is non-*nil*# +
|
||||||
|
`newi` = `i` {nbsp} [gray]#// otherwise#
|
||||||
|
==========
|
||||||
+
|
+
|
||||||
.Example
|
.Example
|
||||||
[source]
|
[source]
|
||||||
----------
|
----------
|
||||||
local perm16 = { [0]=0,1, 2,3, 5,4, 6,7, 8,13, 10,11, 12,9, 14,15 }
|
-- Creates a shade table with the same remapping as pal 21 (blue -> red) and
|
||||||
local newsht = engine.getshadetab(0):remap16(perm16)
|
-- registers it under pal 22, overwriting its previous contents.
|
||||||
|
local newsht = engine.getshadetab(0):remap16({[4]=13, [5]=8})
|
||||||
|
engine.setshadetab(22, newsht)
|
||||||
----------
|
----------
|
||||||
//////////
|
|
||||||
|
|
||||||
Blending table interfaces
|
Blending table interfaces
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
@ -49,13 +49,14 @@ local shtab_methods = {
|
||||||
-- { [0]=0,1, 2,3, 5,4, 6,7, 8,13, 10,11, 12,9, 14,15 }
|
-- { [0]=0,1, 2,3, 5,4, 6,7, 8,13, 10,11, 12,9, 14,15 }
|
||||||
-- TODO (...)
|
-- TODO (...)
|
||||||
remap16 = function(sht, idxs16)
|
remap16 = function(sht, idxs16)
|
||||||
if (type(idxs16) ~= "table" or idxs16[0]==nil or #idxs16 ~= 15) then
|
if (type(idxs16) ~= "table") then
|
||||||
error("invalid argument #2: must be a [0]-table with 16 elements", 2)
|
error("invalid argument #2: must be a table", 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
for i=0,15 do
|
for i=0,15 do
|
||||||
if (not (idxs16[i] >= 0 and idxs16[i] <= 15)) then
|
local idx = idxs16[i]
|
||||||
error("invalid reordering table: elements must be in [0 .. 15]", 2)
|
if (not (idx==nil or type(idx)=="number" and idx >= 0 and idx <= 15)) then
|
||||||
|
error("invalid reordering table: elements must be numbers in [0 .. 15], or nil", 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ local shtab_methods = {
|
||||||
for sh=0,31 do
|
for sh=0,31 do
|
||||||
for i=0,15 do
|
for i=0,15 do
|
||||||
ffi.copy(cast_u8ptr(newsht[sh]) + 16*i,
|
ffi.copy(cast_u8ptr(newsht[sh]) + 16*i,
|
||||||
cast_u8ptr(sht[sh]) + 16*idxs16[i], 16)
|
cast_u8ptr(sht[sh]) + 16*(idxs16[i] or i), 16)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return newsht
|
return newsht
|
||||||
|
|
|
@ -22,6 +22,11 @@ local gv = gv
|
||||||
|
|
||||||
local shadexfog = {}
|
local shadexfog = {}
|
||||||
|
|
||||||
|
function shadexfog.createremap(palnum, remaptab)
|
||||||
|
local sht = engine.getshadetab(0)
|
||||||
|
engine.setshadetab(palnum, sht:remap16(remaptab))
|
||||||
|
end
|
||||||
|
|
||||||
-- Create 32 palookups corrensponding to different *shade levels* of a fog
|
-- Create 32 palookups corrensponding to different *shade levels* of a fog
|
||||||
-- palookup, called a "shade-x-fog" palookup set in the following.
|
-- palookup, called a "shade-x-fog" palookup set in the following.
|
||||||
--
|
--
|
||||||
|
|
Loading…
Reference in a new issue