<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://springrts-wiki.p2004a.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ledz</id>
	<title>Spring - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://springrts-wiki.p2004a.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ledz"/>
	<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/wiki/Special:Contributions/Ledz"/>
	<updated>2026-11-08T20:56:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11487</id>
		<title>Lua OpenGL Api</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_OpenGL_Api&amp;diff=11487"/>
		<updated>2012-05-09T16:33:49Z</updated>

		<summary type="html">&lt;p&gt;Ledz: Reworded a warning while I&amp;#039;m here&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Lua_Scripting|Lua Scripting]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
= Spring =&lt;br /&gt;
&#039;&#039;&#039;gl.GetSun&#039;&#039;&#039;&lt;br /&gt;
  &amp;lt;font style=&amp;quot;font-size:90%&amp;quot;&amp;gt;()        -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;pos&amp;quot; ) -&amp;gt; number sunPosX, number sunPosY, number sunPosZ&lt;br /&gt;
  ( &amp;quot;shadowDensity&amp;quot; [, &amp;quot;unit&amp;quot;] ) -&amp;gt; number shadowDensity&lt;br /&gt;
  ( &amp;quot;diffuse&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;ambient&amp;quot;       [, &amp;quot;unit&amp;quot;] ) -&amp;gt; nil | number r, number g, number b&lt;br /&gt;
  ( &amp;quot;specular&amp;quot; )                 -&amp;gt; nil | number r, number g, number b&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigScreen&#039;&#039;&#039; &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;used for Unit LODs&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number screenWidth, number screenDistance ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawMiniMap&#039;&#039;&#039; &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;argument new in 0.82+&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( &amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;boolean tansform = true&amp;lt;/span&amp;gt; ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SlaveMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( boolean mode ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ConfigMiniMap&#039;&#039;&#039;&lt;br /&gt;
  ( int px, int py, int sx, int sy ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetViewSizes&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; number x, number y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Matrices &amp;amp; Viewport =&lt;br /&gt;
&#039;&#039;&#039;gl.Viewport&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number w, number h ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopMatrix&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;gl.Translate&#039;&#039;&#039;&lt;br /&gt;
  (number x, number y, number z) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scale&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rotate&#039;&#039;&#039;&lt;br /&gt;
  ( number angle, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Billboard&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Use this to draw 2d primitives in DrawWorld().&lt;br /&gt;
To render a 2D billboarded quad in the gameworld at world position x,y,z, you do the following (at a minimum; I am skipping blending / depthtesting) here:&lt;br /&gt;
  gl.PushMatrix()&lt;br /&gt;
  gl.Texture(read what you need here)&lt;br /&gt;
  gl.Translate(x,y,z)&lt;br /&gt;
  gl.Billboard()			&lt;br /&gt;
  gl.TexRect(x1,y1,x2,y2)&lt;br /&gt;
  gl.PopMatrix()&amp;lt;/span &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MatrixMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#MatrixMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadIdentity&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LoadMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( ?? ) -&amp;gt; ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Ortho&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Frustum&#039;&#039;&#039;&lt;br /&gt;
  ( number left, number right, number bottom, number top, number near, number far ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushPopMatrix&#039;&#039;&#039;&lt;br /&gt;
  ( ?? ) -&amp;gt; ??&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ClipPlane&#039;&#039;&#039;&lt;br /&gt;
  ( int plane, &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;note: $plane can only be 1 or 2&amp;lt;/font&amp;gt;&lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number A, number B, number C, number D ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Clear =&lt;br /&gt;
&#039;&#039;&#039;gl.Clear&#039;&#039;&#039;&lt;br /&gt;
  ( GL.DEPTH_BUFFER_BIT [, number cleardepth] ) -&amp;gt; nil&lt;br /&gt;
  ( GL.STENCIL_BUFFER_BIT [, int clearstencil] ) -&amp;gt; nil&lt;br /&gt;
  ( GL.COLOR_BUFFER_BIT | GL.ACCUM_BUFFER_BIT [, number r, number g, number b, number a] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ResetState/Matrices =&lt;br /&gt;
&#039;&#039;&#039;gl.ResetState&#039;&#039;&#039; &amp;lt;span class=&amp;quot;warning&amp;quot;&amp;gt;DON&#039;T USE IT UNLESS YOU KNOW WHAT YOU ARE DOING! Each call-in has different default states, but this function resets all states to the states below no matter what!&amp;lt;/span&amp;gt;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  ShadeModel = GL.SMOOTH&lt;br /&gt;
  Scissor    = false&lt;br /&gt;
  Texture    = false&lt;br /&gt;
  Lighting    = false,&lt;br /&gt;
  ColorMask  = true, true, true, true&lt;br /&gt;
  DepthMask  = false&lt;br /&gt;
  DepthTest  = false  (GL.LEQUAL)&lt;br /&gt;
  Culling    = false  (GL.BACK)&lt;br /&gt;
  LogicOp    = false  (GL.INVERT)&lt;br /&gt;
  AlphaTest  = false  (GL.GREATER, 0.5f)&lt;br /&gt;
  Blending   = true (GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ResetMatrices&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
  Resets GL.TEXTURE matrix stack&lt;br /&gt;
  Resets GL.MODELVIEW matrix stack&lt;br /&gt;
  Resets GL.PROJECTION matrix stack&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Draw Basics =&lt;br /&gt;
&#039;&#039;&#039;gl.BeginEnd&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Drawing_Primitives|GLType]], function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Color&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b[, number a] } |&lt;br /&gt;
      number r, number g, number b[, number a] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Vertex&#039;&#039;&#039;&lt;br /&gt;
  ( { number x, number y [, number z [, number w ]] } |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Normal&#039;&#039;&#039;&lt;br /&gt;
  (  number x, number y, number z |&lt;br /&gt;
   { number x, number y, number z } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.EdgeFlag&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Rect&#039;&#039;&#039;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexRect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;texture rect&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number y1, number x2, number y2,&lt;br /&gt;
  [ boolean flip_s, boolean flip_t | number s1, number t1, number s2, number t2 ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Shape&#039;&#039;&#039;&lt;br /&gt;
 ( number [[Lua_ConstGL#Drawing_Primitives|GLtype]],&lt;br /&gt;
   elements = {&lt;br /&gt;
     [1] = { v | vertex   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;required&amp;lt;/font&amp;gt;&lt;br /&gt;
             n | normal   = { number x, number y, number z },           &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             t | texcoord = { number x, number y },                     &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
             c | color    = { number r, number g, number b, number a }  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;optional&amp;lt;/font&amp;gt;&lt;br /&gt;
     },&lt;br /&gt;
     etc ...&lt;br /&gt;
   }&lt;br /&gt;
 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.SecondaryColor&#039;&#039;&#039;&lt;br /&gt;
  ( { number r, number g, number b } |&lt;br /&gt;
      number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FogCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number value ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Display Lists =&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Display Lists save given vertex attributes in a static buffer, so the GPU can directly read them (without the CPU). Display Lists are a lot faster (10-60x) than standard drawing with glShape/glBeginEnd, so try to use them when ever you can. If you want to learn more about them, g00gle is your friend ;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateList&#039;&#039;&#039;&lt;br /&gt;
  ( function [,arg1 [,arg2...]] ) -&amp;gt; number listID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CallList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteList&#039;&#039;&#039;&lt;br /&gt;
  ( number listID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Text =&lt;br /&gt;
&#039;&#039;&#039;gl.Text&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;, number x, number y, number size [, string &amp;lt;span class=note&amp;gt;&amp;quot;options&amp;quot;&amp;lt;/span&amp;gt;] )&lt;br /&gt;
&amp;lt;span class=note&amp;gt;&lt;br /&gt;
  options are:&lt;br /&gt;
    horizontal alignment:&lt;br /&gt;
       &#039;c&#039; = center&lt;br /&gt;
       &#039;r&#039; = right&lt;br /&gt;
    vertical alignment:&lt;br /&gt;
       &#039;a&#039; = ascender&lt;br /&gt;
       &#039;t&#039; = top&lt;br /&gt;
       &#039;v&#039; = vertical center&lt;br /&gt;
       &#039;x&#039; = baseline&lt;br /&gt;
       &#039;b&#039; = bottom&lt;br /&gt;
       &#039;d&#039; = descender&lt;br /&gt;
    decorations:&lt;br /&gt;
       &#039;o&#039; = black outline&lt;br /&gt;
       &#039;O&#039; = white outline&lt;br /&gt;
       &#039;s&#039; = shadow&lt;br /&gt;
    other:&lt;br /&gt;
       &#039;n&#039; = don&#039;t round vertex coords to nearest integer (font may get blurry)&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
http://home.arcor.de/jkei/fontlines.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetTextWidth&#039;&#039;&#039;&lt;br /&gt;
  (string &amp;quot;text&amp;quot;) -&amp;gt; number width  &amp;lt;span class=note&amp;gt;(in pixels, with a font size of 1.0)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetTextHeight&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;text&amp;quot; ) -&amp;gt; nil | number height, number descender, number numlines &amp;lt;span class=note&amp;gt;(in pixels, with a font size of 1.0)&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;further descriptions here: [[GetTextHeight]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=note&amp;gt;&amp;lt;b&amp;gt;If you have multiple gl.Text calls, then you can bunch them between a gl.BeginText and gl.EndText to speedup the rendering.&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gl.BeginText&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.EndText&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Unit/Feature Draw Functions =&lt;br /&gt;
&#039;&#039;&#039;gl.Unit&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(draws an unit; on default it uses LOD, with lod&amp;lt;0 it is turned off, else it defines a specific level)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitRaw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(doesn&#039;t apply worldspace-&amp;gt;unit transformation! only works if &amp;lt;i&amp;gt;rawdraw&amp;lt;/i&amp;gt; is true )&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, [ boolean rawdraw, int lod ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitShape&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Feature&#039;&#039;&#039;&lt;br /&gt;
  ( number featureID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.FeatureShape&#039;&#039;&#039;&lt;br /&gt;
  ( number featureDefID, number teamID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(world space -&amp;gt; unit space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMultMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(unit space -&amp;gt; piece space)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPiece&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(draws the unit piece)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnitPieceMatrix&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(use gl.UnitPieceMultMatrix instead!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, int piece ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawListAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, number listID, [ boolean midPos,&lt;br /&gt;
      number scaleX, number scaleY, number scaleZ,&lt;br /&gt;
      number degrees, number rotX, number rotX, number rotZ ] ) -&amp;gt; nil &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawFuncAtUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID, boolean midPos, function [, arg1,... ]) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= States (Blending,AlphaTest...) =&lt;br /&gt;
&#039;&#039;&#039;gl.Blending&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#BlendingFactorSrc|srcmode]], number [[Lua_ConstGL#BlendingFactorDest|dstmode]] ) -&amp;gt; nil&lt;br /&gt;
  ( string &amp;lt;span class=note&amp;gt;mode&amp;lt;/span&amp;gt; ) -&amp;gt; nil&lt;br /&gt;
{| cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin-top: -5px; margin-left:5px&amp;quot;&lt;br /&gt;
! style=&amp;quot;color:#55ee99&amp;quot; | mode maybe:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | &amp;quot;add&amp;quot;&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = GL.ONE, GL.ONE&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | &amp;quot;alpha_add&amp;quot;&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = GL.SRC_ALPHA, GL.ONE&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | &amp;quot;alpha&amp;quot;&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | &amp;quot;reset&amp;quot;&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | &amp;quot;color&amp;quot;&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = GL.SRC_COLOR, GL.ONE_MINUS_SRC_ALPHA&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | &amp;quot;modulate&amp;quot;&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = GL.DST_COLOR, GL.ZERO&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | &amp;quot;disable&amp;quot;&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BlendEquation&#039;&#039;&#039;&lt;br /&gt;
  ( number mode ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BlendFunc&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#BlendingFactorSrc|srcmode]], number [[Lua_ConstGL#BlendingFactorDest|dstmode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BlendEquationSeparate&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;(needs openGL2.0!)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number modeRGB, number modeAlpha ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.BlendFuncSeparate&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;(needs openGL2.0!)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number [[Lua_ConstGL#BlendingFactorSrc|srcRGB]], number [[Lua_ConstGL#BlendingFactorDest|dstRGB]],  number [[Lua_ConstGL#BlendingFactorSrc|srcAlpha]], number [[Lua_ConstGL#BlendingFactorDest|dstAlpha]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.AlphaTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]], number threshold ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Culling&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#Culling|face]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthClamp&#039;&#039;&#039;  &amp;lt;span class=warning&amp;gt;not always available, needs GL.NV_depth_clamp!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DepthMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ColorMask&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( boolean r, boolean g, boolean b, boolean a ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LogicOp&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number [[Lua_ConstGL#LogicOp|func]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Fog&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Smoothing&#039;&#039;&#039;&lt;br /&gt;
 ( (boolean enable | number POINT), &lt;br /&gt;
   (boolean enable | number LINE),&lt;br /&gt;
   (boolean enable | number POLYGON) ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.EdgeFlag&#039;&#039;&#039;&lt;br /&gt;
 ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Scissor&#039;&#039;&#039;&lt;br /&gt;
  ( boolean ) -&amp;gt; nil&lt;br /&gt;
  ( int x, int y, int w, int h ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.LineStipple&#039;&#039;&#039;&lt;br /&gt;
  ( string any ) -&amp;gt; nil &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(use springs default line stipple)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
  ( int factor, number pattern ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonMode&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number [[Lua_ConstGL#PolygonMode|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PolygonOffset&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable | number factor, number units ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PushAttrib&#039;&#039;&#039;&lt;br /&gt;
  ( [ number [[Lua_ConstGL#glPushAttrib.28.29_bits|attrib]] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PopAttrib&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Stencil =&lt;br /&gt;
&#039;&#039;&#039;gl.StencilTest&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.StencilMask&#039;&#039;&#039;&lt;br /&gt;
  ( number mask ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.StencilFunc&#039;&#039;&#039;&lt;br /&gt;
  ( number func, number ref, number mask ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.StencilOp&#039;&#039;&#039;&lt;br /&gt;
  ( number fail, number zfail, number zpass ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.StencilMaskSeparate&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;(needs openGL2.0!)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number mask ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.StencilFuncSeparate&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;(needs openGL2.0!)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number func, number ref, number mask ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.StencilOpSeparate&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;(needs openGL2.0!)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( number [[Lua_ConstGL#Culling|face]], number fail, number zfail, number zpass ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= LineWidth &amp;amp; PointSize =&lt;br /&gt;
&#039;&#039;&#039;gl.LineWidth&#039;&#039;&#039;&lt;br /&gt;
  ( number width ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSize&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(values != 1 can break severely on ATI cards, see http://springrts.com/mantis/view.php?id=2390)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number size ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointSprite&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable, [boolean coord_replace, boolean coord_origin_upper] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.PointParameter&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs openGL2.0!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number v1, number v2, number v3, &lt;br /&gt;
    [ number sizeMin, number sizeMax, number sizeFade ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Textures =&lt;br /&gt;
&#039;&#039;&#039;gl.Texture&#039;&#039;&#039;&lt;br /&gt;
  ( [ number texNum, ] boolean enable | string &amp;lt;span class=note&amp;gt;name&amp;lt;/span&amp;gt; ) -&amp;gt; nil | boolean loaded&lt;br /&gt;
&amp;lt;font color=#dd9944&amp;gt;This is the only call-out that is needed to load and draw any texture in a Lua script. All you have to do is pass it a valid path to a valid png and it will use that image for drawing any subsequent textured rectangles. This is shown in the last line of the following list of valid strings for the name parameter.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=note&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin-top: -5px; margin-left:5px&amp;quot;&lt;br /&gt;
! style=&amp;quot;color:#55ee99; text-align:left&amp;quot; |`name` maybe:&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | #12&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = unitDef 12 buildpic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | %34:1&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = unitDef 34 s3o tex2 (:0-&amp;gt;tex1,:1-&amp;gt;tex2)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | %-102:0&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = featureDef 102 s3o tex1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | !56&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = lua generated texture 56 (= return value of gl.CreateTexture)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $units&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = 3do textureatlas tex1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $units1&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = 3do textureatlas tex1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $units2&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = 3do textureatlas tex2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $shadow&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = shadowmap&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $specular&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = specular cube map&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $reflection&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = reflection cube map&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $shading&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = ground shading texture&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $grass&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = grass shading texture&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | $heightmap&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = heightmap (needs HeightMapTexture=1 set in spring config)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | ${opt}:/LuaUI/images/image.png &lt;br /&gt;
| style=&amp;quot;color:#55ee99&amp;quot; | = load a texture from the VFS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
   possible ${opt}&#039;s are:&lt;br /&gt;
      &#039;n&#039; = nearest&lt;br /&gt;
      &#039;l&#039; = linear&lt;br /&gt;
      &#039;a&#039; = aniso&lt;br /&gt;
      &#039;i&#039; = invert&lt;br /&gt;
      &#039;g&#039; = greyed&lt;br /&gt;
      &#039;c&#039; = clamped&lt;br /&gt;
      &#039;b&#039; = border&lt;br /&gt;
      &#039;t%r,%g,%b&#039; = tint&lt;br /&gt;
      &#039;r%width,%height&#039; = resize&lt;br /&gt;
&lt;br /&gt;
    example: &amp;quot;:iac:/LuaUI/images/image.png&amp;quot;&lt;br /&gt;
    example: &amp;quot;:cr16,16:/LuaUI/images/image.png&amp;quot;&lt;br /&gt;
    example2: &amp;quot;:t1.0,0.5,0:/LuaUI/images/image.png&amp;quot;  (orange tint)&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CreateTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int xsize, int ysize,&lt;br /&gt;
  [ { &lt;br /&gt;
    [target     = number,] &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(like GL.TEXTURE_1D,GL.TEXTURE_2D,...)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [format     = number,]&lt;br /&gt;
    [min_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [mag_filter = [[Lua_ConstGL#Texture_Filtering|number]],]&lt;br /&gt;
    [wrap_s     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_t     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [wrap_r     = [[Lua_ConstGL#Texture_Clamping|number]],]&lt;br /&gt;
    [aniso      = number,]&lt;br /&gt;
    [border     = boolean,]&lt;br /&gt;
    [fbo        = boolean,] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
    [fboDepth   = boolean] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  } ]&lt;br /&gt;
  ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTexture&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteTextureFBO&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TextureInfo&#039;&#039;&#039;&lt;br /&gt;
  ( string texture ) -&amp;gt; nil | {&lt;br /&gt;
      xsize = number,&lt;br /&gt;
      ysize = number,&lt;br /&gt;
      alpha = boolean, //not used yet&lt;br /&gt;
      type  = number,  //not used yet&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&lt;br /&gt;
   the format of the texture string is the same as in gl.Texture()&lt;br /&gt;
&amp;lt;/font&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( number x | &lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexCoord&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum,&lt;br /&gt;
    number x |&lt;br /&gt;
    number x, number y |&lt;br /&gt;
    number x, number y, number z |&lt;br /&gt;
    number x, number y, number z, number w |&lt;br /&gt;
    { number x [, number y [, number z [, number w ]]] } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexEnv&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Environment|target]], number [[Lua_ConstGL#Texture_Environment|pname]],&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Environment|value]] |&lt;br /&gt;
    number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.TexGen&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.MultiTexGen&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, number [[Lua_ConstGL#Texture_Generation|target]],&lt;br /&gt;
    boolean state |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number value |&lt;br /&gt;
    number [[Lua_ConstGL#Texture_Generation|pname]], number var1, number var2, number var3 ) -&amp;gt; nil       &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.CopyToTexture&#039;&#039;&#039;&lt;br /&gt;
  (string texture, int xoff, int yoff, int x, int y, int w, int h &lt;br /&gt;
  [,number target,number level])-&amp;gt;nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.RenderToTexture&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs GLEW_EXT_framebuffer_object!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string fbotexture, lua_func ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GenerateMipmap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;(needs glGenerateMipmapEXT!)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string texture ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
= PixelReadback =&lt;br /&gt;
&#039;&#039;&#039;gl.SaveImage&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number w, number h,&lt;br /&gt;
    string filename [, table {alpha=boolean, yflip=boolean} ] ) -&amp;gt; nil | boolean success&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ReadPixels&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number w, number h [, number format = GL.RGBA ] )&lt;br /&gt;
    -&amp;gt; nil | number r,[g,[b,[a]]] | table { { {1 = number r, 2 = number g, 3 = number b, 4 = number a}, ... }, ... }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lights =&lt;br /&gt;
&#039;&#039;&#039;gl.Lighting&#039;&#039;&#039;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.ShadeModel&#039;&#039;&#039;&lt;br /&gt;
  ( number [[Lua_ConstGL#ShadeModel|mode]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Light&#039;&#039;&#039;&lt;br /&gt;
  ( int light, &lt;br /&gt;
  boolean enable |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param |&lt;br /&gt;
  number [[Lua_ConstGL#Light_Specification|pname]], number param1, number param2, number param3 ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Material&#039;&#039;&#039;&lt;br /&gt;
  ({&lt;br /&gt;
    ambient   = {number r, number g, number b[, number a]},&lt;br /&gt;
    diffuse   = {number r, number g, number b[, number a]},&lt;br /&gt;
    ambidiff  = {number r, number g, number b[, number a]},&lt;br /&gt;
    emission  = {number r, number g, number b[, number a]},&lt;br /&gt;
    specular  = {number r, number g, number b[, number a]},&lt;br /&gt;
    shininess = number specularExponent&lt;br /&gt;
  }) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware relevant =&lt;br /&gt;
&#039;&#039;&#039;gl.HasExtension&#039;&#039;&#039;&lt;br /&gt;
  ( string extname ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetNumber&#039;&#039;&#039;&lt;br /&gt;
  ( number ext, int count ) -&amp;gt; number [, number, number, ... #count ]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetString&#039;&#039;&#039;&lt;br /&gt;
  ( number ext ) -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= DrawGroundPrimitives =&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundCircle&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z, number radius, number divs [, number slope ] ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Note: number divs is the number of sides the circle will have. the higher the smoother the circle (and more GPU intensive) &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.DrawGroundQuad&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Note: x1,z1,x2 &amp;amp; z2 are rounded, so don&#039;t use it for very small or moving objects. x and z are correspond to the coordinates displayed by the tooltip &amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number z1, number x2, number z2,&lt;br /&gt;
    [ boolean useNorm, &amp;lt;span class=warning&amp;gt;(does nothing!)&amp;lt;/span&amp;gt;&lt;br /&gt;
      [ number tu1, number tv1, number tu2, number tv2 |&lt;br /&gt;
        boolean useTextureCoord ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Queries =&lt;br /&gt;
&#039;&#039;&#039;gl.CreateQuery&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;needs &amp;gt;=OpengGL2.0!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( ) -&amp;gt; nil | userdata query&lt;br /&gt;
&#039;&#039;&#039;gl.DeleteQuery&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;needs &amp;gt;=OpengGL2.0!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( userdata query ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.RunQuery&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;needs &amp;gt;=OpengGL2.0!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( userdata query, function, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;gl.GetQuery&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;needs &amp;gt;=OpengGL2.0!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( userdata query ) -&amp;gt; nil | number renderedFragments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Extended =&lt;br /&gt;
&#039;&#039;&#039;gl.ActiveTexture&#039;&#039;&#039;&lt;br /&gt;
  ( int texNum, function [, arg1,... ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexNames&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; { [1] = string texture, etc ... }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetGlobalTexCoords&#039;&#039;&#039; &amp;lt;span class=note&amp;gt;gets the texcoord of a 3do texture in the 3do texture atlas&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string 3doTextureName ) -&amp;gt; number xstart, number ystart, number xend, number yend&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.UnsafeState&#039;&#039;&#039;&lt;br /&gt;
  ( number state [, boolean disable_state ], function, arg1, arg2, ... ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;Calls glEnable(state) or glDisable(state) (if disable_state==true) and&amp;lt;br&amp;gt;then calls the lua_function and afterwards reverts the state.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetShadowMapParams&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; number xmid, number ymid, number p17, number p18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.GetMatrixData&#039;&#039;&#039;&lt;br /&gt;
  ( GL.PROJECTION [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( GL.MODELVIEW  [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i] &lt;br /&gt;
  ( GL.TEXTURE    [, int i] ) -&amp;gt; nil | number, etc.. | number Matrix[i]&lt;br /&gt;
  ( &amp;quot;shadow&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camera&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;caminv&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;camprj&amp;quot; )                -&amp;gt; nil | number, etc.. &lt;br /&gt;
  ( &amp;quot;billboard&amp;quot; )             -&amp;gt; nil | number, etc.. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Flush&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;gl.Finish&#039;&#039;&#039;&lt;br /&gt;
  () -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Shaders (GLSL) =&lt;br /&gt;
  [[Lua_GLSL_Api]]&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>Ledz</name></author>
	</entry>
	<entry>
		<id>https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12275</id>
		<title>Lua UnsyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://springrts-wiki.p2004a.com/mediawiki/index.php?title=Lua_UnsyncedCtrl&amp;diff=12275"/>
		<updated>2012-05-07T15:15:09Z</updated>

		<summary type="html">&lt;p&gt;Ledz: Added argument to MarkerAddPoint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Lua_Scripting|Lua Scripting]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
NOTE: Entries below marked &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt; require the setting ModUICtrl to be enabled in the users [[springrc]], if you want to use them in unsynced LuaRules/LuaGaia. It is enabled by default so you generally don&#039;t need to care.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= UI =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetLastMessagePosition&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Ingame Console =&lt;br /&gt;
&#039;&#039;&#039;Spring.Echo&#039;&#039;&#039;&lt;br /&gt;
  ( arg1 [, arg2 [, ... ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Useful for debugging.&amp;lt;br&amp;gt; Prints values in the spring chat console.&amp;lt;br&amp;gt; Hint: the default print() writes to STDOUT.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.Log&#039;&#039;&#039;&lt;br /&gt;
  ( int logLevel | string logLevel, &lt;br /&gt;
    arg2 [, arg3 [, ... ] ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Possible values for logLevel are:&lt;br /&gt;
    &amp;quot;debug&amp;quot;   | LOG.DEBUG&lt;br /&gt;
    &amp;quot;info&amp;quot;    | LOG.INFO&lt;br /&gt;
    &amp;quot;warning&amp;quot; | LOG.WARNING&lt;br /&gt;
    &amp;quot;error&amp;quot;   | LOG.ERROR&lt;br /&gt;
    &amp;quot;fatal&amp;quot;   | LOG.FATAL&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendCommands&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string command1 [, string command2 [ ... ] ] ) -&amp;gt; nil&lt;br /&gt;
  ( {string command1, string command2, ...} ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetActiveCommand&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string action [, string actionExtra ] ) -&amp;gt; nil | boolean&lt;br /&gt;
  ( number cmdIndex [, number button = 1&lt;br /&gt;
    [, boolean leftClick, boolean rightClick,&lt;br /&gt;
     boolean alt, boolean ctrl, boolean meta, boolean shift]] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.ForceLayoutUpdate&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSelectionInfo&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;disables the &amp;quot;Selected Units x&amp;quot; box in the GUI&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( boolean enable ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetMouseCursor&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string cursorName [, number scale ] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.WarpMouse&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x, number y ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== LOS Colors ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetLosViewColors&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( table reds = { number always, number LOS, number radar, number jam }, &lt;br /&gt;
    table greens = { number always, number LOS, number radar, number jam },&lt;br /&gt;
    table blues = { number always, number LOS, number radar, number jam } ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== SendMessage ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessage&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToPlayer&#039;&#039;&#039;&lt;br /&gt;
  ( number playerID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToAllyTeam&#039;&#039;&#039;&lt;br /&gt;
  ( number allyID, string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SendMessageToSpectators&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;message&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
Funfact:&lt;br /&gt;
&amp;lt;PLAYER#&amp;gt; (with # being a playerid) inside the string will be replaced with the players name.&lt;br /&gt;
ie&lt;br /&gt;
Spring.SendMessage (&amp;quot;&amp;lt;PLAYER1&amp;gt; did something&amp;quot;)&lt;br /&gt;
might display as &amp;quot;ProRusher did something&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Markers ==&lt;br /&gt;
&#039;&#039;&#039;Spring.MarkerAddPoint&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x, number y, number z [, string text = &amp;quot;&amp;quot;, number localOnly (0/1)] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.MarkerAddLine&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x1, number y1, number z1, number x2, number y2, number z2 ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.MarkerErasePosition&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Sounds =&lt;br /&gt;
&#039;&#039;&#039;Spring.LoadSoundDef&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;soundfile&amp;quot; ) -&amp;gt; nil | boolean success&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;Loads a SoundDefs file, the format is the same as in `gamedata/sounds.lua`.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundFile&#039;&#039;&#039;  &amp;lt;span class=note&amp;gt;Plays WAV or OGG sounds.&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;soundfile&amp;quot; [, number volume = 1.0&lt;br /&gt;
    [, number posx, number posy, number posz &lt;br /&gt;
    [, number speedx, number speedy, number speedz ] ] ], [string/number &amp;lt;span class=note&amp;gt;channel&amp;lt;/span&amp;gt; ] ) -&amp;gt; nil | boolean&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;`channel` is new in Spring0.83, and can be one of those:&lt;br /&gt;
    &amp;quot;general&amp;quot; || 0 || nil (default)&lt;br /&gt;
    &amp;quot;battle&amp;quot; || &amp;quot;sfx&amp;quot; | 1&lt;br /&gt;
    &amp;quot;unitreply&amp;quot; || &amp;quot;voice&amp;quot; || 2&lt;br /&gt;
    &amp;quot;userinterface&amp;quot; || &amp;quot;ui&amp;quot; || 3&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.PlaySoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;oggfile&amp;quot; [, number volume = 1.0&lt;br /&gt;
    [, number x, number y, number z ]] ) -&amp;gt; nil | boolean true&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;Allow you to play an Ogg Vorbis (.OGG) compressed sound file.&amp;lt;br&amp;gt; In 83.0 and up multiple sound streams may be played at once &amp;lt;/span&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.StopSoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;Terminates any SoundStream currently running.&amp;lt;/span&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.PauseSoundStream&#039;&#039;&#039;&lt;br /&gt;
  ( ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetSoundStreamVolume&#039;&#039;&#039;&lt;br /&gt;
  ( number volume ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= SendLuaMessage =&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Very important! (allows synced inter-lua-enviroment communications)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SendLuaUIMsg&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string message, string mode ) -&amp;gt; nil&lt;br /&gt;
  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;possible modes are:&amp;lt;br&amp;gt;&amp;quot;s&amp;quot;/&amp;quot;specs&amp;quot; &amp;amp; &amp;quot;a&amp;quot;/&amp;quot;allies&amp;quot;&amp;lt;/font&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Spring.SendLuaGaiaMsg&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string message ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SendLuaRulesMsg&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string message ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= AI =&lt;br /&gt;
&#039;&#039;&#039;Spring.SendSkirmishAIMessage&#039;&#039;&#039; {{new|83.0}}&lt;br /&gt;
  ( number aiTeam, string message )&lt;br /&gt;
  -&amp;gt; nil | boolean ai_processed, { [1] = string response1, etc... }&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;Note there is nothing in this table due to &amp;quot;limitations&amp;quot; of the AI interface.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Units =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitLeaveTracks&#039;&#039;&#039; {{new|83.0}}&lt;br /&gt;
  ( number unitID, boolean leavetracks ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Selection ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitMap&#039;&#039;&#039;&lt;br /&gt;
  ( { [unitID] = anything, ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SelectUnitArray&#039;&#039;&#039;&lt;br /&gt;
  ( { [1] = unitID1 , [2] = unitID2 , ...} [,boolean append] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSelectionInfo&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSelectionInfo ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit Group ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitGroup&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, number groupID ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Give Order ==&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrder&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;gives order to all selected units&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil | boolean true&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnit&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID,&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil | boolean true&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitMap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( unitMap = { [unitID] = dontCare, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil | boolean true&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderToUnitArray&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( unitArray = { [1] = unitID, etc... },&lt;br /&gt;
    number cmdID,&lt;br /&gt;
    params = {number, etc...},&lt;br /&gt;
    options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;} ) -&amp;gt; nil | boolean true&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitMap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( unitMap = { [number unitID] = dontCare, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        params = {number, etc...},&lt;br /&gt;
        options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil | boolean true&lt;br /&gt;
&#039;&#039;&#039;Spring.GiveOrderArrayToUnitArray&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( unitArray = { [1] = number unitID, etc... },&lt;br /&gt;
    orderArray = {&lt;br /&gt;
      { number cmdID,&lt;br /&gt;
        params = {number, etc...},&lt;br /&gt;
        options = {&amp;quot;alt&amp;quot;, &amp;quot;ctrl&amp;quot;, &amp;quot;shift&amp;quot;, &amp;quot;right&amp;quot;}&lt;br /&gt;
      }, ..&lt;br /&gt;
    }&lt;br /&gt;
  ) -&amp;gt; nil | boolean true&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetBuildFacing&#039;&#039;&#039;&lt;br /&gt;
  ( int Facing ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetBuildSpacing&#039;&#039;&#039;&lt;br /&gt;
  ( int Spacing ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
== Unit NoDraw,NoSelect,NoMinimap ==&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoDraw&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noDraw ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoSelect&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noSelect ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitNoMinimap&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;LuaGadgets only!&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitID, boolean noMinimap ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawSky&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawSky ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawWater&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawWater ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetDrawGround&#039;&#039;&#039;&lt;br /&gt;
  ( boolean drawGround ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetWaterParams&#039;&#039;&#039; &amp;lt;span class=warning&amp;gt;needs cheating enabled!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( table params ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Allows to change water params (mostly BumpWater ones) at runtime. You may want to set BumpWaterUseUniforms in your [[springrc]] to 1, then you don&#039;t even need to restart BumpWater via `/water 4`.&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span class=note&amp;gt;`params` table may contain:&lt;br /&gt;
  params = {&lt;br /&gt;
    absorb = {number r, number g, number b},&lt;br /&gt;
    baseColor = {number r, number g, number b},&lt;br /&gt;
    minColor = {number r, number g, number b},&lt;br /&gt;
    surfaceColor = {number r, number g, number b},&lt;br /&gt;
    diffuseColor = {number r, number g, number b},&lt;br /&gt;
    specularColor = {number r, number g, number b},&lt;br /&gt;
    planeColor = {number r, number g, number b},&lt;br /&gt;
    texture = string file,&lt;br /&gt;
    foamTexture = string file,&lt;br /&gt;
    normalTexture = string file,&lt;br /&gt;
    damage = number value,&lt;br /&gt;
    repeatX = number value,&lt;br /&gt;
    repeatY = number value,&lt;br /&gt;
    surfaceAlpha = number value,&lt;br /&gt;
    ambientFactor = number value,&lt;br /&gt;
    diffuseFactor = number value,&lt;br /&gt;
    specularFactor = number value,&lt;br /&gt;
    specularPower = number value,&lt;br /&gt;
    fresnelMin = number value,&lt;br /&gt;
    fresnelMax = number value,&lt;br /&gt;
    fresnelPower = number value,&lt;br /&gt;
    reflectionDistortion = number value,&lt;br /&gt;
    blurBase = number value,&lt;br /&gt;
    blurExponent = number value,&lt;br /&gt;
    perlinStartFreq = number value,&lt;br /&gt;
    perlinLacunarity = number value,&lt;br /&gt;
    perlinAmplitude = number value,&lt;br /&gt;
    numTiles = number value,&lt;br /&gt;
    shoreWaves = boolean value,&lt;br /&gt;
    forceRendering = boolean value,&lt;br /&gt;
    hasWaterPlane = boolean value,&lt;br /&gt;
  }&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GUI =&lt;br /&gt;
&#039;&#039;&#039;Spring.DrawUnitCommands&#039;&#039;&#039;&lt;br /&gt;
  ( number unitID ) -&amp;gt; nil&lt;br /&gt;
  ( { [1] = unitID, ... } [, false ] ) -&amp;gt; nil&lt;br /&gt;
  ( { [unitID] = anything, ... }, true  ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetTeamColor&#039;&#039;&#039;&lt;br /&gt;
  ( number teamID, number r, number g, number b ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AssignMouseCursor&#039;&#039;&#039; &amp;lt;font class=note&amp;gt;changes/creates the cursor of a single CursorCmd&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;cmdName&amp;quot;, string &amp;quot;iconFileName&amp;quot;&lt;br /&gt;
    [, boolean overwrite = true [, boolean hotSpotTopLeft = false] ] ) -&amp;gt; nil | boolean&lt;br /&gt;
&amp;lt;font class=note&amp;gt;Note, that iconFileName is not the full filename instead it is like this:&lt;br /&gt;
  filename: Anims/cursorattack_0.bmp&lt;br /&gt;
  iconFileName: cursorattack&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.ReplaceMouseCursor&#039;&#039;&#039; &amp;lt;font class=note&amp;gt;mass replace all occurrence of the cursor in all CursorCmds&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;oldFileName&amp;quot;, string &amp;quot;newFileName&amp;quot; [, boolean hotSpotTopLeft = false] ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCustomCommandDrawData&#039;&#039;&#039; &amp;lt;font class=note&amp;gt;register your custom cmd so it gets visible in the unit&#039;s cmd queue&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number cmdID,&lt;br /&gt;
    number cmdIconID | string iconname | nil,&lt;br /&gt;
    { number r, number g, number b, number a } [, boolean showArea ] ) -&amp;gt; nil | true&lt;br /&gt;
&lt;br /&gt;
= Sharing =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetShareLevel&#039;&#039;&#039; &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;note: shareLevel is 0&amp;lt;= x &amp;lt;= 1&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot;, number shareLevel ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.ShareResources&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number teamID, string &amp;quot;units&amp;quot; ) -&amp;gt; nil&lt;br /&gt;
  ( number teamID, string &amp;quot;metal&amp;quot; | &amp;quot;energy&amp;quot;, number amount ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= UnitDef RadarIcons &amp;amp; BuildPics =&lt;br /&gt;
&#039;&#039;&#039;Spring.AddUnitIcon&#039;&#039;&#039;&lt;br /&gt;
  ( string iconName, string texFile [, number size [, number dist [, boolean radAdjust ]]] ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.FreeUnitIcon&#039;&#039;&#039;&lt;br /&gt;
  ( string iconName ) -&amp;gt; nil | boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitDefIcon&#039;&#039;&#039;  &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(RadarIcon)&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, string iconName ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.SetUnitDefImage&#039;&#039;&#039;   &amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;(BuildPic)&amp;lt;/font&amp;gt; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number unitDefID, luaTexture | string texFile ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Camera =&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraState&#039;&#039;&#039;&lt;br /&gt;
  ( table camState, number camTime) -&amp;gt; nil | boolean&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;camState has the same format as the output of Spring.GetCameraState(). See [[Lua_camState]] for details about camState.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraTarget&#039;&#039;&#039;&lt;br /&gt;
  ( number x, number z, number y [,number transTime] ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;For Spring Engine XZ represents horizontal, from north west corner of map and Y vertical, from water level and rising.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetCameraOffset&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( [number px = 0 [, number py = 0 [, number pz = 0&lt;br /&gt;
     [, number tx = 0 [, number ty = 0 [, number tz = 0]]]]]] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= (Virtual-)FileSystem =&lt;br /&gt;
&#039;&#039;&#039;Spring.ExtractModArchiveFile&#039;&#039;&#039;&lt;br /&gt;
  ( string modfile ) -&amp;gt; boolean&lt;br /&gt;
&#039;&#039;&#039;Spring.CreateDir&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( number path ) -&amp;gt; nil | boolean&lt;br /&gt;
&lt;br /&gt;
= Engine Config =&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;The following functions read the engine configs saved in [[springrc]], a version-ed instance of these or a custom file supplied on the command line.&lt;br /&gt;
If &#039;&#039;*Overlay&#039;&#039; is &#039;&#039;true&#039;&#039;, the value will only be set in memory, and not be restored for the next game&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.GetConfigInt&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string name [, number default [, boolean setInOverlay = false]] ) -&amp;gt; nil | number&lt;br /&gt;
&#039;&#039;&#039;Spring.SetConfigInt&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string name, number value [, boolean useOverlay = false] ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.GetConfigString&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string name [, string default [, boolean setInOverlay = false]] ) -&amp;gt; nil | string&lt;br /&gt;
&#039;&#039;&#039;Spring.SetConfigString&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(needs ModUICtrl)&amp;lt;/font&amp;gt;&lt;br /&gt;
  ( string name, string value [, boolean useOverlay = false] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= World Primitives =&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;outdated! use opengl api instead!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldIcon&#039;&#039;&#039;&lt;br /&gt;
  ( number cmdID, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldText&#039;&#039;&#039;&lt;br /&gt;
  ( string &amp;quot;text&amp;quot;, number x, number y, number z ) -&amp;gt; nil&lt;br /&gt;
&#039;&#039;&#039;Spring.AddWorldUnit&#039;&#039;&#039;&lt;br /&gt;
  ( number unitDefID,&lt;br /&gt;
    number x, number y, number z,&lt;br /&gt;
    number team, number facing) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Misc =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.Restart&#039;&#039;&#039; {{new|0.79}}&lt;br /&gt;
  ( string commandline_args, string startscript )&lt;br /&gt;
    -&amp;gt; if this call returns, something went wrong&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&#039;&#039;commandline_args&#039;&#039; are commandline arguments passed to spring executable&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;start-script is the CONTENT of the script.txt spring should use to start (if empty, no start-script is added, you can still point spring to your custom script.txt when you add the file-path to &#039;&#039;commandline_args&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetWMIcon&#039;&#039;&#039; {{new|83.0}}&lt;br /&gt;
  ( string iconFileName ) -&amp;gt; nil&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Sets the icon for the process which is seen in the OS task-bar and other places (default: spring-logo).&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: has to be 24bit or 32bit&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: on windows, it has to be 32x32 pixels in size (recommended for cross-platform)&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: &#039;&#039;*.bmp&#039;&#039; images have to be in BGR format (default for m$ ones).&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: &#039;&#039;*.ico&#039;&#039; images are not supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetWMCaption&#039;&#039;&#039; {{new|83.0}}&lt;br /&gt;
  ( string title [, string titleShort = title ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;Sets the window &#039;&#039;title&#039;&#039; for the process (default: &amp;quot;Spring &amp;lt;version&amp;gt;&amp;quot;).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;The &#039;&#039;shortTitle&#039;&#039; is displayed in the OS task-bar (default: &amp;quot;Spring &amp;lt;version&amp;gt;&amp;quot;).&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;#55ee99&amp;quot;&amp;gt;&#039;&#039;&#039;NOTE:&#039;&#039;&#039; &#039;&#039;shortTitle&#039;&#039; is only ever possibly used under X11 (Linux &amp;amp; OS X), but not with QT (KDE) and never under Windows. See [http://www.gpwiki.org/index.php/SDL:Tutorials:Initializing_SDL_Libraries#About_the_icon_.28.22Icon_Title.22.29_parameter_on_different_window-managers this site] for more details.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.ClearWatchdogTimer&#039;&#039;&#039; {{new|83.0}}&lt;br /&gt;
  ( [ string threadName = main ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
= Rendering =&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;NOTE: these (0.83+) lighting callouts only work when called from unsynced gadgets!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.AddMapLight&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(requires MaxDynamicMapLights &amp;amp;gt; 0)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (table lightParams) -&amp;gt; number lightHandle&lt;br /&gt;
&#039;&#039;&#039;Spring.AddModelLight&#039;&#039;&#039; &amp;lt;font color=&amp;quot;red&amp;quot; style=&amp;quot;font-weight:600&amp;quot;&amp;gt;(requires MaxDynamicModelLights &amp;amp;gt; 0)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (table lightParams) -&amp;gt; number lightHandle&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.UpdateMapLight&#039;&#039;&#039;&lt;br /&gt;
  (number lightHandle, table lightParams) -&amp;gt; boolean success&lt;br /&gt;
&#039;&#039;&#039;Spring.UpdateModelLight&#039;&#039;&#039;&lt;br /&gt;
  (number lightHandle, table lightParams) -&amp;gt; boolean success&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetMapLightTrackingState&#039;&#039;&#039;&lt;br /&gt;
  (number lightHandle, number unitOrProjectileID,&lt;br /&gt;
   boolean enableTracking, boolean unitOrProjectile) -&amp;gt; boolean success&lt;br /&gt;
&#039;&#039;&#039;Spring.SetModelLightTrackingState&#039;&#039;&#039;&lt;br /&gt;
  (number lightHandle, number unitOrProjectileID,&lt;br /&gt;
   boolean enableTracking, boolean unitOrProjectile) -&amp;gt; boolean success&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lightParams&#039;&#039;&#039; is a table that should contain at least one of the following recognized key/value pairs:&lt;br /&gt;
&lt;br /&gt;
    lightParams = {&lt;br /&gt;
        position = {px, py, pz},&lt;br /&gt;
        direction = {dx, dy, dz},&lt;br /&gt;
        ambientColor = {red, green, blue},&lt;br /&gt;
        diffuseColor = {red, green, blue},&lt;br /&gt;
        specularColor = {red, green, blue},&lt;br /&gt;
        intensityWeight = {ambientWeight, diffuseWeight, specularWeight},&lt;br /&gt;
&lt;br /&gt;
        -- per-frame decay of ambientColor (spread over TTL frames)&lt;br /&gt;
        ambientDecayRate = {ambientRedDecay, ambientGreenDecay, ambientBlueDecay},&lt;br /&gt;
        -- per-frame decay of diffuseColor (spread over TTL frames)&lt;br /&gt;
        diffuseDecayRate = {diffuseRedDecay, diffuseGreenDecay, diffuseBlueDecay},&lt;br /&gt;
        -- per-frame decay of specularColor (spread over TTL frames)&lt;br /&gt;
        specularDecayRate = {specularRedDecay, specularGreenDecay, specularBlueDecay},&lt;br /&gt;
        -- *DecayType = 0.0 -&amp;gt; interpret *DecayRate values as linear, else as exponential&lt;br /&gt;
        decayFunctionType = {ambientDecayType, diffuseDecayType, specularDecayType},&lt;br /&gt;
&lt;br /&gt;
        radius = number elmos,&lt;br /&gt;
        fov = number degrees,&lt;br /&gt;
        ttl = number frames,&lt;br /&gt;
        priority = number,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spring.SetMapSquareTexture&#039;&#039;&#039;&lt;br /&gt;
  (number texSqrX, number texSqrY, string luaTexName) -&amp;gt; boolean success&lt;br /&gt;
&#039;&#039;&#039;Spring.GetMapSquareTexture&#039;&#039;&#039;&lt;br /&gt;
  (number texSqrX, number texSqrY, number texMipLvl, string luaTexName) -&amp;gt; boolean success&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>Ledz</name></author>
	</entry>
</feed>