celx_gl.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:10k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // celx_gl.cpp
  2. //
  3. // Copyright (C) 2003-2008, the Celestia Development Team
  4. //
  5. // Lua script extensions for Celestia: OpenGL functions
  6. //
  7. // This program is free software; you can redistribute it and/or
  8. // modify it under the terms of the GNU General Public License
  9. // as published by the Free Software Foundation; either version 2
  10. // of the License, or (at your option) any later version.
  11. #include "celx.h"
  12. #include "celx_internal.h"
  13. #include "celx_object.h"
  14. #include <celengine/gl.h>
  15. // ==================== OpenGL ====================
  16. static int glu_LookAt(lua_State* l)
  17. {
  18.     CelxLua celx(l);
  19.     celx.checkArgs(9, 9, "Nine arguments expected for glu.LookAt()");
  20.     float ix = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Frustum must be a number", 0.0);
  21.     float iy = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.Frustum must be a number", 0.0);
  22.     float iz = (float)celx.safeGetNumber(3, WrongType, "argument 3 to gl.Frustum must be a number", 0.0);
  23.     float cx = (float)celx.safeGetNumber(4, WrongType, "argument 4 to gl.Frustum must be a number", 0.0);
  24.     float cy = (float)celx.safeGetNumber(5, WrongType, "argument 5 to gl.Frustum must be a number", 0.0);
  25.     float cz = (float)celx.safeGetNumber(6, WrongType, "argument 6 to gl.Frustum must be a number", 0.0);
  26.     float ux = (float)celx.safeGetNumber(7, WrongType, "argument 4 to gl.Frustum must be a number", 0.0);
  27.     float uy = (float)celx.safeGetNumber(8, WrongType, "argument 5 to gl.Frustum must be a number", 0.0);
  28.     float uz = (float)celx.safeGetNumber(9, WrongType, "argument 6 to gl.Frustum must be a number", 0.0);
  29. gluLookAt(ix,iy,iz,cx,cy,cz,ux,uy,uz);
  30.     return 0;
  31. }
  32. static int gl_Frustum(lua_State* l)
  33. {
  34.     CelxLua celx(l);
  35.     celx.checkArgs(6, 6, "Six arguments expected for gl.Frustum()");
  36.     float ll = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Frustum must be a number", 0.0);
  37.     float r = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.Frustum must be a number", 0.0);
  38.     float b = (float)celx.safeGetNumber(3, WrongType, "argument 3 to gl.Frustum must be a number", 0.0);
  39.     float t = (float)celx.safeGetNumber(4, WrongType, "argument 4 to gl.Frustum must be a number", 0.0);
  40.     float n = (float)celx.safeGetNumber(5, WrongType, "argument 5 to gl.Frustum must be a number", 0.0);
  41.     float f = (float)celx.safeGetNumber(6, WrongType, "argument 6 to gl.Frustum must be a number", 0.0);
  42. glFrustum(ll,r,b,t,n,f);
  43.     return 0;
  44. }
  45. static int gl_Ortho(lua_State* l)
  46. {
  47.     CelxLua celx(l);
  48.     celx.checkArgs(6, 6, "Six arguments expected for gl.Ortho()");
  49.     float ll = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Ortho must be a number", 0.0);
  50.     float r = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.Ortho must be a number", 0.0);
  51.     float b = (float)celx.safeGetNumber(3, WrongType, "argument 3 to gl.Ortho must be a number", 0.0);
  52.     float t = (float)celx.safeGetNumber(4, WrongType, "argument 4 to gl.Ortho must be a number", 0.0);
  53.     float n = (float)celx.safeGetNumber(5, WrongType, "argument 5 to gl.Ortho must be a number", 0.0);
  54.     float f = (float)celx.safeGetNumber(6, WrongType, "argument 6 to gl.Ortho must be a number", 0.0);
  55. glOrtho(ll,r,b,t,n,f);
  56.     return 0;
  57. }
  58. static int glu_Ortho2D(lua_State* l)
  59. {
  60.     CelxLua celx(l);
  61.     celx.checkArgs(4, 4, "Six arguments expected for gl.Ortho2D()");
  62.     float ll = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Ortho must be a number", 0.0);
  63.     float r = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.Ortho must be a number", 0.0);
  64.     float b = (float)celx.safeGetNumber(3, WrongType, "argument 3 to gl.Ortho must be a number", 0.0);
  65.     float t = (float)celx.safeGetNumber(4, WrongType, "argument 4 to gl.Ortho must be a number", 0.0);
  66. gluOrtho2D(ll,r,b,t);
  67.     return 0;
  68. }
  69. static int gl_TexCoord(lua_State* l)
  70. {
  71.     CelxLua celx(l);
  72.     celx.checkArgs(2, 2, "Two arguments expected for gl.TexCoord()");
  73.     float x = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.TexCoord must be a number", 0.0);
  74.     float y = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.TexCoord must be a number", 0.0);
  75. glTexCoord2f(x,y);
  76.     return 0;
  77. }
  78. static int gl_TexParameter(lua_State* l)
  79. {
  80.     CelxLua celx(l);
  81.     celx.checkArgs(3, 3, "Three arguments expected for gl.TexParameter()");
  82.     
  83.     // TODO: Need to ensure that these values are integers, or better yet use
  84.     // names.
  85.     float x = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.TexParameter must be a number", 0.0);
  86.     float y = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.TexParameter must be a number", 0.0);
  87.     float z = (float)celx.safeGetNumber(3, WrongType, "argument 3 to gl.TexParameter must be a number", 0.0);
  88.     glTexParameteri((GLint) x, (GLenum) y, (GLenum) z);
  89.     return 0;
  90. }
  91. static int gl_Vertex(lua_State* l)
  92. {
  93.     CelxLua celx(l);
  94.     celx.checkArgs(2, 2, "Two arguments expected for gl.Vertex()");
  95.     float x = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Vertex must be a number", 0.0);
  96.     float y = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.Vertex must be a number", 0.0);
  97. glVertex2f(x,y);
  98.     return 0;
  99. }
  100. static int gl_Color(lua_State* l)
  101. {
  102.     CelxLua celx(l);
  103.     celx.checkArgs(4, 4, "Four arguments expected for gl.Color()");
  104.     float r = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Color must be a number", 0.0);
  105.     float g = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.Color must be a number", 0.0);
  106.     float b = (float)celx.safeGetNumber(3, WrongType, "argument 3 to gl.Color must be a number", 0.0);
  107.     float a = (float)celx.safeGetNumber(4, WrongType, "argument 4 to gl.Color must be a number", 0.0);
  108. glColor4f(r,g,b,a);
  109.     // glColor4f(0.8f, 0.5f, 0.5f, 1.0f);
  110.     return 0;
  111. }
  112. static int gl_LineWidth(lua_State* l)
  113. {
  114.     CelxLua celx(l);
  115.     celx.checkArgs(1, 1, "One argument expected for gl.LineWidth()");
  116.     float n = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.LineWidth must be a number", 1.0);
  117.     glLineWidth(n);
  118.     return 0;
  119. }
  120. static int gl_Translate(lua_State* l)
  121. {
  122.     CelxLua celx(l);
  123.     celx.checkArgs(2, 2, "Two arguments expected for gl.Translate()");
  124.     float x = (float)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Translate must be a number", 0.0);
  125.     float y = (float)celx.safeGetNumber(2, WrongType, "argument 2 to gl.Translate must be a number", 0.0);
  126. glTranslatef(x,y,0.0f);
  127.     return 0;
  128. }
  129. static int gl_BlendFunc(lua_State* l)
  130. {
  131.     CelxLua celx(l);
  132.     celx.checkArgs(2, 2, "Two arguments expected for gl.BlendFunc()");
  133.     int i = (int)celx.safeGetNumber(1, WrongType, "argument 1 to gl.BlendFunc must be a number", 0.0);
  134.     int j = (int)celx.safeGetNumber(2, WrongType, "argument 2 to gl.BlendFunc must be a number", 0.0);
  135. glBlendFunc(i,j);
  136.     return 0;
  137. }
  138. static int gl_Begin(lua_State* l)
  139. {
  140.     CelxLua celx(l);
  141.     celx.checkArgs(1, 1, "One argument expected for gl.Begin()");
  142.     int i = (int)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Begin must be a number", 0.0);
  143. glBegin(i);
  144.     return 0;
  145. }
  146. static int gl_End(lua_State* l)
  147. {
  148.     CelxLua celx(l);
  149.     celx.checkArgs(0, 0, "No arguments expected for gl.PopMatrix()");
  150.     glEnd();
  151.     return 0;
  152. }
  153. static int gl_Enable(lua_State* l)
  154. {
  155.     CelxLua celx(l);
  156.     celx.checkArgs(1, 1, "One argument expected for gl.Enable()");
  157.     int i = (int)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Enable must be a number", 0.0);
  158. glEnable(i);
  159.     return 0;
  160. }
  161. static int gl_Disable(lua_State* l)
  162. {
  163.     CelxLua celx(l);
  164.     celx.checkArgs(1, 1, "One argument expected for gl.Disable()");
  165.     int i = (int)celx.safeGetNumber(1, WrongType, "argument 1 to gl.Disable must be a number", 0.0);
  166. glDisable(i);
  167.     return 0;
  168. }
  169. static int gl_MatrixMode(lua_State* l)
  170. {
  171.     CelxLua celx(l);
  172.     celx.checkArgs(1, 1, "One argument expected for gl.MatrixMode()");
  173.     int i = (int) celx.safeGetNumber(1, WrongType, "argument 1 to gl.MatrixMode must be a number", 0.0);
  174. glMatrixMode(i);
  175.     return 0;
  176. }
  177. static int gl_PopMatrix(lua_State* l)
  178. {
  179.     CelxLua celx(l);
  180.     celx.checkArgs(0, 0, "No arguments expected for gl.PopMatrix()");
  181.     glPopMatrix();
  182.     return 0;
  183. }
  184. static int gl_LoadIdentity(lua_State* l)
  185. {
  186.     CelxLua celx(l);
  187.     celx.checkArgs(0, 0, "No arguments expected for gl.LoadIdentity()");
  188.     glLoadIdentity();
  189.     return 0;
  190. }
  191. static int gl_PushMatrix(lua_State* l)
  192. {
  193.     CelxLua celx(l);
  194.     celx.checkArgs(0, 0, "No arguments expected for gl.PushMatrix()");
  195.     glPushMatrix();
  196.     return 0;
  197. }
  198. void LoadLuaGraphicsLibrary(lua_State* l)
  199. {
  200.     CelxLua celx(l);
  201.     lua_pushstring(l, "gl");
  202.     lua_newtable(l);
  203.     
  204.     celx.registerMethod("Frustum", gl_Frustum);
  205.     celx.registerMethod("Ortho", gl_Ortho);
  206.     celx.registerMethod("Color", gl_Color);
  207.     celx.registerMethod("LineWidth", gl_LineWidth);
  208.     celx.registerMethod("TexCoord", gl_TexCoord);
  209.     celx.registerMethod("TexParameter", gl_TexParameter);
  210.     celx.registerMethod("Vertex", gl_Vertex);
  211.     celx.registerMethod("Translate", gl_Translate);
  212.     celx.registerMethod("BlendFunc", gl_BlendFunc);
  213.     celx.registerMethod("Begin", gl_Begin);
  214.     celx.registerMethod("End", gl_End);
  215.     celx.registerMethod("Enable", gl_Enable);
  216.     celx.registerMethod("Disable", gl_Disable);
  217.     celx.registerMethod("MatrixMode", gl_MatrixMode);
  218.     celx.registerMethod("PopMatrix", gl_PopMatrix);
  219.     celx.registerMethod("LoadIdentity", gl_LoadIdentity);
  220.     celx.registerMethod("PushMatrix", gl_PushMatrix);
  221.     
  222.     celx.registerValue("QUADS", GL_QUADS);
  223.     celx.registerValue("LIGHTING", GL_LIGHTING);
  224.     celx.registerValue("POINTS", GL_POINTS);
  225.     celx.registerValue("LINES", GL_LINES);
  226.     celx.registerValue("LINE_LOOP", GL_LINE_LOOP);
  227.     celx.registerValue("LINE_SMOOTH", GL_LINE_SMOOTH);
  228.     celx.registerValue("POLYGON", GL_POLYGON);
  229.     celx.registerValue("PROJECTION", GL_PROJECTION);
  230.     celx.registerValue("MODELVIEW", GL_MODELVIEW);
  231.     celx.registerValue("BLEND", GL_BLEND);
  232.     celx.registerValue("TEXTURE_2D", GL_TEXTURE_2D);
  233.     celx.registerValue("TEXTURE_MAG_FILTER", GL_TEXTURE_MAG_FILTER);
  234.     celx.registerValue("TEXTURE_MIN_FILTER", GL_TEXTURE_MIN_FILTER);
  235.     celx.registerValue("LINEAR", GL_LINEAR);
  236.     celx.registerValue("NEAREST", GL_NEAREST);
  237.     celx.registerValue("SRC_ALPHA", GL_SRC_ALPHA);
  238.     celx.registerValue("ONE_MINUS_SRC_ALPHA", GL_ONE_MINUS_SRC_ALPHA);
  239.     lua_settable(l, LUA_GLOBALSINDEX);
  240.     
  241.     lua_pushstring(l, "glu");
  242.     lua_newtable(l);
  243.     celx.registerMethod("LookAt", glu_LookAt);
  244.     celx.registerMethod("Ortho2D", glu_Ortho2D);
  245.     lua_settable(l, LUA_GLOBALSINDEX);
  246. }