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[0] = LIGHTS[i].position[1] = LIGHTS[i].position[3] = 0.0f;
LIGHTS[i].position[2] = 1.0f; LIGHTS[i].position[2] = 1.0f;
LIGHTS[i].isDirectional = GL_TRUE; 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[0] = LIGHTS[i].spot_direction[1] = 0.0f;
LIGHTS[i].spot_direction[2] = -1.0f; LIGHTS[i].spot_direction[2] = -1.0f;
@ -72,6 +73,10 @@ void _glInitLights() {
_glPrecalcLightingValues(~0); _glPrecalcLightingValues(~0);
} }
void _glEnableLight(GLubyte light, GLboolean value) {
LIGHTS[light].isEnabled = value;
}
GL_FORCE_INLINE void _glPrecalcLightingValues(GLuint mask) { GL_FORCE_INLINE void _glPrecalcLightingValues(GLuint mask) {
float baseColour[4]; float baseColour[4];
@ -464,7 +469,7 @@ void _glPerformLighting(Vertex* vertices, const EyeSpaceData* es, const int32_t
for(i = 0; i < MAX_LIGHTS; ++i) { for(i = 0; i < MAX_LIGHTS; ++i) {
__builtin_prefetch(LIGHTS + i + 1, 0, 1); __builtin_prefetch(LIGHTS + i + 1, 0, 1);
if(!_glIsLightEnabled(i)) continue; if(!LIGHTS[i].isEnabled) continue;
if(LIGHTS[i].isDirectional) { if(LIGHTS[i].isDirectional) {
float Lx = LIGHTS[i].position[0] - data->xyz[0]; float Lx = LIGHTS[i].position[0] - data->xyz[0];

View File

@ -182,6 +182,7 @@ typedef struct {
GLfloat ambient[4]; GLfloat ambient[4];
GLboolean isDirectional; GLboolean isDirectional;
GLboolean isEnabled;
/* We set these when the material changes /* We set these when the material changes
* so we don't calculate them per-vertex. They are * 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); GLuint _glGetMipmapLevelCount(const TextureObject* obj);
GLboolean _glIsLightingEnabled(); GLboolean _glIsLightingEnabled();
GLboolean _glIsLightEnabled(GLubyte light); void _glEnableLight(GLubyte light, unsigned char value);
GLboolean _glIsColorMaterialEnabled(); GLboolean _glIsColorMaterialEnabled();
GLboolean _glIsNormalizeEnabled(); GLboolean _glIsNormalizeEnabled();

View File

@ -26,6 +26,8 @@ static GLenum FRONT_FACE = GL_CCW;
static GLboolean CULLING_ENABLED = GL_FALSE; static GLboolean CULLING_ENABLED = GL_FALSE;
static GLboolean COLOR_MATERIAL_ENABLED = GL_FALSE; static GLboolean COLOR_MATERIAL_ENABLED = GL_FALSE;
static GLboolean LIGHTING_ENABLED = GL_FALSE;
/* Is the shared texture palette enabled? */ /* Is the shared texture palette enabled? */
static GLboolean SHARED_PALETTE_ENABLED = GL_FALSE; 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() { GLboolean _glIsLightingEnabled() {
return LIGHTING_ENABLED; return LIGHTING_ENABLED;
} }
GLboolean _glIsLightEnabled(unsigned char light) {
return LIGHT_ENABLED[light & 0xF];
}
GLboolean _glIsColorMaterialEnabled() { GLboolean _glIsColorMaterialEnabled() {
return COLOR_MATERIAL_ENABLED; return COLOR_MATERIAL_ENABLED;
} }
@ -340,7 +335,7 @@ GLAPI void APIENTRY glEnable(GLenum cap) {
case GL_LIGHT5: case GL_LIGHT5:
case GL_LIGHT6: case GL_LIGHT6:
case GL_LIGHT7: case GL_LIGHT7:
LIGHT_ENABLED[cap & 0xF] = GL_TRUE; _glEnableLight(cap & 0xF, GL_TRUE);
break; break;
case GL_NEARZ_CLIPPING_KOS: case GL_NEARZ_CLIPPING_KOS:
_glEnableClipping(GL_TRUE); _glEnableClipping(GL_TRUE);
@ -402,7 +397,7 @@ GLAPI void APIENTRY glDisable(GLenum cap) {
case GL_LIGHT5: case GL_LIGHT5:
case GL_LIGHT6: case GL_LIGHT6:
case GL_LIGHT7: case GL_LIGHT7:
LIGHT_ENABLED[cap & 0xF] = GL_FALSE; _glEnableLight(cap & 0xF, GL_FALSE);
break; break;
case GL_NEARZ_CLIPPING_KOS: case GL_NEARZ_CLIPPING_KOS:
_glEnableClipping(GL_FALSE); _glEnableClipping(GL_FALSE);