00001 #include "lightm.h"
00002
00015 #include <glt/error.h>
00016
00017 #include <cstring>
00018 using namespace std;
00019
00020 GltLightModel::GltLightModel(const bool getIt)
00021 {
00022 memset(_ambient,0,sizeof(_ambient));
00023 _localViewer = false;
00024 _twoSide = false;
00025
00026 if (getIt)
00027 get();
00028 }
00029
00030 GltLightModel::~GltLightModel()
00031 {
00032 }
00033
00034 void
00035 GltLightModel::get()
00036 {
00037 GLint localViewer;
00038 GLint twoSide;
00039
00040 GLERROR
00041
00042 glGetFloatv(GL_LIGHT_MODEL_AMBIENT,_ambient);
00043 glGetIntegerv(GL_LIGHT_MODEL_LOCAL_VIEWER,&localViewer);
00044 glGetIntegerv(GL_LIGHT_MODEL_TWO_SIDE,&twoSide);
00045
00046 GLERROR
00047
00048 _localViewer = localViewer!=0;
00049 _twoSide = twoSide!=0;
00050 }
00051
00052 void
00053 GltLightModel::set()
00054 {
00055 GLERROR
00056
00057 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,_ambient);
00058 glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,_localViewer ? 1 : 0);
00059 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,_twoSide ? 1 : 0);
00060
00061 GLERROR
00062 }
00063
00064 void
00065 GltLightModel::setAmbient(const GLfloat r,const GLfloat g,const GLfloat b,const GLfloat a)
00066 {
00067 GLERROR
00068
00069 _ambient[0] = r;
00070 _ambient[1] = g;
00071 _ambient[2] = b;
00072 _ambient[3] = a;
00073 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,_ambient);
00074
00075 GLERROR
00076 }
00077
00078 void
00079 GltLightModel::setLocalViewer(const GLboolean localViewer)
00080 {
00081 GLERROR
00082
00083 _localViewer = localViewer;
00084 glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,_localViewer ? 1 : 0);
00085
00086 GLERROR
00087 }
00088
00089 void
00090 GltLightModel::setTwoSide(const GLboolean twoSide)
00091 {
00092 GLERROR
00093
00094 _twoSide = twoSide;
00095 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,_twoSide ? 1 : 0);
00096
00097 GLERROR
00098 }
00099
00100 GLfloat *GltLightModel::ambient() { return _ambient; }
00101 GLboolean &GltLightModel::localViewer() { return _localViewer; }
00102 GLboolean &GltLightModel::twoSide() { return _twoSide; }
00103