Lua_UnitRendering - beyond-all-reason/springrts_engine_wiki_mirror GitHub Wiki

Development < Lua Scripting <

Unit & Feature Rendering

These functions are now also duplicated for features i.e.

Spring.UnitRendering.SetLODCount

 ( number unitID, int lodCount ) -> nil

Spring.UnitRendering.SetLODLength (`lod` is 1-indexed)

 ( number unitID, int lod, number lodLength ) -> nil

Spring.UnitRendering.SetLODDistance (same as SetLODLength(), but adjusted for 45deg FOV + 1024x768)

 (number unitID,  int lod, number lodDistance ) -> nil

Spring.UnitRendering.SetPieceList (displayList=nil reset to default)

 ( number unitID, int lod, int piece [, number displayList = nil ] ) -> nil

Spring.UnitRendering.GetMaterial (creates a material userdata)

 ( string`` ``MaterialTypetable`` ``Material ) -> userdata`` ``Material

Spring.UnitRendering.SetMaterial

 ( number unitID, int lod, string`` ``MaterialTypeuserdata`` ``Material | table`` ``Material ) -> nil

Spring.UnitRendering.SetMaterialLastLOD

 ( number unitID, string`` ``MaterialType, int lastLOD ) -> nil

Spring.UnitRendering.SetMaterialDisplayLists

 ( number unitID, int lod, string`` ``MaterialTypepreDisplayListpostDisplayList ) -> nil

Spring.UnitRendering.SetUnitUniform (unfinished)

 ( number unitID, string`` ``MaterialType, int lod, arg1, arg2, ... ) -> nil

Debug

Spring.UnitRendering.Debug (prints some usefull debug informations)

 ( [ number unitID ] ) -> nil

Lua's DrawXYZ-Callin

Spring.UnitRendering.SetUnitLuaDraw (enables the LuaRules' DrawUnit callin)

 ( number unitID, boolean enabled ) -> nil

Spring.FeatureRendering.SetFeatureLuaDraw (enables the LuaRules' DrawFeature callin)

 ( number featureID, boolean enabled ) -> nil

Spring.UnitRendering.SetProjectileLuaDraw (enables the LuaRules' DrawProjectile callin)

 ( number projectileID, boolean enabled ) -> nil

MaterialTypes

"alpha" "opaque" "alpha_reflect" "opaque_reflect" "shadow"

Material UserData

none user accessible methods (yet)

Material Table

Prior to 102.0:

 material = {    ["order"  = number ,]    ["culling" = number`` ``face ,]    ["shader" = lua_shader | string "3do" | string "s3o" ,]    (95.0: alias standard_shader)    ["deferred_shader" = { vertex = ..., ... } ,]    (new in 95.0, alias deferred. Deferred fragment shaders must *ONLY* write to gl_FragData[i] where      i = {0 = normals, 1 = diffuse, 2 = specular, 3 = emissive, 4 = misc})

   ["texunits" = {        [ [0] = { ["tex" = see`` ``gl.Texture ,]                  ["enable" = boolean true ] }, ]        [ [3] = see`` ``gl.Texture, ]        (upto [15] and supports holes in it)      } ,]

   ["texunit0" = see`` ``gl.Texture ,]     ...    ["texunit7" = see`` ``gl.Texture ,]

   ["prelist"   = lua_displaylist ,]    ["postlist"  = lua_displaylist ,]    ["usecamera" = boolean ,]    ["cameraloc" = number uniformLocation,]    ["cameraposloc" = number uniformLocation,]    ["camerainvloc"  = number uniformLocation,]    ["sunposloc"     = number uniformLocation,] (new in 0.83)    ["shadowloc"       = number uniformLocation,]    ["shadowparamsloc" = number uniformLocation,]  }

Post 102.0:

Material tables are now expected to contain subtables defining the uniforms; instead of

  material = {shader = ..., cameraposloc = 123, texunits = ..., ...}

say

  material = {shader = ..., uniforms = {cameraposloc = 123, ...}, texunits = ..., ...}

For a material that has both types of shader, supply "standardshader", "deferredshader", "standarduniforms", and "deferreduniforms" as keys i.e:

  material = {standardshader = ..., standarduniforms = {...}, deferredshader = ..., deferredunifroms = { ... }, texunits = ..., ...}

New keys for these uniform subtables can be

    "viewmatrixloc"    // synonym for "cameraloc"     "projmatrixloc"    // camera projection     "viprmatrixloc"    // camera view-projection     "viewmatrixinvloc" // synonym for "camerainvloc"     "projmatrixinvloc" // camera inverse projection     "viprmatrixinvloc" // camera inverse view-projection     "shadowmatrixloc"  // synonym for "shadowloc"     "cameradirloc"     // camera forward direction     "sundirloc"        // synonym for "sunposloc"     "rndvecloc"        // random 3-vector with length in [0, 1)     "simframeloc"      // current simulation frame     "visframeloc"      // current renderer frame

category: Lua

⚠️ **GitHub.com Fallback** ⚠️