/* KallistiGL for KallistiOS ##version## libgl/gl-fog.c Copyright (C) 2013-2014 Josh "PH3NOM" Pearson Functionality adapted from the original KOS libgl fog code: Copyright (C) 2002 Benoit Miller OpenGL Fog - Wrapper for the PowerVR fog functions in KOS. */ #include "gl.h" static GLuint FOG_MODE = GL_EXP; /* GL_LINEAR, GL_EXP, or GL_EXP2 FOG */ static GLfloat FOG_DENSITY = 1.0f, /* Density - GL_EXP, or GL_EXP2 FOG */ FOG_START = 0.0f, /* Linear FOG */ FOG_END = 1.0f; /* Linear FOG */ void glFogi(GLenum pname, GLint param) { switch(pname) { case GL_FOG_MODE: switch(param) { case GL_LINEAR: return pvr_fog_table_linear(FOG_START, FOG_END); case GL_EXP: return pvr_fog_table_exp(FOG_DENSITY); case GL_EXP2: return pvr_fog_table_exp2(FOG_DENSITY); default: return; } default: return; } } void glFogf(GLenum pname, GLfloat param) { switch(pname) { case GL_FOG_START: FOG_START = param; if(FOG_MODE == GL_LINEAR) return pvr_fog_table_linear(FOG_START, FOG_END); return; case GL_FOG_END: FOG_END = param; if(FOG_MODE == GL_LINEAR) return pvr_fog_table_linear(FOG_START, FOG_END); return; case GL_FOG_DENSITY: FOG_DENSITY = param; if(FOG_MODE == GL_EXP) return pvr_fog_table_exp(FOG_DENSITY); if(FOG_MODE == GL_EXP2) return pvr_fog_table_exp2(FOG_DENSITY); return; default: return; } } void glFogfv(GLenum pname, const GLfloat *params) { switch(pname) { case GL_FOG_MODE: return glFogi(pname, (GLint) * params); case GL_FOG_DENSITY: FOG_DENSITY = *params; if(FOG_MODE == GL_EXP) return pvr_fog_table_exp(FOG_DENSITY); if(FOG_MODE == GL_EXP2) return pvr_fog_table_exp2(FOG_DENSITY); return; case GL_FOG_START: case GL_FOG_END: return glFogf(pname, *params); case GL_FOG_COLOR: return pvr_fog_table_color(params[3], params[0], params[1], params[2]); case GL_FOG_INDEX: default: return; } }