</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="..\common\debug.h" />\r
+ <ClInclude Include="..\common\Image.hpp" />\r
<ClInclude Include="..\common\Object.hpp" />\r
<ClInclude Include="..\include\EGL\egl.h" />\r
<ClInclude Include="..\include\EGL\eglext.h" />\r
<ClInclude Include="Config.h" />\r
<ClInclude Include="Context.hpp" />\r
<ClInclude Include="Display.h" />\r
- <ClInclude Include="Image.hpp" />\r
<ClInclude Include="libEGL.hpp" />\r
<ClInclude Include="main.h" />\r
<ClInclude Include="resource.h" />\r
<ClInclude Include="Context.hpp">\r
<Filter>Header Files</Filter>\r
</ClInclude>\r
- <ClInclude Include="Image.hpp">\r
- <Filter>Header Files</Filter>\r
- </ClInclude>\r
<ClInclude Include="Texture.hpp">\r
<Filter>Header Files</Filter>\r
</ClInclude>\r
<ClInclude Include="libEGL.hpp">\r
<Filter>Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\common\Image.hpp">\r
+ <Filter>Header Files</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
<ItemGroup>\r
<ResourceCompile Include="libEGL.rc" />\r
\r
clipFlags = 0;\r
\r
+ alphaTest = false;\r
+ alphaTestFunc = GL_ALWAYS;\r
+ alphaTestRef = 0;\r
+\r
mHasBeenCurrent = false;\r
\r
markAllStateDirty();\r
mState.zFar = zFar;\r
}\r
\r
+void Context::setAlphaTest(bool enabled)\r
+{\r
+ alphaTest = enabled;\r
+}\r
+\r
+bool Context::isAlphaTestEnabled() const\r
+{\r
+ return alphaTest;\r
+}\r
+\r
+void Context::setAlphaFunc(GLenum alphaFunc, GLclampf reference)\r
+{\r
+ alphaTestFunc = alphaFunc;\r
+ alphaTestRef = reference;\r
+}\r
+\r
void Context::setBlend(bool enabled)\r
{\r
if(mState.blend != enabled)\r
device->setTextureTransform(1, textureStack1.isIdentity() ? 0 : 4, false);\r
device->setTexGen(0, sw::TEXGEN_NONE);\r
device->setTexGen(1, sw::TEXGEN_NONE);\r
+\r
+ device->setAlphaTestEnable(alphaTest);\r
+ device->setAlphaCompare(es2sw::ConvertAlphaComparison(alphaTestFunc));\r
+ device->setAlphaReference(alphaTestRef * 0xFF);\r
}\r
\r
GLenum Context::applyVertexBuffer(GLint base, GLint first, GLsizei count)\r
device->setClipFlags(clipFlags);\r
}\r
\r
+bool Context::isClipPlaneEnabled(int index) const\r
+{\r
+ return (clipFlags & (1 << index)) != 0;\r
+}\r
+\r
void Context::clientActiveTexture(GLenum texture)\r
{\r
clientTexture = texture;\r
void setDepthFunc(GLenum depthFunc);\r
void setDepthRange(float zNear, float zFar);\r
\r
+ void setAlphaTest(bool enabled);\r
+ bool isAlphaTestEnabled() const;\r
+ void setAlphaFunc(GLenum alphaFunc, GLclampf reference);\r
+\r
void setBlend(bool enabled);\r
bool isBlendEnabled() const;\r
void setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha);\r
\r
void setClipPlane(int index, const float plane[4]);\r
void setClipPlaneEnable(int index, bool enable);\r
+ bool isClipPlaneEnabled(int index) const;\r
\r
private:\r
virtual ~Context();\r
\r
int clipFlags;\r
\r
+ bool alphaTest;\r
+ GLenum alphaTestFunc;\r
+ float alphaTestRef;\r
+\r
Device *device;\r
ResourceManager *mResourceManager;\r
};\r
\r
void AlphaFunc(GLenum func, GLclampf ref)\r
{\r
- UNIMPLEMENTED();\r
+ TRACE("(GLenum func = 0x%X, GLclampf ref = %f)", func, ref);\r
+\r
+ switch(func)\r
+ {\r
+ case GL_NEVER:\r
+ case GL_ALWAYS:\r
+ case GL_LESS:\r
+ case GL_LEQUAL:\r
+ case GL_EQUAL:\r
+ case GL_GEQUAL:\r
+ case GL_GREATER:\r
+ case GL_NOTEQUAL:\r
+ break;\r
+ default:\r
+ return error(GL_INVALID_ENUM);\r
+ }\r
+\r
+ es1::Context *context = es1::getContext();\r
+\r
+ if(context)\r
+ {\r
+ context->setAlphaFunc(func, clamp01(ref));\r
+ }\r
}\r
\r
void AlphaFuncx(GLenum func, GLclampx ref)\r
case GL_FOG: context->setFog(false); break;\r
case GL_TEXTURE_2D: context->setTexture2Denabled(false); break;\r
case GL_TEXTURE_EXTERNAL_OES: context->setTextureExternalEnabled(false); break;\r
- case GL_ALPHA_TEST: UNIMPLEMENTED(); break;\r
+ case GL_ALPHA_TEST: context->setAlphaTest(false); break;\r
case GL_COLOR_LOGIC_OP: UNIMPLEMENTED(); break;\r
case GL_POINT_SMOOTH: UNIMPLEMENTED(); break;\r
case GL_LINE_SMOOTH: UNIMPLEMENTED(); break;\r
case GL_FOG: context->setFog(true); break;\r
case GL_TEXTURE_2D: context->setTexture2Denabled(true); break;\r
case GL_TEXTURE_EXTERNAL_OES: context->setTextureExternalEnabled(true); break;\r
- case GL_ALPHA_TEST: UNIMPLEMENTED(); break;\r
+ case GL_ALPHA_TEST: context->setAlphaTest(true); break;\r
case GL_COLOR_LOGIC_OP: UNIMPLEMENTED(); break;\r
case GL_POINT_SMOOTH: UNIMPLEMENTED(); break;\r
case GL_LINE_SMOOTH: UNIMPLEMENTED(); break;\r
case GL_DEPTH_TEST: return context->isDepthTestEnabled();\r
case GL_BLEND: return context->isBlendEnabled();\r
case GL_DITHER: return context->isDitherEnabled();\r
+ case GL_ALPHA_TEST: return context->isAlphaTestEnabled();\r
+ case GL_CLIP_PLANE0: return context->isClipPlaneEnabled(0);\r
+ case GL_CLIP_PLANE1: return context->isClipPlaneEnabled(1);\r
+ case GL_CLIP_PLANE2: return context->isClipPlaneEnabled(2);\r
+ case GL_CLIP_PLANE3: return context->isClipPlaneEnabled(3);\r
+ case GL_CLIP_PLANE4: return context->isClipPlaneEnabled(4);\r
+ case GL_CLIP_PLANE5: return context->isClipPlaneEnabled(5);\r
default:\r
return error(GL_INVALID_ENUM, GL_FALSE);\r
}\r
return sw::STENCIL_ALWAYS;\r
}\r
\r
+ sw::AlphaCompareMode ConvertAlphaComparison(GLenum comparison)\r
+ {\r
+ switch(comparison)\r
+ {\r
+ case GL_NEVER: return sw::ALPHA_NEVER;\r
+ case GL_ALWAYS: return sw::ALPHA_ALWAYS;\r
+ case GL_LESS: return sw::ALPHA_LESS;\r
+ case GL_LEQUAL: return sw::ALPHA_LESSEQUAL;\r
+ case GL_EQUAL: return sw::ALPHA_EQUAL;\r
+ case GL_GREATER: return sw::ALPHA_GREATER;\r
+ case GL_GEQUAL: return sw::ALPHA_GREATEREQUAL;\r
+ case GL_NOTEQUAL: return sw::ALPHA_NOTEQUAL;\r
+ default: UNREACHABLE(comparison);\r
+ }\r
+\r
+ return sw::ALPHA_ALWAYS;\r
+ }\r
+\r
sw::Color<float> ConvertColor(es1::Color color)\r
{\r
return sw::Color<float>(color.red, color.green, color.blue, color.alpha);\r
{\r
sw::DepthCompareMode ConvertDepthComparison(GLenum comparison);\r
sw::StencilCompareMode ConvertStencilComparison(GLenum comparison);\r
+ sw::AlphaCompareMode ConvertAlphaComparison(GLenum comparison);\r
sw::Color<float> ConvertColor(es1::Color color);\r
sw::BlendFactor ConvertBlendFunc(GLenum blend);\r
sw::BlendOperation ConvertBlendOp(GLenum blendOp);\r
struct DrawData
{
- const void *constants;
+ const Constants *constants;
const void *input[VERTEX_ATTRIBUTES];
unsigned int stride[VERTEX_ATTRIBUTES];