LuaGL: OpenGL binding for Lua 5

IUP - Portable User Interface


LuaGL
OpenGL binding for Lua 5
http://luagl.sourceforge.net

home · whatis · portability · download · how it works · reference ·

IUP Note: LuaGL included in the IupLua console contains only the OpenGL binding. It does not includes the GLUT binding. The source code also was modified so pre-defined OpenGL constants can also be used as numbers using gl.XXX notation.


What is it LuaGL?

It’s a library that provides access to all of the OpenGL functionality from Lua.

What is OpenGL?

OpenGL is a portable software interface to graphics hardware. More information about OpenGL can be obtained from http://www.opengl.org. You can find good tutorials about learning OpenGL at http://nehe.gamedev.net.

Portability

That library should run in all systems that support OpenGL.

License

LuaGL is a free software and uses the MIT License. It can be used at no cost for both academic and commercial purposes.

Download & Installation

You can download LuaGL from the sourceforge project home page here.

The package contains:

- The binding of all the OpenGL functions;
- The binding of some GLUT functions;
- Two lua programs created for testing the library;
- A simple example of an interpreter that uses the library and was used for the test programs.
- A copy of this web page;

LuaGL also needs that you have the OpenGL and the GLUT libraries installed. It can be obtained with the following links:

http://www.opengl.org/developers/documentation/implementations.html
http://www.opengl.org/developers/documentation/glut.html

How it works ?

This library works as a binding for all OpenGL commands, so you can have full access to the graphics hardware from Lua.

To have access to the library from a C host program, you must first call the 'luaopen_gl' function that will create a table named 'gl', and all the functions will be inside of it.

OpenGL constants

In Lua, all OpenGL constants were converted to strings, for example: instead of writing GL_QUADS, you should write 'QUADS'. In functions that expected a bitwise operation between mask parameters, in Lua will receive a string that contains all the constants strings separated by comma (,). For example:

gl.Begin ("TRIANGLES")
gl.Clear ('COLOR_BUFFER_BIT,DEPTH_BUFFER_BIT') 

(See IUP Note above.)

Argument specification

The argument specification (e.g., '2d', '3f', '4sv') at the end of most OpenGL functions names have been removed. For example the new gl.Light function binds the OpenGL functions: glLightf, glLightfv, glLighti, glLightiv.

It’s always used the floating point version of the functions, with the highest possible precision.

Color and Vector data

The color and the vector data can be represented by a lua array. A vector can have 2, 3 or 4 values (x, y, z, w), and colors can have 3 or 4 values (red, green, blue, alpha). If there are more 4 value the extra parameters will be ignored.

For example:

v1 = { 0, 0 } 
v2 = { 1, 1 }
Yellow = { 1, 1, 0 }
gl.Color(Yellow)
gl.Vertex(v1)
gl.Vertex(v2)

you can also call those:

gl.Color(1, 1, 0) 
gl.Vertex(0, 0)
gl.Vertex(1, 1)

Argument types

The OpenGL function parameters that specify the type of another argument, or the size of an array, won’t be used. Lua will always use the most precise type of data. The stride value of an array won’t be used too. For example:

gl.VertexPointer(vertex_array) 

binds:

void glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); 

Where ‘vertex_array’ is an array of vectors. The size of the array returned by lua_getn function will be used as the size parameter. The type is the most precise possible, and the stride value is always set to zero. You can see an example of this function bellow:

v1 = { -1, -1 } 
v2 = { 1, -1 }
v3 = { 1, 1 }
v4 = { -1, 1 }

vertices = { v1, v2, v3, v4 }

gl.VertexPointer(vertices)

Requesting OpenGL information

The functions that request information from OpenGL, will now return the data by the function return value, instead of returning by a parameter. For example:

image = gl.GetTexImage (target, level, format) 

For more information about functions names and parameters, see the Function Reference bellow.

Bit Pattern

Functions that expects a number with a bit pattern, will accept a string with the mask numbers. All characters that are different to ‘0’ and ‘1’ will be ignored. For example:

gl.LineStipple (1, "1111000011110000") 
gl.LineStipple (1, "1010.0101.1000.1111" )
gl.LineStipple (1, "0000 0000 1111 1111" )

Function Reference

Accum (op, value) -> none 

AlphaFunc (func, ref) -> none

AreTexturesResident (texturesArray) -> residences

ArrayElement (i) -> none

Begin (mode) -> none

BindTexture (target, texture) -> none

Bitmap (xorig, yorig, ymove, bitmap) -> none

BlendFunc (sfactor, dfactor) -> none

CallList (list) -> none

CallLists (listArray) -> none

Clear (mask) -> none

ClearAccum (red, green, blue, alpha) -> none

ClearColor (red, green, blue, alpha) -> none

ClearDepth (depth) -> none

ClearIndex (c) -> none

ClearStencil (s) -> none

ClipPlane (plane, equationArray) -> none

Color (red, green, blue [, alpha]) -> none
Color (color) -> none

ColorMask (red, green, blue, alpha) -> none

ColorMaterial (face, mode) -> none

ColorPointer (colorArray) -> none

CopyPixels (x, y, width, height, type) -> none

CopyTexImage (level, internalFormat, border, x, y, width[, height]) -> none

CopyTexSubImage (level, x, y, xoffset, width[, yoffset, height]) -> none

CullFace (mode) -> none

