User:Master-athmos: Difference between revisions

From Spring
Jump to navigationJump to search
No edit summary
Replaced content with "Development < Lua Scripting < {{FULLPAGENAME}} <span class="warning">These functions are ONLY available if the graphic board supp..."
 
Line 1: Line 1:
[[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}}
[[Engine_Development|Development]] < [[Lua_Scripting|Lua Scripting]] < {{FULLPAGENAME}}


= Spring =
<span class="warning">These functions are ONLY available if the graphic board supports GLSL.<br><br> Please test in your scripts if one of them exists before you use them!</span>


{{LuaCallout
|prefix = gl.
|name = GetSun
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} sunPosX, {{type|number}} sunPosY, {{type|number}} sunPosZ
|info =
}}


or
'''gl.CreateShader'''
  ({[ vertex  = "glsl code" ,]
    [ tcs      = "glsl code" ,]
    [ tes      = "glsl code" ,]
    [ geometry = "glsl code" ,]
    [ fragment = "glsl code" ,]
    [ uniform      = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span>
    [ uniformInt    = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span>
    [ uniformFloat  = { uniformName = number value, ...} ,] <span class=note>(specify a Lua array as an argument to uniformName to initialize GLSL arrays)</span>
    [ uniformMatrix = { uniformName = number value, ...} ,]
    [ geoInputType = number inType,]
    [ geoOutputType = number outType,]
    [ geoOutputVerts = number maxVerts,]
    [ definitions = "string of shader #defines", ]
  }) -> number shaderID


{{LuaCallout
* The "Vertex" or vertex-shader is your GLSL-Code as string, its written in a C-Dialect. This shader is busy deforming the geometry of a unit but it can not create new polygons. Use it for waves, wobbling surfaces etc.
|prefix = gl.
|name = GetSun
* The "Geometry" or Geometry-shader can create new vertices and vertice-stripes from points.
|arg1 = {{type|string}} "pos"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} sunPosX, {{type|number}} sunPosY, {{type|number}} sunPosZ
|info =
}}


or
* The "TCS" or Tesselation Control Shader controls how much tessellation a particular patch gets; it also defines the size of a patch, thus allowing it to augment data. It can also filter vertex data taken from the vertex shader. The main purpose of the TCS is to feed the tessellation levels to the Tessellation primitive generator stage, as well as to feed patch data (as its output values) to the Tessellation Evaluation Shader stage. TCS shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.


{{LuaCallout
* The "TES" or Tesselation Evaluation Shader takes the abstract patch generated by the tessellation primitive generation stage, as well as the actual vertex data for the entire patch, and generates a particular vertex from it. Each TES invocation generates a single vertex. It can also take per-patch data provided by the Tessellation Control Shader. TES shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.
|prefix = gl.
|name = GetSun
|arg1 = {{type|string}} "shadowDensity" {{bracket}}
|arg2 = {{type|string}} "unit" {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} shadowDensity
|info =
}}


or
* The "Fragment" or Fragment-shader (sometimes called pixel-Shader) is post processing the allready rendered picture (for example drawing stars on the sky)- remember textures are not always 2 dimensional pictures. They can contain information about the depth, or the third value marks areas and the strength at which these are processed.


{{LuaCallout
* The Uniforms are the values, you send along with the shader-program. To use them in the shader-program declare them like this:
|prefix = gl.
<syntaxhighlight lang="c">uniform float frame;</syntaxhighlight>
|name = GetSun
|arg1 = {{type|string}} "diffuse" {{bracket}}
|arg2 = {{type|string}} "unit" {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b
|info =
}}


or
* From 101.0 onwards, the engine will automatically fill in an appropriately named uniform for team colour if it is declared;
<syntaxhighlight lang="c">uniform vec4 teamColor;</syntaxhighlight>


{{LuaCallout
'''gl.DeleteShader'''
|prefix = gl.
  ( number shaderID ) -> nil
|name = GetSun
|arg1 = {{type|string}} "ambient" {{bracket}}
|arg2 = {{type|string}} "unit" {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b
|info =
}}


or
'''gl.ActiveShader''' <font color="#55ee99">can be used in NON-drawing events (to update uniforms etc.)!</font>
  ( number shaderID, function [, arg1 [, arg2, ..]] ) -> nil


{{LuaCallout
'''gl.UseShader'''
|prefix = gl.
  ( number shaderID ) -> boolean linked
|name = GetSun
|arg1 = {{type|string}} "specular" {{bracket}}
|arg2 = {{type|string}} "unit" {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b
|info =
}}


'''gl.GetShaderLog'''
  ( ) -> string "infoLog"


'''gl.SetShaderParameter'''
<font color="#ff0000">Renamed to SetGeometryShaderParameter in spring version >= 104.0.1-596 (maintenance).</font>
<font color="#55ee99">needed by geometry shader programs (check the opengl GL_ARB_geometry_shader4 extension for glProgramParameteri)</font>
  ( number shaderID, number param, number value ) -> nil


{{LuaCallout
'''gl.SetTesselationShaderParameter'''
|prefix = gl.
<font color="#0000ee">Available for spring versions >= 104.0.1-596 (maintenance).</font>
|name = GetAtmosphere
<font color="#55ee99">needed by tesselation shader programs (check the opengl GL_ARB_tessellation_shader extension for glProgramParameteri)</font>
|arg1 = {{type|string}} name
  ( number param, number value ) -> nil
|arg2 =
|arg3 =  
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} r, {{type|number}} g, {{type|number}} b
|info = {{new|101.0}}<br>See [[Lua_UnsyncedCtrl#Sun|Spring.SetAtmosphere]] for details.
}}


 
'''gl.GetActiveUniforms'''
{{LuaCallout
   ( number shaderID ) -> {  
|prefix = gl.
      [1] = { name = "name", type = "type", length = number length, size = number size },
|name = GetWaterRendering
       ...
|arg1 = {{type|string}} name
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b {{pipe}} {{type|string}} texName {{pipe}} {{type|bool}} active
|info = {{new|104.0}}<br>See [[Lua_UnsyncedCtrl#Developers|Spring.SetWaterParams]] for details.
}}
 
 
 
{{LuaCallout
|prefix = gl.
|name = GetMapRendering
|arg1 = {{type|string}} name
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b {{pipe}} {{type|bool}} active
|info = {{new|104.0}}<br>See [[Lua_UnsyncedCtrl#Developers|Spring.SetMapRenderingParams]] for details.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = ConfigScreen
|arg1 = {{type|number}} screenWidth
|arg2 = {{type|number}} screenDistance
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Used for Unit LODs.
}}
 
 
 
{{LuaCallout
|prefix = gl.
|name = DrawMiniMap
|arg1 = {{type|bool}} transform = true
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = SlaveMiniMap
|arg1 = {{type|bool}} mode
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = ConfigMiniMap
|arg1 = {{type|number}} intPX
|arg2 = {{type|number}} intPY
|arg3 = {{type|number}} intSX
|arg4 = {{type|number}} intSY
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetViewSizes
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} x, {{type|number}} y
|info =
}}
 
= Matrices & Viewport =
 
{{LuaCallout
|prefix = gl.
|name = Viewport
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} w
|arg4 = {{type|number}} h
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PushMatrix
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PopMatrix
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Translate
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} z
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Scale
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} z
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Scale
|arg1 = {{type|number}} angle
|arg2 = {{type|number}} x
|arg3 = {{type|number}} y
|arg4 = {{type|number}} z
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
{{LuaCallout
|prefix = gl.
|name = Billboard
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Use this to draw 2d primitives in DrawWorld().
}}
<pre>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:
  gl.PushMatrix()
  gl.Texture(read what you need here)
  gl.Translate(x,y,z)
  gl.Billboard()
  gl.TexRect(x1,y1,x2,y2)
  gl.PopMatrix()</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = MatrixMode
|arg1 = {{type|number}} [[Lua_ConstGL#MatrixMode|mode]]
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = LoadIdentity
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = LoadMatrix
|arg1 = 16 {{type|numbers}} or a [https://github.com/spring/spring/blob/develop/rts/Lua/LuaOpenGLUtils.cpp#L60 matrix name]
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = MultMatrix
|arg1 = ???
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = ???
|info =
}}
 
 
 
{{LuaCallout
|prefix = gl.
|name = Ortho
|arg1 = {{type|number}} left
|arg2 = {{type|number}} right
|arg3 = {{type|number}} bottom
|arg4 = {{type|number}} top
|arg5 = {{type|number}} near
|arg6 = {{type|number}} far
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Frustum
|arg1 = {{type|number}} left
|arg2 = {{type|number}} right
|arg3 = {{type|number}} bottom
|arg4 = {{type|number}} top
|arg5 = {{type|number}} near
|arg6 = {{type|number}} far
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PushPopMatrix
|arg1 = ???
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = ???
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = ClipPlane
|arg1 = {{type|number}} intPlane
|arg2 = {{type|bool}} enable {{pipe}} {{type|number}} A, {{type|number}} B, {{type|number}} C, {{type|number}} D
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Note: intPlane can only be 1 or 2.
}}
 
= Clear =
 
{{LuaCallout
|prefix = gl.
|name = Clear
|arg1 = {{type|GL.DEPTH_BUFFER_BIT}} {{bracket}}
|arg2 = {{type|number}} cleardepth {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Clear
|arg1 = {{type|GL.STENCIL_BUFFER_BIT}} {{bracket}}
|arg2 = {{type|number}} intClearStencil {{rbracket}}
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Clear
|arg1 = {{type|GL.COLOR_BUFFER_BIT}} {{pipe}} {{type|GL.ACCUM_BUFFER_BIT}} {{bracket}}
|arg2 = {{type|number}} r
|arg3 = {{type|number}} g
|arg4 = {{type|number}} b
|arg5 = {{type|number}} a {{rbracket}}
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = SwapBuffers
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}}<br>Available only in LuaMenu, meant for frame-limited LuaMenu's that want identical content in both buffers.
}}
 
= ResetState/Matrices =
 
{{LuaCallout
|prefix = gl.
|name = ResetState
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = DON'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!
}}
<pre>  ShadeModel = GL.SMOOTH
  Scissor    = false
  Texture    = false
  Lighting    = false,
  ColorMask  = true, true, true, true
  DepthMask  = false
   DepthTest  = false  (GL.LEQUAL)
  Culling    = false  (GL.BACK)
  LogicOp    = false  (GL.INVERT)
  AlphaTest  = false  (GL.GREATER, 0.5f)
  Blending  = true (GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA)</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = ResetMatrices
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
<pre>  Resets GL.TEXTURE matrix stack
  Resets GL.MODELVIEW matrix stack
  Resets GL.PROJECTION matrix stack</pre>
 
= Draw Basics =
 
{{LuaCallout
|prefix = gl.
|name = BeginEnd
|arg1 = {{type|number}} [[Lua_ConstGL#Drawing_Primitives|GLType]]
|arg2 = {{type|function}} {{bracket}}
|arg3 = arg1
|arg4 = ... {{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Color
|arg1 = {{type|number}} r,  {{type|number}} g,  {{type|number}} b {{bracket}},  {{type|number}} a {{rbracket}} {{pipe}} {{type|table}} colors = { {{type|number}} r,  {{type|number}} g,  {{type|number}} b {{bracket}},  {{type|number}} a {{rbracket}} }
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Vertex
|arg1 = {{type|table}} vertex = { {{type|number}} x,  {{type|number}} y,  {{bracket}},  {{type|number}} z {{bracket}}, {{type|number}} w {{rbracket}}{{rbracket}} }
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Vertex
|arg1 = {{type|number}} x,  {{type|number}} y
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Vertex
|arg1 = {{type|number}} x,  {{type|number}} y,  {{type|number}} z
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Vertex
|arg1 = {{type|number}} x,  {{type|number}} y,  {{type|number}} z, {{type|number}} w
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Normal
|arg1 = {{type|table}} normal = { {{type|number}} x,  {{type|number}} y,  {{type|number}} z } {{pipe}} {{type|number}} x,  {{type|number}} y,  {{type|number}} z
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = EdgeFlag
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Rect
|arg1 = {{type|number}} x1
|arg2 = {{type|number}} y1
|arg3 = {{type|number}} x2
|arg4 = {{type|number}} y2
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = TexRect
|arg1 = {{type|number}} x1
|arg2 = {{type|number}} y1
|arg3 = {{type|number}} x2
|arg4 = {{type|number}} y2 {{bracket}}
|arg5 = {{type|bool}} flip_s, {{type|bool}} flip_t {{pipe}} {{type|number}} s1, {{type|number}} t1, {{type|number}} s2, {{type|number}} t2 {{rbracket}}
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Texture rect.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Shape
|arg1 = {{type|number}} [[Lua_ConstGL#Drawing_Primitives|GLtype]]
|arg2 = {{type|table}} elements
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Elements contains:
}}
<pre>  elements = {
    [1] = { v | vertex  = { number x, number y, number z },          <font color="#55ee99">required</font>
            n | normal  = { number x, number y, number z },          <font color="#55ee99">optional</font>
            t | texcoord = { number x, number y },                    <font color="#55ee99">optional</font>
            c | color    = { number r, number g, number b, number a }  <font color="#55ee99">optional</font>
    },
    etc ...
  }</pre>
 
 
 
{{LuaCallout
|prefix = gl.
|name = SecondaryColor
|arg1 = {{type|table}} color = { {{type|number}} r, {{type|number}} g, {{type|number}} b } {{pipe}} {{type|number}} r, {{type|number}} g, {{type|number}} b
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FogCoord
|arg1 = {{type|number}} value
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
= Display Lists =
<span class=note>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 ;)</span>
 
{{LuaCallout
|prefix = gl.
|name = CreateList
|arg1 = {{type|function}} {{bracket}}
|arg2 = arg1 {{bracket}}
|arg3 = arg2 ... {{rbracket}}{{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} listID
|info =
}}
 
 
 
{{LuaCallout
|prefix = gl.
|name = CallList
|arg1 = {{type|number}} listID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DeleteList
|arg1 = {{type|number}} listID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
= Vertex Array Objects =
<span class=note> <font color=darkblue> Only available in "develop" branch of spring (the future 105.0+). This is conceptually similar and serve as modern OpenGL replacement to deprecated Display Lists. </font> </span>
 
{{LuaCallout
|prefix = gl.
|name = CreateVertexArray
|arg1 = {{type|number}} numElements
|arg2 = {{type|number}} numIndices {{bracket}}
|arg3 = {{type|bool}} persistentBuffer = false {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} bufferID
|info =
}}
<pre>See what elements and indices are here: http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-9-vbo-indexing/
numElements and numIndices define the size of for elements and indices respectively. if indices are not going to be used, then set numIndices to 0
Persistent buffers (persistentBuffer = true) are more efficient for dynamically/often updated geometry.</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = UpdateVertexArray
|arg1 = {{type|number}} bufferID
|arg2 = {{type|number}} elementPos
|arg3 = {{type|number}} indexPos
|arg4 = {{type|table}} tbl {{pipe}} {{type|function}} func
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
<pre>{elementPos, indexPos} define starting element in {element, index} VBO corresponding to 1st element of the supplied vertex data
4 elements table example:
  local verts = {
    p  = {0,0,0,1,  4,0,0,1,  4,4,0,1,  0,4,0,1},
    n  = {0,1,0  ,  0,1,0  ,  0,1,0  ,  0,1,0  },
    uv = {0,0,0,0,  1,0,0,0,  1,1,0,0,  0,1,0,0},
    c0 = {1,0,0,1,  0,1,0,1,  0,0,1,1,  1,1,1,0},
    i = {0, 1, 2, 2, 1, 3},            optional, use in case of indexed VBO
    c1 = {...} }
 
Alternatively Lua func can use gl.Vertex/gl.Color/gl.Normal/gl.TexCoord to define vertices, similarly how it used to be done in gl.BeginEnd.Note there is no function yet to define indices.</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = RenderVertexArray
|arg1 = {{type|number}} bufferID
|arg2 = {{type|number}} primType {{bracket}}
|arg3 = {{type|number}} firstIndex = 0
|arg4 = {{type|number}} count = numElements {{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info =
}}
<pre>primType can be GL.POINTS, GL.LINE_STRIP, GL.LINE_LOOP, GL.LINES, GL.LINE_STRIP_ADJACENCY, GL.LINES_ADJACENCY, GL.TRIANGLE_STRIP, GL.TRIANGLE_FAN, GL.TRIANGLES, GL.TRIANGLE_STRIP_ADJACENCY, GL.TRIANGLES_ADJACENCY and GL.PATCHES
firstIndex specifies the starting index in the enabled arrays.
count specifies the number of indices to be rendered.</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = DeleteVertexArray
|arg1 = {{type|number}} bufferID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info = Releases previously allocated VAO
}}
 
= Text =
 
{{LuaCallout
|prefix = gl.
|name = Text
|arg1 = {{type|string}} "text"
|arg2 = {{type|number}} x
|arg3 = {{type|number}} y
|arg4 = {{type|number}} size {{bracket}}
|arg5 = {{type|string}} "options" {{rbracket}}
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
<pre>  options are:
    horizontal alignment:
      'c' = center
      'r' = right
    vertical alignment:
      'a' = ascender
      't' = top
      'v' = vertical center
      'x' = baseline
      'b' = bottom
      'd' = descender
    decorations:
      'o' = black outline
      'O' = white outline
      's' = shadow
    other:
      'n' = don't round vertex coords to nearest integer (font may get blurry)</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = GetTextWidth
|arg1 = {{type|string}} "text"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} width 
|info = Width in pixels, with a font size of 1.0.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetTextHeight
|arg1 = {{type|string}} "text"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} height, {{type|number}} descender, {{type|number}} numlines
|info = Height in pixels, with a font size of 1.0. Further descriptions here: [[GetTextHeight]]
}}
 
 
{{LuaCallout
|prefix = gl.
|name = BeginText
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = If you have multiple gl.Text calls, then you can bunch them between a gl.BeginText and gl.EndText to speedup the rendering.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = EndText
|arg1 =  
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
= Unit/Feature Draw Functions =
 
{{LuaCallout
|prefix = gl.
|name = Unit
|arg1 = {{type|number}} unitID {{bracket}}
|arg2 = {{type|bool}} rawdraw
|arg3 = {{type|number}} intLOD {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Draws a unit - on default it uses LOD, with lod<0 it is turned off, else it defines a specific level.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnitRaw
|arg1 = {{type|number}} unitID {{bracket}}
|arg2 = {{type|bool}} rawdraw
|arg3 = {{type|number}} intLOD {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Doesn't apply worldspace->unit transformation! only works if <i>rawdraw</i> is true.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnitShape
|arg1 = {{type|number}} unitDefID
|arg2 = {{type|number}} teamID
|arg3 = {{type|bool}} rawState
|arg4 = {{type|bool}} toScreen
|arg5 = {{type|bool}} opaque
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>The three extra boolean arguments make it so that calling only these functions is enough to get correctly rendered models; pass in 'false' for the THIRD argument to get the fixed behavior, omit it or pass in 'true' [default] to render with your own custom state instead. The FOURTH argument should be 'true' if in DrawScreen and 'false' (default) if in DrawWorld; any transforms for these two functions *MUST* include a gl.LoadIdentity call when argument #3 is false (whether they are used in DrawWorld or in DrawScreen) the FIFTH argument determines whether the model is drawn opaque ('true' [default]) or with translucency ('false'); only has an effect when argument #3 is false.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnitMultMatrix
|arg1 = {{type|number}} unitID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = world space -> unit space
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnitPieceMultMatrix
|arg1 = {{type|number}} unitID
|arg2 = {{type|number}} intPiece
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = unit space -> piece space
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnitPiece
|arg1 = {{type|number}} unitID
|arg2 = {{type|number}} intPiece
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Draws the unit piece.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnitPieceMatrix
|arg1 = {{type|number}} unitID
|arg2 = {{type|number}} intPiece
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Use gl.UnitPieceMultMatrix instead!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Feature
|arg1 = {{type|number}} featureID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeatureRaw
|arg1 = {{type|number}} featureID {{bracket}}
|arg2 = {{type|bool}} rawdraw
|arg3 = {{type|number}} intLOD {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeatureShape
|arg1 = {{type|number}} featureDefID
|arg2 = {{type|number}} teamID
|arg3 = {{type|bool}} custom
|arg4 = {{type|bool}} drawScreen
|arg5 = {{type|bool}} opaque 
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeatureMultMatrix
|arg1 = {{type|number}} featureID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>world space -> feature space
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeaturePieceMultMatrix
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} intPiece
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>feature space -> piece space
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeaturePiece
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} intPiece
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>Draws the Feature piece.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeaturePieceMatrix
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} intPiece
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}<br>Use gl.FeaturePieceMultMatrix instead!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DrawListAtUnit
|arg1 = {{type|number}} unitID
|arg2 = {{type|number}} listID {{bracket}}
|arg3 = {{type|bool}} midPos
|arg4 = {{type|number}} scaleX, {{type|number}} scaleY, {{type|number}} scaleZ
|arg5 = {{type|number}} degrees
|arg6 = {{type|number}} rotX, {{type|number}} rotY, {{type|number}} rotZ {{rbracket}}
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DrawFuncAtUnit
|arg1 = {{type|number}} unitID
|arg2 = {{type|bool}} midPos
|arg3 = {{type|function}} {{bracket}}, arg1, ... {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
= States (Blending,AlphaTest...) =
 
{{LuaCallout
|prefix = gl.
|name = Blending
|arg1 = {{type|bool}} enable {{pipe}} {{type|number}} [[Lua_ConstGL#BlendingFactorSrc|srcmode]]
|arg2 = {{type|number}} [[Lua_ConstGL#BlendingFactorDest|dstmode]]
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Blending
|arg1 = {{type|string}} mode
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Mode can be set to:
}}
<pre>"add"
= GL.ONE, GL.ONE
 
"alpha_add"
= GL.SRC_ALPHA, GL.ONE
 
"alpha"
= GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA
 
"reset"
= GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA
 
"color"
= GL.SRC_COLOR, GL.ONE_MINUS_SRC_ALPHA
 
"modulate"
= GL.DST_COLOR, GL.ZERO
 
"disable"
= GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = BlendEquation
|arg1 = {{type|number}} mode
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = BlendFunc
|arg1 = {{type|number}} [[Lua_ConstGL#BlendingFactorSrc|srcmode]]
|arg2 = {{type|number}} [[Lua_ConstGL#BlendingFactorDest|dstmode]]
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = BlendEquationSeparate
|arg1 = {{type|number}} modeRGB
|arg2 = {{type|number}} modeAlpha
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs openGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = BlendFuncSeparate
|arg1 = {{type|number}} [[Lua_ConstGL#BlendingFactorSrc|srcRGB]]
|arg2 = {{type|number}} [Lua_ConstGL#BlendingFactorDest|dstRGB]]
|arg3 = {{type|number}} [[Lua_ConstGL#BlendingFactorSrc|srcAlpha]]
|arg4 = {{type|number}} [[Lua_ConstGL#BlendingFactorDest|dstAlpha]]
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs openGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = AlphaTest
|arg1 = {{type|bool}} enable {{pipe}} {{type|number}} [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]]
|arg2 = {{type|number}} threshold
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DepthTest
|arg1 = {{type|bool}} enable {{pipe}} {{type|number}} [[Lua_ConstGL#AlphaFunction and  DepthFunction|func]]
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Culling
|arg1 = {{type|bool}} enable {{pipe}} {{type|number}} [[Lua_ConstGL#Culling|face]]
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DepthClamp
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Not always available, needs GL.NV_depth_clamp!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DepthMask
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = ColorMask
|arg1 = {{type|bool}} masked
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = ColorMask
|arg1 = {{type|bool}} r, {{type|bool}} g, {{type|bool}} b, {{type|bool}} a
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
{{LuaCallout
|prefix = gl.
|name = LogicOp
|arg1 = {{type|bool}} enable {{pipe}} {{type|number}} [[Lua_ConstGL#LogicOp|func]]
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Fog
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Smoothing
|arg1 = {{type|bool}} enable {{pipe}} {{type|number}} point
|arg2 = {{type|bool}} enable {{pipe}} {{type|number}} line
|arg3 = {{type|bool}} enable {{pipe}} {{type|number}} polygon
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{removed|104.0}}
}}
 
 
{{LuaCallout
|prefix = gl.
|name = EdgeFlag
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Scissor
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Scissor
|arg1 = {{type|number}} intX, {{type|number}} intY, {{type|number}} intW, {{type|number}} intH
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = LineStipple
|arg1 = {{type|string}} any
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Use springs default line stipple.
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = LineStipple
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = LineStipple
|arg1 = {{type|number}} intFactor
|arg2 = {{type|number}} pattern
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PolygonMode
|arg1 = {{type|number}} [[Lua_ConstGL#Culling|face]]
|arg2 = {{type|number}} [[Lua_ConstGL#PolygonMode|mode]]
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PolygonOffset
|arg1 = {{type|bool}} enable {{pipe}} {{type|number}} factor
|arg2 = {{type|number}} units
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PushAttrib
|arg1 = {{bracket}} {{type|number}} [[Lua_ConstGL#glPushAttrib.28.29_bits|attrib]] {{rbracket}}
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PopAttrib
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
= Stencil =
 
{{LuaCallout
|prefix = gl.
|name = StencilTest
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = StencilMask
|arg1 = {{type|number}} mask
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = StencilFunc
|arg1 = {{type|number}} func
|arg2 = {{type|number}} ref
|arg3 = {{type|number}} mask
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = StencilOp
|arg1 = {{type|number}} fail
|arg2 = {{type|number}} zfail
|arg3 = {{type|number}} zpass
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = StencilMaskSeparate
|arg1 = {{type|number}} [[Lua_ConstGL#Culling|face]]
|arg2 = {{type|number}} mask
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs OpenGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = StencilFuncSeparate
|arg1 = {{type|number}} [[Lua_ConstGL#Culling|face]]
|arg2 = {{type|number}} func
|arg3 = {{type|number}} ref
|arg4 = {{type|number}} mask
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs OpenGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = StencilOpSeparate
|arg1 = {{type|number}} [[Lua_ConstGL#Culling|face]]
|arg2 = {{type|number}} fail
|arg3 = {{type|number}} zfail
|arg4 = {{type|number}} zpass
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs OpenGL2.0!
}}
 
= LineWidth & PointSize =
 
{{LuaCallout
|prefix = gl.
|name = LineWidth
|arg1 = {{type|number}} width
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PointSize
|arg1 = {{type|number}} size  
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Values != 1 can break severely on ATI cards, see http://springrts.com/mantis/view.php?id=2390
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PointSprite
|arg1 = {{type|bool}} enable {{bracket}}
|arg2 = {{type|bool}} coord_replace
|arg3 = {{type|bool}} coord_origin_upper {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs OpenGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = PointParameter
|arg1 = {{type|number}} v1, {{type|number}} v2, {{type|number}} v3 {{bracket}}
|arg2 = {{type|number}} sizeMin
|arg3 = {{type|number}} sizeMax
|arg4 = {{type|number}} sizeFade {{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs OpenGL2.0!
}}
 
= Textures =
 
{{LuaCallout
|prefix = gl.
|name = Texture
|arg1 = {{bracket}} {{type|number}} texNum, {{rbracket}} {{type|bool}} enable {{pipe}} {{type|string}} name
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} loaded
|info = 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.
}}
<span>name may be:
 
#12
= unitDef 12 buildpic
 
%34:1
= unitDef 34 s3o tex2 (:0->tex1,:1->tex2)
 
%-102:0
= featureDef 102 s3o tex1
 
!56
= lua generated texture 56 (= return value of gl.CreateTexture)
 
$units
= 3do textureatlas tex1
 
$units1
= 3do textureatlas tex1
 
$units2
= 3do textureatlas tex2
 
$shadow
= shadowmap
 
$specular
= specular cube map <font color="red">(removed in the latest develop)</font>
 
$reflection
= reflection cube map <font color="red">(can be mipmaped starting from 104.0.1-714-ga29177f. Set CubeTexGenerateMipMaps=1 in settings)</font>
 
$shading
= ground shading texture
 
$grass
= grass shading texture
 
$heightmap
= heightmap (needs HeightMapTexture=1 set in spring config)
 
$minimap
= minimap texture
 
$map_reflection
= same as "$reflection" {{new|101.0}}
 
$sky_reflection
= defined for SSMF maps that have a skyReflectModTex {{new|101.0}}
 
$detail
= detail texture {{new|101.0}}
 
$normals
= auto generated normals texture {{new|101.0}}
 
$ssmf_normals
= SSMF normals texture {{new|101.0}}
 
$ssmf_specular
= SSMF specular texture {{new|101.0}}
 
$ssmf_splat_distr
= SSMF splat distribution texture {{new|101.0}}
 
$ssmf_splat_detail
= SSMF splat detail texture {{new|101.0}}
 
$ssmf_splat_normals
= SSMF splat normals texture {{new|101.0}}, used as "$ssmf_splat_normals" or "$ssmf_splat_normals:X", 'X' can be a value between 0 and 3, defaults to 0 if ":X" is omitted
 
$ssmf_emission
= SSMF emission texture {{new|101.0}}
 
$ssmf_parallax
= SSMF parallax texture {{new|101.0}}
 
$info
= currently active info texture (los, airlos, radar, jammer)<br/> Note that textures contain no data until user switches to their respective modes and non-active textures are not updated in the background, so will go stale
 
$info_losmap
= los texture (L-view)
 
$info_mtlmap
= metal map texture (F4-view)
 
$info_hgtmap
= height map texture (F1-view)
 
$info_blkmap
= blocking map texture (F2-view)
 
$map_gbuffer_normtex
= contains the smoothed normals buffer of the map in view in world space coordinates (note that to get true normal vectors from it, you must multiply the vector by 2 and subtract 1) {{new|95}}
 
$map_gbuffer_difftex
= contains the diffuse texture buffer of the map in view {{new|95}}
 
$map_gbuffer_spectex
= contains the specular textures of the map in view {{new|95}}
 
$map_gbuffer_emittex
= for emissive materials (bloom would be the canonical use) {{new|95}}
 
$map_gbuffer_misctex
= for arbitrary shader data {{new|95}}
 
$map_gbuffer_zvaltex
= contains the depth values (z-buffer) of the map in view. {{new|95}} <br/>To translate this to world position coordinates, use:
 
  '''No clip control / clipspace for depth is [-1,1]'''
  vec4 worldpos= viewProjectionInv * vec4(vec3(gl_TexCoord[0].st,
  texture2D( map_gbuffer_zvaltex,gl_TexCoord[0].st ).x) * 2.0 - 1.0, 1.0);
 
  '''Default if clip control is supported / clipspace for depth is [0,1].'''
  vec4 worldpos= viewProjectionInv * vec4(gl_TexCoord[0].st * 2.0 - 1.0,
  texture2D( map_gbuffer_zvaltex,gl_TexCoord[0].st ).x, 1.0);
 
  worldpos.xyz = worldpos.xyz / worldpos.w;
 
$model_gbuffer_normtex
= contains the smoothed normals buffer of the models in view in world space coordinates (note that to get true normal vectors from it, you must multiply the vector by 2 and subtract 1)  {{new|95}}
 
$model_gbuffer_difftex
= contains the diffuse texture buffer of the models in view  {{new|95}}
 
$model_gbuffer_spectex
= contains the specular textures of the models in view  {{new|95}}
 
$model_gbuffer_emittex
= for emissive materials (bloom would be the canonical use)  {{new|95}}
 
$model_gbuffer_misctex
= for arbitrary shader data  {{new|95}}
 
$model_gbuffer_zvaltex
= contains the depth values (z-buffer) of the models in view.  {{new|95}}
 
${opt}:/LuaUI/images/image.png
= load a texture from the VFS
 
 
  possible ${opt}'s are:
      'n' = nearest
      'l' = linear
      'a' = aniso
      'i' = invert
      'g' = greyed
      'c' = clamped
      'b' = border
      't%r,%g,%b' = tint
       'r%width,%height' = resize
  The above ${opt}'s are NOT available for .DDS textures! .dds will load faster than other image formats.
 
    example: ":iac:/LuaUI/images/image.png"
    example: ":cr16,16:/LuaUI/images/image.png"
    example2: ":t1.0,0.5,0:/LuaUI/images/image.png"  (orange tint)
</span>
 
 
{{LuaCallout
|prefix = gl.
|name = CreateTexture
|arg1 = {{type|number}} intXSize
|arg2 = {{type|number}} intYSize {{bracket}}
|arg3 = {{type|table}} texProps {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} texture
|info = texProps contains:
}}
<pre>texProps = {
    [target    = number,](like GL.TEXTURE_1D,GL.TEXTURE_2D,...)(Added support for GL_TEXTURE_2D_MULTISAMPLE in 104.0.1-1015-g8e36ef2 maintenance)
    [format    = number,]
    [min_filter = [[Lua_ConstGL#Texture_Filtering|number]],]
    [mag_filter = [[Lua_ConstGL#Texture_Filtering|number]],]
    [wrap_s    = [[Lua_ConstGL#Texture_Clamping|number]],]
    [wrap_t    = [[Lua_ConstGL#Texture_Clamping|number]],]
    [wrap_r    = [[Lua_ConstGL#Texture_Clamping|number]],]
    [aniso      = number,]
    [border    = boolean,]
    [fbo        = boolean,] (needs GLEW_EXT_framebuffer_object!)
    [fboDepth  = boolean,] (needs GLEW_EXT_framebuffer_object!)
    [samples    = number,] specify any number here and target = GL_TEXTURE_2D_MULTISAMPLE to create multisample texture (Added in 104.0.1-1015-g8e36ef2 maintenance)
  }</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = DeleteTexture
|arg1 = {{type|string}} texture
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} deleted
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DeleteTextureFBO
|arg1 = {{type|string}} texture
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} deleted
|info = Needs GLEW_EXT_framebuffer_object!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = TextureInfo
|arg1 = {{type|string}} texture
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|table}} texInfo
|info = texInfo contains:
}}
<pre> texInfo = {
      xsize = number,
      ysize = number,
      alpha = boolean, //not used yet
      type  = number,  //not used yet
     }
     }


The format of the texture string is the same as in gl.Texture().</pre>
'''gl.GetUniformLocation'''
 
   ( number shaderID, name uniformName ) -> number locationID
 
{{LuaCallout
|prefix = gl.
|name = MultiTexCoord
|arg1 = {{type|number}} x {{bracket}}, {{type|number}} y {{bracket}}, {{type|number}} z {{bracket}}, {{type|number}} w {{rbracket}}{{rbracket}}{{rbracket}} {{pipe}} {{type|table}} texCoords = { {{type|number}} x {{bracket}}, {{type|number}} y {{bracket}}, {{type|number}} z {{bracket}}, {{type|number}} w {{rbracket}}{{rbracket}}{{rbracket}} }
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = TexEnv
|arg1 = {{type|number}} [[Lua_ConstGL#Texture_Environment|target]]
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg3 = {{type|number}} [[Lua_ConstGL#Texture_Environment|value]]
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = TexEnv
|arg1 = {{type|number}} [[Lua_ConstGL#Texture_Environment|target]]
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg3 = {{type|number}} var1
|arg4 = {{type|number}} var2
|arg5 = {{type|number}} var3
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = MultiTexEnv
|arg1 = {{type|number}} texNum
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Environment|target]]
|arg3 = {{type|number}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg4 = {{type|number}} [[Lua_ConstGL#Texture_Environment|value]]
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = MultiTexEnv
|arg1 = {{type|number}} texNum
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Environment|target]]
|arg3 = {{type|number}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg4 = {{type|number}} var1
|arg5 = {{type|number}} var2
|arg6 = {{type|number}} var3
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = TexGen
|arg1 = {{type|number}} [[Lua_ConstGL#Texture_Generation|target]]
|arg2 = {{type|bool}} state
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = TexGen
|arg1 = {{type|number}} [[Lua_ConstGL#Texture_Generation|target]]
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg3 = {{type|number}} [[Lua_ConstGL#Texture_Environment|value]]
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = TexGen
|arg1 = {{type|number}} [[Lua_ConstGL#Texture_Generation|target]]
|arg2 = {{type|bool}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg3 = {{type|number}} var1
|arg4 = {{type|number}} var2
|arg5 = {{type|number}} var3
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = MultiTexGen
|arg1 = {{type|number}} intTexNum
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Generation|target]]
|arg3 = {{type|bool}} state
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = MultiTexGen
|arg1 = {{type|number}} intTexNum
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Generation|target]]
|arg3 = {{type|number}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg4 = {{type|number}} [[Lua_ConstGL#Texture_Environment|value]]
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = MultiTexGen
|arg1 = {{type|number}} intTexNum
|arg2 = {{type|number}} [[Lua_ConstGL#Texture_Generation|target]]
|arg3 = {{type|number}} [[Lua_ConstGL#Texture_Environment|pname]]
|arg4 = {{type|number}} var1
|arg5 = {{type|number}} var2
|arg6 = {{type|number}} var3
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = CopyToTexture
|arg1 = {{type|string}} texture
|arg2 = {{type|number}} intXOff
|arg3 = {{type|number}} intYOff
|arg4 = {{type|number}} intX
|arg5 = {{type|number}} intY
|arg6 = {{type|number}} intW
|arg7 = {{type|number}} intH {{bracket}}
|arg8 = {{type|number}} target
|arg9 = {{type|number}} level {{rbracket}}
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = RenderToTexture
|arg1 = {{type|string}} fbotexture
|arg2 = {{type|function}} lua_func
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs GLEW_EXT_framebuffer_object!
}}
 
   
{{LuaCallout
|prefix = gl.
|name = GenerateMipmap
|arg1 = {{type|string}} texture
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} created
|info = Needs glGenerateMipmapEXT!
}}
<pre>The following are primarily intended to be used in conjunction with
    gl.{Unit,Feature}(objID, ..., raw=true)
    gl.{Unit,Feature}Shape(defID, ..., raw=true)
and apply a model's default textures; easier than gl.Texture("$%...")</pre>
 
 
{{LuaCallout
|prefix = gl.
|name = UnitTextures
|arg1 = {{type|number}} unitID
|arg2 = {{type|bool}} enable
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} enabled
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnitShapeTextures
|arg1 = {{type|number}} unitDefID
|arg2 = {{type|bool}} enable
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} enabled
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeatureTextures
|arg1 = {{type|number}} featureID
|arg2 = {{type|bool}} enable
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} enabled
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = FeatureShapeTextures
|arg1 = {{type|number}} featureDefID
|arg2 = {{type|bool}} enable
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} enabled
|info =
}}
 
= PixelReadback =
 
{{LuaCallout
|prefix = gl.
|name = SaveImage
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} w
|arg4 = {{type|number}} h
|arg5 = {{type|string}} filename {{bracket}}
|arg6 = {{type|table}} imgProps = { alpha={{type|bool}}, yflip={{type|bool}}, grayscale16bit={{type|bool}}, readbuffer={{type|number}} } {{rbracket}}
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|bool}} success
|info = grayscale16bit is {{new|99.0}} and allows to save single color 16bit PNG<br>
readbuffer is {{new|104+}} and allows to choose the attachment of MRT FBO, use GL_COLOR_ATTACHMENT0_EXT and further as index
}}
 
 
{{LuaCallout
|prefix = gl.
|name = ReadPixels
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} w
|arg4 = {{type|number}} h {{bracket}}
|arg5 = {{type|number}} format = GL.RGBA {{rbracket}}
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} r {{bracket}}, g {{bracket}}, b {{bracket}}, a {rbracket}}{rbracket}}{rbracket}} {{pipe}} {{type|table}} readPixels = { { { 1 = {{type|number}} r, 2 = {{type|number}} g, 3 = {{type|number}} b, 4 = {{type|number}} a}, ... }, ... }
|info = This reads back pixels from the final rendered screen. E.g. you can make a screenshot by grabbing the whole view.
}}
 
= Lights =
 
{{LuaCallout
|prefix = gl.
|name = Lighting
|arg1 = {{type|bool}} enable
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = ShadeModel
|arg1 = {{type|number}} [[Lua_ConstGL#ShadeModel|mode]]
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Light
|arg1 = {{type|number}} intLight
|arg2 = {{type|bool}} enable
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Light
|arg1 = {{type|number}} intLight
|arg2 = {{type|number}} [[Lua_ConstGL#Light_Specification|pname]]
|arg3 = {{type|number}} param
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = Light
|arg1 = {{type|number}} intLight
|arg2 = {{type|number}} [[Lua_ConstGL#Light_Specification|pname]]
|arg3 = {{type|number}} param1
|arg4 = {{type|number}} param2
|arg5 = {{type|number}} param3
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = Material
|arg1 = {{type|table}} material
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = material contains:
}}
<pre>material = {
    ambient   = {number r, number g, number b[, number a]},
    diffuse  = {number r, number g, number b[, number a]},
    ambidiff  = {number r, number g, number b[, number a]},
    emission  = {number r, number g, number b[, number a]},
    specular  = {number r, number g, number b[, number a]},
    shininess = number specularExponent
  }</pre>
 
= Hardware relevant =
 
{{LuaCallout
|prefix = gl.
|name = HasExtension
|arg1 = {{type|string}} extname
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} hasExtension
|info =
}}
 
 
 
{{LuaCallout
|prefix = gl.
|name = GetNumber
|arg1 = {{type|number}} ext
|arg2 = {{type|number}} intCount
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} number1 {{bracket}}, {{type|number}} number2, {{type|number}} number3, ... #count {{rbracket}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetString
|arg1 = {{type|number}} ext
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|string}} extString
|info =
}}
 
= DrawGroundPrimitives =
 
{{LuaCallout
|prefix = gl.
|name = DrawGroundCircle
|arg1 = {{type|number}} x
|arg2 = {{type|number}} y
|arg3 = {{type|number}} z
|arg4 = {{type|number}} radius
|arg5 = {{type|number}} divs {{bracket}}
|arg6 = {{type|number}} slope {{rbracket}}
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Note: Number divs is the number of sides the circle will have. The higher the smoother the circle (and more GPU intensive).
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DrawGroundQuad
|arg1 = {{type|number}} x1
|arg2 = {{type|number}} z1
|arg3 = {{type|number}} x2
|arg4 = {{type|number}} z2 {{bracket}}
|arg5 = {{type|bool}} useNorm {{bracket}}
|arg6 = {{type|number}} tu1, {{type|number}} tv1
|arg7 = {{type|number}} tu2, {{type|number}} tv2 {{rbracket}} {{pipe}} {{bracket}} {{type|bool}} useTextureCoord {{rbracket}} {{rbracket}}
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Note: x1, z1, x2 & z2 are rounded, so don't use it for very small or moving objects. x and z correspond to the coordinates displayed by the tooltip.<br>Also note: useNorm does nothing!
}}
 
= Queries =
 
{{LuaCallout
|prefix = gl.
|name = CreateQuery
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|userdata}} query
|info = Needs >=OpengGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = DeleteQuery
|arg1 = {{type|userdata}} query
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs >=OpengGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = RunQuery
|arg1 = {{type|userdata}} query
|arg2 = {{type|function}} func
|arg3 = {{type|arg1}}
|arg4 = {{type|arg2}}
|arg5 = ...
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Needs >=OpengGL2.0!
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetQuery
|arg1 = {{type|userdata}} query
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} renderedFragments
|info =
}}
 
= Extended =
 
{{LuaCallout
|prefix = gl.
|name = ActiveTexture
|arg1 = {{type|number}} intTexNum
|arg2 = {{type|function}} func {{bracket}}
|arg3 = {{type|arg1}}
|arg4 = ... {{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetGlobalTexNames
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|table}} texNames = { {{bracket|1}} = {{type|string}} texture, etc ...  }
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetGlobalTexCoords
|arg1 = {{type|string}} 3doTextureName
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} xstart, {{type|number}} ystart, {{type|number}} xend, {{type|number}} yend
|info = Gets the texcoord of a 3do texture in the 3do texture atlas.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = UnsafeState
|arg1 = {{type|number}} state  {{bracket}}
|arg2 = {{type|bool}} disable_state {{rbracket}}
|arg3 = {{type|bool}} func
|arg4 = {{type|arg1}}
|arg5 = {{type|arg2}}
|arg6 = ...
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Calls glEnable(state) or glDisable(state) (if disable_state==true) and<br>then calls the lua_function and afterwards reverts the state.
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetShadowMapParams
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} xmid, {{type|number}} ymid, {{type|number}} p17, {{type|number}} p18
|info =
}}
 
 
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = GL.PROJECTION {{bracket}}
|arg2 = {{type|number}} intI
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc... {{pipe}} {{type|number}} Matrix{{bracket|i}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = GL.MODELVIEW {{bracket}}
|arg2 = {{type|number}} intI
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc... {{pipe}} {{type|number}} Matrix{{bracket|i}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = GL.TEXTURE {{bracket}}
|arg2 = {{type|number}} intI
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc... {{pipe}} {{type|number}} Matrix{{bracket|i}}
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = {{type|string}} "shadow"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc...
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = {{type|string}} "camera"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc...
|info =
}}
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = {{type|string}} "caminv"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc...
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = {{type|string}} "camprj"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc...
|info =
}}
 
or
 
{{LuaCallout
|prefix = gl.
|name = GetMatrixData
|arg1 = {{type|string}} "billboard"
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}} {{pipe}} {{type|number}} number1, etc...
|info =
}}
 


{{LuaCallout
'''gl.Uniform'''
|prefix = gl.
  ( number locationID, number f1 [,number f2 [,number f3 [,number f4]]] ) -> nil
|name = Flush
|arg1 =
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


'''gl.UniformInt'''
  ( number locationID, number int1 [,number int2 [,number int3 [,number int4]]] ) -> nil


{{LuaCallout
'''gl.UniformArray''' {{new|95.0}}
|prefix = gl.
  ( number locationID, number type, table uniforms ) -> nil
|name = Finish
<span class="note">type can be one of {1 = int, 2 = float, 3 = float matrix}. In 104.0 the maximum length of the uniforms table increased from 32 entries to 1024.</span>
|arg1 =  
|arg2 =  
|arg3 =  
|arg4 =  
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


= Shaders (GLSL) =
'''gl.UniformMatrix'''
   [[Lua_GLSL_Api]]
  ( number locationID,
    "shadow" |
    "camera" |
    "caminv" |
    "camprj" |
    number m1, number m2, number m3, number m4 |
    number m1, ... , number m9 |
    number m1, ... , number m16
   ) -> nil


[[category: Lua]]
[[category: Lua]]

Latest revision as of 21:51, 21 April 2021

Development < Lua Scripting < User:Master-athmos

These functions are ONLY available if the graphic board supports GLSL.

Please test in your scripts if one of them exists before you use them!


gl.CreateShader

 ({[ vertex   = "glsl code" ,]
   [ tcs      = "glsl code" ,]
   [ tes      = "glsl code" ,]
   [ geometry = "glsl code" ,]
   [ fragment = "glsl code" ,]
   [ uniform       = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
   [ uniformInt    = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
   [ uniformFloat  = { uniformName = number value, ...} ,] (specify a Lua array as an argument to uniformName to initialize GLSL arrays)
   [ uniformMatrix = { uniformName = number value, ...} ,]
   [ geoInputType = number inType,]
   [ geoOutputType = number outType,]
   [ geoOutputVerts = number maxVerts,]
   [ definitions = "string of shader #defines", ]
 }) -> number shaderID
  • The "Vertex" or vertex-shader is your GLSL-Code as string, its written in a C-Dialect. This shader is busy deforming the geometry of a unit but it can not create new polygons. Use it for waves, wobbling surfaces etc.
  • The "Geometry" or Geometry-shader can create new vertices and vertice-stripes from points.
  • The "TCS" or Tesselation Control Shader controls how much tessellation a particular patch gets; it also defines the size of a patch, thus allowing it to augment data. It can also filter vertex data taken from the vertex shader. The main purpose of the TCS is to feed the tessellation levels to the Tessellation primitive generator stage, as well as to feed patch data (as its output values) to the Tessellation Evaluation Shader stage. TCS shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.
  • The "TES" or Tesselation Evaluation Shader takes the abstract patch generated by the tessellation primitive generation stage, as well as the actual vertex data for the entire patch, and generates a particular vertex from it. Each TES invocation generates a single vertex. It can also take per-patch data provided by the Tessellation Control Shader. TES shader can be used with spring version >= 104.0.1-596 (maintenance), it's also available in develop branch of spring.
  • The "Fragment" or Fragment-shader (sometimes called pixel-Shader) is post processing the allready rendered picture (for example drawing stars on the sky)- remember textures are not always 2 dimensional pictures. They can contain information about the depth, or the third value marks areas and the strength at which these are processed.
  • The Uniforms are the values, you send along with the shader-program. To use them in the shader-program declare them like this:

<syntaxhighlight lang="c">uniform float frame;</syntaxhighlight>

  • From 101.0 onwards, the engine will automatically fill in an appropriately named uniform for team colour if it is declared;

<syntaxhighlight lang="c">uniform vec4 teamColor;</syntaxhighlight>

gl.DeleteShader

 ( number shaderID ) -> nil

gl.ActiveShader can be used in NON-drawing events (to update uniforms etc.)!

 ( number shaderID, function [, arg1 [, arg2, ..]] ) -> nil

gl.UseShader

 ( number shaderID ) -> boolean linked

gl.GetShaderLog

 ( ) -> string "infoLog"

gl.SetShaderParameter Renamed to SetGeometryShaderParameter in spring version >= 104.0.1-596 (maintenance). needed by geometry shader programs (check the opengl GL_ARB_geometry_shader4 extension for glProgramParameteri)

 ( number shaderID, number param, number value ) -> nil

gl.SetTesselationShaderParameter Available for spring versions >= 104.0.1-596 (maintenance). needed by tesselation shader programs (check the opengl GL_ARB_tessellation_shader extension for glProgramParameteri)

 ( number param, number value ) -> nil

gl.GetActiveUniforms

 ( number shaderID ) -> { 
     [1] = { name = "name", type = "type", length = number length, size = number size },
     ...
   }

gl.GetUniformLocation

 ( number shaderID, name uniformName ) -> number locationID

gl.Uniform

 ( number locationID, number f1 [,number f2 [,number f3 [,number f4]]] ) -> nil

gl.UniformInt

 ( number locationID, number int1 [,number int2 [,number int3 [,number int4]]] ) -> nil

gl.UniformArray New in version 95.0

 ( number locationID, number type, table uniforms ) -> nil

type can be one of {1 = int, 2 = float, 3 = float matrix}. In 104.0 the maximum length of the uniforms table increased from 32 entries to 1024.

gl.UniformMatrix

 ( number locationID, 
   "shadow" |
   "camera" |
   "caminv" |
   "camprj" |
   number m1, number m2, number m3, number m4 |
   number m1, ... , number m9 |
   number m1, ... , number m16
 ) -> nil