Lua OpenGL Api

Development < Lua Scripting < Lua OpenGL Api

Contents

Spring

gl.GetSun

 ()        -> number sunPosX, number sunPosY, number sunPosZ
 ( "pos" ) -> number sunPosX, number sunPosY, number sunPosZ
 ( "shadowDensity" [, "unit"] ) -> number shadowDensity
 ( "diffuse"       [, "unit"] ) -> nil | number r, number g, number b
 ( "ambient"       [, "unit"] ) -> nil | number r, number g, number b
 ( "specular" )                 -> nil | number r, number g, number b

gl.ConfigScreen

 ( number screenWidth, number screenDistance ) -> nil

gl.DrawMiniMap

 () -> nil

gl.SlaveMiniMap

 ( boolean mode ) -> nil

gl.ConfigMiniMap

 ( int px, int py, int sx, int sy ) -> nil

gl.GetViewSizes

 ( ) -> number x, number y

Basics

gl.PushMatrix

 () -> nil

gl.PopMatrix

 () -> nil

gl.Translate

 (number x, number y, number z) -> nil

gl.Scale

 (number x, number y, number z) -> nil

gl.Rotate

 (number angle, number x, number y, number z) -> nil

gl.Color

 ( { number r, number g, number b[, number a] } |
     number r, number g, number b[, number a] ) -> nil

gl.LineWidth

 ( number width ) -> nil

gl.PointSize

 ( number size ) -> nil

gl.Billboard () -> nil Use this to draw 2d primitives in DrawWorld().

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()

gl.ResetState DON'T USE IT AS LONG AS YOU KNOW WHAT YOU ARE DOING! each callin has different default states, but this function resets all states no matter what to the states below!

 () -> nil

 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)

gl.ResetMatrices

 () -> nil

 Resets GL_TEXTURE matrix stack
 Resets GL_MODELVIEW matrix stack
 Resets GL_PROJECTION matrix stack

gl.Clear

 ( GL.DEPTH_BUFFER_BIT [, number cleardepth] ) -> nil
 ( GL.STENCIL_BUFFER_BIT [, int clearstencil] ) -> nil
 ( GL.COLOR_BUFFER_BIT | GL.ACCUM_BUFFER_BIT [, number r, number g, number b, number a] ) -> nil

Draw Basics

gl.BeginEnd

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

gl.Vertex

 ( { number x, number y [, number z [, number w ]] } |
   number x, number y |
   number x, number y, number z |
   number x, number y, number z, number w ) -> nil

gl.Normal

 (  number x, number y, number z |
  { number x, number y, number z } ) -> nil

gl.Rect

 ( number x1, number y1, number x2, number y2 ) -> nil

gl.TexRect texture rect

 ( number x1, number y1, number x2, number y2,
 [ boolean flip_s, boolean flip_t | number s1, number t1, number s2, number t2 ] ) -> nil

gl.Shape

( number GLtype,
  elements = {
    [1] = { v | vertex   = { number x, number y, number z },           required
            n | normal   = { number x, number y, number z },           optional
            t | texcoord = { number x, number y },                     optional
            c | color    = { number r, number g, number b, number a }  optional
    },
    etc ...
  }
) -> nil

Text

gl.Text

 (string "text", number x, number y, number size [, string "options"] )

 options:
 'c' = center
 'r' = right
 'n' = deactives colorCodes (so you can use gl.Color() to write transparent text etc.)
 'o' = black outline
 'O' = white outline

fontlines.png


gl.GetTextWidth

 (string "text") -> number width  --  in pixels, with a font size of 1.0

Unit/Feature Draw Functions

gl.Unit (draws an unit; on default it uses LOD, with lod<0 it is turned off, else it defines a specific level)

 ( number unitID, [ boolean rawdraw, int lod ] ) -> nil

