Author: fperrad
Date: Wed Jul 23 00:32:55 2008
New Revision: 29695
Modified:
trunk/languages/lua/src/lib/gl.pir
Log:
[Lua] OpenGL
- some methods
Modified: trunk/languages/lua/src/lib/gl.pir
==============================================================================
--- trunk/languages/lua/src/lib/gl.pir (original)
+++ trunk/languages/lua/src/lib/gl.pir Wed Jul 23 00:32:55 2008
@@ -1361,6 +1361,74 @@
.return (ret)
.end
+.sub 'get_arrayb' :anon
+ .param pmc table
+ .local int n
+ n = table.'len'()
+ .local pmc a
+ new a, 'FixedBooleanArray'
+ set a, n
+ $I0 = 0
+ new $P0, 'LuaNumber'
+ L1:
+ unless $I0 < n goto L2
+ set $P0, $I0
+ inc $P0
+ $P1 = table[$P0]
+ $I1 = istrue $P1
+ a[$I0] = $I1
+ inc $I0
+ goto L1
+ L2:
+ .return (n, a)
+.end
+
+.sub 'get_arrayf' :anon
+ .param pmc table
+ .local int n
+ n = table.'len'()
+ .local pmc a
+ new a, 'FixedFloatArray'
+ set a, n
+ $I0 = 0
+ new $P0, 'LuaNumber'
+ L1:
+ unless $I0 < n goto L2
+ set $P0, $I0
+ inc $P0
+ $P1 = table[$P0]
+ $N1 = $P1
+ a[$I0] = $N1
+ inc $I0
+ goto L1
+ L2:
+ .return (n, a)
+.end
+
+.sub 'get_arrayi' :anon
+ .param pmc table
+ .local int n
+ n = table.'len'()
+ .local pmc a
+ new a, 'FixedIntegerArray'
+ set a, n
+ $I0 = 0
+ new $P0, 'LuaNumber'
+ L1:
+ unless $I0 < n goto L2
+ set $P0, $I0
+ inc $P0
+ $P1 = table[$P0]
+ $I1 = $P1
+ a[$I0] = $I1
+ inc $I0
+ goto L1
+ L2:
+ .return (n, a)
+.end
+
+.include 'opengl_defines.pasm'
+
=item C<gl.Accum (op, value)>
@@ -1384,7 +1452,6 @@
L3:
$N2 = value
glAccum($I1, $N2)
- .return ()
.end
@@ -1410,7 +1477,6 @@
L3:
$N2 = ref
glAlphaFunc($I1, $N2)
- .return ()
.end
@@ -1429,23 +1495,38 @@
.end
-=item C<gl.ArrayElement ()>
+=item C<gl.ArrayElement (i)>
=cut
.sub 'ArrayElement' :anon
+ .param pmc i :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isnumber(i)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.ArrayElement'")
+ L1:
+ $I1 = i
+ glArrayElement($I1)
.end
-=item C<gl.Begin ()>
+=item C<gl.Begin (mode)>
=cut
.sub 'Begin' :anon
+ .param pmc mode :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(mode)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.Begin'")
+ L1:
+ $I1 = get_gl_enum(mode)
+ unless $I1 == ENUM_ERROR goto L2
+ lua_error("incorrect string argument to function 'gl.Begin'")
+ L2:
+ glBegin($I1)
.end
@@ -1469,43 +1550,82 @@
.end
-=item C<gl.BlendFunc ()>
+=item C<gl.BlendFunc (sfactor, dfactor)>
=cut
.sub 'BlendFunc' :anon
+ .param pmc sfactor :optional
+ .param pmc dfactor :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(sfactor)
+ unless $I0 goto L1
+ $I0 = lua_isstring(dfactor)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.BlendFunc'")
+ L2:
+ $I1 = get_gl_enum(sfactor)
+ if $I1 == ENUM_ERROR goto L3
+ $I2 = get_gl_enum(dfactor)
+ if $I2 == ENUM_ERROR goto L3
+ goto L4
+ L3:
+ lua_error("incorrect string argument to function 'gl.BlendFunc'")
+ L4:
+ glBlendFunc($I1, $I2)
.end
-=item C<gl.CallList ()>
+=item C<gl.CallList (list)>
=cut
.sub 'CallList' :anon
+ .param pmc list :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isnumber(list)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.CallList'")
+ L1:
+ $I1 = list
+ glCallList($I1)
.end
-=item C<gl.CallLists ()>
+=item C<gl.CallLists (listArray)>
=cut
.sub 'CallLists' :anon
+ .param pmc listArray :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_istable(listArray)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.CallLists'")
+ L1:
+ ($I0, $P0) = get_arrayf(listArray)
+ glCallLists($I0, .GL_DOUBLE, $P0)
.end
-=item C<gl.Clear ()>
+=item C<gl.Clear (mask)>
=cut
.sub 'Clear' :anon
+ .param pmc mask :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(mask)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.Clear'")
+ L1:
+ $I1 = get_gl_enum(mask)
+ unless $I1 == ENUM_ERROR goto L2
+ lua_error("incorrect string argument to function 'gl.Clear'")
+ L2:
+ glClear($I1)
.end
@@ -1519,13 +1639,33 @@
.end
-=item C<gl.ClearColor ()>
+=item C<gl.ClearColor (red, green, blue, alpha)>
=cut
.sub 'ClearColor' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc red :optional
+ .param pmc green :optional
+ .param pmc blue :optional
+ .param pmc alpha :optional
+ .param pmc extra :slurpy
+ $I0 = lua_isnumber(red)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(green)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(blue)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(alpha)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.ClearColor'")
+ L2:
+ $I1 = red
+ $I2 = green
+ $I3 = blue
+ $I4 = alpha
+ glClearColor($I1, $I2, $I3, $I4)
.end
@@ -1569,13 +1709,57 @@
.end
-=item C<gl.Color ()>
+=item C<gl.Color (red, green, blue [, alpha])>
+=item C<gl.Color (color)>
=cut
.sub 'Color' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc vararg :slurpy
+ .local int num_args
+ num_args = elements vararg
+ unless num_args goto L1
+ $P1 = vararg[0]
+ $I0 = lua_istable($P1)
+ unless $I0 goto L1
+ (num_args, $P0) = get_arrayf($P1)
+ unless num_args > 4 goto L2
+ num_args = 4
+ L2:
+ unless num_args == 3 goto L3
+ glColor3dv($P0)
+ .return ()
+ L3:
+ unless num_args == 4 goto L4
+ glColor4dv($P0)
+ L4:
+ .return()
+ L1:
+ unless num_args > 4 goto L5
+ num_args = 4
+ L5:
+ $I0 = 0
+ new $P0, 'ResizableFloatArray'
+ L6:
+ unless $I0 < num_args goto L7
+ $P1 = shift vararg
+ $I1 = lua_isnumber($P1)
+ if $I1 goto L8
+ lua_error("incorrect argument to function 'gl.Color'")
+ L8:
+ $N1 = $P1
+ $P0[$I0] = $N1
+ inc $I0
+ goto L6
+ L7:
+ unless num_args == 3 goto L9
+ glColor3dv($P0)
+ .return ()
+ L9:
+ unless num_args == 4 goto L10
+ glColor4dv($P0)
+ L10:
+ .return()
.end
@@ -1699,33 +1883,70 @@
.end
-=item C<gl.Disable ()>
+=item C<gl.Disable (cap)>
=cut
.sub 'Disable' :anon
+ .param pmc cap :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(cap)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.Disable'")
+ L1:
+ $I1 = get_gl_enum(cap)
+ unless $I1 == ENUM_ERROR goto L2
+ lua_error("incorrect string argument to function 'gl.Disable'")
+ L2:
+ glDisable($I1)
.end
-=item C<gl.DisableClientState ()>
+=item C<gl.DisableClientState (array)>
=cut
.sub 'DisableClientState' :anon
+ .param pmc array :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(array)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.DisableClientState'")
+ L1:
+ $I1 = get_gl_enum(array)
+ unless $I1 == ENUM_ERROR goto L2
+ lua_error("incorrect string argument to function 'gl.DisableClientState'")
+ L2:
+ glDisableClientState($I1)
.end
-=item C<gl.DrawArrays ()>
+=item C<gl.DrawArrays (mode, first, count)>
=cut
.sub 'DrawArrays' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc mode :optional
+ .param pmc first :optional
+ .param pmc count :optional
+ .param pmc extra :slurpy
+ $I0 = lua_isstring(mode)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(first)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(count)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.DrawArrays'")
+ L2:
+ $I1 = get_gl_enum(mode)
+ unless $I1 == ENUM_ERROR goto L3
+ lua_error("incorrect string argument to function 'gl.DrawArrays'")
+ L3:
+ $I2 = first
+ $I3 = count
+ glDrawArrays($I1, $I2, $I3)
.end
@@ -1739,13 +1960,28 @@
.end
-=item C<gl.DrawElements ()>
+=item C<gl.DrawElements (mode, indicesArray)>
=cut
.sub 'DrawElements' :anon
+ .param pmc mode :optional
+ .param pmc indicesArray :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(mode)
+ unless $I0 goto L1
+ $I0 = lua_istable(indicesArray)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ luaL_error("incorrect argument to function 'gl.DrawElements'")
+ L2:
+ $I1 = get_gl_enum(mode)
+ unless $I1 == ENUM_ERROR goto L3
+ lua_error("incorrect string argument to function 'gl.DrawElements'")
+ L3:
+ ($I2, $P2) = get_arrayi(indicesArray)
+ glDrawElements($I1, $I2, .GL_INT, $P2)
.end
@@ -1779,23 +2015,41 @@
.end
-=item C<gl.Enable ()>
+=item C<gl.Enable (cap)>
=cut
.sub 'Enable' :anon
+ .param pmc cap :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(cap)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.Enable'")
+ L1:
+ $I1 = get_gl_enum(cap)
+ unless $I1 == ENUM_ERROR goto L2
+ lua_error("incorrect string argument to function 'gl.Enable'")
+ L2:
+ glEnable($I1)
.end
-=item C<gl.EnableClientState ()>
+=item C<gl.EnableClientState (array)>
=cut
.sub 'EnableClientState' :anon
+ .param pmc mode :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(mode)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.EnableClientState'")
+ L1:
+ $I1 = get_gl_enum(mode)
+ unless $I1 == ENUM_ERROR goto L2
+ lua_error("incorrect string argument to function 'gl.EnableClientState'")
+ L2:
+ glEnableClientState($I1)
.end
@@ -1805,7 +2059,7 @@
.sub 'End' :anon
.param pmc extra :slurpy
- not_implemented()
+ glEnd()
.end
@@ -1815,7 +2069,7 @@
.sub 'EndList' :anon
.param pmc extra :slurpy
- not_implemented()
+ glEndList()
.end
@@ -1865,7 +2119,7 @@
.sub 'Finish' :anon
.param pmc extra :slurpy
- not_implemented()
+ glFinish()
.end
@@ -1875,7 +2129,7 @@
.sub 'Flush' :anon
.param pmc extra :slurpy
- not_implemented()
+ glFlush()
.end
@@ -2235,7 +2489,7 @@
.sub 'LoadIdentity' :anon
.param pmc extra :slurpy
- not_implemented()
+ glLoadIdentity()
.end
@@ -2299,13 +2553,22 @@
.end
-=item C<gl.MatrixMode ()>
+=item C<gl.MatrixMode (mode)>
=cut
.sub 'MatrixMode' :anon
+ .param pmc mode :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isstring(mode)
+ if $I0 goto L1
+ lua_error("incorrect argument to function 'gl.MatrixMode'")
+ L1:
+ $I1 = get_gl_enum(mode)
+ unless $I1 == ENUM_ERROR goto L2
+ lua_error("incorrect string argument to function 'gl.MatrixMode'")
+ L2:
+ glMatrixMode($I1)
.end
@@ -2319,13 +2582,28 @@
.end
-=item C<gl.NewList ()>
+=item C<gl.NewList (list, mode)>
=cut
.sub 'NewList' :anon
+ .param pmc list :optional
+ .param pmc mode :optional
.param pmc extra :slurpy
- not_implemented()
+ $I0 = lua_isnumber(list)
+ unless $I0 goto L1
+ $I0 = lua_isstring(mode)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.NewList'")
+ L2:
+ $I1 = list
+ $I2 = get_gl_enum(mode)
+ unless $I2 == ENUM_ERROR goto L3
+ lua_error("incorrect string argument to function 'gl.NewList'")
+ L3:
+ glNewList($I1, $I2)
.end
@@ -2349,13 +2627,41 @@
.end
-=item C<gl.Ortho ()>
+=item C<gl.Ortho (left, right, bottom, top, zNear, zFar)>
=cut
.sub 'Ortho' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc left :optional
+ .param pmc right :optional
+ .param pmc bottom :optional
+ .param pmc top :optional
+ .param pmc zNear :optional
+ .param pmc zFar :optional
+ .param pmc extra :slurpy
+ $I0 = lua_isnumber(left)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(right)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(bottom)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(top)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(zNear)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(zFar)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.Ortho'")
+ L2:
+ $I1 = left
+ $I2 = right
+ $I3 = bottom
+ $I4 = top
+ $I5 = zNear
+ $I6 = zFar
+ glOrtho($I1, $I2, $I3, $I4, $I5, $I6)
.end
@@ -2455,7 +2761,7 @@
.sub 'PopAttrib' :anon
.param pmc extra :slurpy
- not_implemented()
+ glPopAttrib()
.end
@@ -2465,7 +2771,7 @@
.sub 'PopClientAttrib' :anon
.param pmc extra :slurpy
- not_implemented()
+ glPopClientAttrib()
.end
@@ -2475,7 +2781,7 @@
.sub 'PopMatrix' :anon
.param pmc extra :slurpy
- not_implemented()
+ glPopMatrix()
.end
@@ -2485,7 +2791,7 @@
.sub 'PopName' :anon
.param pmc extra :slurpy
- not_implemented()
+ glPopName()
.end
@@ -2525,7 +2831,7 @@
.sub 'PushMatrix' :anon
.param pmc extra :slurpy
- not_implemented()
+ glPushMatrix()
.end
@@ -2569,13 +2875,46 @@
.end
-=item C<gl.Rect ()>
+=item C<gl.Rect (x1, y1, x2, y2)>
+=item C<gl.Rect (v1, v2)>
=cut
.sub 'Rect' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc vararg :slurpy
+ .local int num_args
+ num_args = elements vararg
+ if num_args < 2 goto L1
+ $P1 = vararg[0]
+ $P2 = vararg[1]
+ $I0 = lua_istable($P1)
+ unless $I0 goto L1
+ $I0 = lua_istable($P2)
+ unless $I0 goto L1
+ ($I0, $P1) = get_arrayf($P1)
+ ($I0, $P2) = get_arrayf($P2)
+ glRectdv($P1, $P2)
+ .return ()
+ L1:
+ if num_args < 4 goto L2
+ $I0 = lua_isnumber($P1)
+ unless $I0 goto L2
+ $I0 = lua_isnumber($P2)
+ unless $I0 goto L2
+ $P3 = vararg[2]
+ $I0 = lua_isnumber($P3)
+ unless $I0 goto L2
+ $P4 = vararg[3]
+ $I0 = lua_isnumber($P4)
+ unless $I0 goto L2
+ $N1 = $P1
+ $N2 = $P2
+ $N3 = $P3
+ $N4 = $P4
+ glRectd($N1, $N2, $N3, $N4)
+ .return ()
+ L2:
+ lua_error("incorrect argument to function 'gl.Rect'")
.end
@@ -2599,13 +2938,29 @@
.end
-=item C<gl.Scale ()>
+=item C<gl.Scale (x, y, z)>
=cut
.sub 'Scale' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc x :optional
+ .param pmc y :optional
+ .param pmc z :optional
+ .param pmc extra :slurpy
+ $I0 = lua_isnumber(x)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(y)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(z)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.Scale'")
+ L2:
+ $N1 = x
+ $N2 = y
+ $N3 = z
+ glScaled($N1, $N2, $N3)
.end
@@ -2739,23 +3094,82 @@
.end
-=item C<gl.Translate ()>
+=item C<gl.Translate (x, y, z)>
=cut
.sub 'Translate' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc x :optional
+ .param pmc y :optional
+ .param pmc z :optional
+ .param pmc extra :slurpy
+ $I0 = lua_isnumber(x)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(y)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(z)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.Translate'")
+ L2:
+ $N1 = x
+ $N2 = y
+ $N3 = z
+ glTranslate($N1, $N2, $N3)
.end
-=item C<gl.Vertex ()>
+=item C<gl.Vertex (x, y, [z, w])>
+=item C<gl.Vertex (v)>
=cut
.sub 'Vertex' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc vararg :slurpy
+ .local int num_args
+ num_args = elements vararg
+ unless num_args == 0 goto L1
+ lua_error("incorrect argument to function 'gl.Vertex'")
+ L1:
+ $P1 = vararg[0]
+ $I0 = lua_istable($P1)
+ unless $I0 goto L2
+ (num_args, $P0) = get_arrayd($P1)
+ goto L3
+ L2:
+ unless num_args < 2 goto L4
+ lua_error("incorrect argument to function 'gl.Vertex'")
+ L4:
+ new $P0, 'ResizableFloatArray'
+ $I0 = 0
+ L5:
+ unless $I0 < num_args goto L3
+ $P1 = shift vararg
+ $I1 = lua_isnumber($P1)
+ if $I1 goto L6
+ lua_error("incorrect argument to function 'gl.Vertex'")
+ L6:
+ $N1 = $P1
+ $P0[$I0] = $N1
+ inc $I0
+ goto L5
+ L3:
+ unless num_args > 4 goto L7
+ num_args = 4
+ L7:
+ unless num_args == 2 goto L8
+ glVertex2dv($P0)
+ .return()
+ L8:
+ unless num_args == 3 goto L9
+ glVertex3dv($P0)
+ .return()
+ L9:
+ unless num_args == 4 goto L10
+ glVertex4dv($P0)
+ L10:
+ .return()
.end
@@ -2769,13 +3183,33 @@
.end
-=item C<gl.Viewport ()>
+=item C<gl.Viewport (x, y, width, height)>
=cut
.sub 'Viewport' :anon
- .param pmc extra :slurpy
- not_implemented()
+ .param pmc x :optional
+ .param pmc y :optional
+ .param pmc width :optional
+ .param pmc height :optional
+ .param pmc extra :slurpy
+ $I0 = lua_isnumber(x)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(y)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(width)
+ unless $I0 goto L1
+ $I0 = lua_isnumber(height)
+ unless $I0 goto L1
+ goto L2
+ L1:
+ lua_error("incorrect argument to function 'gl.Viewport'")
+ L2:
+ $I1 = x
+ $I2 = y
+ $I3 = width
+ $I4 = height
+ glViewport($I1, $I2, $I3, $I4)
.end