Example #1
0
/* quad:DrawStyle(draw) -> quad */
static int luaglu_quadric_draw_style(lua_State *L)
{
  LuaGLUquadric *lquad=luaglu_checkquadric(L,1);
  gluQuadricDrawStyle(lquad->quad, luaglu_get_gl_enum(L, 2));
  lua_pushvalue(L,1);
  return 1;
}
Example #2
0
/* quad:Orientation(orientation) -> quad */
static int luaglu_quadric_orientation(lua_State *L)
{
  LuaGLUquadric *lquad=luaglu_checkquadric(L,1);
  gluQuadricOrientation(lquad->quad, luaglu_get_gl_enum(L, 2));
  lua_pushvalue(L,1);
  return 1;

}
Example #3
0
/* nurb:PwlCurve (dataArray, type) -> nurb */
static int luaglu_pwl_curve(lua_State *L)
{
  LuaGLUnurb *lnurb=luaglu_checknurb(L,1);
  GLint ptsCount=0;
  GLint stride;
  GLfloat *points;
  int size=1;
  GLenum e;

  e = luaglu_get_gl_enum(L, 3);

  switch(e)
  {
  case GL_MAP1_INDEX:
  case GL_MAP2_INDEX:
  case GL_MAP1_TEXTURE_COORD_1:
  case GL_MAP2_TEXTURE_COORD_1:
    size = 1;
    break;
  case GLU_MAP1_TRIM_2:
  case GL_MAP1_TEXTURE_COORD_2:
  case GL_MAP2_TEXTURE_COORD_2:
    size = 2;
    break;
  case GLU_MAP1_TRIM_3:
  case GL_MAP1_VERTEX_3:
  case GL_MAP2_VERTEX_3:
  case GL_MAP1_NORMAL:
  case GL_MAP2_NORMAL:
  case GL_MAP1_TEXTURE_COORD_3:
  case GL_MAP2_TEXTURE_COORD_3:
    size = 3;
    break;
  case GL_MAP1_VERTEX_4:
  case GL_MAP2_VERTEX_4:
  case GL_MAP1_COLOR_4:
  case GL_MAP2_COLOR_4:
  case GL_MAP1_TEXTURE_COORD_4:
  case GL_MAP2_TEXTURE_COORD_4:
    size = 4;
    break;
  }

  ptsCount=luagl_get_arrayf(L, 2, &points);
  ptsCount/=size;
  stride=size;

  gluPwlCurve (lnurb->nurb,ptsCount,points,stride,e);

  LUAGL_DELETE_ARRAY(points);

  lua_pushvalue(L,1);
  return 1;
}
Example #4
0
/*Build2DMipmaps(textureData) -> error */
static int luaglu_build_2d_mipmaps(lua_State *L)
{
  GLenum target, format, type;
  GLubyte *pixels;
  GLint internalFormat;
  GLsizei width, height, w, h;
  int result;

  if(!lua_istable(L, 1))
    LUAGL_SHOWERROR("incorrect argument to function 'glu.Build2DMipmaps'");

  lua_pushstring(L, "target");  lua_gettable(L, 1);  target = luaglu_get_gl_enum(L, -1);  lua_pop(L, 1);
  lua_pushstring(L, "format");  lua_gettable(L, 1);  format = luaglu_get_gl_enum(L, -1);  lua_pop(L, 1);
  lua_pushstring(L, "type");    lua_gettable(L, 1);  type   = luaglu_get_gl_enum(L, -1);  lua_pop(L, 1);
  lua_pushstring(L, "width");   lua_gettable(L, 1);  width  = (GLsizei)lua_tonumber(L, -1);  lua_pop(L, 1);
  lua_pushstring(L, "height");  lua_gettable(L, 1);  height = (GLsizei)lua_tonumber(L, -1);  lua_pop(L, 1);
  lua_pushstring(L, "components");  lua_gettable(L, 1);  internalFormat = (GLint)lua_tonumber(L, -1);  lua_pop(L, 1);

  h = luagl_get_array2ubyte(L, 1, &pixels, &w);

  w /= internalFormat;

  if (width > w)
    width = w;

  if (height > h)
    height = h;

  result = gluBuild2DMipmaps(target, internalFormat, width,
    height, format, type, pixels);

  LUAGL_DELETE_ARRAY(pixels);

  lua_pushnumber(L, result);

  return 1;
}
Example #5
0
/* nurb:NurbsCallback(which, func) -> nurb */
static int luaglu_nurbs_callback(lua_State *L) 
{
  LuaGLUnurb *lnurb=luaglu_checknurb(L,1);
  GLenum e;

  e = luaglu_get_gl_enum(L, 2);

  if (!(lua_isfunction(L,3) || lua_isnil(L,3)))
    luaL_argerror(L, 3, "invalid callback");

  lua_rawgeti(L,LUA_REGISTRYINDEX,lnurb->ref_cb);/* get callback table */

  /* set C callback */
  switch(e) 
  {
  case GLU_NURBS_BEGIN : 
    gluNurbsCallback(lnurb->nurb,GLU_NURBS_BEGIN_DATA,nurbBeginDataCB);
    lua_pushstring(L,"BeginCB");lua_pushvalue(L,3);lua_settable(L,-3);
    break;
  case GLU_NURBS_VERTEX : 
    gluNurbsCallback(lnurb->nurb,GLU_NURBS_VERTEX_DATA,nurbVertexDataCB);
    lua_pushstring(L,"VertexCB");lua_pushvalue(L,3);lua_settable(L,-3);
    break;
  case GLU_NURBS_NORMAL : 
    gluNurbsCallback(lnurb->nurb,GLU_NURBS_NORMAL_DATA,nurbNormalDataCB);
    lua_pushstring(L,"NormalCB");lua_pushvalue(L,3);lua_settable(L,-3);
    break;
  case GLU_NURBS_COLOR : 
    gluNurbsCallback(lnurb->nurb,GLU_NURBS_COLOR_DATA,nurbColorDataCB);
    lua_pushstring(L,"ColorCB");lua_pushvalue(L,3);lua_settable(L,-3);
    break;
  case GLU_NURBS_TEXTURE_COORD : 
    gluNurbsCallback(lnurb->nurb,GLU_NURBS_TEXTURE_COORD_DATA,nurbTexCoordDataCB);
    lua_pushstring(L,"TexCoordCB");lua_pushvalue(L,3);lua_settable(L,-3);
    break;
  case GLU_NURBS_END : 
    gluNurbsCallback(lnurb->nurb,GLU_NURBS_END_DATA,nurbEndDataCB);
    lua_pushstring(L,"EndCB");lua_pushvalue(L,3);lua_settable(L,-3);
    break;
  default : 
    luaL_argerror(L, 2, "invalid or unnown enumeration");
  }
  
  lua_pushvalue(L,1);
  return 1;
}
Example #6
0
/* nurb:Property (property, value) -> nurb */
static int luaglu_get_set_nurbs_property(lua_State *L)
{
  GLenum e;
  GLfloat value;
  LuaGLUnurb *lnurb=luaglu_checknurb(L,1);

  e = luaglu_get_gl_enum(L, 2);

  if (lua_isnumber(L, 3))  /* set value */
  { 
    value=(GLfloat)luaL_checknumber(L,3);
    gluNurbsProperty (lnurb->nurb,e,value);
    lua_pushvalue(L,1);
    return 1;
  }
  else
  {
    gluGetNurbsProperty (lnurb->nurb,e,&value);
    lua_pushnumber(L,(lua_Number)value);
    return 1;
  }
}
Example #7
0
/* GetString (name) -> string */
static int luaglu_get_string(lua_State *L)
{
  GLenum e;
  const GLubyte *str;

  /* test argument type */
  if(!lua_isstring(L, 1))
    luaL_error(L, "incorrect argument to function 'glu.GetString'");

  /* get string parameter */
  e = luaglu_get_gl_enum(L, 1);

  /* test argument */
  if(e == LUAGL_ENUM_ERROR)
    luaL_error(L, "incorrect string argument to function 'glu.GetString'");

  /* call opengl function */
  str = gluGetString(e);

  lua_pushstring(L, (const char*)str);

  return 1;
}
Example #8
0
/* GetString (name) -> string */
static int luaglu_get_string(lua_State *L)
{
  lua_pushstring(L, (char*)gluGetString(luaglu_get_gl_enum(L, 1)));
  return 1;
}
Example #9
0
/* nurb:Surface (sKnotsArray, tKnotsArray, controlArray, type) -> nurb */
static int luaglu_nurbs_surface(lua_State *L) 
{
  LuaGLUnurb *lnurb=luaglu_checknurb(L,1);
  GLint sKnotCount=0;
  GLint tKnotCount=0;
  GLfloat *sKnots;
  GLfloat *tKnots;
  GLint sStride,tStride;
  GLint sPtsCount,tPtsCount;
  GLfloat *points;
  GLint sOrder,tOrder;
  GLenum e;
  int size=1;

  e = luaglu_get_gl_enum(L, 5);

  switch(e)
  {
  case GL_MAP1_INDEX:
  case GL_MAP2_INDEX:
  case GL_MAP1_TEXTURE_COORD_1:
  case GL_MAP2_TEXTURE_COORD_1:
    size = 1;
    break;
  case GLU_MAP1_TRIM_2:
  case GL_MAP1_TEXTURE_COORD_2:
  case GL_MAP2_TEXTURE_COORD_2:
    size = 2;
    break;
  case GLU_MAP1_TRIM_3:
  case GL_MAP1_VERTEX_3:
  case GL_MAP2_VERTEX_3:
  case GL_MAP1_NORMAL:
  case GL_MAP2_NORMAL:
  case GL_MAP1_TEXTURE_COORD_3:
  case GL_MAP2_TEXTURE_COORD_3:
    size = 3;
    break;
  case GL_MAP1_VERTEX_4:
  case GL_MAP2_VERTEX_4:
  case GL_MAP1_COLOR_4:
  case GL_MAP2_COLOR_4:
  case GL_MAP1_TEXTURE_COORD_4:
  case GL_MAP2_TEXTURE_COORD_4:
    size = 4;
    break;
  }

  sKnotCount=luagl_get_arrayf(L, 2, &sKnots);
  tKnotCount=luagl_get_arrayf(L, 3, &tKnots);
  tPtsCount = luagl_get_array2f(L, 4, &points, &sPtsCount);
  sPtsCount /= size;

  if (tPtsCount==-1)
  {
    LUAGL_DELETE_ARRAY(sKnots);
    LUAGL_DELETE_ARRAY(tKnots);
    luaL_argerror(L, 4, "must be a table of tables");
  }

  sStride=size;
  tStride=size*sPtsCount;

  sOrder=sKnotCount-sPtsCount;
  tOrder=tKnotCount-tPtsCount;
  
  if (sOrder<1 || tOrder<1)
  {
    LUAGL_DELETE_ARRAY(sKnots);
    LUAGL_DELETE_ARRAY(tKnots);
    LUAGL_DELETE_ARRAY(points);
    luaL_error(L,"incorrect order");
  }

  gluNurbsSurface (lnurb->nurb,sKnotCount,sKnots,tKnotCount,tKnots,sStride,tStride,points,sOrder,tOrder,e); 

  LUAGL_DELETE_ARRAY(sKnots);
  LUAGL_DELETE_ARRAY(tKnots);
  LUAGL_DELETE_ARRAY(points);

  lua_pushvalue(L,1);
  return 1;
}
Example #10
0
/* nurb:Curve (knotsArray, controlArray, type) -> nurb */
static int luaglu_nurbs_curve(lua_State *L)
{
  LuaGLUnurb *lnurb=luaglu_checknurb(L,1);
  GLint ptsCount=0;
  GLint knotCount=0;
  GLfloat *knots;
  GLint stride;
  GLfloat *points;
  GLint order;
  int size=1;
  GLenum e;

  e = luaglu_get_gl_enum(L, 4);

  switch(e)
  {
  case GL_MAP1_INDEX:
  case GL_MAP2_INDEX:
  case GL_MAP1_TEXTURE_COORD_1:
  case GL_MAP2_TEXTURE_COORD_1:
    size = 1;
    break;
  case GLU_MAP1_TRIM_2:
  case GL_MAP1_TEXTURE_COORD_2:
  case GL_MAP2_TEXTURE_COORD_2:
    size = 2;
    break;
  case GLU_MAP1_TRIM_3:
  case GL_MAP1_VERTEX_3:
  case GL_MAP2_VERTEX_3:
  case GL_MAP1_NORMAL:
  case GL_MAP2_NORMAL:
  case GL_MAP1_TEXTURE_COORD_3:
  case GL_MAP2_TEXTURE_COORD_3:
    size = 3;
    break;
  case GL_MAP1_VERTEX_4:
  case GL_MAP2_VERTEX_4:
  case GL_MAP1_COLOR_4:
  case GL_MAP2_COLOR_4:
  case GL_MAP1_TEXTURE_COORD_4:
  case GL_MAP2_TEXTURE_COORD_4:
    size = 4;
    break;
  }

  knotCount=luagl_get_arrayf(L, 2, &knots);
  ptsCount=luagl_get_arrayf(L, 3, &points);

  ptsCount/=size;
  stride=size;

  order=knotCount-ptsCount;

  if(order<1)
  {
    LUAGL_DELETE_ARRAY(knots);
    LUAGL_DELETE_ARRAY(points);
    luaL_error(L,"incorrect order (<1)");
  }

  gluNurbsCurve (lnurb->nurb,knotCount,knots,stride,points,order,e);

  LUAGL_DELETE_ARRAY(knots);
  LUAGL_DELETE_ARRAY(points);

  lua_pushvalue(L,1);
  return 1;
}