gl.UnitRaw (doesn't apply worldspace->unit transformation! only works if rawdraw is true )

 ( number unitID, [ boolean rawdraw, int lod ] ) -> nil

gl.UnitShape

 ( number unitDefID, number teamID ) -> nil

gl.Feature

 ( number featureID ) -> nil

gl.FeatureShape

 ( number featureDefID, number teamID ) -> nil

gl.UnitMultMatrix (world space -> unit space)

 ( number unitID ) -> nil

gl.UnitPieceMultMatrix (unit space -> piece space)

 ( number unitID, int piece ) -> nil

gl.UnitPiece (draws the unit piece)

 ( number unitID, int piece ) -> nil

gl.UnitPieceMatrix (use gl.UnitPieceMultMatrix instead!)

 ( number unitID, int piece ) -> nil

gl.DrawListAtUnit

 ( number unitID, number listID, [ boolean midPos,
     number scaleX, number scaleY, number scaleZ,
     number degrees, number rotX, number rotX, number rotZ ] ) -> nil 

gl.DrawFuncAtUnit

 ( number unitID, boolean midPos, function [, arg1,... ]) -> nil

Switches

gl.Blending

 ( boolean enable | number srcmode, number dstmode ) -> nil

gl.AlphaTest

 ( boolean enable | number func, number threshold ) -> nil

gl.DepthTest

 ( boolean enable | number func ) -> nil

gl.Culling

 ( boolean enable | number face ) -> nil

gl.DepthMask

 ( boolean enable ) -> nil

gl.ColorMask

 ( boolean ) -> nil
 ( boolean r, boolean g, boolean b, boolean a ) -> nil

gl.LogicOp

 ( boolean enable | number func ) -> nil

gl.Fog

 ( boolean enable ) -> nil

gl.Smoothing

( (boolean enable | number POINT), 
  (boolean enable | number LINE),
  (boolean enable | number POLYGON) ) -> nil

gl.EdgeFlag

( boolean enable ) -> nil

gl.Scissor

 ( boolean ) -> nil
 ( int x, int y, int w, int h ) -> nil

gl.LineStipple

 ( string any ) -> nil (use springs default line stipple)
 ( boolean enable ) -> nil
 ( int factor, number pattern ) -> nil

gl.PolygonMode

 ( number face, number mode ) -> nil

gl.PolygonOffset

 ( boolean enable | number factor, number units ) -> nil

Textures

gl.Texture

 ( [ number texNum, ] boolean enable | string name ) -> nil | boolean loaded

                          current formats:
 :${opt}:/LuaUI/images/image.png = filename
                             #12 = unitDef 12 buildpic
                           %34:1 = unitDef 34 s3o tex2 (:0->tex1,:1->tex2)
                             !56 = lua generated texture 56
                          $units = 3do textureatlas
                         $shadow = shadowmap
                       $specular = specular cube map
                     $reflection = reflection cube map
                        possible ${opt}'s are:
                             'n' = nearest
                             'l' = linear
                             'a' = aniso
                             'i' = invert
                             'g' = greyed
                             'c' = clamped
                             'b' = border
                             't%r,%g,%b' = tint
                example: ":iac:/LuaUI/images/image.png"
                example2: ":t1.0,0.5,0:/LuaUI/images/image.png"  (orange tint)

gl.CreateTexture

 ( int xsize, int ysize,
 [ { 
   [target     = number,] (like GL_TEXTURE_1D,GL_TEXTURE_2D,...)
   [format     = number,]
   [min_filter = number,]
   [mag_filter = number,]
   [wrap_s     = number,]
   [wrap_t     = number,]
   [wrap_r     = number,]
   [aniso      = number,]
   [border     = boolean,]
   [fbo        = boolean,] (needs GLEW_EXT_framebuffer_object!)
   [fboDepth   = boolean] (needs GLEW_EXT_framebuffer_object!)
 } ]
 ) -> string

gl.DeleteTexture

 ( string texture ) -> boolean

gl.DeleteTextureFBO (needs GLEW_EXT_framebuffer_object!)

 ( string texture ) -> boolean

gl.TextureInfo

 ( string texture ) -> nil | {
     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()

gl.TexCoord

 ( number x | 
   number x, number y |
   number x, number y, number z |
   number x, number y, number z, number w |
   { number x [, number y [, number z [, number w ]]] } ) -> nil

gl.MultiTexCoord

 ( int texNum,
   number x |
   number x, number y |
   number x, number y, number z |
   number x, number y, number z, number w |
   { number x [, number y [, number z [, number w ]]] } ) -> nil

gl.TexEnv

 ( number target, number pname,
   number value |
   number var1, number var2, number var3 ) -> nil

gl.MultiTexEnv

 ( int texNum, number target, number pname,
   number value |
   number var1, number var2, number var3 ) -> nil

gl.TexGen

 ( number target,
   boolean state |
   number pname, number value |
   number pname, number var1, number var2, number var3 ) -> nil

gl.MultiTexGen

 ( int texNum, number target,
   boolean state |
   number pname, number value |
   number pname, number var1, number var2, number var3 ) -> nil       

gl.CopyToTexture

 (string texture, int xoff, int yoff, int x, int y, int w, int h 
 [,number target,number level])->nil

gl.RenderToTexture (needs GLEW_EXT_framebuffer_object!)

 ( string fbotexture, lua_func ) -> nil

gl.GenerateMipmap (needs glGenerateMipmapEXT!)

 ( string texture ) -> boolean

Lights

gl.Lighting

 ( boolean enable ) -> nil

gl.ShadeModel

 ( number mode ) -> nil

gl.Light

 ( int light, 
 boolean enable |
 number pname, number param |
 number pname, number param1, number param2, number param3 ) -> nil

gl.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
 }) -> nil

