Move enabled state onto the LightSource

This commit is contained in:
Luke Benstead 2020-05-08 07:19:56 +01:00
parent 814f228db9
commit cca09a298e
3 changed files with 12 additions and 11 deletions

View File

@ -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];

View File

@ -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();

View File

@ -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);