diff -Naurw Irrlicht/COpenGLDriver.h Irrlicht/COpenGLDriver.h --- Irrlicht/COpenGLDriver.h 2005-08-29 10:22:14.000000000 +0200 +++ Irrlicht/COpenGLDriver.h 2005-11-27 00:38:50.000000000 +0100 @@ -271,6 +260,18 @@ gl_matrix[i++] = m(c,r); } + // Convert SColor to GLFloat array ( bound to 0.0 - 1.0 ) + GLfloat openGLColor[4]; + inline GLfloat* colorToOpenGL( const SColor& col ) + { + const f32 inv = 1.0f / 255.0f; + openGLColor[0] = col.getRed() * inv; + openGLColor[1] = col.getGreen() * inv; + openGLColor[2] = col.getBlue() * inv; + openGLColor[3] = col.getAlpha() * inv; + return openGLColor; + } + //! sets the needed renderstates void setRenderStates3DMode(); diff -Naurw Irrlicht/COpenGLDriver.cpp Irrlicht/COpenGLDriver.cpp --- Irrlicht/COpenGLDriver.cpp 2005-09-21 19:36:50.000000000 +0200 +++ Irrlicht/COpenGLDriver.cpp 2005-11-27 00:46:38.000000000 +0100 @@ -1767,35 +1750,11 @@ lastmaterial.EmissiveColor != material.EmissiveColor || lastmaterial.Shininess != material.Shininess) { - GLfloat color[4]; - - float inv = 1.0f / 255.0f; + glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, colorToOpenGL( Material.AmbientColor ) ); + glMaterialfv( GL_FRONT_AND_BACK, GL_DIFFUSE, colorToOpenGL( Material.DiffuseColor ) ); + glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, colorToOpenGL( Material.SpecularColor ) ); + glMaterialfv( GL_FRONT_AND_BACK, GL_EMISSION, colorToOpenGL( Material.EmissiveColor ) ); + glMaterialf( GL_FRONT_AND_BACK, GL_SHININESS, Material.Shininess ); - - color[0] = Material.AmbientColor.getRed() * inv; - color[1] = Material.AmbientColor.getGreen() * inv; - color[2] = Material.AmbientColor.getBlue() * inv; - color[3] = Material.AmbientColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, color); - - color[0] = Material.DiffuseColor.getRed() * inv; - color[1] = Material.DiffuseColor.getGreen() * inv; - color[2] = Material.DiffuseColor.getBlue() * inv; - color[3] = Material.DiffuseColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color); - - color[0] = 0;//Material.SpecularColor.getRed() * inv; - color[1] = 0;//Material.SpecularColor.getGreen() * inv; - color[2] = 0;//Material.SpecularColor.getBlue() * inv; - color[3] = 0;//Material.SpecularColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, color); - - color[0] = Material.EmissiveColor.getRed() * inv; - color[1] = Material.EmissiveColor.getGreen() * inv; - color[2] = Material.EmissiveColor.getBlue() * inv; - color[3] = Material.EmissiveColor.getAlpha() * inv; - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, color); - - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0);//Material.Shininess); } // bilinear