diff --git a/GL/lighting.c b/GL/lighting.c index 0876dd2..9cd1bb5 100644 --- a/GL/lighting.c +++ b/GL/lighting.c @@ -57,6 +57,7 @@ void _glInitLights() { LIGHTS[i].position[0] = LIGHTS[i].position[1] = LIGHTS[i].position[3] = 0.0f; LIGHTS[i].position[2] = 1.0f; LIGHTS[i].isDirectional = GL_TRUE; + LIGHTS[i].isEnabled = GL_FALSE; LIGHTS[i].spot_direction[0] = LIGHTS[i].spot_direction[1] = 0.0f; LIGHTS[i].spot_direction[2] = -1.0f; @@ -72,6 +73,10 @@ void _glInitLights() { _glPrecalcLightingValues(~0); } +void _glEnableLight(GLubyte light, GLboolean value) { + LIGHTS[light].isEnabled = value; +} + GL_FORCE_INLINE void _glPrecalcLightingValues(GLuint mask) { float baseColour[4]; @@ -464,7 +469,7 @@ void _glPerformLighting(Vertex* vertices, const EyeSpaceData* es, const int32_t for(i = 0; i < MAX_LIGHTS; ++i) { __builtin_prefetch(LIGHTS + i + 1, 0, 1); - if(!_glIsLightEnabled(i)) continue; + if(!LIGHTS[i].isEnabled) continue; if(LIGHTS[i].isDirectional) { float Lx = LIGHTS[i].position[0] - data->xyz[0]; diff --git a/GL/private.h b/GL/private.h index f47f9ff..0339f2b 100644 --- a/GL/private.h +++ b/GL/private.h @@ -182,6 +182,7 @@ typedef struct { GLfloat ambient[4]; GLboolean isDirectional; + GLboolean isEnabled; /* We set these when the material changes * so we don't calculate them per-vertex. They are @@ -321,7 +322,7 @@ GLubyte* _glGetMipmapLocation(const TextureObject* obj, GLuint level); GLuint _glGetMipmapLevelCount(const TextureObject* obj); GLboolean _glIsLightingEnabled(); -GLboolean _glIsLightEnabled(GLubyte light); +void _glEnableLight(GLubyte light, unsigned char value); GLboolean _glIsColorMaterialEnabled(); GLboolean _glIsNormalizeEnabled(); diff --git a/GL/state.c b/GL/state.c index a705526..7dfa6ab 100644 --- a/GL/state.c +++ b/GL/state.c @@ -26,6 +26,8 @@ static GLenum FRONT_FACE = GL_CCW; static GLboolean CULLING_ENABLED = GL_FALSE; static GLboolean COLOR_MATERIAL_ENABLED = GL_FALSE; +static GLboolean LIGHTING_ENABLED = GL_FALSE; + /* Is the shared texture palette enabled? */ static GLboolean SHARED_PALETTE_ENABLED = GL_FALSE; @@ -249,17 +251,10 @@ void _glUpdatePVRTextureContext(pvr_poly_cxt_t* context, GLshort textureUnit) { } } -static GLboolean LIGHTING_ENABLED = GL_FALSE; -static GLboolean LIGHT_ENABLED[MAX_LIGHTS]; - GLboolean _glIsLightingEnabled() { return LIGHTING_ENABLED; } -GLboolean _glIsLightEnabled(unsigned char light) { - return LIGHT_ENABLED[light & 0xF]; -} - GLboolean _glIsColorMaterialEnabled() { return COLOR_MATERIAL_ENABLED; } @@ -340,7 +335,7 @@ GLAPI void APIENTRY glEnable(GLenum cap) { case GL_LIGHT5: case GL_LIGHT6: case GL_LIGHT7: - LIGHT_ENABLED[cap & 0xF] = GL_TRUE; + _glEnableLight(cap & 0xF, GL_TRUE); break; case GL_NEARZ_CLIPPING_KOS: _glEnableClipping(GL_TRUE); @@ -402,7 +397,7 @@ GLAPI void APIENTRY glDisable(GLenum cap) { case GL_LIGHT5: case GL_LIGHT6: case GL_LIGHT7: - LIGHT_ENABLED[cap & 0xF] = GL_FALSE; + _glEnableLight(cap & 0xF, GL_FALSE); break; case GL_NEARZ_CLIPPING_KOS: _glEnableClipping(GL_FALSE);