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