/*************************************************************************** GLcolorLighting.c The Gambas openGL component (c) 2005-2007 Laurent Carlier BenoƮt Minisini This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ***************************************************************************/ #define __GLCOLORLIGHTING_C #include "gambas.h" #include "gb_common.h" #include "main.h" #include BEGIN_METHOD(GLCOLORF, GB_FLOAT red; GB_FLOAT green; GB_FLOAT blue; GB_FLOAT alpha) if (MISSING(alpha)) glColor3d(VARG(red), VARG(green), VARG(blue)); else glColor4d(VARG(red), VARG(green), VARG(blue), VARG(alpha)); END_METHOD BEGIN_METHOD(GLCOLORI, GB_INTEGER red; GB_INTEGER green; GB_INTEGER blue; GB_INTEGER alpha) if (MISSING(alpha)) glColor3i(VARG(red), VARG(green), VARG(blue)); else glColor4i(VARG(red), VARG(green), VARG(blue), VARG(alpha)); END_METHOD BEGIN_METHOD(GLCOLORFV, GB_OBJECT array) GLdouble r,g,b,a; GB_ARRAY color = (GB_ARRAY) VARG(array); int count = GB.Array.Count(color); if (count<3) return; r = *((GLdouble *)GB.Array.Get(color,0)); g = *((GLdouble *)GB.Array.Get(color,1)); b = *((GLdouble *)GB.Array.Get(color,2)); if (count==3) glColor3d(r, g, b); else { a = *((GLdouble *)GB.Array.Get(color,3)); glColor4d(r, g, b, a); } END_METHOD BEGIN_METHOD(GLCOLORIV, GB_OBJECT array) GLint r,g,b,a; GB_ARRAY color = (GB_ARRAY) VARG(array); int count = GB.Array.Count(color); if (count<3) return; r = *((GLint *)GB.Array.Get(color,0)); g = *((GLint *)GB.Array.Get(color,1)); b = *((GLint *)GB.Array.Get(color,2)); if (count==3) glColor3i(r, g, b); else { a = *((GLint *)GB.Array.Get(color,3)); glColor4i(r, g, b, a); } END_METHOD BEGIN_METHOD(GLCOLORMATERIAL, GB_INTEGER face; GB_INTEGER mode) glColorMaterial(VARG(face), VARG(mode)); END_METHOD BEGIN_METHOD(GLFRONTFACE, GB_INTEGER mode) glFrontFace(VARG(mode)); END_METHOD BEGIN_METHOD(GLGETLIGHTFV, GB_INTEGER light; GB_INTEGER pname) GLfloat params[4]; GB_ARRAY fArray; int i, count=1; switch(VARG(pname)) { case GL_AMBIENT : case GL_DIFFUSE : case GL_SPECULAR : case GL_POSITION : count = 4; break; case GL_SPOT_DIRECTION : count = 3; break; } GB.Array.New(&fArray , GB_T_FLOAT , count); glGetLightfv(VARG(light), VARG(pname), params); for (i=0;i4) count==4; for (i=0;i4) count==4; for (i=0;i4) count = 4; for (i=0;i4) count = 4; for (i=0;i4) count = 4; for (i=0;i4) count=4; for (i=0;i