OpenGL Object Support
A C Module for OpenGL support via the OpenGL Object is provided with the XLua distribution. Using the included LuaGL library, OpenGL can be used directly from your Lua code. The OpenGL object is another 3rd party extension, written by Looki.
Usage
Package Name: ext.opengl
The OpenGL module is ext/opengl.dll. By either using the Open External C Module action and using MMF's include external files feature, or by adding the DLL to MMF's Binary Data list, the DLL file can be embedded directly into your built application.
Once included, standard opengl functions will be placed in gl.*, utility library functions will be placed in glu.*, and OpenGL Object-specific functions will be placed in ext.opengl.*.
LuaGL
The LuaGL library includes a full complement of GL functions that mirror the OpenGL API. You don't need to do anything more than bind an OpenGL object to begin using LuaGL in your code. Use the following links for more information:
Differences with LuaGL
The most important difference between the official LuaGL distribution, and the one for XLua, is in handling of OpenGL constants (enumerations). In the standard C API, these are constants like GL_QUADS that are associated with an equivilent integer value.
LuaGL converted all GL constants to strings, sl GL_QUADS would instead be passed as the string "QUADS". XLua goes back to using the original numeric values of the GL constants, which are all stored in named variables in the gl table. So instead of passing "QUADS" to a function like described in the LuaGL documentation, you would pass gl.QUADS.
All supported GL constants are named by taking the original constant name and stripping off the leading GL_. If the constant's name starts with a number however, it still contains a leading underscore, e.g. gl._2D.
This change allows you to add any missing OpenGL constants without requiring a new version of LuaGL for XLua. It's also faster.
Example
-- Require the module, which should be stored in /ext/opengl.dll
-- relative to the application.
require "ext.opengl"
-- The following variable represents the ID that we exported an
-- OpenGL object as.
OBJID = 1
-- Draws a single white pixel in the center of the OpenGL
-- object's canvas. This function needs to be called each frame.
function draw ()
ext.opengl.MakeCurrent(OBJID)
gl.Translate(0,0,-3)
gl.Begin(gl.POINTS)
gl.Vertex(0,0,0)
gl.End()
end
draw()
OpenGL Object
The OpenGL object can be downloaded from its development topic on the Clickteam forums HERE. For any questions, comments, or problems with the OpenGL object, you should contact Looki.
Function Reference
These functions deal with the OpenGL object directly. Each function requires the exported object id of the OpenGL object as its first parameter.
- ext.opengl.GetCurrentShader (number objid) → number shader
- ext.opengl.GetDisplayList (number objid, number index) → number list
- ext.opengl.GetShader (number objid, number index) → number program
- ext.opengl.GetTexture (number objid, number index) → number texture
- ext.opengl.MakeCurrent (number objid)
- ext.opengl.MaxDisplayLists (number objid) → number count
- ext.opengl.MaxShaders (number objid) → number count
- ext.opengl.MaxTextures (number objid) → number count
LuaGL supports most of the OpenGL 1.1 specification. The XLua inclusion of LuaGL has expanded this to cover most of the OpenGL specification through 2.0. This reference lists every GL function currently supported.
Take note, many of the parameter lists differ from their GL counterparts, to better reflect usage or limitations inside Lua. Follow the ref link by each function to view full SDK documentation for that function.
- gl.Accum (string op, number value) ref
- gl.ActiveTexture (string texture) ref
- gl.AlphaFunc (string func, number ref) ref
- gl.AreTexturesResident (table textures) → table residences ref
- gl.ArrayElement (number i) ref
- gl.AttachShader (number program, number shader) ref
- gl.Begin (string mode) ref
- gl.BindAttribLocation (number program, number index, string name) ref
- gl.BindBuffer (string target, number buffer) ref
- gl.BindTexture (string target, number texture) ref
- gl.Bitmap (number xorig, number yorig, number xmove, number ymove, table bitmap) ref
- gl.BlendColor (number red, number blue, number green, number alpha) ref
- gl.BlendEquation (string mode) ref
- gl.BlendEquationSeparate (string modeRGB, string modeAlpha) ref
- gl.BlendFunc (string sfactor, string dfactor) ref
- gl.BlendFuncSeparate (string srcRGB, string destRGB, string srcAlpha, string destAlpha) ref
- gl.BufferData (string target, table data, string usage [, number size]) ref
- gl.BufferSubData (string target, number offset, table data [, number size]) ref
- gl.CallList (number list) ref
- gl.CallLists (table lists) ref
- gl.Clear (string mask) ref
- gl.ClearAccum (number red, number green, number blue, number alpha) ref
- gl.ClearColor (number red, number green, number blue, number alpha) ref
- gl.ClearDepth (number depth) ref
- gl.ClearIndex (number c) ref
- gl.ClearStencil (number s) ref
- gl.ClientActiveTexture (string texture) ref
- gl.ClipPlane (string plane, table equation) ref
- gl.Color (number red, number green, number blue [, number alpha]) ref
- gl.Color (table v) ref
- gl.ColorMask (number red, number green, number blue, number alpha) ref
- gl.ColorMaterial (string face, string mode) ref
- gl.ColorPointer (table colors [, number size [, number stride]]) ref
- gl.ColorPointer (number bufferOffset, number size [, number stride]) ref
- gl.CompileShader (number shader) ref
- gl.CopyPixels (number x, number y, number width, number height, string type) ref
- gl.CopyTexImage (number level, string internalFormat, number border, number x, number y, number width [, number height]) ref
- gl.CopyTexSubImage (number level, number x, number y, number xoffset, number width [, number yoffset, number height]) ref
- gl.CreateProgram ( ) → number program ref
- gl.CreateShader (string shaderType) → number shader ref
- gl.CullFace (string mode) ref
- gl.DeleteBuffers (table buffers) ref
- gl.DeleteLists (number list, number range) ref
- gl.DeleteProgram (number program) ref
- gl.DeleteShader (number shader) ref
- gl.DeleteTextures (table textures) ref
- gl.DepthFunc (string func) ref
- gl.DepthMask (boolean flag) ref
- gl.DepthRange (number zNear, number zFar) ref
- gl.DetachShader (number program, number shader) ref
- gl.Disable (string cap) ref
- gl.DisableClientState (string array) ref
- gl.DisableVertexAttribArray (number index) ref
- gl.DrawArrays (string mode, number first, number count) ref
- gl.DrawBuffer (string mode) ref
- gl.DrawElements (string mode, table indices [, number count]) ref
- gl.DrawElements (string mode, number bufferOffset, number count) ref
- gl.DrawPixels (number width, number height, string format, table pixels) ref
- gl.EdgeFlag (boolean flag) ref
- gl.EdgeFlagPointer (table flags [, number stride]]) ref
- gl.EdgeFlagPointer (number bufferOffset [, number stride]) ref
- gl.Enable (string cap) ref
- gl.EnableClientState (string array) ref
- gl.EnableVertexAttribArray (number index) ref
- gl.End ( ) ref
- gl.EndList ( ) ref
- gl.EvalCoord (number u [, number v]) ref
- gl.EvalCoord (table coords) ref
- gl.EvalMesh (string mode, number i1, number i2 [, number j1, number j2]) ref
- gl.EvalPoint (number i [, number j]) ref
- gl.FeedbackBuffer (number size, string type) → table buffer ref
- gl.Finish ( ) ref
- gl.Flush ( ) ref
- gl.Fog (string pname, number param) ref
- gl.Fog (string pname, string param) ref
- gl.Fog (string pname, table params) ref
- gl.FogCoord (number coord) ref
- gl.FogCoordPointer (table coords [, number stride]]) ref
- gl.FogCoordPointer (number bufferOffset [, number stride]) ref
- gl.FrontFace (string mode) ref
- gl.Frustum (number left, number right, number bottom, number top, number zNear, number zFar) ref
- gl.GenBuffers (number n) → table buffers ref
- gl.GenLists (number range) → number n ref
- gl.Get (string pname) → ... params ref
- gl.GetArray (string pname) → table params ref
- gl.GetAttribLocation (number program, string name) → number location ref
- gl.GetConst (string pname) → string params ref
- gl.GetClipPlane (string plane) → table equation ref
- gl.GetError ( ) → string error ref
- gl.GetLight (string light, string pname) → table params ref
- gl.GetMap (string target, string query) → table v ref
- gl.GetMaterial (string face, string pname) → table params ref
- gl.GetPixelMap (string map) → table values ref
- gl.GetPointer (string pname, number n) → table values ref
- gl.GetPolygonStipple ( ) → table mask ref
- gl.GetProgram (number program, string pname) → number param ref
- gl.GetProgramInfoLog (number program) → string infoLog ref
- gl.GetShader (number shader, string pname) → number param ref
- gl.GetShaderInfoLog (number shader) → string infoLog ref
- gl.GetShaderSource (number shader) → string source ref
- gl.GetString (string name) → string string ref
- gl.GetTexEnv (string pname) → ... param(s) ref
- gl.GetTexGen (string coord, string pname) → ... param(s) ref
- gl.GetTexImage (string target, number level, string format) → table pixels ref
- gl.GetTexLevelParameter (string target, number level, string format) → string param ref
- gl.GetTexParameter (string target, string format) → ... param(s) ref
- gl.GetUniformLocation (number program, string name) → number location ref
- gl.Hint (string target, string mode) ref
- gl.Index (number c) ref
- gl.Index (table v) ref
- gl.IndexMask (number mask) ref
- gl.IndexMask (string mask) ref
- gl.IndexPointer (table indices [, number stride]]) ref
- gl.IndexPointer (number bufferOffset [, number stride]) ref
- gl.InitNames ( ) ref
- gl.IsEnabled (string cap) → boolean state ref
- gl.IsBuffer (number buffer) → boolean state ref
- gl.IsList (number list) → boolean state ref
- gl.IsProgram (number program) → boolean state ref
- gl.IsShader (number shader) → boolean state ref
- gl.IsTexture (number texture) → boolean state ref
- gl.Light (string light, string pname, number param) ref
- gl.Light (string light, string pname, table params) ref
- gl.LightModel (string pname, number param) ref
- gl.LightModel (string pname, table params) ref
- gl.LineStipple (number factor, number pattern) ref
- gl.LineStipple (number factor, string pattern) ref
- gl.LineWidth (number width) ref
- gl.LinkProgram (number program) ref
- gl.ListBase (number base) ref
- gl.LoadIdentity ( ) ref
- gl.LoadMatrix (table m) ref
- gl.LoadMatrix (number m1, number m2, ... number m16) ref
- gl.LoadName (number name) ref
- gl.LogicOp (string opcode) ref
- gl.Map (string target, number u1, number u2, table points) ref
- gl.Map (string target, number u1, number u2, number v1, number v2, table points) ref
- gl.MapGrid (number un, number u1, number u2 [, number vn, number v1, number v2]) ref
- gl.Material (string face, string pname, number param) ref
- gl.Material (string face, string pname, table params) ref
- gl.MatrixMode (string mode) ref
- gl.MultiTexCoord (string target, number s [, number t [, number r [, number q]]]) ref
- gl.MultMatrix (table m) ref
- gl.MultMatrix (number m1, number m2, ... number m16) ref
- gl.NewList (number list, string mode) ref
- gl.Normal (number nx, number ny, number nz) ref
- gl.Normal (table v) ref
- gl.NormalPointer (table normals [, number stride]]) ref
- gl.NormalPointer (number bufferOffset [, number stride]) ref
- gl.Ortho (number left, number right, number bottom, number top, number zNear, number zFar) ref
- gl.PassThrough (number token) ref
- gl.PixelMap (string map, table values) ref
- gl.PixelStore (string pname, boolean param) ref
- gl.PixelStore (string pname, number param) ref
- gl.PixelTransfer (string pname, boolean param) ref
- gl.PixelTransfer (string pname, number param) ref
- gl.PixelZoom (number xfactor, number yfactor) ref
- gl.PointParameter (string pname, number param) ref
- gl.PointParameter (string pname, string param) ref
- gl.PointSize (number size) ref
- gl.PolygonMode (string face, string mode) ref
- gl.PolygonOffset (number factor, number units) ref
- gl.PolygonStipple (table pattern) ref
- gl.PopAttrib ( ) ref
- gl.PopClientState ( ) ref
- gl.PopMatrix ( ) ref
- gl.PopName ( ) ref
- gl.PrioritizeTextures (table textures, table priorities) ref
- gl.PushAttrib (string mask) ref
- gl.PushClientAttrib (string mask) ref
- gl.PushMatrix ( ) ref
- gl.PushName (number name) ref
- gl.RasterPos (number x, number y [, number z [, number w]]) ref
- gl.RasterPos (table v) ref
- gl.ReadBuffer (string mode) ref
- gl.ReadPixels (number x, number y, number width, number height, string format, table pixels) ref
- gl.Rect (number x1, number y1, number x2, number y2) ref
- gl.Rect (table v1, table v2) ref
- gl.RenderMode (string mode) ref
- gl.Rotate (number angle, number x, number y, number z) ref
- gl.Scale (number x, number y, number z) ref
- gl.Scissor (number x, number y, number width, number height) ref
- gl.SecondaryColor (number red, number green, number blue) ref
- gl.SecondaryColor (table v) ref
- gl.SecondaryColorPointer (table colors [, number size [, number stride]]) ref
- gl.SecondaryColorPointer (number bufferOffset, number size [, number stride]) ref
- gl.SelectBuffer (number size) ref
- gl.ShadeModel (string mode) ref
- gl.ShaderSource (number shader, string source) ref
- gl.StencilFunc (string func, number ref, number mask) ref
- gl.StencilFunc (string func, number ref, string mask) ref
- gl.StencilMask (number mask) ref
- gl.StencilMask (string mask) ref
- gl.StencilOp (string fail, string zfail, string zpass) ref
- gl.TexCoord (number s [, number t [, number r [, number q]]]) ref
- gl.TexCoord (table v) ref
- gl.TexCoordPointer (table coords [, number size [, number stride]]) ref
- gl.TexCoordPointer (number bufferOffset, number size [, number stride]) ref
- gl.TexEnv (string pname, number param [, string target]) ref
- gl.TexEnv (string pname, string param [, string target]) ref
- gl.TexEnv (string pname, table params [, string target]) ref
- gl.TexGen (string coord, string pname, string param) ref
- gl.TexGen (string coord, string pname, table params) ref
- gl.TexImage (number level, number internalFormat, string format, table pixels) ref
- gl.TexSubImage (number level, string format, table pixels, number xoffset [, number yoffset]) ref
- gl.TexParameter (string target, string pname, number param) ref
- gl.TexParameter (string target, string pname, string param) ref
- gl.TexParameter (string target, string pname, table params) ref
- gl.Translate (number x, number y, number z) ref
- gl.Uniformf (number location, number v0 [, number v1 [, number v2 [, number v3]]]) ref
- gl.Uniformi (number location, number v0 [, number v1 [, number v2 [, number v3]]]) ref
- gl.UniformMatrix (number location, table value) ref
- gl.UseProgram (number program) ref
- gl.ValidateProgram (number program) ref
- gl.Vertex (number x, number y [, number z [, number w]]) ref
- gl.Vertex (table v) ref
- gl.VertexAttribf (number index, number v0 [, number v1 [, number v2 [, number v3]]]) ref
- gl.VertexAttribPointer (number index, table attribs [, number size [, number stride]]) ref
- gl.VertexAttribPointer (number index, number bufferOffset, number size [, number stride]) ref
- gl.VertexPointer (table coords [, number size [, number stride]]) ref
- gl.VertexPointer (number bufferOffset, number size [, number stride]) ref
- gl.Viewport (number x, number y, number width, number height) ref
- gl.WindowPos (number x, number y [, number z]) ref
- gl.WindowPos (table v) ref
-
- glu.LookAt (number eyeX, number eyeY, number eyeZ, number centerX, number centerY, number centerZ, number upX, number upY, number upZ) ref
- glu.Ortho2D (number left, number right, number bottom, number top) ref
- glu.Perspective (number fovy, number aspect, number zNear, number zFar) ref
- glu.Project (number objX, number objY, number objZ) → number winX, number winY, number winZ ref
- glu.UnProject (number winX, number winY, number winZ) → number objX, number objY, number objZ ref