Commit 081340fb by Maxime Gregoire Committed by Maxime Grégoire

OpenGL ES 1.1 fog implementation

Change-Id: I983552d8bc251a62ddab99386273c1d5e34fd812 Reviewed-on: https://swiftshader-review.googlesource.com/1780Tested-by: 's avatarMaxime Grégoire <mgregoire@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent fe7719c8
...@@ -573,6 +573,49 @@ void Context::setLightAttenuationQuadratic(int index, float quadratic) ...@@ -573,6 +573,49 @@ void Context::setLightAttenuationQuadratic(int index, float quadratic)
light[index].attenuation.quadratic = quadratic; light[index].attenuation.quadratic = quadratic;
} }
void Context::setFog(bool enable)
{
device->setFogEnable(enable);
}
void Context::setFogMode(GLenum mode)
{
switch(mode)
{
case GL_LINEAR:
device->setPixelFogMode(sw::FOG_LINEAR);
break;
case GL_EXP:
device->setPixelFogMode(sw::FOG_EXP);
break;
case GL_EXP2:
device->setPixelFogMode(sw::FOG_EXP2);
break;
default:
UNREACHABLE();
}
}
void Context::setFogDensity(float fogDensity)
{
device->setFogDensity(fogDensity);
}
void Context::setFogStart(float fogStart)
{
device->setFogStart(fogStart);
}
void Context::setFogEnd(float fogEnd)
{
device->setFogEnd(fogEnd);
}
void Context::setFogColor(float r, float g, float b, float a)
{
device->setFogColor(sw::Color<float>(r, g, b, a));
}
void Context::setTexture2D(bool enable) void Context::setTexture2D(bool enable)
{ {
texture2D = enable; texture2D = enable;
......
...@@ -314,6 +314,13 @@ public: ...@@ -314,6 +314,13 @@ public:
void setLightAttenuationLinear(int index, float linear); void setLightAttenuationLinear(int index, float linear);
void setLightAttenuationQuadratic(int index, float quadratic); void setLightAttenuationQuadratic(int index, float quadratic);
void setFog(bool enabled);
void setFogMode(GLenum mode);
void setFogDensity(float fogDensity);
void setFogStart(float fogStart);
void setFogEnd(float fogEnd);
void setFogColor(float r, float g, float b, float a);
void setTexture2D(bool enabled); void setTexture2D(bool enabled);
void clientActiveTexture(GLenum texture); void clientActiveTexture(GLenum texture);
GLenum getClientActiveTexture() const; GLenum getClientActiveTexture() const;
...@@ -464,7 +471,7 @@ private: ...@@ -464,7 +471,7 @@ private:
VertexDataManager *mVertexDataManager; VertexDataManager *mVertexDataManager;
IndexDataManager *mIndexDataManager; IndexDataManager *mIndexDataManager;
bool lighting; bool lighting;
Light light[MAX_LIGHTS]; Light light[MAX_LIGHTS];
Color globalAmbient; Color globalAmbient;
......
...@@ -1439,7 +1439,7 @@ void GL_APIENTRY glDisable(GLenum cap) ...@@ -1439,7 +1439,7 @@ void GL_APIENTRY glDisable(GLenum cap)
case GL_LIGHT5: context->setLight(5, false); break; case GL_LIGHT5: context->setLight(5, false); break;
case GL_LIGHT6: context->setLight(6, false); break; case GL_LIGHT6: context->setLight(6, false); break;
case GL_LIGHT7: context->setLight(7, false); break; case GL_LIGHT7: context->setLight(7, false); break;
case GL_FOG: UNIMPLEMENTED(); break; case GL_FOG: context->setFog(false); break;
case GL_TEXTURE_2D: context->setTexture2D(false); break; case GL_TEXTURE_2D: context->setTexture2D(false); break;
case GL_ALPHA_TEST: UNIMPLEMENTED(); break; case GL_ALPHA_TEST: UNIMPLEMENTED(); break;
case GL_COLOR_LOGIC_OP: UNIMPLEMENTED(); break; case GL_COLOR_LOGIC_OP: UNIMPLEMENTED(); break;
...@@ -1462,7 +1462,23 @@ void GL_APIENTRY glDisable(GLenum cap) ...@@ -1462,7 +1462,23 @@ void GL_APIENTRY glDisable(GLenum cap)
void GL_APIENTRY glDisableClientState(GLenum array) void GL_APIENTRY glDisableClientState(GLenum array)
{ {
UNIMPLEMENTED(); TRACE("(GLenum array = 0x%X)", array);
es1::Context *context = es1::getContext();
if (context)
{
GLenum texture = context->getClientActiveTexture();
switch (array)
{
case GL_VERTEX_ARRAY: context->setEnableVertexAttribArray(sw::Position, false); break;
case GL_COLOR_ARRAY: context->setEnableVertexAttribArray(sw::Color0, false); break;
case GL_TEXTURE_COORD_ARRAY: context->setEnableVertexAttribArray(sw::TexCoord0 + (texture - GL_TEXTURE0), false); break;
case GL_NORMAL_ARRAY: context->setEnableVertexAttribArray(sw::Normal, false); break;
default: UNIMPLEMENTED();
}
}
} }
void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count) void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)
...@@ -1538,7 +1554,7 @@ void GL_APIENTRY glEnable(GLenum cap) ...@@ -1538,7 +1554,7 @@ void GL_APIENTRY glEnable(GLenum cap)
case GL_LIGHT5: context->setLight(5, true); break; case GL_LIGHT5: context->setLight(5, true); break;
case GL_LIGHT6: context->setLight(6, true); break; case GL_LIGHT6: context->setLight(6, true); break;
case GL_LIGHT7: context->setLight(7, true); break; case GL_LIGHT7: context->setLight(7, true); break;
case GL_FOG: UNIMPLEMENTED(); break; case GL_FOG: context->setFog(true); break;
case GL_TEXTURE_2D: context->setTexture2D(true); break; case GL_TEXTURE_2D: context->setTexture2D(true); break;
case GL_ALPHA_TEST: UNIMPLEMENTED(); break; case GL_ALPHA_TEST: UNIMPLEMENTED(); break;
case GL_COLOR_LOGIC_OP: UNIMPLEMENTED(); break; case GL_COLOR_LOGIC_OP: UNIMPLEMENTED(); break;
...@@ -1722,12 +1738,98 @@ void GL_APIENTRY glFramebufferTexture2DOES(GLenum target, GLenum attachment, GLe ...@@ -1722,12 +1738,98 @@ void GL_APIENTRY glFramebufferTexture2DOES(GLenum target, GLenum attachment, GLe
void GL_APIENTRY glFogf(GLenum pname, GLfloat param) void GL_APIENTRY glFogf(GLenum pname, GLfloat param)
{ {
UNIMPLEMENTED(); TRACE("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
es1::Context *context = es1::getContext();
if(context)
{
switch(pname)
{
case GL_FOG_MODE:
switch((GLenum)param)
{
case GL_LINEAR:
case GL_EXP:
case GL_EXP2:
context->setFogMode((GLenum)param);
break;
default:
return error(GL_INVALID_ENUM);
}
break;
case GL_FOG_DENSITY:
if(param < 0)
{
return error(GL_INVALID_VALUE);
}
context->setFogDensity(param);
break;
case GL_FOG_START:
context->setFogStart(param);
break;
case GL_FOG_END:
context->setFogEnd(param);
break;
case GL_FOG_COLOR:
default:
return error(GL_INVALID_ENUM);
}
}
} }
void GL_APIENTRY glFogfv(GLenum pname, const GLfloat *params) void GL_APIENTRY glFogfv(GLenum pname, const GLfloat *params)
{ {
UNIMPLEMENTED(); TRACE("(GLenum pname = 0x%X, const GLfloat *params)", pname);
es1::Context *context = es1::getContext();
if(context)
{
switch(pname)
{
case GL_FOG_MODE:
switch((GLenum)params[0])
{
case GL_LINEAR:
case GL_EXP:
case GL_EXP2:
context->setFogMode((GLenum)params[0]);
break;
default:
return error(GL_INVALID_ENUM);
}
break;
case GL_FOG_DENSITY:
if(params[0] < 0)
{
return error(GL_INVALID_VALUE);
}
context->setFogDensity(params[0]);
break;
case GL_FOG_START:
context->setFogStart(params[0]);
break;
case GL_FOG_END:
context->setFogEnd(params[0]);
break;
case GL_FOG_COLOR:
context->setFogColor(params[0], params[1], params[2], params[3]);
break;
default:
return error(GL_INVALID_ENUM);
}
}
} }
void GL_APIENTRY glFogx(GLenum pname, GLfixed param) void GL_APIENTRY glFogx(GLenum pname, GLfixed param)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment