From 656c8b2fc03164d13352c067780037e87b98b9f2 Mon Sep 17 00:00:00 2001 From: Evan Goers Date: Tue, 24 Jan 2012 08:13:28 +0000 Subject: Renderer now checks and enables lights based on availability instead of using arbitrary GL_LIGHT#s. --- src/ui/modelview.cc | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'src/ui/modelview.cc') diff --git a/src/ui/modelview.cc b/src/ui/modelview.cc index 65954d8..c36aa56 100755 --- a/src/ui/modelview.cc +++ b/src/ui/modelview.cc @@ -19,6 +19,8 @@ namespace ui { +GLenum modelview_gllight = GL_LIGHT0 + 7; + ModelView::ModelView(Widget *parent, const char *modelname) : Widget(parent) { set_border(false); @@ -185,28 +187,33 @@ void ModelView::draw() glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); - - + // we set up the light in camera space + for (size_t i = 0; i < (GL_LIGHT0 + 7); i++) { + // check if a light is available + if (!glIsEnabled(GL_LIGHT0 + i)) { + modelview_gllight = GL_LIGHT0 + i; + break; + } + } + GLfloat modelview_light[] = { -10.0f * model->radius(), 0, 0, 1.0f }; GLfloat ambient_light[] = { 0.1f, 0.1f, 0.1f, 1.0f }; GLfloat diffuse_light[] = { 0.75f, 0.75f, 0.75f, 1.0f }; GLfloat specular_light[] = { 0.75f, 0.75f, 0.75f, 1.0f }; - glLightfv(GL_LIGHT1, GL_POSITION, modelview_light); - glLightfv(GL_LIGHT1, GL_AMBIENT, ambient_light); - glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse_light); - glLightfv(GL_LIGHT1, GL_SPECULAR, specular_light); + glLightfv(modelview_gllight, GL_POSITION, modelview_light); + glLightfv(modelview_gllight, GL_AMBIENT, ambient_light); + glLightfv(modelview_gllight, GL_DIFFUSE, diffuse_light); + glLightfv(modelview_gllight, GL_SPECULAR, specular_light); - glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.75f); + glLightf(modelview_gllight, GL_LINEAR_ATTENUATION, 0.05f); - gl::enable(GL_LIGHT1); + gl::enable(modelview_gllight); // push transformation matrix to stack gl::push(); - - gl::multmatrix(modelview_axis); gl::scale(modelscale, modelscale, modelscale); @@ -226,7 +233,7 @@ void ModelView::draw() gl::pop(); - gl::disable(GL_LIGHT1); + gl::disable(modelview_gllight); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); -- cgit v1.2.3