Display Lists

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 ;)

gl.CreateList

 ( function [,arg1 [,arg2...]] ) -> int

returns the listID

gl.CallList

 ( number listID ) -> nil

gl.DeleteList

 ( number listID ) -> nil

Hardware relevant

gl.HasExtension

 ( string extname ) -> boolean

gl.GetNumber

 ( number ext, int count ) -> number [, number, number, ... #count ]

gl.GetString

 ( number ext ) -> string

DrawGroundPrimitives

gl.DrawGroundCircle

 ( number x, number y, number z, number radius, number divs [, number slope ] ) -> nil

Note: number divs is the number of sides the circle will have. the higher the smoother the circle (and more GPU intensive)


gl.DrawGroundQuad Note: x1,z1,x2 & z2 are rounded, so don't use it for very small or moving objects. x and z are correspond to the coordinates displayed by the tooltip

 ( number x1, number z1, number x2, number z2,
   [ boolean useNorm,
     [ number tu1, number tv1, number tu2, number tv2 |
       boolean useTextureCoord ] ] ) -> nil

Extended

gl.ActiveTexture

 ( int texNum, function [, arg1,... ] ) -> nil

gl.GetGlobalTexNames

 () -> { [1] = string texture, etc ... }

gl.GetGlobalTexCoords

 ( string tatexture ) -> number xstart, number ystart, number xend, number yend

gl.GetShadowMapParams

 () -> number xmid, number ymid, number p17, number p18

gl.GetMatrixData

 ( GL.PROJECTION [, int i] ) -> nil | number, etc.. | number Matrix[i]
 ( GL.MODELVIEW  [, int i] ) -> nil | number, etc.. | number Matrix[i] 
 ( GL.TEXTURE    [, int i] ) -> nil | number, etc.. | number Matrix[i]
 ( "shadow" )                -> nil | number, etc.. 
 ( "camera" )                -> nil | number, etc.. 
 ( "caminv" )                -> nil | number, etc.. 
 ( "camprj" )                -> nil | number, etc.. 
 ( "billboard" )             -> nil | number, etc.. 

gl.PointSprite (needs openGL2.0!)

 ( boolean enable, [boolean coord_replace, boolean coord_origin_upper] ) -> nil

gl.PointParameter (needs openGL2.0!)

 ( number v1, number v2, number v3, 
   [ number sizeMin, number sizeMax, number sizeFade ] ) -> nil

gl.SecondaryColor

 ( { number r, number g, number b } |
     number r, number g, number b ) -> nil

gl.FogCoord

 ( number value ) -> nil

gl.ClipPlane

 ( int plane, note: $plane can only be 1 or 2
 boolean enable |
 number A, number B, number C, number D ) -> nil

gl.MatrixMode

 ( number mode ) -> nil

gl.LoadIdentity

 () -> nil

gl.LoadMatrix

 () -> nil

gl.MultMatrix

gl.Ortho

 ( number left, number right, number bottom, number top, number near, number far ) -> nil

gl.Frustum

 ( number left, number right, number bottom, number top, number near, number far ) -> nil

gl.PushPopMatrix

gl.PushAttrib

 ( [ number attrib ] ) -> nil

gl.PopAttrib

 () -> nil

gl.Flush

 () -> nil

gl.Finish

 () -> nil

Shaders (GLSL)

 Lua_GLSL_Api

Retrieved from "http://springrts.com/wiki/Lua_OpenGL_Api"

This page has been accessed 3,263 times. This page was last modified 10:49, 13 March 2010.


 
 

Page editing toolbox

Browse
Main Page
Community portal
Current events
Recent changes
Random page
Help
Donations
Edit
View source
Editing help
This page
Discuss this page
Post a comment
Printable version
Context
Page history
What links here
Related changes
My pages
Log in
Special pages
New pages
File list
Statistics
Bug reports
More...

Site layout created by Roflcopter.