DeleteLists (list, range) -> none

DeleteTextures (texturesArray) -> none

DepthFunc (func) -> none

DepthMask (flag) -> none

DepthRange (zNear, zFar) -> none

Disable (cap) -> none

DisableClientState (array) -> none

DrawArrays (mode, first, count) -> none

DrawBuffer (mode) -> none

DrawElements (mode, indicesArray) -> none

DrawPixels (width, height, format, pixels) -> none

EdgeFlag (flag) -> none

EdgeFlagPointer (flagsArray) -> none

Enable (cap) -> none

EnableClientState (array) -> none

End () -> none

EndList () -> none

EvalCoord (u[, v]) -> none
EvalCoord (coordArray) -> none

EvalMesh (mode, i1, i2[,j1, j2]) -> none

EvalPoint (i[, j]) -> none

FeedbackBuffer (size, type) -> dataArray

Finish () -> none

Flush () -> none

Fog (pname, param) -> none
Fog (pname, paramsArray) -> none

FrontFace (mode) -> none

Frustum (left, right, bottom, top, zNear, zFar) -> none

GenLists (range) -> num

GenTextures (n) -> texturesArray

Get (pname) -> params

GetArray (pname) -> paramsArray

GetConst (pname) -> constant string

GetClipPlane (plane) -> equationArray

GetError () -> error flag

GetLight (light, pname) -> paramsArray

GetMap (target, query) -> vArray

GetMaterial (face, pname) -> paramsArray

GetPixelMap (map) -> valuesArray

GetPointer (pname, n) -> valuesArray

GetPolygonStipple () -> maskArray

GetString (name) -> string

GetTexEnv (pname) -> paramsArray

GetTexGen (coord, pname) -> paramsArray

GetTexImage (target, level, format) -> pixelsArray

GetTexLevelParameter (target, level, pname) -> param

GetTexParameter (target, pname) -> paramsArray

Hint (target, mode) -> none

Index (c) -> none

IndexMask (mask) -> none

IndexPointer (indexArray) -> none

InitNames () -> none

InterleavedArrays (format, dataArray) -> none

IsEnabled (cap) -> true/false

IsList (list) -> true/false

IsTexture (texture) -> true/false

Light (light, pname, param) -> none
Light (light, pname, paramsArray) -> none

LightModel (pname, param) -> none
LightModel (pname, paramsArray) -> none

LineStipple (factor, pattern) -> none

LineWidth (width) -> none

ListBase (base) -> none

LoadIdentity () -> none

LoadMatrix (mArray) -> none

LoadName (name) -> none

LogicOp (opcode) -> none

Map (target, u1, u2, ustride, pointsArray) -> none
Map (target, u1, u2, ustride, v1, v2, vstride, pointsArray) -> none

MapGrid (un, u1, u2[, vn, v1, v2]) -> none

Material (face, pname, param) -> none

MatrixMode (mode) -> none

MultMatrix (mArray) -> none

NewList (list, mode) -> none

Normal (nx, ny, nz) -> none
Normal (nArray) -> none

NormalPointer (normalArray) -> none

Ortho (left, right, bottom, top, zNear, zFar) -> none

PassThrough (token) -> none

PixelMap (map, valuesArray) -> none

PixelStore (pname, param) -> none

PixelTransfer (pname, param) -> none

PixelZoom (xfactor, yfactor) -> none

PointSize (size) -> none

PolygonMode (face, mode) -> none

PolygonOffset (factor, units) -> none

PolygonStipple (maskArray) -> none

PopAttrib () -> none

PopClientAttrib () -> none

PopMatrix () -> none

PopName () -> none

PrioritizeTextures (texturesArray, prioritiesArray) -> none

PushAttrib (mask) -> none

PushClientAttrib (mask) -> none

PushMatrix () -> none

PushName (GLuint name) -> none

RasterPos (x, y[, z, w]) -> none
RasterPos (vArray) -> none

ReadBuffer (mode) -> none

ReadPixels (x, y, width, height, format, pixelsArray) -> none

Rect (x1, y1, x2, y2) -> none
Rect (v1, v2) -> none

RenderMode (mode) -> none

Rotate (angle, x, y, z) -> none

Scale (x, y, z) -> none

Scissor (x, y, width, height) -> none

SelectBuffer (size) -> SelectArray

ShadeModel (mode) -> none

StencilFunc (func, ref, mask) -> none

StencilMask (mask) -> none

StencilOp (fail, zfail, zpass) -> none

TexCoord (s[, t, r, q]) -> none
TexCoord (vArray) -> none

TexCoordPointer(vArray) -> none

TexEnv (pname, param) -> none
TexEnv (pname, paramsArray) -> none

TexGen (coord, pname, param) -> none
TexGen (coord, pname, paramsArray) -> none

TexImage(level, internalformat, format, pixels) -> none

TexParameter (target, pname, param) -> none
TexParameter (target, pname, paramsArray) -> none

TexSubImage (level, format, pixels, xoffset) -> none
TexSubImage (level, format, pixels, xoffset, yoffset) -> none

Translate (x, y, z) -> none

Vertex (x, y, [z, w]) -> none
Vertex (vArray) -> none

VertexPointer (vertexArray) -> none

Viewport (x, y, width, height) -> none


home · whatis · portability · download · how it works · reference ·

Last modified on 13/07/2003