Use unsigned enum base types to use them as state bitfields.

BUG=17878699

Change-Id: Ib112ddf399ebd22676a775cdb6e6927e8f8ce25f
Reviewed-on: https://swiftshader-review.googlesource.com/1202
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/GLES2/libGLESv2/Context.cpp b/src/GLES2/libGLESv2/Context.cpp
index 7ca8fa5..2eba52e 100644
--- a/src/GLES2/libGLESv2/Context.cpp
+++ b/src/GLES2/libGLESv2/Context.cpp
@@ -1725,7 +1725,7 @@
     }

     else

     {

-		device->setCullMode(sw::Context::CULL_NONE);

+		device->setCullMode(sw::CULL_NONE);

     }

 

     if(mDepthStateDirty)

@@ -1874,11 +1874,11 @@
     {

         if(mState.sampleAlphaToCoverage)

         {

-            device->setTransparencyAntialiasing(sw::Context::TRANSPARENCY_ALPHA_TO_COVERAGE);

+            device->setTransparencyAntialiasing(sw::TRANSPARENCY_ALPHA_TO_COVERAGE);

         }

 		else

 		{

-			device->setTransparencyAntialiasing(sw::Context::TRANSPARENCY_NONE);

+			device->setTransparencyAntialiasing(sw::TRANSPARENCY_NONE);

 		}

 

         if(mState.sampleCoverage)

diff --git a/src/GLES2/libGLESv2/Device.cpp b/src/GLES2/libGLESv2/Device.cpp
index e7b1ec9..c2cc36a 100644
--- a/src/GLES2/libGLESv2/Device.cpp
+++ b/src/GLES2/libGLESv2/Device.cpp
@@ -37,48 +37,48 @@
 		renderTarget = 0;

 

 		setDepthBufferEnable(true);

-		setFillMode(Context::FILL_SOLID);

-		setShadingMode(Context::SHADING_GOURAUD);

+		setFillMode(FILL_SOLID);

+		setShadingMode(SHADING_GOURAUD);

 		setDepthWriteEnable(true);

 		setAlphaTestEnable(false);

-		setSourceBlendFactor(Context::BLEND_ONE);

-		setDestBlendFactor(Context::BLEND_ZERO);

-		setCullMode(Context::CULL_COUNTERCLOCKWISE);

-		setDepthCompare(Context::DEPTH_LESSEQUAL);

+		setSourceBlendFactor(BLEND_ONE);

+		setDestBlendFactor(BLEND_ZERO);

+		setCullMode(CULL_COUNTERCLOCKWISE);

+		setDepthCompare(DEPTH_LESSEQUAL);

 		setAlphaReference(0);

-		setAlphaCompare(Context::ALPHA_ALWAYS);

+		setAlphaCompare(ALPHA_ALWAYS);

 		setAlphaBlendEnable(false);

 		setFogEnable(false);

 		setSpecularEnable(false);

 		setFogColor(0);

-		setPixelFogMode(Context::FOG_NONE);

+		setPixelFogMode(FOG_NONE);

 		setFogStart(0.0f);

 		setFogEnd(1.0f);

 		setFogDensity(1.0f);

 		setRangeFogEnable(false);

 		setStencilEnable(false);

-		setStencilFailOperation(Context::OPERATION_KEEP);

-		setStencilZFailOperation(Context::OPERATION_KEEP);

-		setStencilPassOperation(Context::OPERATION_KEEP);

-		setStencilCompare(Context::STENCIL_ALWAYS);

+		setStencilFailOperation(OPERATION_KEEP);

+		setStencilZFailOperation(OPERATION_KEEP);

+		setStencilPassOperation(OPERATION_KEEP);

+		setStencilCompare(STENCIL_ALWAYS);

 		setStencilReference(0);

 		setStencilMask(0xFFFFFFFF);

 		setStencilWriteMask(0xFFFFFFFF);

-		setVertexFogMode(Context::FOG_NONE);

+		setVertexFogMode(FOG_NONE);

 		setClipFlags(0);

 		setPointSize(1.0f);

 		setPointSizeMin(0.125f);

 		setPointSpriteEnable(false);

         setPointSizeMax(8192.0f);

 		setColorWriteMask(0, 0x0000000F);

-		setBlendOperation(Context::BLENDOP_ADD);

+		setBlendOperation(BLENDOP_ADD);

 		scissorEnable = false;

 		setSlopeDepthBias(0.0f);

 		setTwoSidedStencil(false);

-		setStencilFailOperationCCW(Context::OPERATION_KEEP);

-		setStencilZFailOperationCCW(Context::OPERATION_KEEP);

-		setStencilPassOperationCCW(Context::OPERATION_KEEP);

-		setStencilCompareCCW(Context::STENCIL_ALWAYS);

+		setStencilFailOperationCCW(OPERATION_KEEP);

+		setStencilZFailOperationCCW(OPERATION_KEEP);

+		setStencilPassOperationCCW(OPERATION_KEEP);

+		setStencilCompareCCW(STENCIL_ALWAYS);

 		setColorWriteMask(1, 0x0000000F);

 		setColorWriteMask(2, 0x0000000F);

 		setColorWriteMask(3, 0x0000000F);

@@ -86,9 +86,9 @@
 		setWriteSRGB(false);

 		setDepthBias(0.0f);

 		setSeparateAlphaBlendEnable(false);

-		setSourceBlendFactorAlpha(Context::BLEND_ONE);

-		setDestBlendFactorAlpha(Context::BLEND_ZERO);

-		setBlendOperationAlpha(Context::BLENDOP_ADD);

+		setSourceBlendFactorAlpha(BLEND_ONE);

+		setDestBlendFactorAlpha(BLEND_ZERO);

+		setBlendOperationAlpha(BLENDOP_ADD);

 

 		for(int i = 0; i < 16; i++)

 		{

@@ -313,19 +313,19 @@
 			return;

 		}

 

-		Context::DrawType drawType;

+		DrawType drawType;

 

 		if(indexSize == 4)

 		{

 			switch(type)

 			{

-			case DRAW_POINTLIST:     drawType = Context::DRAW_INDEXEDPOINTLIST32;     break;

-			case DRAW_LINELIST:      drawType = Context::DRAW_INDEXEDLINELIST32;      break;

-			case DRAW_LINESTRIP:     drawType = Context::DRAW_INDEXEDLINESTRIP32;     break;

-			case DRAW_LINELOOP:      drawType = Context::DRAW_INDEXEDLINELOOP32;      break;

-			case DRAW_TRIANGLELIST:  drawType = Context::DRAW_INDEXEDTRIANGLELIST32;  break;

-			case DRAW_TRIANGLESTRIP: drawType = Context::DRAW_INDEXEDTRIANGLESTRIP32; break;

-			case DRAW_TRIANGLEFAN:   drawType = Context::DRAW_INDEXEDTRIANGLEFAN32;	  break;

+			case DRAW_POINTLIST:     drawType = sw::DRAW_INDEXEDPOINTLIST32;     break;

+			case DRAW_LINELIST:      drawType = sw::DRAW_INDEXEDLINELIST32;      break;

+			case DRAW_LINESTRIP:     drawType = sw::DRAW_INDEXEDLINESTRIP32;     break;

+			case DRAW_LINELOOP:      drawType = sw::DRAW_INDEXEDLINELOOP32;      break;

+			case DRAW_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST32;  break;

+			case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP32; break;

+			case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN32;	  break;

 			default: UNREACHABLE();

 			}

 		}

@@ -333,13 +333,13 @@
 		{

 			switch(type)

 			{

-			case DRAW_POINTLIST:     drawType = Context::DRAW_INDEXEDPOINTLIST16;     break;

-			case DRAW_LINELIST:      drawType = Context::DRAW_INDEXEDLINELIST16;      break;

-			case DRAW_LINESTRIP:     drawType = Context::DRAW_INDEXEDLINESTRIP16;     break;

-			case DRAW_LINELOOP:      drawType = Context::DRAW_INDEXEDLINELOOP16;      break;

-			case DRAW_TRIANGLELIST:  drawType = Context::DRAW_INDEXEDTRIANGLELIST16;  break;

-			case DRAW_TRIANGLESTRIP: drawType = Context::DRAW_INDEXEDTRIANGLESTRIP16; break;

-			case DRAW_TRIANGLEFAN:   drawType = Context::DRAW_INDEXEDTRIANGLEFAN16;   break;

+			case DRAW_POINTLIST:     drawType = sw::DRAW_INDEXEDPOINTLIST16;     break;

+			case DRAW_LINELIST:      drawType = sw::DRAW_INDEXEDLINELIST16;      break;

+			case DRAW_LINESTRIP:     drawType = sw::DRAW_INDEXEDLINESTRIP16;     break;

+			case DRAW_LINELOOP:      drawType = sw::DRAW_INDEXEDLINELOOP16;      break;

+			case DRAW_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST16;  break;

+			case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP16; break;

+			case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN16;   break;

 			default: UNREACHABLE();

 			}

 		}

@@ -347,13 +347,13 @@
 		{

 			switch(type)

 			{

-			case DRAW_POINTLIST:     drawType = Context::DRAW_INDEXEDPOINTLIST8;     break;

-			case DRAW_LINELIST:      drawType = Context::DRAW_INDEXEDLINELIST8;      break;

-			case DRAW_LINESTRIP:     drawType = Context::DRAW_INDEXEDLINESTRIP8;     break;

-			case DRAW_LINELOOP:      drawType = Context::DRAW_INDEXEDLINELOOP8;      break;

-			case DRAW_TRIANGLELIST:  drawType = Context::DRAW_INDEXEDTRIANGLELIST8;  break;

-			case DRAW_TRIANGLESTRIP: drawType = Context::DRAW_INDEXEDTRIANGLESTRIP8; break;

-			case DRAW_TRIANGLEFAN:   drawType = Context::DRAW_INDEXEDTRIANGLEFAN8;   break;

+			case DRAW_POINTLIST:     drawType = sw::DRAW_INDEXEDPOINTLIST8;     break;

+			case DRAW_LINELIST:      drawType = sw::DRAW_INDEXEDLINELIST8;      break;

+			case DRAW_LINESTRIP:     drawType = sw::DRAW_INDEXEDLINESTRIP8;     break;

+			case DRAW_LINELOOP:      drawType = sw::DRAW_INDEXEDLINELOOP8;      break;

+			case DRAW_TRIANGLELIST:  drawType = sw::DRAW_INDEXEDTRIANGLELIST8;  break;

+			case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_INDEXEDTRIANGLESTRIP8; break;

+			case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_INDEXEDTRIANGLEFAN8;   break;

 			default: UNREACHABLE();

 			}

 		}

@@ -373,17 +373,17 @@
 

 		setIndexBuffer(0);

 		

-		Context::DrawType drawType;

+		DrawType drawType;

 

 		switch(primitiveType)

 		{

-		case DRAW_POINTLIST:     drawType = Context::DRAW_POINTLIST;     break;

-		case DRAW_LINELIST:      drawType = Context::DRAW_LINELIST;      break;

-		case DRAW_LINESTRIP:     drawType = Context::DRAW_LINESTRIP;     break;

-		case DRAW_LINELOOP:      drawType = Context::DRAW_LINELOOP;      break;

-		case DRAW_TRIANGLELIST:  drawType = Context::DRAW_TRIANGLELIST;  break;

-		case DRAW_TRIANGLESTRIP: drawType = Context::DRAW_TRIANGLESTRIP; break;

-		case DRAW_TRIANGLEFAN:   drawType = Context::DRAW_TRIANGLEFAN;   break;

+		case DRAW_POINTLIST:     drawType = sw::DRAW_POINTLIST;     break;

+		case DRAW_LINELIST:      drawType = sw::DRAW_LINELIST;      break;

+		case DRAW_LINESTRIP:     drawType = sw::DRAW_LINESTRIP;     break;

+		case DRAW_LINELOOP:      drawType = sw::DRAW_LINELOOP;      break;

+		case DRAW_TRIANGLELIST:  drawType = sw::DRAW_TRIANGLELIST;  break;

+		case DRAW_TRIANGLESTRIP: drawType = sw::DRAW_TRIANGLESTRIP; break;

+		case DRAW_TRIANGLEFAN:   drawType = sw::DRAW_TRIANGLEFAN;   break;

 		default: UNREACHABLE();

 		}

 

diff --git a/src/GLES2/libGLESv2/utilities.cpp b/src/GLES2/libGLESv2/utilities.cpp
index b71fea5..c0004bf 100644
--- a/src/GLES2/libGLESv2/utilities.cpp
+++ b/src/GLES2/libGLESv2/utilities.cpp
@@ -442,40 +442,40 @@
 

 namespace es2sw

 {

-	sw::Context::DepthCompareMode ConvertDepthComparison(GLenum comparison)

+	sw::DepthCompareMode ConvertDepthComparison(GLenum comparison)

 	{

 		switch(comparison)

 		{

-		case GL_NEVER:    return sw::Context::DEPTH_NEVER;

-		case GL_ALWAYS:   return sw::Context::DEPTH_ALWAYS;

-		case GL_LESS:     return sw::Context::DEPTH_LESS;

-		case GL_LEQUAL:   return sw::Context::DEPTH_LESSEQUAL;

-		case GL_EQUAL:    return sw::Context::DEPTH_EQUAL;

-		case GL_GREATER:  return sw::Context::DEPTH_GREATER;

-		case GL_GEQUAL:   return sw::Context::DEPTH_GREATEREQUAL;

-		case GL_NOTEQUAL: return sw::Context::DEPTH_NOTEQUAL;

+		case GL_NEVER:    return sw::DEPTH_NEVER;

+		case GL_ALWAYS:   return sw::DEPTH_ALWAYS;

+		case GL_LESS:     return sw::DEPTH_LESS;

+		case GL_LEQUAL:   return sw::DEPTH_LESSEQUAL;

+		case GL_EQUAL:    return sw::DEPTH_EQUAL;

+		case GL_GREATER:  return sw::DEPTH_GREATER;

+		case GL_GEQUAL:   return sw::DEPTH_GREATEREQUAL;

+		case GL_NOTEQUAL: return sw::DEPTH_NOTEQUAL;

 		default: UNREACHABLE();

 		}

 

-		return sw::Context::DEPTH_ALWAYS;

+		return sw::DEPTH_ALWAYS;

 	}

 

-	sw::Context::StencilCompareMode ConvertStencilComparison(GLenum comparison)

+	sw::StencilCompareMode ConvertStencilComparison(GLenum comparison)

 	{

 		switch(comparison)

 		{

-		case GL_NEVER:    return sw::Context::STENCIL_NEVER;

-		case GL_ALWAYS:   return sw::Context::STENCIL_ALWAYS;

-		case GL_LESS:     return sw::Context::STENCIL_LESS;

-		case GL_LEQUAL:   return sw::Context::STENCIL_LESSEQUAL;

-		case GL_EQUAL:    return sw::Context::STENCIL_EQUAL;

-		case GL_GREATER:  return sw::Context::STENCIL_GREATER;

-		case GL_GEQUAL:   return sw::Context::STENCIL_GREATEREQUAL;

-		case GL_NOTEQUAL: return sw::Context::STENCIL_NOTEQUAL;

+		case GL_NEVER:    return sw::STENCIL_NEVER;

+		case GL_ALWAYS:   return sw::STENCIL_ALWAYS;

+		case GL_LESS:     return sw::STENCIL_LESS;

+		case GL_LEQUAL:   return sw::STENCIL_LESSEQUAL;

+		case GL_EQUAL:    return sw::STENCIL_EQUAL;

+		case GL_GREATER:  return sw::STENCIL_GREATER;

+		case GL_GEQUAL:   return sw::STENCIL_GREATEREQUAL;

+		case GL_NOTEQUAL: return sw::STENCIL_NOTEQUAL;

 		default: UNREACHABLE();

 		}

 

-		return sw::Context::STENCIL_ALWAYS;

+		return sw::STENCIL_ALWAYS;

 	}

 

 	sw::Color<float> ConvertColor(gl::Color color)

@@ -483,62 +483,62 @@
 		return sw::Color<float>(color.red, color.green, color.blue, color.alpha);

 	}

 

-	sw::Context::BlendFactor ConvertBlendFunc(GLenum blend)

+	sw::BlendFactor ConvertBlendFunc(GLenum blend)

 	{

 		switch(blend)

 		{

-		case GL_ZERO:                     return sw::Context::BLEND_ZERO;

-		case GL_ONE:                      return sw::Context::BLEND_ONE;

-		case GL_SRC_COLOR:                return sw::Context::BLEND_SOURCE;

-		case GL_ONE_MINUS_SRC_COLOR:      return sw::Context::BLEND_INVSOURCE;

-		case GL_DST_COLOR:                return sw::Context::BLEND_DEST;

-		case GL_ONE_MINUS_DST_COLOR:      return sw::Context::BLEND_INVDEST;

-		case GL_SRC_ALPHA:                return sw::Context::BLEND_SOURCEALPHA;

-		case GL_ONE_MINUS_SRC_ALPHA:      return sw::Context::BLEND_INVSOURCEALPHA;

-		case GL_DST_ALPHA:                return sw::Context::BLEND_DESTALPHA;

-		case GL_ONE_MINUS_DST_ALPHA:      return sw::Context::BLEND_INVDESTALPHA;

-		case GL_CONSTANT_COLOR:           return sw::Context::BLEND_CONSTANT;

-		case GL_ONE_MINUS_CONSTANT_COLOR: return sw::Context::BLEND_INVCONSTANT;

-		case GL_CONSTANT_ALPHA:           return sw::Context::BLEND_CONSTANTALPHA;

-		case GL_ONE_MINUS_CONSTANT_ALPHA: return sw::Context::BLEND_INVCONSTANTALPHA;

-		case GL_SRC_ALPHA_SATURATE:       return sw::Context::BLEND_SRCALPHASAT;

+		case GL_ZERO:                     return sw::BLEND_ZERO;

+		case GL_ONE:                      return sw::BLEND_ONE;

+		case GL_SRC_COLOR:                return sw::BLEND_SOURCE;

+		case GL_ONE_MINUS_SRC_COLOR:      return sw::BLEND_INVSOURCE;

+		case GL_DST_COLOR:                return sw::BLEND_DEST;

+		case GL_ONE_MINUS_DST_COLOR:      return sw::BLEND_INVDEST;

+		case GL_SRC_ALPHA:                return sw::BLEND_SOURCEALPHA;

+		case GL_ONE_MINUS_SRC_ALPHA:      return sw::BLEND_INVSOURCEALPHA;

+		case GL_DST_ALPHA:                return sw::BLEND_DESTALPHA;

+		case GL_ONE_MINUS_DST_ALPHA:      return sw::BLEND_INVDESTALPHA;

+		case GL_CONSTANT_COLOR:           return sw::BLEND_CONSTANT;

+		case GL_ONE_MINUS_CONSTANT_COLOR: return sw::BLEND_INVCONSTANT;

+		case GL_CONSTANT_ALPHA:           return sw::BLEND_CONSTANTALPHA;

+		case GL_ONE_MINUS_CONSTANT_ALPHA: return sw::BLEND_INVCONSTANTALPHA;

+		case GL_SRC_ALPHA_SATURATE:       return sw::BLEND_SRCALPHASAT;

 		default: UNREACHABLE();

 		}

 

-		return sw::Context::BLEND_ZERO;

+		return sw::BLEND_ZERO;

 	}

 

-	sw::Context::BlendOperation ConvertBlendOp(GLenum blendOp)

+	sw::BlendOperation ConvertBlendOp(GLenum blendOp)

 	{

 		switch(blendOp)

 		{

-		case GL_FUNC_ADD:              return sw::Context::BLENDOP_ADD;

-		case GL_FUNC_SUBTRACT:         return sw::Context::BLENDOP_SUB;

-		case GL_FUNC_REVERSE_SUBTRACT: return sw::Context::BLENDOP_INVSUB;

-		case GL_MIN_EXT:               return sw::Context::BLENDOP_MIN;

-		case GL_MAX_EXT:               return sw::Context::BLENDOP_MAX;

+		case GL_FUNC_ADD:              return sw::BLENDOP_ADD;

+		case GL_FUNC_SUBTRACT:         return sw::BLENDOP_SUB;

+		case GL_FUNC_REVERSE_SUBTRACT: return sw::BLENDOP_INVSUB;

+		case GL_MIN_EXT:               return sw::BLENDOP_MIN;

+		case GL_MAX_EXT:               return sw::BLENDOP_MAX;

 		default: UNREACHABLE();

 		}

 

-		return sw::Context::BLENDOP_ADD;

+		return sw::BLENDOP_ADD;

 	}

 

-	sw::Context::StencilOperation ConvertStencilOp(GLenum stencilOp)

+	sw::StencilOperation ConvertStencilOp(GLenum stencilOp)

 	{

 		switch(stencilOp)

 		{

-		case GL_ZERO:      return sw::Context::OPERATION_ZERO;

-		case GL_KEEP:      return sw::Context::OPERATION_KEEP;

-		case GL_REPLACE:   return sw::Context::OPERATION_REPLACE;

-		case GL_INCR:      return sw::Context::OPERATION_INCRSAT;

-		case GL_DECR:      return sw::Context::OPERATION_DECRSAT;

-		case GL_INVERT:    return sw::Context::OPERATION_INVERT;

-		case GL_INCR_WRAP: return sw::Context::OPERATION_INCR;

-		case GL_DECR_WRAP: return sw::Context::OPERATION_DECR;

+		case GL_ZERO:      return sw::OPERATION_ZERO;

+		case GL_KEEP:      return sw::OPERATION_KEEP;

+		case GL_REPLACE:   return sw::OPERATION_REPLACE;

+		case GL_INCR:      return sw::OPERATION_INCRSAT;

+		case GL_DECR:      return sw::OPERATION_DECRSAT;

+		case GL_INVERT:    return sw::OPERATION_INVERT;

+		case GL_INCR_WRAP: return sw::OPERATION_INCR;

+		case GL_DECR_WRAP: return sw::OPERATION_DECR;

 		default: UNREACHABLE();

 		}

 

-		return sw::Context::OPERATION_KEEP;

+		return sw::OPERATION_KEEP;

 	}

 

 	sw::AddressingMode ConvertTextureWrap(GLenum wrap)

@@ -554,20 +554,20 @@
 		return sw::ADDRESSING_WRAP;

 	}

 

-	sw::Context::CullMode ConvertCullMode(GLenum cullFace, GLenum frontFace)

+	sw::CullMode ConvertCullMode(GLenum cullFace, GLenum frontFace)

 	{

 		switch(cullFace)

 		{

 		case GL_FRONT:

-			return (frontFace == GL_CCW ? sw::Context::CULL_CLOCKWISE : sw::Context::CULL_COUNTERCLOCKWISE);

+			return (frontFace == GL_CCW ? sw::CULL_CLOCKWISE : sw::CULL_COUNTERCLOCKWISE);

 		case GL_BACK:

-			return (frontFace == GL_CCW ? sw::Context::CULL_COUNTERCLOCKWISE : sw::Context::CULL_CLOCKWISE);

+			return (frontFace == GL_CCW ? sw::CULL_COUNTERCLOCKWISE : sw::CULL_CLOCKWISE);

 		case GL_FRONT_AND_BACK:

-			return sw::Context::CULL_NONE;   // culling will be handled during draw

+			return sw::CULL_NONE;   // culling will be handled during draw

 		default: UNREACHABLE();

 		}

 

-		return sw::Context::CULL_COUNTERCLOCKWISE;

+		return sw::CULL_COUNTERCLOCKWISE;

 	}

 

 	unsigned int ConvertColorMask(bool red, bool green, bool blue, bool alpha)

diff --git a/src/GLES2/libGLESv2/utilities.h b/src/GLES2/libGLESv2/utilities.h
index 94d89052..8475050 100644
--- a/src/GLES2/libGLESv2/utilities.h
+++ b/src/GLES2/libGLESv2/utilities.h
@@ -55,14 +55,14 @@
 

 namespace es2sw

 {

-	sw::Context::DepthCompareMode ConvertDepthComparison(GLenum comparison);

-	sw::Context::StencilCompareMode ConvertStencilComparison(GLenum comparison);

+	sw::DepthCompareMode ConvertDepthComparison(GLenum comparison);

+	sw::StencilCompareMode ConvertStencilComparison(GLenum comparison);

 	sw::Color<float> ConvertColor(gl::Color color);

-	sw::Context::BlendFactor ConvertBlendFunc(GLenum blend);

-	sw::Context::BlendOperation ConvertBlendOp(GLenum blendOp);

-	sw::Context::StencilOperation ConvertStencilOp(GLenum stencilOp);

+	sw::BlendFactor ConvertBlendFunc(GLenum blend);

+	sw::BlendOperation ConvertBlendOp(GLenum blendOp);

+	sw::StencilOperation ConvertStencilOp(GLenum stencilOp);

 	sw::AddressingMode ConvertTextureWrap(GLenum wrap);

-	sw::Context::CullMode ConvertCullMode(GLenum cullFace, GLenum frontFace);

+	sw::CullMode ConvertCullMode(GLenum cullFace, GLenum frontFace);

 	unsigned int ConvertColorMask(bool red, bool green, bool blue, bool alpha);

 	sw::FilterType ConvertMagFilter(GLenum magFilter);

 	void ConvertMinFilter(GLenum texFilter, sw::FilterType *minFilter, sw::MipmapType *mipFilter, float maxAnisotropy);

diff --git a/src/Renderer/Context.cpp b/src/Renderer/Context.cpp
index fcc7f03..eb4c135 100644
--- a/src/Renderer/Context.cpp
+++ b/src/Renderer/Context.cpp
@@ -37,7 +37,7 @@
 	bool complementaryDepthBuffer = false;
 	bool postBlendSRGB = false;
 	bool exactColorRounding = false;
-	Context::TransparencyAntialiasing transparencyAntialiasing = Context::TRANSPARENCY_NONE;
+	TransparencyAntialiasing transparencyAntialiasing = TRANSPARENCY_NONE;
 	bool forceClearRegisters = false;
 
 	Context::Context()
@@ -266,10 +266,10 @@
 		colorWriteMask[2] = 0x0000000F;
 		colorWriteMask[3] = 0x0000000F;
 
-		ambientMaterialSource = MATERIAL;
-		diffuseMaterialSource = COLOR1;
-		specularMaterialSource = COLOR2;
-		emissiveMaterialSource = MATERIAL;
+		ambientMaterialSource = MATERIAL_MATERIAL;
+		diffuseMaterialSource = MATERIAL_COLOR1;
+		specularMaterialSource = MATERIAL_COLOR2;
+		emissiveMaterialSource = MATERIAL_MATERIAL;
 		colorVertexEnable = true;
 
 		fogEnable = false;
@@ -459,7 +459,7 @@
 		return isDrawPoint(true) && (input[PointSize] || (!preTransformed && pointScaleActive()));
 	}
 
-	Context::FogMode Context::pixelFogActive()
+	FogMode Context::pixelFogActive()
 	{
 		if(fogActive())
 		{
@@ -620,69 +620,69 @@
 		return lightingEnable && lightEnable[i];
 	}
 
-	Context::MaterialSource Context::vertexDiffuseMaterialSourceActive()
+	MaterialSource Context::vertexDiffuseMaterialSourceActive()
 	{
 		if(vertexShader)
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 
-		if(diffuseMaterialSource == MATERIAL || !colorVertexEnable ||
-		   (diffuseMaterialSource == COLOR1 && !input[Color0]) ||
-		   (diffuseMaterialSource == COLOR2 && !input[Color1]))
+		if(diffuseMaterialSource == MATERIAL_MATERIAL || !colorVertexEnable ||
+		   (diffuseMaterialSource == MATERIAL_COLOR1 && !input[Color0]) ||
+		   (diffuseMaterialSource == MATERIAL_COLOR2 && !input[Color1]))
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 		
 		return diffuseMaterialSource;
 	}
 
-	Context::MaterialSource Context::vertexSpecularMaterialSourceActive()
+	MaterialSource Context::vertexSpecularMaterialSourceActive()
 	{
 		if(vertexShader)
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 
-		if(specularMaterialSource == MATERIAL || !colorVertexEnable ||
-		   (specularMaterialSource == COLOR1 && !input[Color0]) ||
-		   (specularMaterialSource == COLOR2 && !input[Color1]))
+		if(specularMaterialSource == MATERIAL_MATERIAL || !colorVertexEnable ||
+		   (specularMaterialSource == MATERIAL_COLOR1 && !input[Color0]) ||
+		   (specularMaterialSource == MATERIAL_COLOR2 && !input[Color1]))
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 		
 		return specularMaterialSource;
 	}
 
-	Context::MaterialSource Context::vertexAmbientMaterialSourceActive()
+	MaterialSource Context::vertexAmbientMaterialSourceActive()
 	{
 		if(vertexShader)
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 
-		if(ambientMaterialSource == MATERIAL || !colorVertexEnable ||
-		   (ambientMaterialSource == COLOR1 && !input[Color0]) ||
-		   (ambientMaterialSource == COLOR2 && !input[Color1]))
+		if(ambientMaterialSource == MATERIAL_MATERIAL || !colorVertexEnable ||
+		   (ambientMaterialSource == MATERIAL_COLOR1 && !input[Color0]) ||
+		   (ambientMaterialSource == MATERIAL_COLOR2 && !input[Color1]))
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 		
 		return ambientMaterialSource;
 	}
 
-	Context::MaterialSource Context::vertexEmissiveMaterialSourceActive()
+	MaterialSource Context::vertexEmissiveMaterialSourceActive()
 	{
 		if(vertexShader)
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 
-		if(emissiveMaterialSource == MATERIAL || !colorVertexEnable ||
-		   (emissiveMaterialSource == COLOR1 && !input[Color0]) ||
-		   (emissiveMaterialSource == COLOR2 && !input[Color1]))
+		if(emissiveMaterialSource == MATERIAL_MATERIAL || !colorVertexEnable ||
+		   (emissiveMaterialSource == MATERIAL_COLOR1 && !input[Color0]) ||
+		   (emissiveMaterialSource == MATERIAL_COLOR2 && !input[Color1]))
 		{
-			return MATERIAL;
+			return MATERIAL_MATERIAL;
 		}
 		
 		return emissiveMaterialSource;
@@ -721,7 +721,7 @@
 		return colorBlend || alphaBlend;
 	}
 
-	Context::BlendFactor Context::sourceBlendFactor()
+	BlendFactor Context::sourceBlendFactor()
 	{
 		if(!alphaBlendEnable) return BLEND_ONE;
 
@@ -742,7 +742,7 @@
 		return sourceBlendFactorState;
 	}
 
-	Context::BlendFactor Context::destBlendFactor()
+	BlendFactor Context::destBlendFactor()
 	{
 		if(!alphaBlendEnable) return BLEND_ZERO;
 
@@ -763,7 +763,7 @@
 		return destBlendFactorState;
 	}
 
-	Context::BlendOperation Context::blendOperation()
+	BlendOperation Context::blendOperation()
 	{
 		if(!alphaBlendEnable) return BLENDOP_SOURCE;
 
@@ -875,7 +875,7 @@
 		return blendOperationState;
 	}
 
-	Context::BlendFactor Context::sourceBlendFactorAlpha()
+	BlendFactor Context::sourceBlendFactorAlpha()
 	{
 		if(!separateAlphaBlendEnable)
 		{
@@ -901,7 +901,7 @@
 		}
 	}
 
-	Context::BlendFactor Context::destBlendFactorAlpha()
+	BlendFactor Context::destBlendFactorAlpha()
 	{
 		if(!separateAlphaBlendEnable)
 		{
@@ -927,7 +927,7 @@
 		}
 	}
 
-	Context::BlendOperation Context::blendOperationAlpha()
+	BlendOperation Context::blendOperationAlpha()
 	{
 		if(!separateAlphaBlendEnable)
 		{
@@ -1084,7 +1084,7 @@
 		return normalizeNormals;
 	}
 
-	Context::FogMode Context::vertexFogModeActive()
+	FogMode Context::vertexFogModeActive()
 	{
 		if(vertexShader || !fogActive())
 		{
@@ -1104,7 +1104,7 @@
 		return rangeFogEnable;
 	}
 
-	Context::TexGen Context::texGenActive(int stage)
+	TexGen Context::texGenActive(int stage)
 	{
 		if(vertexShader || !texCoordActive(stage))
 		{
diff --git a/src/Renderer/Context.hpp b/src/Renderer/Context.hpp
index 571f7c0..29aee0b 100644
--- a/src/Renderer/Context.hpp
+++ b/src/Renderer/Context.hpp
@@ -49,202 +49,202 @@
 		PositionT = 15

 	};

 

+	enum DrawType : unsigned int

+	{

+		DRAW_POINTLIST,

+		DRAW_LINELIST,

+		DRAW_LINESTRIP,

+		DRAW_LINELOOP,

+		DRAW_TRIANGLELIST,

+		DRAW_TRIANGLESTRIP,

+		DRAW_TRIANGLEFAN,

+

+		DRAW_INDEXEDPOINTLIST8,

+		DRAW_INDEXEDLINELIST8,

+		DRAW_INDEXEDLINESTRIP8,

+		DRAW_INDEXEDLINELOOP8,

+		DRAW_INDEXEDTRIANGLELIST8,

+		DRAW_INDEXEDTRIANGLESTRIP8,

+		DRAW_INDEXEDTRIANGLEFAN8,

+

+		DRAW_INDEXEDPOINTLIST16,

+		DRAW_INDEXEDLINELIST16,

+		DRAW_INDEXEDLINESTRIP16,

+		DRAW_INDEXEDLINELOOP16,

+		DRAW_INDEXEDTRIANGLELIST16,

+		DRAW_INDEXEDTRIANGLESTRIP16,

+		DRAW_INDEXEDTRIANGLEFAN16,

+

+		DRAW_INDEXEDPOINTLIST32,

+		DRAW_INDEXEDLINELIST32,

+		DRAW_INDEXEDLINESTRIP32,

+		DRAW_INDEXEDLINELOOP32,

+		DRAW_INDEXEDTRIANGLELIST32,

+		DRAW_INDEXEDTRIANGLESTRIP32,

+		DRAW_INDEXEDTRIANGLEFAN32,

+

+		DRAW_LAST = DRAW_INDEXEDTRIANGLEFAN32

+	};

+

+	enum FillMode : unsigned int

+	{

+		FILL_SOLID,

+		FILL_WIREFRAME,

+		FILL_VERTEX,

+

+		FILL_LAST = FILL_VERTEX

+	};

+		

+	enum ShadingMode : unsigned int

+	{

+		SHADING_FLAT,

+		SHADING_GOURAUD,

+

+		SHADING_LAST = SHADING_GOURAUD

+	};

+

+	enum DepthCompareMode : unsigned int

+	{

+		DEPTH_ALWAYS,

+		DEPTH_NEVER,

+		DEPTH_EQUAL,

+		DEPTH_NOTEQUAL,

+		DEPTH_LESS,

+		DEPTH_LESSEQUAL,

+		DEPTH_GREATER,

+		DEPTH_GREATEREQUAL,

+

+		DEPTH_LAST = DEPTH_GREATEREQUAL

+	};

+

+	enum StencilCompareMode : unsigned int

+	{

+		STENCIL_ALWAYS,

+		STENCIL_NEVER,

+		STENCIL_EQUAL,

+		STENCIL_NOTEQUAL,

+		STENCIL_LESS,

+		STENCIL_LESSEQUAL,

+		STENCIL_GREATER,

+		STENCIL_GREATEREQUAL,

+

+		STENCIL_LAST = STENCIL_GREATEREQUAL

+	};

+

+	enum StencilOperation : unsigned int

+	{

+		OPERATION_KEEP,

+		OPERATION_ZERO,

+		OPERATION_REPLACE,

+		OPERATION_INCRSAT,

+		OPERATION_DECRSAT,

+		OPERATION_INVERT,

+		OPERATION_INCR,

+		OPERATION_DECR,

+

+		OPERATION_LAST = OPERATION_DECR

+	};

+

+	enum AlphaCompareMode : unsigned int

+	{

+		ALPHA_ALWAYS,

+		ALPHA_NEVER,

+		ALPHA_EQUAL,

+		ALPHA_NOTEQUAL,

+		ALPHA_LESS,

+		ALPHA_LESSEQUAL,

+		ALPHA_GREATER,

+		ALPHA_GREATEREQUAL,

+

+		ALPHA_LAST = ALPHA_GREATEREQUAL

+	};

+

+	enum CullMode : unsigned int

+	{

+		CULL_NONE,

+		CULL_CLOCKWISE,

+		CULL_COUNTERCLOCKWISE,

+

+		CULL_LAST = CULL_COUNTERCLOCKWISE

+	};

+

+	enum BlendFactor : unsigned int

+	{

+		BLEND_ZERO,

+		BLEND_ONE,

+		BLEND_SOURCE,

+		BLEND_INVSOURCE,

+		BLEND_DEST,

+		BLEND_INVDEST,

+		BLEND_SOURCEALPHA,

+		BLEND_INVSOURCEALPHA,

+		BLEND_DESTALPHA,

+		BLEND_INVDESTALPHA,

+		BLEND_SRCALPHASAT,

+		BLEND_CONSTANT,

+		BLEND_INVCONSTANT,

+		BLEND_CONSTANTALPHA,

+		BLEND_INVCONSTANTALPHA,

+

+		BLEND_LAST = BLEND_INVCONSTANT

+	};

+

+	enum BlendOperation : unsigned int

+	{

+		BLENDOP_ADD,

+		BLENDOP_SUB,

+		BLENDOP_INVSUB,

+		BLENDOP_MIN,

+		BLENDOP_MAX,

+

+		BLENDOP_SOURCE,   // Copy source

+		BLENDOP_DEST,     // Copy dest

+		BLENDOP_NULL,     // Nullify result

+

+		BLENDOP_LAST = BLENDOP_NULL

+	};

+

+	enum MaterialSource : unsigned int

+	{

+		MATERIAL_MATERIAL,

+		MATERIAL_COLOR1,

+		MATERIAL_COLOR2,

+

+		MATERIAL_LAST = MATERIAL_COLOR2

+	};

+

+	enum FogMode : unsigned int

+	{

+		FOG_NONE,

+		FOG_LINEAR,

+		FOG_EXP,

+		FOG_EXP2,

+

+		FOG_LAST = FOG_EXP2

+	};

+

+	enum TexGen : unsigned int

+	{

+		TEXGEN_PASSTHRU,

+		TEXGEN_NORMAL,

+		TEXGEN_POSITION,

+		TEXGEN_REFLECTION,

+		TEXGEN_SPHEREMAP,

+

+		TEXGEN_LAST = TEXGEN_SPHEREMAP

+	};

+

+	enum TransparencyAntialiasing : unsigned int

+	{

+		TRANSPARENCY_NONE,

+		TRANSPARENCY_ALPHA_TO_COVERAGE,

+

+		TRANSPARENCY_LAST = TRANSPARENCY_ALPHA_TO_COVERAGE

+	};

+

 	class Context

 	{

 	public:

-		enum DrawType

-		{

-			DRAW_POINTLIST,

-			DRAW_LINELIST,

-			DRAW_LINESTRIP,

-			DRAW_LINELOOP,

-			DRAW_TRIANGLELIST,

-			DRAW_TRIANGLESTRIP,

-			DRAW_TRIANGLEFAN,

-

-			DRAW_INDEXEDPOINTLIST8,

-			DRAW_INDEXEDLINELIST8,

-			DRAW_INDEXEDLINESTRIP8,

-			DRAW_INDEXEDLINELOOP8,

-			DRAW_INDEXEDTRIANGLELIST8,

-			DRAW_INDEXEDTRIANGLESTRIP8,

-			DRAW_INDEXEDTRIANGLEFAN8,

-

-			DRAW_INDEXEDPOINTLIST16,

-			DRAW_INDEXEDLINELIST16,

-			DRAW_INDEXEDLINESTRIP16,

-			DRAW_INDEXEDLINELOOP16,

-			DRAW_INDEXEDTRIANGLELIST16,

-			DRAW_INDEXEDTRIANGLESTRIP16,

-			DRAW_INDEXEDTRIANGLEFAN16,

-

-			DRAW_INDEXEDPOINTLIST32,

-			DRAW_INDEXEDLINELIST32,

-			DRAW_INDEXEDLINESTRIP32,

-			DRAW_INDEXEDLINELOOP32,

-			DRAW_INDEXEDTRIANGLELIST32,

-			DRAW_INDEXEDTRIANGLESTRIP32,

-			DRAW_INDEXEDTRIANGLEFAN32,

-

-			DRAW_LAST = DRAW_INDEXEDTRIANGLEFAN32

-		};

-

-		enum FillMode

-		{

-			FILL_SOLID,

-			FILL_WIREFRAME,

-			FILL_VERTEX,

-

-			FILL_LAST = FILL_VERTEX

-		};

-		

-		enum ShadingMode

-		{

-			SHADING_FLAT,

-			SHADING_GOURAUD,

-

-			SHADING_LAST = SHADING_GOURAUD

-		};

-

-		enum DepthCompareMode

-		{

-			DEPTH_ALWAYS,

-			DEPTH_NEVER,

-			DEPTH_EQUAL,

-			DEPTH_NOTEQUAL,

-			DEPTH_LESS,

-			DEPTH_LESSEQUAL,

-			DEPTH_GREATER,

-			DEPTH_GREATEREQUAL,

-

-			DEPTH_LAST = DEPTH_GREATEREQUAL

-		};

-

-		enum StencilCompareMode

-		{

-			STENCIL_ALWAYS,

-			STENCIL_NEVER,

-			STENCIL_EQUAL,

-			STENCIL_NOTEQUAL,

-			STENCIL_LESS,

-			STENCIL_LESSEQUAL,

-			STENCIL_GREATER,

-			STENCIL_GREATEREQUAL,

-

-			STENCIL_LAST = STENCIL_GREATEREQUAL

-		};

-

-		enum StencilOperation

-		{

-			OPERATION_KEEP,

-			OPERATION_ZERO,

-			OPERATION_REPLACE,

-			OPERATION_INCRSAT,

-			OPERATION_DECRSAT,

-			OPERATION_INVERT,

-			OPERATION_INCR,

-			OPERATION_DECR,

-

-			OPERATION_LAST = OPERATION_DECR

-		};

-

-		enum AlphaCompareMode

-		{

-			ALPHA_ALWAYS,

-			ALPHA_NEVER,

-			ALPHA_EQUAL,

-			ALPHA_NOTEQUAL,

-			ALPHA_LESS,

-			ALPHA_LESSEQUAL,

-			ALPHA_GREATER,

-			ALPHA_GREATEREQUAL,

-

-			ALPHA_LAST = ALPHA_GREATEREQUAL

-		};

-

-		enum CullMode

-		{

-			CULL_NONE,

-			CULL_CLOCKWISE,

-			CULL_COUNTERCLOCKWISE,

-

-			CULL_LAST = CULL_COUNTERCLOCKWISE

-		};

-

-		enum BlendFactor

-		{

-			BLEND_ZERO,

-			BLEND_ONE,

-			BLEND_SOURCE,

-			BLEND_INVSOURCE,

-			BLEND_DEST,

-			BLEND_INVDEST,

-			BLEND_SOURCEALPHA,

-			BLEND_INVSOURCEALPHA,

-			BLEND_DESTALPHA,

-			BLEND_INVDESTALPHA,

-			BLEND_SRCALPHASAT,

-			BLEND_CONSTANT,

-			BLEND_INVCONSTANT,

-			BLEND_CONSTANTALPHA,

-			BLEND_INVCONSTANTALPHA,

-

-			BLEND_LAST = BLEND_INVCONSTANT

-		};

-

-		enum BlendOperation

-		{

-			BLENDOP_ADD,

-			BLENDOP_SUB,

-			BLENDOP_INVSUB,

-			BLENDOP_MIN,

-			BLENDOP_MAX,

-

-			BLENDOP_SOURCE,   // Copy source

-			BLENDOP_DEST,     // Copy dest

-			BLENDOP_NULL,     // Nullify result

-

-			BLENDOP_LAST = BLENDOP_NULL

-		};

-

-		enum MaterialSource

-		{

-			MATERIAL,

-			COLOR1,

-			COLOR2,

-

-			MATERIAL_LAST = COLOR2

-		};

-

-		enum FogMode

-		{

-			FOG_NONE,

-			FOG_LINEAR,

-			FOG_EXP,

-			FOG_EXP2,

-

-			FOG_LAST = FOG_EXP2

-		};

-

-		enum TexGen

-		{

-			TEXGEN_PASSTHRU,

-			TEXGEN_NORMAL,

-			TEXGEN_POSITION,

-			TEXGEN_REFLECTION,

-			TEXGEN_SPHEREMAP,

-

-			TEXGEN_LAST = TEXGEN_SPHEREMAP

-		};

-

-		enum TransparencyAntialiasing

-		{

-			TRANSPARENCY_NONE,

-			TRANSPARENCY_ALPHA_TO_COVERAGE,

-

-			TRANSPARENCY_LAST = TRANSPARENCY_ALPHA_TO_COVERAGE

-		};

-

 		Context();

 

 		~Context();

@@ -288,9 +288,9 @@
 		bool setBlendOperation(BlendOperation blendOperation);

 

 		bool setSeparateAlphaBlendEnable(bool separateAlphaBlendEnable);

-		bool setSourceBlendFactorAlpha(Context::BlendFactor sourceBlendFactorAlpha);

-		bool setDestBlendFactorAlpha(Context::BlendFactor destBlendFactorAlpha);

-		bool setBlendOperationAlpha(Context::BlendOperation blendOperationAlpha);

+		bool setSourceBlendFactorAlpha(BlendFactor sourceBlendFactorAlpha);

+		bool setDestBlendFactorAlpha(BlendFactor destBlendFactorAlpha);

+		bool setBlendOperationAlpha(BlendOperation blendOperationAlpha);

 

 		bool setColorWriteMask(int index, int colorWriteMask);

 		bool setWriteSRGB(bool sRGB);

@@ -298,7 +298,7 @@
 		// Active fixed-function pixel pipeline states

 		bool fogActive();

 		bool pointSizeActive();

-		Context::FogMode pixelFogActive();

+		FogMode pixelFogActive();

 		bool depthWriteActive();

 		bool alphaTestActive();

 		bool depthBufferActive();

@@ -414,7 +414,7 @@
 

 		bool textureWrapActive;

 		unsigned char textureWrap[16];

-		Context::TexGen texGen[8];

+		TexGen texGen[8];

 		bool localViewer;

 		bool normalizeNormals;

 		int textureTransformCount[8];

diff --git a/src/Renderer/PixelProcessor.cpp b/src/Renderer/PixelProcessor.cpp
index 0fbf0ea..5a45e48 100644
--- a/src/Renderer/PixelProcessor.cpp
+++ b/src/Renderer/PixelProcessor.cpp
@@ -24,7 +24,7 @@
 namespace sw
 {
 	extern bool complementaryDepthBuffer;
-	extern Context::TransparencyAntialiasing transparencyAntialiasing;
+	extern TransparencyAntialiasing transparencyAntialiasing;
 	extern bool perspectiveCorrection;
 
 	bool precachePixel = false;
@@ -425,12 +425,12 @@
 		context->setDepthBufferEnable(depthBufferEnable);
 	}
 
-	void PixelProcessor::setDepthCompare(Context::DepthCompareMode depthCompareMode)
+	void PixelProcessor::setDepthCompare(DepthCompareMode depthCompareMode)
 	{
 		context->depthCompareMode = depthCompareMode;
 	}
 
-	void PixelProcessor::setAlphaCompare(Context::AlphaCompareMode alphaCompareMode)
+	void PixelProcessor::setAlphaCompare(AlphaCompareMode alphaCompareMode)
 	{
 		context->alphaCompareMode = alphaCompareMode;
 	}
@@ -445,7 +445,7 @@
 		context->alphaTestEnable = alphaTestEnable;
 	}
 
-	void PixelProcessor::setCullMode(Context::CullMode cullMode)
+	void PixelProcessor::setCullMode(CullMode cullMode)
 	{
 		context->cullMode = cullMode;
 	}
@@ -460,7 +460,7 @@
 		context->stencilEnable = stencilEnable;
 	}
 
-	void PixelProcessor::setStencilCompare(Context::StencilCompareMode stencilCompareMode)
+	void PixelProcessor::setStencilCompare(StencilCompareMode stencilCompareMode)
 	{
 		context->stencilCompareMode = stencilCompareMode;
 	}
@@ -489,17 +489,17 @@
 		stencilCCW.set(context->stencilReferenceCCW, stencilMaskCCW, context->stencilWriteMaskCCW);
 	}
 
-	void PixelProcessor::setStencilFailOperation(Context::StencilOperation stencilFailOperation)
+	void PixelProcessor::setStencilFailOperation(StencilOperation stencilFailOperation)
 	{
 		context->stencilFailOperation = stencilFailOperation;
 	}
 
-	void PixelProcessor::setStencilPassOperation(Context::StencilOperation stencilPassOperation)
+	void PixelProcessor::setStencilPassOperation(StencilOperation stencilPassOperation)
 	{
 		context->stencilPassOperation = stencilPassOperation;
 	}
 
-	void PixelProcessor::setStencilZFailOperation(Context::StencilOperation stencilZFailOperation)
+	void PixelProcessor::setStencilZFailOperation(StencilOperation stencilZFailOperation)
 	{
 		context->stencilZFailOperation = stencilZFailOperation;
 	}
@@ -521,22 +521,22 @@
 		context->twoSidedStencil = enable;
 	}
 
-	void PixelProcessor::setStencilCompareCCW(Context::StencilCompareMode stencilCompareMode)
+	void PixelProcessor::setStencilCompareCCW(StencilCompareMode stencilCompareMode)
 	{
 		context->stencilCompareModeCCW = stencilCompareMode;
 	}
 
-	void PixelProcessor::setStencilFailOperationCCW(Context::StencilOperation stencilFailOperation)
+	void PixelProcessor::setStencilFailOperationCCW(StencilOperation stencilFailOperation)
 	{
 		context->stencilFailOperationCCW = stencilFailOperation;
 	}
 
-	void PixelProcessor::setStencilPassOperationCCW(Context::StencilOperation stencilPassOperation)
+	void PixelProcessor::setStencilPassOperationCCW(StencilOperation stencilPassOperation)
 	{
 		context->stencilPassOperationCCW = stencilPassOperation;
 	}
 
-	void PixelProcessor::setStencilZFailOperationCCW(Context::StencilOperation stencilZFailOperation)
+	void PixelProcessor::setStencilZFailOperationCCW(StencilOperation stencilZFailOperation)
 	{
 		context->stencilZFailOperationCCW = stencilZFailOperation;
 	}
@@ -665,12 +665,12 @@
 		factor.invBlendConstant4F[3][3] = 1 - blendConstant.a;
 	}
 
-	void PixelProcessor::setFillMode(Context::FillMode fillMode)
+	void PixelProcessor::setFillMode(FillMode fillMode)
 	{
 		context->fillMode = fillMode;
 	}
 
-	void PixelProcessor::setShadingMode(Context::ShadingMode shadingMode)
+	void PixelProcessor::setShadingMode(ShadingMode shadingMode)
 	{
 		context->shadingMode = shadingMode;
 	}
@@ -680,17 +680,17 @@
 		context->setAlphaBlendEnable(alphaBlendEnable);
 	}
 
-	void PixelProcessor::setSourceBlendFactor(Context::BlendFactor sourceBlendFactor)
+	void PixelProcessor::setSourceBlendFactor(BlendFactor sourceBlendFactor)
 	{
 		context->setSourceBlendFactor(sourceBlendFactor);
 	}
 
-	void PixelProcessor::setDestBlendFactor(Context::BlendFactor destBlendFactor)
+	void PixelProcessor::setDestBlendFactor(BlendFactor destBlendFactor)
 	{
 		context->setDestBlendFactor(destBlendFactor);
 	}
 
-	void PixelProcessor::setBlendOperation(Context::BlendOperation blendOperation)
+	void PixelProcessor::setBlendOperation(BlendOperation blendOperation)
 	{
 		context->setBlendOperation(blendOperation);
 	}
@@ -700,17 +700,17 @@
 		context->setSeparateAlphaBlendEnable(separateAlphaBlendEnable);
 	}
 
-	void PixelProcessor::setSourceBlendFactorAlpha(Context::BlendFactor sourceBlendFactorAlpha)
+	void PixelProcessor::setSourceBlendFactorAlpha(BlendFactor sourceBlendFactorAlpha)
 	{
 		context->setSourceBlendFactorAlpha(sourceBlendFactorAlpha);
 	}
 
-	void PixelProcessor::setDestBlendFactorAlpha(Context::BlendFactor destBlendFactorAlpha)
+	void PixelProcessor::setDestBlendFactorAlpha(BlendFactor destBlendFactorAlpha)
 	{
 		context->setDestBlendFactorAlpha(destBlendFactorAlpha);
 	}
 
-	void PixelProcessor::setBlendOperationAlpha(Context::BlendOperation blendOperationAlpha)
+	void PixelProcessor::setBlendOperationAlpha(BlendOperation blendOperationAlpha)
 	{
 		context->setBlendOperationAlpha(blendOperationAlpha);
 	}
@@ -773,7 +773,7 @@
 		fog.densityE2 = replicate(fogDensity * 1.201122f);   // 1/e^(x^2) = 2^(-(x*1.20)^2)
 	}
 
-	void PixelProcessor::setPixelFogMode(Context::FogMode fogMode)
+	void PixelProcessor::setPixelFogMode(FogMode fogMode)
 	{
 		context->pixelFogMode = fogMode;
 	}
@@ -831,7 +831,7 @@
 		{
 			state.alphaCompareMode = context->alphaCompareMode;
 
-			state.transparencyAntialiasing = context->getMultiSampleCount() > 1 ? transparencyAntialiasing : Context::TRANSPARENCY_NONE;
+			state.transparencyAntialiasing = context->getMultiSampleCount() > 1 ? transparencyAntialiasing : TRANSPARENCY_NONE;
 		}
 
 		state.depthWriteEnable = context->depthWriteActive();
@@ -870,7 +870,7 @@
 
 		state.fogActive = context->fogActive();
 		state.pixelFogMode = context->pixelFogActive();
-		state.wBasedFog = context->wBasedFog && context->pixelFogActive() != Context::FOG_NONE;
+		state.wBasedFog = context->wBasedFog && context->pixelFogActive() != FOG_NONE;
 		state.perspective = context->perspectiveActive();
 
 		if(context->alphaBlendActive())
@@ -934,7 +934,7 @@
 
 		const bool point = context->isDrawPoint(true);
 		const bool sprite = context->pointSpriteActive();
-		const bool flatShading = (context->shadingMode == Context::SHADING_FLAT) || point;
+		const bool flatShading = (context->shadingMode == SHADING_FLAT) || point;
 
 		if(context->pixelShaderVersion() < 0x0300)
 		{
diff --git a/src/Renderer/PixelProcessor.hpp b/src/Renderer/PixelProcessor.hpp
index df1876d..143a834 100644
--- a/src/Renderer/PixelProcessor.hpp
+++ b/src/Renderer/PixelProcessor.hpp
@@ -31,54 +31,54 @@
 

 			int shaderID;

 

-			unsigned int depthOverride            : 1;

-			unsigned int shaderContainsKill       : 1;

+			bool depthOverride                        : 1;

+			bool shaderContainsKill                   : 1;

 

-			unsigned int depthCompareMode         : BITS(Context::DEPTH_LAST);

-			unsigned int alphaCompareMode         : BITS(Context::ALPHA_LAST);

-			unsigned int depthWriteEnable         : 1;

-			unsigned int quadLayoutDepthBuffer    : 1;

+			DepthCompareMode depthCompareMode         : BITS(DEPTH_LAST);

+			AlphaCompareMode alphaCompareMode         : BITS(ALPHA_LAST);

+			bool depthWriteEnable                     : 1;

+			bool quadLayoutDepthBuffer                : 1;

 

-			unsigned int stencilActive            : 1;

-			unsigned int stencilCompareMode       : BITS(Context::STENCIL_LAST);

-			unsigned int stencilFailOperation     : BITS(Context::OPERATION_LAST);

-			unsigned int stencilPassOperation     : BITS(Context::OPERATION_LAST);

-			unsigned int stencilZFailOperation    : BITS(Context::OPERATION_LAST);

-			unsigned int noStencilMask            : 1;

-			unsigned int noStencilWriteMask       : 1;

-			unsigned int stencilWriteMasked       : 1;

-			unsigned int twoSidedStencil          : 1;

-			unsigned int stencilCompareModeCCW    : BITS(Context::STENCIL_LAST);

-			unsigned int stencilFailOperationCCW  : BITS(Context::OPERATION_LAST);

-			unsigned int stencilPassOperationCCW  : BITS(Context::OPERATION_LAST);

-			unsigned int stencilZFailOperationCCW : BITS(Context::OPERATION_LAST);

-			unsigned int noStencilMaskCCW         : 1;

-			unsigned int noStencilWriteMaskCCW    : 1;

-			unsigned int stencilWriteMaskedCCW    : 1;

+			bool stencilActive                        : 1;

+			StencilCompareMode stencilCompareMode     : BITS(STENCIL_LAST);

+			StencilOperation stencilFailOperation     : BITS(OPERATION_LAST);

+			StencilOperation stencilPassOperation     : BITS(OPERATION_LAST);

+			StencilOperation stencilZFailOperation    : BITS(OPERATION_LAST);

+			bool noStencilMask                        : 1;

+			bool noStencilWriteMask                   : 1;

+			bool stencilWriteMasked                   : 1;

+			bool twoSidedStencil                      : 1;

+			StencilCompareMode stencilCompareModeCCW  : BITS(STENCIL_LAST);

+			StencilOperation stencilFailOperationCCW  : BITS(OPERATION_LAST);

+			StencilOperation stencilPassOperationCCW  : BITS(OPERATION_LAST);

+			StencilOperation stencilZFailOperationCCW : BITS(OPERATION_LAST);

+			bool noStencilMaskCCW                     : 1;

+			bool noStencilWriteMaskCCW                : 1;

+			bool stencilWriteMaskedCCW                : 1;

 

-			unsigned int depthTestActive          : 1;

-			unsigned int fogActive                : 1;

-			unsigned int pixelFogMode             : BITS(Context::FOG_LAST);

-			unsigned int specularAdd              : 1;

-			unsigned int occlusionEnabled         : 1;

-			unsigned int wBasedFog                : 1;

-			unsigned int perspective              : 1;

+			bool depthTestActive                      : 1;

+			bool fogActive                            : 1;

+			FogMode pixelFogMode                      : BITS(FOG_LAST);

+			bool specularAdd                          : 1;

+			bool occlusionEnabled                     : 1;

+			bool wBasedFog                            : 1;

+			bool perspective                          : 1;

 

-			unsigned int alphaBlendActive         : 1;

-			unsigned int sourceBlendFactor        : BITS(Context::BLEND_LAST);

-			unsigned int destBlendFactor          : BITS(Context::BLEND_LAST);

-			unsigned int blendOperation           : BITS(Context::BLENDOP_LAST);

-			unsigned int sourceBlendFactorAlpha   : BITS(Context::BLEND_LAST);

-			unsigned int destBlendFactorAlpha     : BITS(Context::BLEND_LAST);

-			unsigned int blendOperationAlpha      : BITS(Context::BLENDOP_LAST);

+			bool alphaBlendActive                     : 1;

+			BlendFactor sourceBlendFactor             : BITS(BLEND_LAST);

+			BlendFactor destBlendFactor               : BITS(BLEND_LAST);

+			BlendOperation blendOperation             : BITS(BLENDOP_LAST);

+			BlendFactor sourceBlendFactorAlpha        : BITS(BLEND_LAST);

+			BlendFactor destBlendFactorAlpha          : BITS(BLEND_LAST);

+			BlendOperation blendOperationAlpha        : BITS(BLENDOP_LAST);

 			

-			unsigned int colorWriteMask           : 16;   // (four times four component bit mask)

-			unsigned char targetFormat[4];

-			unsigned int writeSRGB                : 1;

-			unsigned int multiSample              : 3;

-			unsigned int multiSampleMask          : 4;

-			unsigned int transparencyAntialiasing : BITS(Context::TRANSPARENCY_LAST);

-			unsigned int centroid                 : 1;

+			unsigned int colorWriteMask                       : 16;   // (four times four component bit mask)

+			Format targetFormat[4];

+			bool writeSRGB                                    : 1;

+			unsigned int multiSample                          : 3;

+			unsigned int multiSampleMask                      : 4;

+			TransparencyAntialiasing transparencyAntialiasing : BITS(TRANSPARENCY_LAST);

+			bool centroid                                     : 1;

 

 			Sampler::State sampler[16];

 			TextureStage::State textureStage[8];

@@ -88,7 +88,7 @@
 				unsigned char component : 4;

 				unsigned char flat : 4;

 				unsigned char project : 2;

-				unsigned char centroid : 1;

+				bool centroid : 1;

 			};

 

 			union

@@ -117,12 +117,12 @@
 

 			bool alphaTestActive() const

 			{

-				return alphaCompareMode != Context::ALPHA_ALWAYS;

+				return alphaCompareMode != ALPHA_ALWAYS;

 			}

 

 			bool pixelFogActive() const

 			{

-				return pixelFogMode != Context::FOG_NONE;

+				return pixelFogMode != FOG_NONE;

 			}

 

 			unsigned int hash;

@@ -225,45 +225,45 @@
 

 		virtual void setWriteSRGB(bool sRGB);

 		virtual void setDepthBufferEnable(bool depthBufferEnable);

-		virtual void setDepthCompare(Context::DepthCompareMode depthCompareMode);

-		virtual void setAlphaCompare(Context::AlphaCompareMode alphaCompareMode);

+		virtual void setDepthCompare(DepthCompareMode depthCompareMode);

+		virtual void setAlphaCompare(AlphaCompareMode alphaCompareMode);

 		virtual void setDepthWriteEnable(bool depthWriteEnable);

 		virtual void setAlphaTestEnable(bool alphaTestEnable);

-		virtual void setCullMode(Context::CullMode cullMode);

+		virtual void setCullMode(CullMode cullMode);

 		virtual void setColorWriteMask(int index, int rgbaMask);

 

 		virtual void setStencilEnable(bool stencilEnable);

-		virtual void setStencilCompare(Context::StencilCompareMode stencilCompareMode);

+		virtual void setStencilCompare(StencilCompareMode stencilCompareMode);

 		virtual void setStencilReference(int stencilReference);

 		virtual void setStencilMask(int stencilMask);

-		virtual void setStencilFailOperation(Context::StencilOperation stencilFailOperation);

-		virtual void setStencilPassOperation(Context::StencilOperation stencilPassOperation);

-		virtual void setStencilZFailOperation(Context::StencilOperation stencilZFailOperation);

+		virtual void setStencilFailOperation(StencilOperation stencilFailOperation);

+		virtual void setStencilPassOperation(StencilOperation stencilPassOperation);

+		virtual void setStencilZFailOperation(StencilOperation stencilZFailOperation);

 		virtual void setStencilWriteMask(int stencilWriteMask);

 		virtual void setTwoSidedStencil(bool enable);

-		virtual void setStencilCompareCCW(Context::StencilCompareMode stencilCompareMode);

+		virtual void setStencilCompareCCW(StencilCompareMode stencilCompareMode);

 		virtual void setStencilReferenceCCW(int stencilReference);

 		virtual void setStencilMaskCCW(int stencilMask);

-		virtual void setStencilFailOperationCCW(Context::StencilOperation stencilFailOperation);

-		virtual void setStencilPassOperationCCW(Context::StencilOperation stencilPassOperation);

-		virtual void setStencilZFailOperationCCW(Context::StencilOperation stencilZFailOperation);

+		virtual void setStencilFailOperationCCW(StencilOperation stencilFailOperation);

+		virtual void setStencilPassOperationCCW(StencilOperation stencilPassOperation);

+		virtual void setStencilZFailOperationCCW(StencilOperation stencilZFailOperation);

 		virtual void setStencilWriteMaskCCW(int stencilWriteMask);

 

 		virtual void setTextureFactor(const Color<float> &textureFactor);

 		virtual void setBlendConstant(const Color<float> &blendConstant);

 

-		virtual void setFillMode(Context::FillMode fillMode);

-		virtual void setShadingMode(Context::ShadingMode shadingMode);

+		virtual void setFillMode(FillMode fillMode);

+		virtual void setShadingMode(ShadingMode shadingMode);

 		

 		virtual void setAlphaBlendEnable(bool alphaBlendEnable);

-		virtual void setSourceBlendFactor(Context::BlendFactor sourceBlendFactor);

-		virtual void setDestBlendFactor(Context::BlendFactor destBlendFactor);

-		virtual void setBlendOperation(Context::BlendOperation blendOperation);

+		virtual void setSourceBlendFactor(BlendFactor sourceBlendFactor);

+		virtual void setDestBlendFactor(BlendFactor destBlendFactor);

+		virtual void setBlendOperation(BlendOperation blendOperation);

 

 		virtual void setSeparateAlphaBlendEnable(bool separateAlphaBlendEnable);

-		virtual void setSourceBlendFactorAlpha(Context::BlendFactor sourceBlendFactorAlpha);

-		virtual void setDestBlendFactorAlpha(Context::BlendFactor destBlendFactorAlpha);

-		virtual void setBlendOperationAlpha(Context::BlendOperation blendOperationAlpha);

+		virtual void setSourceBlendFactorAlpha(BlendFactor sourceBlendFactorAlpha);

+		virtual void setDestBlendFactorAlpha(BlendFactor destBlendFactorAlpha);

+		virtual void setBlendOperationAlpha(BlendOperation blendOperationAlpha);

 

 		virtual void setAlphaReference(int alphaReference);

 

@@ -273,7 +273,7 @@
 		virtual void setFogEnd(float end);

 		virtual void setFogColor(Color<float> fogColor);

 		virtual void setFogDensity(float fogDensity);

-		virtual void setPixelFogMode(Context::FogMode fogMode);

+		virtual void setPixelFogMode(FogMode fogMode);

 

 		virtual void setPerspectiveCorrection(bool perspectiveCorrection);

 

diff --git a/src/Renderer/QuadRasterizer.cpp b/src/Renderer/QuadRasterizer.cpp
index a11cf18..d15c895 100644
--- a/src/Renderer/QuadRasterizer.cpp
+++ b/src/Renderer/QuadRasterizer.cpp
@@ -173,7 +173,7 @@
 
 			if(veryEarlyDepthTest && state.multiSample == 1)
 			{
-				if(!state.stencilActive && state.depthTestActive && (state.depthCompareMode == Context::DEPTH_LESSEQUAL || state.depthCompareMode == Context::DEPTH_LESS))   // FIXME: Both modes ok?
+				if(!state.stencilActive && state.depthTestActive && (state.depthCompareMode == DEPTH_LESSEQUAL || state.depthCompareMode == DEPTH_LESS))   // FIXME: Both modes ok?
 				{
 					Float4 xxxx = Float4(Float(x0)) + *Pointer<Float4>(r.primitive + OFFSET(Primitive,xQuad), 16);
 
diff --git a/src/Renderer/Renderer.cpp b/src/Renderer/Renderer.cpp
index 41a3cbb..20038bd 100644
--- a/src/Renderer/Renderer.cpp
+++ b/src/Renderer/Renderer.cpp
@@ -51,7 +51,7 @@
 	extern bool complementaryDepthBuffer;
 	extern bool postBlendSRGB;
 	extern bool exactColorRounding;
-	extern Context::TransparencyAntialiasing transparencyAntialiasing;
+	extern TransparencyAntialiasing transparencyAntialiasing;
 	extern bool forceClearRegisters;
 
 	extern bool precacheVertex;
@@ -191,7 +191,7 @@
 		blitter.blit(source, sRect, dest, dRect, filter);
 	}
 
-	void Renderer::draw(Context::DrawType drawType, unsigned int indexOffset, unsigned int count, bool update)
+	void Renderer::draw(DrawType drawType, unsigned int indexOffset, unsigned int count, bool update)
 	{
 		#ifndef NDEBUG
 			if(count < minPrimitives || count > maxPrimitives)
@@ -237,14 +237,14 @@
 			{
 				switch(context->fillMode)
 				{
-				case Context::FILL_SOLID:
+				case FILL_SOLID:
 					setupPrimitives = setupSolidTriangles;
 					break;
-				case Context::FILL_WIREFRAME:
+				case FILL_WIREFRAME:
 					setupPrimitives = setupWireframeTriangle;
 					batch = 1;
 					break;
-				case Context::FILL_VERTEX:
+				case FILL_VERTEX:
 					setupPrimitives = setupVertexTriangle;
 					batch = 1;
 					break;
@@ -440,7 +440,7 @@
 
 			data->factor = factor;
 
-			if(pixelState.transparencyAntialiasing == Context::TRANSPARENCY_ALPHA_TO_COVERAGE)
+			if(pixelState.transparencyAntialiasing == TRANSPARENCY_ALPHA_TO_COVERAGE)
 			{
 				float ref = (float)context->alphaReference * (1.0f / 255.0f);
 				float margin = sw::min(ref, 1.0f - ref);
@@ -954,7 +954,7 @@
 
 		switch(draw->drawType)
 		{
-		case Context::DRAW_POINTLIST:
+		case DRAW_POINTLIST:
 			{
 				unsigned int index = start;
 
@@ -968,7 +968,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_LINELIST:
+		case DRAW_LINELIST:
 			{
 				unsigned int index = 2 * start;
 
@@ -982,7 +982,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_LINESTRIP:
+		case DRAW_LINESTRIP:
 			{
 				unsigned int index = start;
 
@@ -996,7 +996,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_LINELOOP:
+		case DRAW_LINELOOP:
 			{
 				unsigned int index = start;
 
@@ -1010,7 +1010,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_TRIANGLELIST:
+		case DRAW_TRIANGLELIST:
 			{
 				unsigned int index = 3 * start;
 
@@ -1024,7 +1024,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_TRIANGLESTRIP:
+		case DRAW_TRIANGLESTRIP:
 			{
 				unsigned int index = start;
 
@@ -1038,7 +1038,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_TRIANGLEFAN:
+		case DRAW_TRIANGLEFAN:
 			{
 				unsigned int index = start;
 
@@ -1052,7 +1052,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDPOINTLIST8:
+		case DRAW_INDEXEDPOINTLIST8:
 			{
 				const unsigned char *index = (const unsigned char*)indices + start;
 
@@ -1066,7 +1066,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDPOINTLIST16:
+		case DRAW_INDEXEDPOINTLIST16:
 			{
 				const unsigned short *index = (const unsigned short*)indices + start;
 
@@ -1080,7 +1080,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDPOINTLIST32:
+		case DRAW_INDEXEDPOINTLIST32:
 			{
 				const unsigned int *index = (const unsigned int*)indices + start;
 
@@ -1094,7 +1094,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINELIST8:
+		case DRAW_INDEXEDLINELIST8:
 			{
 				const unsigned char *index = (const unsigned char*)indices + 2 * start;
 
@@ -1108,7 +1108,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINELIST16:
+		case DRAW_INDEXEDLINELIST16:
 			{
 				const unsigned short *index = (const unsigned short*)indices + 2 * start;
 
@@ -1122,7 +1122,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINELIST32:
+		case DRAW_INDEXEDLINELIST32:
 			{
 				const unsigned int *index = (const unsigned int*)indices + 2 * start;
 
@@ -1136,7 +1136,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINESTRIP8:
+		case DRAW_INDEXEDLINESTRIP8:
 			{
 				const unsigned char *index = (const unsigned char*)indices + start;
 
@@ -1150,7 +1150,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINESTRIP16:
+		case DRAW_INDEXEDLINESTRIP16:
 			{
 				const unsigned short *index = (const unsigned short*)indices + start;
 
@@ -1164,7 +1164,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINESTRIP32:
+		case DRAW_INDEXEDLINESTRIP32:
 			{
 				const unsigned int *index = (const unsigned int*)indices + start;
 
@@ -1178,7 +1178,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINELOOP8:
+		case DRAW_INDEXEDLINELOOP8:
 			{
 				const unsigned char *index = (const unsigned char*)indices;
 
@@ -1190,7 +1190,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINELOOP16:
+		case DRAW_INDEXEDLINELOOP16:
 			{
 				const unsigned short *index = (const unsigned short*)indices;
 
@@ -1202,7 +1202,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDLINELOOP32:
+		case DRAW_INDEXEDLINELOOP32:
 			{
 				const unsigned int *index = (const unsigned int*)indices;
 
@@ -1214,7 +1214,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLELIST8:
+		case DRAW_INDEXEDTRIANGLELIST8:
 			{
 				const unsigned char *index = (const unsigned char*)indices + 3 * start;
 
@@ -1228,7 +1228,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLELIST16:
+		case DRAW_INDEXEDTRIANGLELIST16:
 			{
 				const unsigned short *index = (const unsigned short*)indices + 3 * start;
 
@@ -1242,7 +1242,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLELIST32:
+		case DRAW_INDEXEDTRIANGLELIST32:
 			{
 				const unsigned int *index = (const unsigned int*)indices + 3 * start;
 
@@ -1256,7 +1256,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLESTRIP8:
+		case DRAW_INDEXEDTRIANGLESTRIP8:
 			{
 				const unsigned char *index = (const unsigned char*)indices + start;
 
@@ -1270,7 +1270,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLESTRIP16:
+		case DRAW_INDEXEDTRIANGLESTRIP16:
 			{
 				const unsigned short *index = (const unsigned short*)indices + start;
 
@@ -1284,7 +1284,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLESTRIP32:
+		case DRAW_INDEXEDTRIANGLESTRIP32:
 			{
 				const unsigned int *index = (const unsigned int*)indices + start;
 
@@ -1298,7 +1298,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLEFAN8:
+		case DRAW_INDEXEDTRIANGLEFAN8:
 			{
 				const unsigned char *index = (const unsigned char*)indices;
 
@@ -1310,7 +1310,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLEFAN16:
+		case DRAW_INDEXEDTRIANGLEFAN16:
 			{
 				const unsigned short *index = (const unsigned short*)indices;
 
@@ -1322,7 +1322,7 @@
 				}
 			}
 			break;
-		case Context::DRAW_INDEXEDTRIANGLEFAN32:
+		case DRAW_INDEXEDTRIANGLEFAN32:
 			{
 				const unsigned int *index = (const unsigned int*)indices;
 
@@ -1403,11 +1403,11 @@
 
 		float d = (v0.y * v1.x - v0.x * v1.y) * v2.w + (v0.x * v2.y - v0.y * v2.x) * v1.w + (v2.x * v1.y - v1.x * v2.y) * v0.w;
 
-		if(state.cullMode == Context::CULL_CLOCKWISE)
+		if(state.cullMode == CULL_CLOCKWISE)
 		{
 			if(d >= 0) return 0;
 		}
-		else if(state.cullMode == Context::CULL_COUNTERCLOCKWISE)
+		else if(state.cullMode == CULL_COUNTERCLOCKWISE)
 		{
 			if(d <= 0) return 0;
 		}
@@ -1460,11 +1460,11 @@
 
 		float d = (v0.y * v1.x - v0.x * v1.y) * v2.w + (v0.x * v2.y - v0.y * v2.x) * v1.w + (v2.x * v1.y - v1.x * v2.y) * v0.w;
 
-		if(state.cullMode == Context::CULL_CLOCKWISE)
+		if(state.cullMode == CULL_CLOCKWISE)
 		{
 			if(d >= 0) return 0;
 		}
-		else if(state.cullMode == Context::CULL_COUNTERCLOCKWISE)
+		else if(state.cullMode == CULL_COUNTERCLOCKWISE)
 		{
 			if(d <= 0) return 0;
 		}
@@ -1997,7 +1997,7 @@
 		context->sampleMask = mask;
 	}
 
-	void Renderer::setTransparencyAntialiasing(Context::TransparencyAntialiasing transparencyAntialiasing)
+	void Renderer::setTransparencyAntialiasing(TransparencyAntialiasing transparencyAntialiasing)
 	{
 		sw::transparencyAntialiasing = transparencyAntialiasing;
 	}
@@ -2488,9 +2488,9 @@
 
 			switch(configuration.transparencyAntialiasing)
 			{
-			case 0:  transparencyAntialiasing = Context::TRANSPARENCY_NONE;              break;
-			case 1:  transparencyAntialiasing = Context::TRANSPARENCY_ALPHA_TO_COVERAGE; break;
-			default: transparencyAntialiasing = Context::TRANSPARENCY_NONE;              break;
+			case 0:  transparencyAntialiasing = TRANSPARENCY_NONE;              break;
+			case 1:  transparencyAntialiasing = TRANSPARENCY_ALPHA_TO_COVERAGE; break;
+			default: transparencyAntialiasing = TRANSPARENCY_NONE;              break;
 			}
 
 			switch(configuration.threadCount)
diff --git a/src/Renderer/Renderer.hpp b/src/Renderer/Renderer.hpp
index 3756a47..3a867a4 100644
--- a/src/Renderer/Renderer.hpp
+++ b/src/Renderer/Renderer.hpp
@@ -165,7 +165,7 @@
 
 		~DrawCall();
 
-		Context::DrawType drawType;
+		DrawType drawType;
 		int batchSize;
 
 		Routine *vertexRoutine;
@@ -270,12 +270,12 @@
 		virtual ~Renderer();
 
 		virtual void blit(Surface *source, const Rect &sRect, Surface *dest, const Rect &dRect, bool filter);
-		virtual void draw(Context::DrawType drawType, unsigned int indexOffset, unsigned int count, bool update = true);
+		virtual void draw(DrawType drawType, unsigned int indexOffset, unsigned int count, bool update = true);
 
 		virtual void setIndexBuffer(Resource *indexBuffer);
 
 		virtual void setMultiSampleMask(unsigned int mask);
-		virtual void setTransparencyAntialiasing(Context::TransparencyAntialiasing transparencyAntialiasing);
+		virtual void setTransparencyAntialiasing(TransparencyAntialiasing transparencyAntialiasing);
 
 		virtual void setTextureResource(unsigned int sampler, Resource *resource);
 		virtual void setTextureLevel(unsigned int sampler, unsigned int face, unsigned int level, Surface *surface, TextureType type);
diff --git a/src/Renderer/Sampler.hpp b/src/Renderer/Sampler.hpp
index 2132a06..180a4b8 100644
--- a/src/Renderer/Sampler.hpp
+++ b/src/Renderer/Sampler.hpp
@@ -72,7 +72,7 @@
 		SAMPLER_VERTEX
 	};
 
-	enum TextureType
+	enum TextureType : unsigned int
 	{
 		TEXTURE_NULL,
 		TEXTURE_2D,
@@ -82,7 +82,7 @@
 		TEXTURE_LAST = TEXTURE_3D
 	};
 
-	enum FilterType
+	enum FilterType : unsigned int
 	{
 		FILTER_POINT,
 		FILTER_GATHER,
@@ -92,7 +92,7 @@
 		FILTER_LAST = FILTER_ANISOTROPIC
 	};
 
-	enum MipmapType
+	enum MipmapType : unsigned int
 	{
 		MIPMAP_NONE,
 		MIPMAP_POINT,
@@ -101,7 +101,7 @@
 		MIPMAP_LAST = MIPMAP_LINEAR
 	};
 
-	enum AddressingMode
+	enum AddressingMode : unsigned int
 	{
 		ADDRESSING_WRAP,
 		ADDRESSING_CLAMP,
@@ -119,18 +119,18 @@
 		{
 			State();
 
-			unsigned int textureType     : BITS(TEXTURE_LAST);
-			unsigned int textureFormat   : BITS(FORMAT_LAST);
-			unsigned int textureFilter   : BITS(FILTER_LAST);
-			unsigned int addressingModeU : BITS(ADDRESSING_LAST);
-			unsigned int addressingModeV : BITS(ADDRESSING_LAST);
-			unsigned int addressingModeW : BITS(ADDRESSING_LAST);
-			unsigned int mipmapFilter    : BITS(FILTER_LAST);
-			unsigned int hasNPOTTexture	 : 1;
-			unsigned int sRGB            : 1;
+			TextureType textureType        : BITS(TEXTURE_LAST);
+			Format textureFormat           : BITS(FORMAT_LAST);
+			FilterType textureFilter       : BITS(FILTER_LAST);
+			AddressingMode addressingModeU : BITS(ADDRESSING_LAST);
+			AddressingMode addressingModeV : BITS(ADDRESSING_LAST);
+			AddressingMode addressingModeW : BITS(ADDRESSING_LAST);
+			MipmapType mipmapFilter        : BITS(FILTER_LAST);
+			bool hasNPOTTexture	           : 1;
+			bool sRGB                      : 1;
 
 			#if PERF_PROFILE
-			bool compressedFormat        : 1;
+			bool compressedFormat          : 1;
 			#endif
 		};
 
diff --git a/src/Renderer/SetupProcessor.cpp b/src/Renderer/SetupProcessor.cpp
index 65bc334..b673dd7 100644
--- a/src/Renderer/SetupProcessor.cpp
+++ b/src/Renderer/SetupProcessor.cpp
@@ -76,7 +76,7 @@
 		state.isDrawLine = context->isDrawLine(true);
 		state.isDrawTriangle = context->isDrawTriangle(false);
 		state.isDrawSolidTriangle = context->isDrawTriangle(true);
-		state.interpolateZ = context->depthBufferActive() || context->pixelFogActive() != Context::FOG_NONE || vPosZW;
+		state.interpolateZ = context->depthBufferActive() || context->pixelFogActive() != FOG_NONE || vPosZW;
 		state.interpolateW = context->perspectiveActive() || vPosZW;
 		state.perspective = context->perspectiveActive();
 		state.pointSprite = context->pointSpriteActive();
@@ -114,7 +114,7 @@
 
 		const bool point = context->isDrawPoint(true);
 		const bool sprite = context->pointSpriteActive();
-		const bool flatShading = (context->shadingMode == Context::SHADING_FLAT) || point;
+		const bool flatShading = (context->shadingMode == SHADING_FLAT) || point;
 
 		if(context->vertexShader && context->pixelShader)
 		{
diff --git a/src/Renderer/SetupProcessor.hpp b/src/Renderer/SetupProcessor.hpp
index 1e57940..8220686 100644
--- a/src/Renderer/SetupProcessor.hpp
+++ b/src/Renderer/SetupProcessor.hpp
@@ -34,27 +34,27 @@
 		{

 			unsigned int computeHash();

 

-			unsigned int isDrawPoint         : 1;

-			unsigned int isDrawLine          : 1;

-			unsigned int isDrawTriangle      : 1;

-			unsigned int isDrawSolidTriangle : 1;

-			unsigned int interpolateZ        : 1;

-			unsigned int interpolateW        : 1;

-			unsigned int perspective         : 1;

-			unsigned int pointSprite         : 1;

-			unsigned int positionRegister    : 4;

-			unsigned int pointSizeRegister   : 4;

-			unsigned int cullMode            : BITS(Context::CULL_LAST);

-			unsigned int twoSidedStencil     : 1;

-			unsigned int slopeDepthBias      : 1;

-			unsigned int vFace               : 1;

-			unsigned int multiSample         : 3;   // 1, 2 or 4

+			bool isDrawPoint               : 1;

+			bool isDrawLine                : 1;

+			bool isDrawTriangle            : 1;

+			bool isDrawSolidTriangle       : 1;

+			bool interpolateZ              : 1;

+			bool interpolateW              : 1;

+			bool perspective               : 1;

+			bool pointSprite               : 1;

+			unsigned int positionRegister  : 4;

+			unsigned int pointSizeRegister : 4;

+			CullMode cullMode              : BITS(CULL_LAST);

+			bool twoSidedStencil           : 1;

+			bool slopeDepthBias            : 1;

+			bool vFace                     : 1;

+			unsigned int multiSample       : 3;   // 1, 2 or 4

 

 			struct Gradient

 			{

 				unsigned char attribute : 6;

-				unsigned char flat : 1;

-				unsigned char wrap : 1;

+				bool flat               : 1;

+				bool wrap               : 1;

 			};

 

 			union

diff --git a/src/Renderer/Stream.hpp b/src/Renderer/Stream.hpp
index 66ba633..5bf9862 100644
--- a/src/Renderer/Stream.hpp
+++ b/src/Renderer/Stream.hpp
@@ -18,7 +18,7 @@
 {
 	class Resource;
 
-	enum StreamType
+	enum StreamType : unsigned int
 	{
 		STREAMTYPE_COLOR,     // 4 normalized unsigned bytes, ZYXW order
 		STREAMTYPE_UDEC3,     // 3 unsigned 10-bit fields
diff --git a/src/Renderer/Surface.hpp b/src/Renderer/Surface.hpp
index 130bd0b..8ed6351 100644
--- a/src/Renderer/Surface.hpp
+++ b/src/Renderer/Surface.hpp
@@ -30,7 +30,7 @@
 		int y1;   // Exclusive

 	};

 

-	enum Format

+	enum Format : unsigned char

 	{

 		FORMAT_NULL,

 

diff --git a/src/Renderer/VertexProcessor.cpp b/src/Renderer/VertexProcessor.cpp
index ce8feda..dec0e9c 100644
--- a/src/Renderer/VertexProcessor.cpp
+++ b/src/Renderer/VertexProcessor.cpp
@@ -292,7 +292,7 @@
 		context->fogEnable = fogEnable;
 	}
 
-	void VertexProcessor::setVertexFogMode(Context::FogMode fogMode)
+	void VertexProcessor::setVertexFogMode(FogMode fogMode)
 	{
 		context->vertexFogMode = fogMode;
 	}
@@ -302,22 +302,22 @@
 		context->setColorVertexEnable(colorVertexEnable);
 	}
 
-	void VertexProcessor::setDiffuseMaterialSource(Context::MaterialSource diffuseMaterialSource)
+	void VertexProcessor::setDiffuseMaterialSource(MaterialSource diffuseMaterialSource)
 	{
 		context->setDiffuseMaterialSource(diffuseMaterialSource);
 	}
 
-	void VertexProcessor::setSpecularMaterialSource(Context::MaterialSource specularMaterialSource)
+	void VertexProcessor::setSpecularMaterialSource(MaterialSource specularMaterialSource)
 	{
 		context->setSpecularMaterialSource(specularMaterialSource);
 	}
 
-	void VertexProcessor::setAmbientMaterialSource(Context::MaterialSource ambientMaterialSource)
+	void VertexProcessor::setAmbientMaterialSource(MaterialSource ambientMaterialSource)
 	{
 		context->setAmbientMaterialSource(ambientMaterialSource);
 	}
 
-	void VertexProcessor::setEmissiveMaterialSource(Context::MaterialSource emissiveMaterialSource)
+	void VertexProcessor::setEmissiveMaterialSource(MaterialSource emissiveMaterialSource)
 	{
 		context->setEmissiveMaterialSource(emissiveMaterialSource);
 	}
@@ -414,7 +414,7 @@
 		}
 	}
 
-	void VertexProcessor::setTexGen(unsigned int stage, Context::TexGen texGen)
+	void VertexProcessor::setTexGen(unsigned int stage, TexGen texGen)
 	{
 		if(stage < 8)
 		{
diff --git a/src/Renderer/VertexProcessor.hpp b/src/Renderer/VertexProcessor.hpp
index 3def5ba..5f30f1a 100644
--- a/src/Renderer/VertexProcessor.hpp
+++ b/src/Renderer/VertexProcessor.hpp
@@ -45,40 +45,40 @@
 

 			uint64_t shaderID;

 

-			unsigned int fixedFunction						: 1;

-			unsigned int shaderContainsTexldl				: 1;

-			unsigned int positionRegister					: 4;

-			unsigned int pointSizeRegister					: 4;   // 0xF signifies no vertex point size

+			bool fixedFunction             : 1;

+			bool shaderContainsTexldl      : 1;

+			unsigned int positionRegister  : 4;

+			unsigned int pointSizeRegister : 4;   // 0xF signifies no vertex point size

 				

-			unsigned int vertexBlendMatrixCount				: 3;

-			unsigned int indexedVertexBlendEnable			: 1;

-			unsigned int vertexNormalActive					: 1;

-			unsigned int normalizeNormals					: 1;

-			unsigned int vertexLightingActive				: 1;

-			unsigned int diffuseActive						: 1;

-			unsigned int specularActive						: 1;

-			unsigned int vertexSpecularActive				: 1;

-			unsigned int vertexLightActive					: 8;

-			unsigned int vertexDiffuseMaterialSourceActive	: BITS(Context::MATERIAL_LAST);

-			unsigned int vertexSpecularMaterialSourceActive	: BITS(Context::MATERIAL_LAST);

-			unsigned int vertexAmbientMaterialSourceActive	: BITS(Context::MATERIAL_LAST);

-			unsigned int vertexEmissiveMaterialSourceActive	: BITS(Context::MATERIAL_LAST);

-			unsigned int fogActive							: 1;

-			unsigned int vertexFogMode						: BITS(Context::FOG_LAST);

-			unsigned int rangeFogActive						: 1;

-			unsigned int localViewerActive					: 1;

-			unsigned int pointSizeActive					: 1;

-			unsigned int pointScaleActive					: 1;

+			unsigned int vertexBlendMatrixCount               : 3;

+			bool indexedVertexBlendEnable                     : 1;

+			bool vertexNormalActive                           : 1;

+			bool normalizeNormals                             : 1;

+			bool vertexLightingActive                         : 1;

+			bool diffuseActive                                : 1;

+			bool specularActive                               : 1;

+			bool vertexSpecularActive                         : 1;

+			unsigned int vertexLightActive                    : 8;

+			MaterialSource vertexDiffuseMaterialSourceActive  : BITS(MATERIAL_LAST);

+			MaterialSource vertexSpecularMaterialSourceActive : BITS(MATERIAL_LAST);

+			MaterialSource vertexAmbientMaterialSourceActive  : BITS(MATERIAL_LAST);

+			MaterialSource vertexEmissiveMaterialSourceActive : BITS(MATERIAL_LAST);

+			bool fogActive                                    : 1;

+			FogMode vertexFogMode                             : BITS(FOG_LAST);

+			bool rangeFogActive                               : 1;

+			bool localViewerActive                            : 1;

+			bool pointSizeActive                              : 1;

+			bool pointScaleActive                             : 1;

 

-			unsigned int preTransformed						: 1;

-			unsigned int superSampling						: 1;

-			unsigned int multiSampling						: 1;

+			bool preTransformed : 1;

+			bool superSampling  : 1;

+			bool multiSampling  : 1;

 

 			struct TextureState

 			{

-				unsigned char texGenActive : BITS(Context::TEXGEN_LAST);

+				TexGen texGenActive                       : BITS(TEXGEN_LAST);

 				unsigned char textureTransformCountActive : 3;

-				unsigned char texCoordIndexActive : 3;

+				unsigned char texCoordIndexActive         : 3;

 			};

 

 			TextureState textureState[8];

@@ -92,9 +92,9 @@
 					return count != 0;

 				}

 

-				unsigned int type       : BITS(STREAMTYPE_LAST);

-				unsigned int count      : 3;

-				unsigned int normalized : 1;

+				StreamType type    : BITS(STREAMTYPE_LAST);

+				unsigned int count : 3;

+				bool normalized    : 1;

 			};

 

 			struct Output

@@ -206,14 +206,14 @@
 		virtual void setLightRange(unsigned int light, float lightRange);

 

 		virtual void setFogEnable(bool fogEnable);

-		virtual void setVertexFogMode(Context::FogMode fogMode);

+		virtual void setVertexFogMode(FogMode fogMode);

 		virtual void setRangeFogEnable(bool enable);

 

 		virtual void setColorVertexEnable(bool colorVertexEnable);

-		virtual void setDiffuseMaterialSource(Context::MaterialSource diffuseMaterialSource);

-		virtual void setSpecularMaterialSource(Context::MaterialSource specularMaterialSource);

-		virtual void setAmbientMaterialSource(Context::MaterialSource ambientMaterialSource);

-		virtual void setEmissiveMaterialSource(Context::MaterialSource emissiveMaterialSource);

+		virtual void setDiffuseMaterialSource(MaterialSource diffuseMaterialSource);

+		virtual void setSpecularMaterialSource(MaterialSource specularMaterialSource);

+		virtual void setAmbientMaterialSource(MaterialSource ambientMaterialSource);

+		virtual void setEmissiveMaterialSource(MaterialSource emissiveMaterialSource);

 

 		virtual void setMaterialEmission(const Color<float> &emission);

 		virtual void setMaterialAmbient(const Color<float> &materialAmbient);

@@ -225,7 +225,7 @@
 		virtual void setVertexBlendMatrixCount(unsigned int vertexBlendMatrixCount);

 

 		virtual void setTextureWrap(unsigned int stage, int mask);

-		virtual void setTexGen(unsigned int stage, Context::TexGen texGen);

+		virtual void setTexGen(unsigned int stage, TexGen texGen);

 		virtual void setLocalViewer(bool localViewer);

 		virtual void setNormalizeNormals(bool normalizeNormals);

 		virtual void setTextureMatrix(int stage, const Matrix &T);

diff --git a/src/Shader/PixelRoutine.cpp b/src/Shader/PixelRoutine.cpp
index 1951b14..20ddc8f 100644
--- a/src/Shader/PixelRoutine.cpp
+++ b/src/Shader/PixelRoutine.cpp
@@ -459,7 +459,7 @@
 			value &= *Pointer<Byte8>(r.data + OFFSET(DrawData,stencil[0].testMaskQ));
 		}
 
-		stencilTest(r, value, (Context::StencilCompareMode)state.stencilCompareMode, false);
+		stencilTest(r, value, state.stencilCompareMode, false);
 
 		if(state.twoSidedStencil)
 		{
@@ -468,7 +468,7 @@
 				valueCCW &= *Pointer<Byte8>(r.data + OFFSET(DrawData,stencil[1].testMaskQ));
 			}
 
-			stencilTest(r, valueCCW, (Context::StencilCompareMode)state.stencilCompareModeCCW, true);
+			stencilTest(r, valueCCW, state.stencilCompareModeCCW, true);
 
 			value &= *Pointer<Byte8>(r.primitive + OFFSET(Primitive,clockwiseMask));
 			valueCCW &= *Pointer<Byte8>(r.primitive + OFFSET(Primitive,invClockwiseMask));
@@ -478,43 +478,43 @@
 		sMask = SignMask(value) & cMask;
 	}
 
-	void PixelRoutine::stencilTest(Registers &r, Byte8 &value, Context::StencilCompareMode stencilCompareMode, bool CCW)
+	void PixelRoutine::stencilTest(Registers &r, Byte8 &value, StencilCompareMode stencilCompareMode, bool CCW)
 	{
 		Byte8 equal;
 
 		switch(stencilCompareMode)
 		{
-		case Context::STENCIL_ALWAYS:
+		case STENCIL_ALWAYS:
 			value = Byte8(0xFFFFFFFFFFFFFFFF);
 			break;
-		case Context::STENCIL_NEVER:
+		case STENCIL_NEVER:
 			value = Byte8(0x0000000000000000);
 			break;
-		case Context::STENCIL_LESS:			// a < b ~ b > a
+		case STENCIL_LESS:			// a < b ~ b > a
 			value += Byte8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
 			value = CmpGT(As<SByte8>(value), *Pointer<SByte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceMaskedSignedQ)));
 			break;
-		case Context::STENCIL_EQUAL:
+		case STENCIL_EQUAL:
 			value = CmpEQ(value, *Pointer<Byte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceMaskedQ)));
 			break;
-		case Context::STENCIL_NOTEQUAL:		// a != b ~ !(a == b)
+		case STENCIL_NOTEQUAL:		// a != b ~ !(a == b)
 			value = CmpEQ(value, *Pointer<Byte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceMaskedQ)));
 			value ^= Byte8(0xFFFFFFFFFFFFFFFF);
 			break;
-		case Context::STENCIL_LESSEQUAL:	// a <= b ~ (b > a) || (a == b)
+		case STENCIL_LESSEQUAL:	// a <= b ~ (b > a) || (a == b)
 			equal = value;
 			equal = CmpEQ(equal, *Pointer<Byte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceMaskedQ)));
 			value += Byte8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
 			value = CmpGT(As<SByte8>(value), *Pointer<SByte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceMaskedSignedQ)));
 			value |= equal;
 			break;
-		case Context::STENCIL_GREATER:		// a > b
+		case STENCIL_GREATER:		// a > b
 			equal = *Pointer<Byte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceMaskedSignedQ));
 			value += Byte8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
 			equal = CmpGT(As<SByte8>(equal), As<SByte8>(value));
 			value = equal;
 			break;
-		case Context::STENCIL_GREATEREQUAL:	// a >= b ~ !(a < b) ~ !(b > a)
+		case STENCIL_GREATEREQUAL:	// a >= b ~ !(a < b) ~ !(b > a)
 			value += Byte8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
 			value = CmpGT(As<SByte8>(value), *Pointer<SByte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceMaskedSignedQ)));
 			value ^= Byte8(0xFFFFFFFFFFFFFFFF);
@@ -565,7 +565,7 @@
 
 		Float4 zValue;
 
-		if(state.depthCompareMode != Context::DEPTH_NEVER || (state.depthCompareMode != Context::DEPTH_ALWAYS && !state.depthWriteEnable))
+		if(state.depthCompareMode != DEPTH_NEVER || (state.depthCompareMode != DEPTH_ALWAYS && !state.depthWriteEnable))
 		{
 			if(!state.quadLayoutDepthBuffer)
 			{
@@ -583,19 +583,19 @@
 
 		switch(state.depthCompareMode)
 		{
-		case Context::DEPTH_ALWAYS:
+		case DEPTH_ALWAYS:
 			// Optimized
 			break;
-		case Context::DEPTH_NEVER:
+		case DEPTH_NEVER:
 			// Optimized
 			break;
-		case Context::DEPTH_EQUAL:
+		case DEPTH_EQUAL:
 			zTest = CmpEQ(zValue, Z);
 			break;
-		case Context::DEPTH_NOTEQUAL:
+		case DEPTH_NOTEQUAL:
 			zTest = CmpNEQ(zValue, Z);
 			break;
-		case Context::DEPTH_LESS:
+		case DEPTH_LESS:
 			if(complementaryDepthBuffer)
 			{
 				zTest = CmpLT(zValue, Z);
@@ -605,7 +605,7 @@
 				zTest = CmpNLE(zValue, Z);
 			}
 			break;
-		case Context::DEPTH_GREATEREQUAL:
+		case DEPTH_GREATEREQUAL:
 			if(complementaryDepthBuffer)
 			{
 				zTest = CmpNLT(zValue, Z);
@@ -615,7 +615,7 @@
 				zTest = CmpLE(zValue, Z);
 			}
 			break;
-		case Context::DEPTH_LESSEQUAL:
+		case DEPTH_LESSEQUAL:
 			if(complementaryDepthBuffer)
 			{
 				zTest = CmpLE(zValue, Z);
@@ -625,7 +625,7 @@
 				zTest = CmpNLT(zValue, Z);
 			}
 			break;
-		case Context::DEPTH_GREATER:
+		case DEPTH_GREATER:
 			if(complementaryDepthBuffer)
 			{
 				zTest = CmpNLE(zValue, Z);
@@ -641,10 +641,10 @@
 
 		switch(state.depthCompareMode)
 		{
-		case Context::DEPTH_ALWAYS:
+		case DEPTH_ALWAYS:
 			zMask = cMask;
 			break;
-		case Context::DEPTH_NEVER:
+		case DEPTH_NEVER:
 			zMask = 0x0;
 			break;
 		default:
@@ -1573,35 +1573,35 @@
 
 		switch(state.alphaCompareMode)
 		{
-		case Context::ALPHA_ALWAYS:
+		case ALPHA_ALWAYS:
 			aMask = 0xF;
 			break;
-		case Context::ALPHA_NEVER:
+		case ALPHA_NEVER:
 			aMask = 0x0;
 			break;
-		case Context::ALPHA_EQUAL:
+		case ALPHA_EQUAL:
 			cmp = CmpEQ(alpha, *Pointer<Short4>(r.data + OFFSET(DrawData,factor.alphaReference4)));
 			aMask = SignMask(Pack(cmp, Short4(0x0000, 0x0000, 0x0000, 0x0000)));
 			break;
-		case Context::ALPHA_NOTEQUAL:		// a != b ~ !(a == b)
+		case ALPHA_NOTEQUAL:		// a != b ~ !(a == b)
 			cmp = CmpEQ(alpha, *Pointer<Short4>(r.data + OFFSET(DrawData,factor.alphaReference4))) ^ Short4((short)0xFFFF, (short)0xFFFF, (short)0xFFFF, (short)0xFFFF);   // FIXME
 			aMask = SignMask(Pack(cmp, Short4(0x0000, 0x0000, 0x0000, 0x0000)));
 			break;
-		case Context::ALPHA_LESS:			// a < b ~ b > a
+		case ALPHA_LESS:			// a < b ~ b > a
 			cmp = CmpGT(*Pointer<Short4>(r.data + OFFSET(DrawData,factor.alphaReference4)), alpha);
 			aMask = SignMask(Pack(cmp, Short4(0x0000, 0x0000, 0x0000, 0x0000)));
 			break;
-		case Context::ALPHA_GREATEREQUAL:	// a >= b ~ (a > b) || (a == b) ~ !(b > a)   // TODO: Approximate
+		case ALPHA_GREATEREQUAL:	// a >= b ~ (a > b) || (a == b) ~ !(b > a)   // TODO: Approximate
 			equal = CmpEQ(alpha, *Pointer<Short4>(r.data + OFFSET(DrawData,factor.alphaReference4)));
 			cmp = CmpGT(alpha, *Pointer<Short4>(r.data + OFFSET(DrawData,factor.alphaReference4)));
 			cmp |= equal;
 			aMask = SignMask(Pack(cmp, Short4(0x0000, 0x0000, 0x0000, 0x0000)));
 			break;
-		case Context::ALPHA_LESSEQUAL:		// a <= b ~ !(a > b)
+		case ALPHA_LESSEQUAL:		// a <= b ~ !(a > b)
 			cmp = CmpGT(alpha, *Pointer<Short4>(r.data + OFFSET(DrawData,factor.alphaReference4))) ^ Short4((short)0xFFFF, (short)0xFFFF, (short)0xFFFF, (short)0xFFFF);   // FIXME
 			aMask = SignMask(Pack(cmp, Short4(0x0000, 0x0000, 0x0000, 0x0000)));
 			break;
-		case Context::ALPHA_GREATER:			// a > b
+		case ALPHA_GREATER:			// a > b
 			cmp = CmpGT(alpha, *Pointer<Short4>(r.data + OFFSET(DrawData,factor.alphaReference4)));
 			aMask = SignMask(Pack(cmp, Short4(0x0000, 0x0000, 0x0000, 0x0000)));
 			break;
@@ -1637,7 +1637,7 @@
 
 		Int aMask;
 
-		if(state.transparencyAntialiasing == Context::TRANSPARENCY_NONE)
+		if(state.transparencyAntialiasing == TRANSPARENCY_NONE)
 		{
 			alphaTest(r, aMask, current.w);
 
@@ -1646,7 +1646,7 @@
 				cMask[q] &= aMask;
 			}
 		}
-		else if(state.transparencyAntialiasing == Context::TRANSPARENCY_ALPHA_TO_COVERAGE)
+		else if(state.transparencyAntialiasing == TRANSPARENCY_ALPHA_TO_COVERAGE)
 		{
 			Float4 alpha = Float4(current.w) * Float4(1.0f / 0x1000);
 
@@ -1673,7 +1673,7 @@
 
 		Int aMask;
 
-		if(state.transparencyAntialiasing == Context::TRANSPARENCY_NONE)
+		if(state.transparencyAntialiasing == TRANSPARENCY_NONE)
 		{
 			Short4 alpha = RoundShort4(c0.w * Float4(0x1000));
 
@@ -1684,7 +1684,7 @@
 				cMask[q] &= aMask;
 			}
 		}
-		else if(state.transparencyAntialiasing == Context::TRANSPARENCY_ALPHA_TO_COVERAGE)
+		else if(state.transparencyAntialiasing == TRANSPARENCY_ALPHA_TO_COVERAGE)
 		{
 			alphaToCoverage(r, cMask, c0.w);
 		}
@@ -1707,7 +1707,7 @@
 			return;
 		}
 
-		if(state.pixelFogMode != Context::FOG_NONE)
+		if(state.pixelFogMode != FOG_NONE)
 		{
 			pixelFog(r, f, z, rhw);
 		}
@@ -1732,7 +1732,7 @@
 			return;
 		}
 
-		if(state.pixelFogMode != Context::FOG_NONE)
+		if(state.pixelFogMode != FOG_NONE)
 		{
 			pixelFog(r, fog, z, rhw);
 
@@ -1757,7 +1757,7 @@
 	{
 		Float4 &zw = visibility;
 
-		if(state.pixelFogMode != Context::FOG_NONE)
+		if(state.pixelFogMode != FOG_NONE)
 		{
 			if(state.wBasedFog)
 			{
@@ -1778,17 +1778,17 @@
 
 		switch(state.pixelFogMode)
 		{
-		case Context::FOG_NONE:
+		case FOG_NONE:
 			break;
-		case Context::FOG_LINEAR:
+		case FOG_LINEAR:
 			zw *= *Pointer<Float4>(r.data + OFFSET(DrawData,fog.scale));
 			zw += *Pointer<Float4>(r.data + OFFSET(DrawData,fog.offset));
 			break;
-		case Context::FOG_EXP:
+		case FOG_EXP:
 			zw *= *Pointer<Float4>(r.data + OFFSET(DrawData,fog.densityE));
 			zw = exponential2(zw, true);
 			break;
-		case Context::FOG_EXP2:
+		case FOG_EXP2:
 			zw *= *Pointer<Float4>(r.data + OFFSET(DrawData,fog.densityE2));
 			zw *= zw;
 			zw = exponential2(zw, true);
@@ -1852,7 +1852,7 @@
 
 		Float4 zValue;
 
-		if(state.depthCompareMode != Context::DEPTH_NEVER || (state.depthCompareMode != Context::DEPTH_ALWAYS && !state.depthWriteEnable))
+		if(state.depthCompareMode != DEPTH_NEVER || (state.depthCompareMode != DEPTH_ALWAYS && !state.depthWriteEnable))
 		{
 			if(!state.quadLayoutDepthBuffer)
 			{
@@ -1889,9 +1889,9 @@
 			return;
 		}
 
-		if(state.stencilPassOperation == Context::OPERATION_KEEP && state.stencilZFailOperation == Context::OPERATION_KEEP && state.stencilFailOperation == Context::OPERATION_KEEP)
+		if(state.stencilPassOperation == OPERATION_KEEP && state.stencilZFailOperation == OPERATION_KEEP && state.stencilFailOperation == OPERATION_KEEP)
 		{
-			if(!state.twoSidedStencil || (state.stencilPassOperationCCW == Context::OPERATION_KEEP && state.stencilZFailOperationCCW == Context::OPERATION_KEEP && state.stencilFailOperationCCW == Context::OPERATION_KEEP))
+			if(!state.twoSidedStencil || (state.stencilPassOperationCCW == OPERATION_KEEP && state.stencilZFailOperationCCW == OPERATION_KEEP && state.stencilFailOperationCCW == OPERATION_KEEP))
 			{
 				return;
 			}
@@ -1912,7 +1912,7 @@
 		Byte8 bufferValue = As<Byte8>(Long1(*Pointer<UInt>(buffer)));
 	
 		Byte8 newValue;
-		stencilOperation(r, newValue, bufferValue, (Context::StencilOperation)state.stencilPassOperation, (Context::StencilOperation)state.stencilZFailOperation, (Context::StencilOperation)state.stencilFailOperation, false, zMask, sMask);
+		stencilOperation(r, newValue, bufferValue, state.stencilPassOperation, state.stencilZFailOperation, state.stencilFailOperation, false, zMask, sMask);
 
 		if(!state.noStencilWriteMask)
 		{
@@ -1926,7 +1926,7 @@
 		{
 			Byte8 newValueCCW;
 
-			stencilOperation(r, newValueCCW, bufferValue, (Context::StencilOperation)state.stencilPassOperationCCW, (Context::StencilOperation)state.stencilZFailOperationCCW, (Context::StencilOperation)state.stencilFailOperationCCW, true, zMask, sMask);
+			stencilOperation(r, newValueCCW, bufferValue, state.stencilPassOperationCCW, state.stencilZFailOperationCCW, state.stencilFailOperationCCW, true, zMask, sMask);
 
 			if(!state.noStencilWriteMaskCCW)
 			{
@@ -1948,7 +1948,7 @@
 		*Pointer<UInt>(buffer) = UInt(As<Long>(newValue));
 	}
 
-	void PixelRoutine::stencilOperation(Registers &r, Byte8 &newValue, Byte8 &bufferValue, Context::StencilOperation stencilPassOperation, Context::StencilOperation stencilZFailOperation, Context::StencilOperation stencilFailOperation, bool CCW, Int &zMask, Int &sMask)
+	void PixelRoutine::stencilOperation(Registers &r, Byte8 &newValue, Byte8 &bufferValue, StencilOperation stencilPassOperation, StencilOperation stencilZFailOperation, StencilOperation stencilFailOperation, bool CCW, Int &zMask, Int &sMask)
 	{
 		Byte8 &pass = newValue;
 		Byte8 fail;
@@ -1981,32 +1981,32 @@
 		}
 	}
 
-	void PixelRoutine::stencilOperation(Registers &r, Byte8 &output, Byte8 &bufferValue, Context::StencilOperation operation, bool CCW)
+	void PixelRoutine::stencilOperation(Registers &r, Byte8 &output, Byte8 &bufferValue, StencilOperation operation, bool CCW)
 	{
 		switch(operation)
 		{
-		case Context::OPERATION_KEEP:
+		case OPERATION_KEEP:
 			output = bufferValue;
 			break;
-		case Context::OPERATION_ZERO:
+		case OPERATION_ZERO:
 			output = Byte8(0x0000000000000000);
 			break;
-		case Context::OPERATION_REPLACE:
+		case OPERATION_REPLACE:
 			output = *Pointer<Byte8>(r.data + OFFSET(DrawData,stencil[CCW].referenceQ));
 			break;
-		case Context::OPERATION_INCRSAT:
+		case OPERATION_INCRSAT:
 			output = AddSat(bufferValue, Byte8(1, 1, 1, 1, 1, 1, 1, 1));
 			break;
-		case Context::OPERATION_DECRSAT:
+		case OPERATION_DECRSAT:
 			output = SubSat(bufferValue, Byte8(1, 1, 1, 1, 1, 1, 1, 1));
 			break;
-		case Context::OPERATION_INVERT:
+		case OPERATION_INVERT:
 			output = bufferValue ^ Byte8(0xFFFFFFFFFFFFFFFF);
 			break;
-		case Context::OPERATION_INCR:
+		case OPERATION_INCR:
 			output = bufferValue + Byte8(1, 1, 1, 1, 1, 1, 1, 1);
 			break;
-		case Context::OPERATION_DECR:
+		case OPERATION_DECR:
 			output = bufferValue - Byte8(1, 1, 1, 1, 1, 1, 1, 1);
 			break;
 		default:
@@ -2284,78 +2284,78 @@
 		}
 	}
 
-	void PixelRoutine::blendFactor(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, Context::BlendFactor blendFactorActive)
+	void PixelRoutine::blendFactor(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorActive)
 	{
 		switch(blendFactorActive)
 		{
-		case Context::BLEND_ZERO:
+		case BLEND_ZERO:
 			// Optimized
 			break;
-		case Context::BLEND_ONE:
+		case BLEND_ONE:
 			// Optimized
 			break;
-		case Context::BLEND_SOURCE:
+		case BLEND_SOURCE:
 			blendFactor.x = current.x;
 			blendFactor.y = current.y;
 			blendFactor.z = current.z;
 			break;
-		case Context::BLEND_INVSOURCE:
+		case BLEND_INVSOURCE:
 			blendFactor.x = Short4(0xFFFFu) - current.x;
 			blendFactor.y = Short4(0xFFFFu) - current.y;
 			blendFactor.z = Short4(0xFFFFu) - current.z;
 			break;
-		case Context::BLEND_DEST:
+		case BLEND_DEST:
 			blendFactor.x = pixel.x;
 			blendFactor.y = pixel.y;
 			blendFactor.z = pixel.z;
 			break;
-		case Context::BLEND_INVDEST:
+		case BLEND_INVDEST:
 			blendFactor.x = Short4(0xFFFFu) - pixel.x;
 			blendFactor.y = Short4(0xFFFFu) - pixel.y;
 			blendFactor.z = Short4(0xFFFFu) - pixel.z;
 			break;
-		case Context::BLEND_SOURCEALPHA:
+		case BLEND_SOURCEALPHA:
 			blendFactor.x = current.w;
 			blendFactor.y = current.w;
 			blendFactor.z = current.w;
 			break;
-		case Context::BLEND_INVSOURCEALPHA:
+		case BLEND_INVSOURCEALPHA:
 			blendFactor.x = Short4(0xFFFFu) - current.w;
 			blendFactor.y = Short4(0xFFFFu) - current.w;
 			blendFactor.z = Short4(0xFFFFu) - current.w;
 			break;
-		case Context::BLEND_DESTALPHA:
+		case BLEND_DESTALPHA:
 			blendFactor.x = pixel.w;
 			blendFactor.y = pixel.w;
 			blendFactor.z = pixel.w;
 			break;
-		case Context::BLEND_INVDESTALPHA:
+		case BLEND_INVDESTALPHA:
 			blendFactor.x = Short4(0xFFFFu) - pixel.w;
 			blendFactor.y = Short4(0xFFFFu) - pixel.w;
 			blendFactor.z = Short4(0xFFFFu) - pixel.w;
 			break;
-		case Context::BLEND_SRCALPHASAT:
+		case BLEND_SRCALPHASAT:
 			blendFactor.x = Short4(0xFFFFu) - pixel.w;
 			blendFactor.x = Min(As<UShort4>(blendFactor.x), As<UShort4>(current.w));
 			blendFactor.y = blendFactor.x;
 			blendFactor.z = blendFactor.x;
 			break;
-		case Context::BLEND_CONSTANT:
+		case BLEND_CONSTANT:
 			blendFactor.x = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.blendConstant4W[0]));
 			blendFactor.y = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.blendConstant4W[1]));
 			blendFactor.z = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.blendConstant4W[2]));
 			break;
-		case Context::BLEND_INVCONSTANT:
+		case BLEND_INVCONSTANT:
 			blendFactor.x = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.invBlendConstant4W[0]));
 			blendFactor.y = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.invBlendConstant4W[1]));
 			blendFactor.z = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.invBlendConstant4W[2]));
 			break;
-		case Context::BLEND_CONSTANTALPHA:
+		case BLEND_CONSTANTALPHA:
 			blendFactor.x = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.blendConstant4W[3]));
 			blendFactor.y = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.blendConstant4W[3]));
 			blendFactor.z = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.blendConstant4W[3]));
 			break;
-		case Context::BLEND_INVCONSTANTALPHA:
+		case BLEND_INVCONSTANTALPHA:
 			blendFactor.x = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.invBlendConstant4W[3]));
 			blendFactor.y = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.invBlendConstant4W[3]));
 			blendFactor.z = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.invBlendConstant4W[3]));
@@ -2365,49 +2365,49 @@
 		}
 	}
 	
-	void PixelRoutine::blendFactorAlpha(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, Context::BlendFactor blendFactorAlphaActive)
+	void PixelRoutine::blendFactorAlpha(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorAlphaActive)
 	{
 		switch(blendFactorAlphaActive)
 		{
-		case Context::BLEND_ZERO:
+		case BLEND_ZERO:
 			// Optimized
 			break;
-		case Context::BLEND_ONE:
+		case BLEND_ONE:
 			// Optimized
 			break;
-		case Context::BLEND_SOURCE:
+		case BLEND_SOURCE:
 			blendFactor.w = current.w;
 			break;
-		case Context::BLEND_INVSOURCE:
+		case BLEND_INVSOURCE:
 			blendFactor.w = Short4(0xFFFFu) - current.w;
 			break;
-		case Context::BLEND_DEST:
+		case BLEND_DEST:
 			blendFactor.w = pixel.w;
 			break;
-		case Context::BLEND_INVDEST:
+		case BLEND_INVDEST:
 			blendFactor.w = Short4(0xFFFFu) - pixel.w;
 			break;
-		case Context::BLEND_SOURCEALPHA:
+		case BLEND_SOURCEALPHA:
 			blendFactor.w = current.w;
 			break;
-		case Context::BLEND_INVSOURCEALPHA:
+		case BLEND_INVSOURCEALPHA:
 			blendFactor.w = Short4(0xFFFFu) - current.w;
 			break;
-		case Context::BLEND_DESTALPHA:
+		case BLEND_DESTALPHA:
 			blendFactor.w = pixel.w;
 			break;
-		case Context::BLEND_INVDESTALPHA:
+		case BLEND_INVDESTALPHA:
 			blendFactor.w = Short4(0xFFFFu) - pixel.w;
 			break;
-		case Context::BLEND_SRCALPHASAT:
+		case BLEND_SRCALPHASAT:
 			blendFactor.w = Short4(0xFFFFu);
 			break;
-		case Context::BLEND_CONSTANT:
-		case Context::BLEND_CONSTANTALPHA:
+		case BLEND_CONSTANT:
+		case BLEND_CONSTANTALPHA:
 			blendFactor.w = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.blendConstant4W[3]));
 			break;
-		case Context::BLEND_INVCONSTANT:
-		case Context::BLEND_INVCONSTANTALPHA:
+		case BLEND_INVCONSTANT:
+		case BLEND_INVCONSTANTALPHA:
 			blendFactor.w = *Pointer<Short4>(r.data + OFFSET(DrawData,factor.invBlendConstant4W[3]));
 			break;
 		default:
@@ -2528,17 +2528,17 @@
 		Vector4i sourceFactor;
 		Vector4i destFactor;
 
-		blendFactor(r, sourceFactor, current, pixel, (Context::BlendFactor)state.sourceBlendFactor);
-		blendFactor(r, destFactor, current, pixel, (Context::BlendFactor)state.destBlendFactor);
+		blendFactor(r, sourceFactor, current, pixel, state.sourceBlendFactor);
+		blendFactor(r, destFactor, current, pixel, state.destBlendFactor);
 
-		if(state.sourceBlendFactor != Context::BLEND_ONE && state.sourceBlendFactor != Context::BLEND_ZERO)
+		if(state.sourceBlendFactor != BLEND_ONE && state.sourceBlendFactor != BLEND_ZERO)
 		{
 			current.x = MulHigh(As<UShort4>(current.x), As<UShort4>(sourceFactor.x));
 			current.y = MulHigh(As<UShort4>(current.y), As<UShort4>(sourceFactor.y));
 			current.z = MulHigh(As<UShort4>(current.z), As<UShort4>(sourceFactor.z));
 		}
 	
-		if(state.destBlendFactor != Context::BLEND_ONE && state.destBlendFactor != Context::BLEND_ZERO)
+		if(state.destBlendFactor != BLEND_ONE && state.destBlendFactor != BLEND_ZERO)
 		{
 			pixel.x = MulHigh(As<UShort4>(pixel.x), As<UShort4>(destFactor.x));
 			pixel.y = MulHigh(As<UShort4>(pixel.y), As<UShort4>(destFactor.y));
@@ -2547,40 +2547,40 @@
 
 		switch(state.blendOperation)
 		{
-		case Context::BLENDOP_ADD:
+		case BLENDOP_ADD:
 			current.x = AddSat(As<UShort4>(current.x), As<UShort4>(pixel.x));
 			current.y = AddSat(As<UShort4>(current.y), As<UShort4>(pixel.y));
 			current.z = AddSat(As<UShort4>(current.z), As<UShort4>(pixel.z));
 			break;
-		case Context::BLENDOP_SUB:
+		case BLENDOP_SUB:
 			current.x = SubSat(As<UShort4>(current.x), As<UShort4>(pixel.x));
 			current.y = SubSat(As<UShort4>(current.y), As<UShort4>(pixel.y));
 			current.z = SubSat(As<UShort4>(current.z), As<UShort4>(pixel.z));
 			break;
-		case Context::BLENDOP_INVSUB:
+		case BLENDOP_INVSUB:
 			current.x = SubSat(As<UShort4>(pixel.x), As<UShort4>(current.x));
 			current.y = SubSat(As<UShort4>(pixel.y), As<UShort4>(current.y));
 			current.z = SubSat(As<UShort4>(pixel.z), As<UShort4>(current.z));
 			break;
-		case Context::BLENDOP_MIN:
+		case BLENDOP_MIN:
 			current.x = Min(As<UShort4>(current.x), As<UShort4>(pixel.x));
 			current.y = Min(As<UShort4>(current.y), As<UShort4>(pixel.y));
 			current.z = Min(As<UShort4>(current.z), As<UShort4>(pixel.z));
 			break;
-		case Context::BLENDOP_MAX:
+		case BLENDOP_MAX:
 			current.x = Max(As<UShort4>(current.x), As<UShort4>(pixel.x));
 			current.y = Max(As<UShort4>(current.y), As<UShort4>(pixel.y));
 			current.z = Max(As<UShort4>(current.z), As<UShort4>(pixel.z));
 			break;
-		case Context::BLENDOP_SOURCE:
+		case BLENDOP_SOURCE:
 			// No operation
 			break;
-		case Context::BLENDOP_DEST:
+		case BLENDOP_DEST:
 			current.x = pixel.x;
 			current.y = pixel.y;
 			current.z = pixel.z;
 			break;
-		case Context::BLENDOP_NULL:
+		case BLENDOP_NULL:
 			current.x = Short4(0x0000, 0x0000, 0x0000, 0x0000);
 			current.y = Short4(0x0000, 0x0000, 0x0000, 0x0000);
 			current.z = Short4(0x0000, 0x0000, 0x0000, 0x0000);
@@ -2589,43 +2589,43 @@
 			ASSERT(false);
 		}
 
-		blendFactorAlpha(r, sourceFactor, current, pixel, (Context::BlendFactor)state.sourceBlendFactorAlpha);
-		blendFactorAlpha(r, destFactor, current, pixel, (Context::BlendFactor)state.destBlendFactorAlpha);
+		blendFactorAlpha(r, sourceFactor, current, pixel, state.sourceBlendFactorAlpha);
+		blendFactorAlpha(r, destFactor, current, pixel, state.destBlendFactorAlpha);
 
-		if(state.sourceBlendFactorAlpha != Context::BLEND_ONE && state.sourceBlendFactorAlpha != Context::BLEND_ZERO)
+		if(state.sourceBlendFactorAlpha != BLEND_ONE && state.sourceBlendFactorAlpha != BLEND_ZERO)
 		{
 			current.w = MulHigh(As<UShort4>(current.w), As<UShort4>(sourceFactor.w));
 		}
 	
-		if(state.destBlendFactorAlpha != Context::BLEND_ONE && state.destBlendFactorAlpha != Context::BLEND_ZERO)
+		if(state.destBlendFactorAlpha != BLEND_ONE && state.destBlendFactorAlpha != BLEND_ZERO)
 		{
 			pixel.w = MulHigh(As<UShort4>(pixel.w), As<UShort4>(destFactor.w));
 		}
 
 		switch(state.blendOperationAlpha)
 		{
-		case Context::BLENDOP_ADD:
+		case BLENDOP_ADD:
 			current.w = AddSat(As<UShort4>(current.w), As<UShort4>(pixel.w));
 			break;
-		case Context::BLENDOP_SUB:
+		case BLENDOP_SUB:
 			current.w = SubSat(As<UShort4>(current.w), As<UShort4>(pixel.w));
 			break;
-		case Context::BLENDOP_INVSUB:
+		case BLENDOP_INVSUB:
 			current.w = SubSat(As<UShort4>(pixel.w), As<UShort4>(current.w));
 			break;
-		case Context::BLENDOP_MIN:
+		case BLENDOP_MIN:
 			current.w = Min(As<UShort4>(current.w), As<UShort4>(pixel.w));
 			break;
-		case Context::BLENDOP_MAX:
+		case BLENDOP_MAX:
 			current.w = Max(As<UShort4>(current.w), As<UShort4>(pixel.w));
 			break;
-		case Context::BLENDOP_SOURCE:
+		case BLENDOP_SOURCE:
 			// No operation
 			break;
-		case Context::BLENDOP_DEST:
+		case BLENDOP_DEST:
 			current.w = pixel.w;
 			break;
-		case Context::BLENDOP_NULL:
+		case BLENDOP_NULL:
 			current.w = Short4(0x0000, 0x0000, 0x0000, 0x0000);
 			break;
 		default:
@@ -2984,68 +2984,68 @@
 		}
 	}
 
-	void PixelRoutine::blendFactor(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, Context::BlendFactor blendFactorActive) 
+	void PixelRoutine::blendFactor(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive) 
 	{
 		switch(blendFactorActive)
 		{
-		case Context::BLEND_ZERO:
+		case BLEND_ZERO:
 			// Optimized
 			break;
-		case Context::BLEND_ONE:
+		case BLEND_ONE:
 			// Optimized
 			break;
-		case Context::BLEND_SOURCE:
+		case BLEND_SOURCE:
 			blendFactor.x = oC.x;
 			blendFactor.y = oC.y;
 			blendFactor.z = oC.z;
 			break;
-		case Context::BLEND_INVSOURCE:
+		case BLEND_INVSOURCE:
 			blendFactor.x = Float4(1.0f) - oC.x;
 			blendFactor.y = Float4(1.0f) - oC.y;
 			blendFactor.z = Float4(1.0f) - oC.z;
 			break;
-		case Context::BLEND_DEST:
+		case BLEND_DEST:
 			blendFactor.x = pixel.x;
 			blendFactor.y = pixel.y;
 			blendFactor.z = pixel.z;
 			break;
-		case Context::BLEND_INVDEST:
+		case BLEND_INVDEST:
 			blendFactor.x = Float4(1.0f) - pixel.x;
 			blendFactor.y = Float4(1.0f) - pixel.y;
 			blendFactor.z = Float4(1.0f) - pixel.z;
 			break;
-		case Context::BLEND_SOURCEALPHA:
+		case BLEND_SOURCEALPHA:
 			blendFactor.x = oC.w;
 			blendFactor.y = oC.w;
 			blendFactor.z = oC.w;
 			break;
-		case Context::BLEND_INVSOURCEALPHA:
+		case BLEND_INVSOURCEALPHA:
 			blendFactor.x = Float4(1.0f) - oC.w;
 			blendFactor.y = Float4(1.0f) - oC.w;
 			blendFactor.z = Float4(1.0f) - oC.w;
 			break;
-		case Context::BLEND_DESTALPHA:
+		case BLEND_DESTALPHA:
 			blendFactor.x = pixel.w;
 			blendFactor.y = pixel.w;
 			blendFactor.z = pixel.w;
 			break;
-		case Context::BLEND_INVDESTALPHA:
+		case BLEND_INVDESTALPHA:
 			blendFactor.x = Float4(1.0f) - pixel.w;
 			blendFactor.y = Float4(1.0f) - pixel.w;
 			blendFactor.z = Float4(1.0f) - pixel.w;
 			break;
-		case Context::BLEND_SRCALPHASAT:
+		case BLEND_SRCALPHASAT:
 			blendFactor.x = Float4(1.0f) - pixel.w;
 			blendFactor.x = Min(blendFactor.x, oC.w);
 			blendFactor.y = blendFactor.x;
 			blendFactor.z = blendFactor.x;
 			break;
-		case Context::BLEND_CONSTANT:
+		case BLEND_CONSTANT:
 			blendFactor.x = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.blendConstant4F[0]));
 			blendFactor.y = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.blendConstant4F[1]));
 			blendFactor.z = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.blendConstant4F[2]));
 			break;
-		case Context::BLEND_INVCONSTANT:
+		case BLEND_INVCONSTANT:
 			blendFactor.x = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.invBlendConstant4F[0]));
 			blendFactor.y = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.invBlendConstant4F[1]));
 			blendFactor.z = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.invBlendConstant4F[2]));
@@ -3055,47 +3055,47 @@
 		}
 	}
 
-	void PixelRoutine::blendFactorAlpha(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, Context::BlendFactor blendFactorAlphaActive) 
+	void PixelRoutine::blendFactorAlpha(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive) 
 	{
 		switch(blendFactorAlphaActive)
 		{
-		case Context::BLEND_ZERO:
+		case BLEND_ZERO:
 			// Optimized
 			break;
-		case Context::BLEND_ONE:
+		case BLEND_ONE:
 			// Optimized
 			break;
-		case Context::BLEND_SOURCE:
+		case BLEND_SOURCE:
 			blendFactor.w = oC.w;
 			break;
-		case Context::BLEND_INVSOURCE:
+		case BLEND_INVSOURCE:
 			blendFactor.w = Float4(1.0f) - oC.w;
 			break;
-		case Context::BLEND_DEST:
+		case BLEND_DEST:
 			blendFactor.w = pixel.w;
 			break;
-		case Context::BLEND_INVDEST:
+		case BLEND_INVDEST:
 			blendFactor.w = Float4(1.0f) - pixel.w;
 			break;
-		case Context::BLEND_SOURCEALPHA:
+		case BLEND_SOURCEALPHA:
 			blendFactor.w = oC.w;
 			break;
-		case Context::BLEND_INVSOURCEALPHA:
+		case BLEND_INVSOURCEALPHA:
 			blendFactor.w = Float4(1.0f) - oC.w;
 			break;
-		case Context::BLEND_DESTALPHA:
+		case BLEND_DESTALPHA:
 			blendFactor.w = pixel.w;
 			break;
-		case Context::BLEND_INVDESTALPHA:
+		case BLEND_INVDESTALPHA:
 			blendFactor.w = Float4(1.0f) - pixel.w;
 			break;
-		case Context::BLEND_SRCALPHASAT:
+		case BLEND_SRCALPHASAT:
 			blendFactor.w = Float4(1.0f);
 			break;
-		case Context::BLEND_CONSTANT:
+		case BLEND_CONSTANT:
 			blendFactor.w = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.blendConstant4F[3]));
 			break;
-		case Context::BLEND_INVCONSTANT:
+		case BLEND_INVCONSTANT:
 			blendFactor.w = *Pointer<Float4>(r.data + OFFSET(DrawData,factor.invBlendConstant4F[3]));
 			break;
 		default:
@@ -3271,17 +3271,17 @@
 		Vector4f sourceFactor;
 		Vector4f destFactor;
 
-		blendFactor(r, sourceFactor, oC, pixel, (Context::BlendFactor)state.sourceBlendFactor);
-		blendFactor(r, destFactor, oC, pixel, (Context::BlendFactor)state.destBlendFactor);
+		blendFactor(r, sourceFactor, oC, pixel, state.sourceBlendFactor);
+		blendFactor(r, destFactor, oC, pixel, state.destBlendFactor);
 
-		if(state.sourceBlendFactor != Context::BLEND_ONE && state.sourceBlendFactor != Context::BLEND_ZERO)
+		if(state.sourceBlendFactor != BLEND_ONE && state.sourceBlendFactor != BLEND_ZERO)
 		{
 			oC.x *= sourceFactor.x;
 			oC.y *= sourceFactor.y;
 			oC.z *= sourceFactor.z;
 		}
 	
-		if(state.destBlendFactor != Context::BLEND_ONE && state.destBlendFactor != Context::BLEND_ZERO)
+		if(state.destBlendFactor != BLEND_ONE && state.destBlendFactor != BLEND_ZERO)
 		{
 			pixel.x *= destFactor.x;
 			pixel.y *= destFactor.y;
@@ -3290,40 +3290,40 @@
 
 		switch(state.blendOperation)
 		{
-		case Context::BLENDOP_ADD:
+		case BLENDOP_ADD:
 			oC.x += pixel.x;
 			oC.y += pixel.y;
 			oC.z += pixel.z;
 			break;
-		case Context::BLENDOP_SUB:
+		case BLENDOP_SUB:
 			oC.x -= pixel.x;
 			oC.y -= pixel.y;
 			oC.z -= pixel.z;
 			break;
-		case Context::BLENDOP_INVSUB:
+		case BLENDOP_INVSUB:
 			oC.x = pixel.x - oC.x;
 			oC.y = pixel.y - oC.y;
 			oC.z = pixel.z - oC.z;
 			break;
-		case Context::BLENDOP_MIN:
+		case BLENDOP_MIN:
 			oC.x = Min(oC.x, pixel.x);
 			oC.y = Min(oC.y, pixel.y);
 			oC.z = Min(oC.z, pixel.z);
 			break;
-		case Context::BLENDOP_MAX:
+		case BLENDOP_MAX:
 			oC.x = Max(oC.x, pixel.x);
 			oC.y = Max(oC.y, pixel.y);
 			oC.z = Max(oC.z, pixel.z);
 			break;
-		case Context::BLENDOP_SOURCE:
+		case BLENDOP_SOURCE:
 			// No operation
 			break;
-		case Context::BLENDOP_DEST:
+		case BLENDOP_DEST:
 			oC.x = pixel.x;
 			oC.y = pixel.y;
 			oC.z = pixel.z;
 			break;
-		case Context::BLENDOP_NULL:
+		case BLENDOP_NULL:
 			oC.x = Float4(0.0f);
 			oC.y = Float4(0.0f);
 			oC.z = Float4(0.0f);
@@ -3332,44 +3332,44 @@
 			ASSERT(false);
 		}
 
-		blendFactorAlpha(r, sourceFactor, oC, pixel, (Context::BlendFactor)state.sourceBlendFactorAlpha);
-		blendFactorAlpha(r, destFactor, oC, pixel, (Context::BlendFactor)state.destBlendFactorAlpha);
+		blendFactorAlpha(r, sourceFactor, oC, pixel, state.sourceBlendFactorAlpha);
+		blendFactorAlpha(r, destFactor, oC, pixel, state.destBlendFactorAlpha);
 
-		if(state.sourceBlendFactorAlpha != Context::BLEND_ONE && state.sourceBlendFactorAlpha != Context::BLEND_ZERO)
+		if(state.sourceBlendFactorAlpha != BLEND_ONE && state.sourceBlendFactorAlpha != BLEND_ZERO)
 		{
 			oC.w *= sourceFactor.w;
 		}
 	
-		if(state.destBlendFactorAlpha != Context::BLEND_ONE && state.destBlendFactorAlpha != Context::BLEND_ZERO)
+		if(state.destBlendFactorAlpha != BLEND_ONE && state.destBlendFactorAlpha != BLEND_ZERO)
 		{
 			pixel.w *= destFactor.w;
 		}
 
 		switch(state.blendOperationAlpha)
 		{
-		case Context::BLENDOP_ADD:
+		case BLENDOP_ADD:
 			oC.w += pixel.w;
 			break;
-		case Context::BLENDOP_SUB:
+		case BLENDOP_SUB:
 			oC.w -= pixel.w;
 			break;
-		case Context::BLENDOP_INVSUB:
+		case BLENDOP_INVSUB:
 			pixel.w -= oC.w;
 			oC.w = pixel.w;
 			break;
-		case Context::BLENDOP_MIN:	
+		case BLENDOP_MIN:	
 			oC.w = Min(oC.w, pixel.w);
 			break;
-		case Context::BLENDOP_MAX:	
+		case BLENDOP_MAX:	
 			oC.w = Max(oC.w, pixel.w);
 			break;
-		case Context::BLENDOP_SOURCE:
+		case BLENDOP_SOURCE:
 			// No operation
 			break;
-		case Context::BLENDOP_DEST:
+		case BLENDOP_DEST:
 			oC.w = pixel.w;
 			break;
-		case Context::BLENDOP_NULL:
+		case BLENDOP_NULL:
 			oC.w = Float4(0.0f);
 			break;
 		default:
@@ -4140,7 +4140,7 @@
 
 		for(int i = 0; i < 4; i++)
 		{
-			if((Format)state.targetFormat[i] != FORMAT_NULL)
+			if(state.targetFormat[i] != FORMAT_NULL)
 			{
 				if(!out[i][0]) r.oC[i].x = Float4(0.0f);
 				if(!out[i][1]) r.oC[i].y = Float4(0.0f);
diff --git a/src/Shader/PixelRoutine.hpp b/src/Shader/PixelRoutine.hpp
index 84086cb..e6dd8fb 100644
--- a/src/Shader/PixelRoutine.hpp
+++ b/src/Shader/PixelRoutine.hpp
@@ -153,9 +153,9 @@
 		Float4 interpolate(Float4 &x, Float4 &D, Float4 &rhw, Pointer<Byte> planeEquation, bool flat, bool perspective);
 		Float4 interpolateCentroid(Float4 &x, Float4 &y, Float4 &rhw, Pointer<Byte> planeEquation, bool flat, bool perspective);
 		void stencilTest(Registers &r, Pointer<Byte> &sBuffer, int q, Int &x, Int &sMask, Int &cMask);
-		void stencilTest(Registers &r, Byte8 &value, Context::StencilCompareMode stencilCompareMode, bool CCW);
-		void stencilOperation(Registers &r, Byte8 &newValue, Byte8 &bufferValue, Context::StencilOperation stencilPassOperation, Context::StencilOperation stencilZFailOperation, Context::StencilOperation stencilFailOperation, bool CCW, Int &zMask, Int &sMask);
-		void stencilOperation(Registers &r, Byte8 &output, Byte8 &bufferValue, Context::StencilOperation operation, bool CCW);
+		void stencilTest(Registers &r, Byte8 &value, StencilCompareMode stencilCompareMode, bool CCW);
+		void stencilOperation(Registers &r, Byte8 &newValue, Byte8 &bufferValue, StencilOperation stencilPassOperation, StencilOperation stencilZFailOperation, StencilOperation stencilFailOperation, bool CCW, Int &zMask, Int &sMask);
+		void stencilOperation(Registers &r, Byte8 &output, Byte8 &bufferValue, StencilOperation operation, bool CCW);
 		Bool depthTest(Registers &r, Pointer<Byte> &zBuffer, int q, Int &x, Float4 &z, Int &sMask, Int &zMask, Int &cMask);
 		void blendTexture(Registers &r, Vector4i &temp, Vector4i &texture, int stage);
 		void alphaTest(Registers &r, Int &aMask, Short4 &alpha);
@@ -177,12 +177,12 @@
 		void clampColor(Vector4f oC[4]);
 		void rasterOperation(Vector4i &current, Registers &r, Float4 &fog, Pointer<Byte> &cBuffer, Int &x, Int sMask[4], Int zMask[4], Int cMask[4]);
 		void rasterOperation(Vector4f oC[4], Registers &r, Float4 &fog, Pointer<Byte> cBuffer[4], Int &x, Int sMask[4], Int zMask[4], Int cMask[4]);
-		void blendFactor(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, Context::BlendFactor blendFactorActive);
-		void blendFactorAlpha(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, Context::BlendFactor blendFactorAlphaActive);
+		void blendFactor(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorActive);
+		void blendFactorAlpha(Registers &r, const Vector4i &blendFactor, const Vector4i &current, const Vector4i &pixel, BlendFactor blendFactorAlphaActive);
 		void alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4i &current, Int &x);
 		void writeColor(Registers &r, int index, Pointer<Byte> &cBuffer, Int &i, Vector4i &current, Int &sMask, Int &zMask, Int &cMask);
-		void blendFactor(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, Context::BlendFactor blendFactorActive);
-		void blendFactorAlpha(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, Context::BlendFactor blendFactorAlphaActive);
+		void blendFactor(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive);
+		void blendFactorAlpha(Registers &r, const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive);
 		void alphaBlend(Registers &r, int index, Pointer<Byte> &cBuffer, Vector4f &oC, Int &x);
 		void writeColor(Registers &r, int index, Pointer<Byte> &cBuffer, Int &i, Vector4f &oC, Int &sMask, Int &zMask, Int &cMask);
 		void writeStencil(Registers &r, Pointer<Byte> &sBuffer, int q, Int &x, Int &sMask, Int &zMask, Int &cMask);
diff --git a/src/Shader/SamplerCore.cpp b/src/Shader/SamplerCore.cpp
index 6224d45..6022647 100644
--- a/src/Shader/SamplerCore.cpp
+++ b/src/Shader/SamplerCore.cpp
@@ -420,7 +420,7 @@
 
 		Short4 borderMask;
 
-		if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER)
+		if(state.addressingModeU == ADDRESSING_BORDER)
 		{
 			Short4 u0;
 			
@@ -429,13 +429,13 @@
 			borderMask = u0;
 		}
 
-		if((AddressingMode)state.addressingModeV == ADDRESSING_BORDER)
+		if(state.addressingModeV == ADDRESSING_BORDER)
 		{
 			Short4 v0;
 			
 			border(v0, v);
 
-			if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER)
+			if(state.addressingModeU == ADDRESSING_BORDER)
 			{
 				borderMask &= v0;
 			}
@@ -445,14 +445,14 @@
 			}
 		}
 
-		if((AddressingMode)state.addressingModeW == ADDRESSING_BORDER && volumeTexture)
+		if(state.addressingModeW == ADDRESSING_BORDER && volumeTexture)
 		{
 			Short4 s0;
 
 			border(s0, w);
 
-			if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER ||
-			   (AddressingMode)state.addressingModeV == ADDRESSING_BORDER)
+			if(state.addressingModeU == ADDRESSING_BORDER ||
+			   state.addressingModeV == ADDRESSING_BORDER)
 			{
 				borderMask &= s0;
 			}
@@ -462,9 +462,9 @@
 			}
 		}
 
-		if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER ||
-		   (AddressingMode)state.addressingModeV == ADDRESSING_BORDER ||
-		   ((AddressingMode)state.addressingModeW == ADDRESSING_BORDER && volumeTexture))
+		if(state.addressingModeU == ADDRESSING_BORDER ||
+		   state.addressingModeV == ADDRESSING_BORDER ||
+		   (state.addressingModeW == ADDRESSING_BORDER && volumeTexture))
 		{
 			Short4 b;
 
@@ -556,8 +556,8 @@
 		Short4 uuuu;
 		Short4 vvvv;
 
-		address(uuuu, u, (AddressingMode)state.addressingModeU);
-		address(vvvv, v, (AddressingMode)state.addressingModeV);
+		address(uuuu, u, state.addressingModeU);
+		address(vvvv, v, state.addressingModeV);
 
 		if(state.textureFilter == FILTER_POINT)
 		{
@@ -570,10 +570,10 @@
 			Vector4i c2;
 			Vector4i c3;
 
-			Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), (AddressingMode)state.addressingModeU == ADDRESSING_WRAP, gather ? 0 : -1);
-			Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), (AddressingMode)state.addressingModeV == ADDRESSING_WRAP, gather ? 0 : -1);
-			Short4 uuuu1 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), (AddressingMode)state.addressingModeU == ADDRESSING_WRAP, gather ? 2 : +1);
-			Short4 vvvv1 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), (AddressingMode)state.addressingModeV == ADDRESSING_WRAP, gather ? 2 : +1);
+			Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, gather ? 0 : -1);
+			Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, gather ? 0 : -1);
+			Short4 uuuu1 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, gather ? 2 : +1);
+			Short4 vvvv1 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, gather ? 2 : +1);
 
 			sampleTexel(c0, uuuu0, vvvv0, vvvv0, mipmap, buffer);
 			sampleTexel(c1, uuuu1, vvvv0, vvvv0, mipmap, buffer);
@@ -764,9 +764,9 @@
 		Short4 vvvv;
 		Short4 wwww;
 
-		address(uuuu, u_, (AddressingMode)state.addressingModeU);
-		address(vvvv, v_, (AddressingMode)state.addressingModeV);
-		address(wwww, w_, (AddressingMode)state.addressingModeW);
+		address(uuuu, u_, state.addressingModeU);
+		address(vvvv, v_, state.addressingModeV);
+		address(wwww, w_, state.addressingModeW);
 
 		if(state.textureFilter <= FILTER_POINT)
 		{
@@ -786,9 +786,9 @@
 				{
 					for(int k = 0; k < 2; k++)
 					{
-						u[i][j][k] = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), (AddressingMode)state.addressingModeU == ADDRESSING_WRAP, i * 2 - 1);
-						v[i][j][k] = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), (AddressingMode)state.addressingModeV == ADDRESSING_WRAP, j * 2 - 1);
-						s[i][j][k] = offsetSample(wwww, mipmap, OFFSET(Mipmap,wHalf), (AddressingMode)state.addressingModeW == ADDRESSING_WRAP, k * 2 - 1);
+						u[i][j][k] = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, i * 2 - 1);
+						v[i][j][k] = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, j * 2 - 1);
+						s[i][j][k] = offsetSample(wwww, mipmap, OFFSET(Mipmap,wHalf), state.addressingModeW == ADDRESSING_WRAP, k * 2 - 1);
 					}
 				}
 			}
@@ -914,7 +914,7 @@
 
 		Int4 borderMask;
 
-		if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER)
+		if(state.addressingModeU == ADDRESSING_BORDER)
 		{
 			Int4 u0;
 			
@@ -923,13 +923,13 @@
 			borderMask = u0;
 		}
 
-		if((AddressingMode)state.addressingModeV == ADDRESSING_BORDER)
+		if(state.addressingModeV == ADDRESSING_BORDER)
 		{
 			Int4 v0;
 			
 			border(v0, v);
 
-			if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER)
+			if(state.addressingModeU == ADDRESSING_BORDER)
 			{
 				borderMask &= v0;
 			}
@@ -939,14 +939,14 @@
 			}
 		}
 
-		if((AddressingMode)state.addressingModeW == ADDRESSING_BORDER && volumeTexture)
+		if(state.addressingModeW == ADDRESSING_BORDER && volumeTexture)
 		{
 			Int4 s0;
 
 			border(s0, w);
 
-			if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER ||
-			   (AddressingMode)state.addressingModeV == ADDRESSING_BORDER)
+			if(state.addressingModeU == ADDRESSING_BORDER ||
+			   state.addressingModeV == ADDRESSING_BORDER)
 			{
 				borderMask &= s0;
 			}
@@ -956,9 +956,9 @@
 			}
 		}
 
-		if((AddressingMode)state.addressingModeU == ADDRESSING_BORDER ||
-		   (AddressingMode)state.addressingModeV == ADDRESSING_BORDER ||
-		   ((AddressingMode)state.addressingModeW == ADDRESSING_BORDER && volumeTexture))
+		if(state.addressingModeU == ADDRESSING_BORDER ||
+		   state.addressingModeV == ADDRESSING_BORDER ||
+		   (state.addressingModeW == ADDRESSING_BORDER && volumeTexture))
 		{
 			Int4 b;
 
@@ -1048,8 +1048,8 @@
 		Short4 uuuu;
 		Short4 vvvv;
 
-		address(uuuu, u, (AddressingMode)state.addressingModeU);
-		address(vvvv, v, (AddressingMode)state.addressingModeV);
+		address(uuuu, u, state.addressingModeU);
+		address(vvvv, v, state.addressingModeV);
 
 		if(state.textureFilter == FILTER_POINT)
 		{
@@ -1062,10 +1062,10 @@
 			Vector4f c2;
 			Vector4f c3;
 
-			Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), (AddressingMode)state.addressingModeU == ADDRESSING_WRAP, gather ? 0 : -1);
-			Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), (AddressingMode)state.addressingModeV == ADDRESSING_WRAP, gather ? 0 : -1);
-			Short4 uuuu1 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), (AddressingMode)state.addressingModeU == ADDRESSING_WRAP, gather ? 2 : +1);
-			Short4 vvvv1 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), (AddressingMode)state.addressingModeV == ADDRESSING_WRAP, gather ? 2 : +1);
+			Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, gather ? 0 : -1);
+			Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, gather ? 0 : -1);
+			Short4 uuuu1 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, gather ? 2 : +1);
+			Short4 vvvv1 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, gather ? 2 : +1);
 
 			sampleTexel(c0, uuuu0, vvvv0, vvvv0, z, mipmap, buffer);		
 			sampleTexel(c1, uuuu1, vvvv0, vvvv0, z, mipmap, buffer);
@@ -1117,9 +1117,9 @@
 		Short4 vvvv;
 		Short4 wwww;
 
-		address(uuuu, u, (AddressingMode)state.addressingModeU);
-		address(vvvv, v, (AddressingMode)state.addressingModeV);
-		address(wwww, w, (AddressingMode)state.addressingModeW);
+		address(uuuu, u, state.addressingModeU);
+		address(vvvv, v, state.addressingModeV);
+		address(wwww, w, state.addressingModeW);
 
 		if(state.textureFilter <= FILTER_POINT)
 		{
@@ -1136,12 +1136,12 @@
 			Vector4f c6;
 			Vector4f c7;
 
-			Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), (AddressingMode)state.addressingModeU == ADDRESSING_WRAP, -1);
-			Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), (AddressingMode)state.addressingModeV == ADDRESSING_WRAP, -1);
-			Short4 wwww0 = offsetSample(wwww, mipmap, OFFSET(Mipmap,wHalf), (AddressingMode)state.addressingModeW == ADDRESSING_WRAP, -1);
-			Short4 uuuu1 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), (AddressingMode)state.addressingModeU == ADDRESSING_WRAP, +1);
-			Short4 vvvv1 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), (AddressingMode)state.addressingModeV == ADDRESSING_WRAP, +1);
-			Short4 wwww1 = offsetSample(wwww, mipmap, OFFSET(Mipmap,wHalf), (AddressingMode)state.addressingModeW == ADDRESSING_WRAP, +1);
+			Short4 uuuu0 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, -1);
+			Short4 vvvv0 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, -1);
+			Short4 wwww0 = offsetSample(wwww, mipmap, OFFSET(Mipmap,wHalf), state.addressingModeW == ADDRESSING_WRAP, -1);
+			Short4 uuuu1 = offsetSample(uuuu, mipmap, OFFSET(Mipmap,uHalf), state.addressingModeU == ADDRESSING_WRAP, +1);
+			Short4 vvvv1 = offsetSample(vvvv, mipmap, OFFSET(Mipmap,vHalf), state.addressingModeV == ADDRESSING_WRAP, +1);
+			Short4 wwww1 = offsetSample(wwww, mipmap, OFFSET(Mipmap,wHalf), state.addressingModeW == ADDRESSING_WRAP, +1);
 
 			sampleTexel(c0, uuuu0, vvvv0, wwww0, w, mipmap, buffer);
 			sampleTexel(c1, uuuu1, vvvv0, wwww0, w, mipmap, buffer);
@@ -1792,17 +1792,17 @@
 
 	bool SamplerCore::hasFloatTexture() const
 	{
-		return Surface::isFloatFormat((Format)state.textureFormat);
+		return Surface::isFloatFormat(state.textureFormat);
 	}
 
 	bool SamplerCore::hasUnsignedTextureComponent(int component) const
 	{
-		return Surface::isUnsignedComponent((Format)state.textureFormat, component);
+		return Surface::isUnsignedComponent(state.textureFormat, component);
 	}
 
 	int SamplerCore::textureComponentCount() const
 	{
-		return Surface::componentCount((Format)state.textureFormat);
+		return Surface::componentCount(state.textureFormat);
 	}
 
 	bool SamplerCore::has16bitTexture() const
diff --git a/src/Shader/SetupRoutine.cpp b/src/Shader/SetupRoutine.cpp
index e52da92..84c33d5 100644
--- a/src/Shader/SetupRoutine.cpp
+++ b/src/Shader/SetupRoutine.cpp
@@ -95,11 +95,11 @@
 
 				A = IfThenElse(w0w1w2 < 0, -A, A);
 
-				if(state.cullMode == Context::CULL_CLOCKWISE)
+				if(state.cullMode == CULL_CLOCKWISE)
 				{
 					If(A >= 0.0f) Return(false);
 				}
-				else if(state.cullMode == Context::CULL_COUNTERCLOCKWISE)
+				else if(state.cullMode == CULL_COUNTERCLOCKWISE)
 				{
 					If(A <= 0.0f) Return(false);
 				}
diff --git a/src/Shader/VertexPipeline.cpp b/src/Shader/VertexPipeline.cpp
index c5c8bb1..9891aea 100644
--- a/src/Shader/VertexPipeline.cpp
+++ b/src/Shader/VertexPipeline.cpp
@@ -297,18 +297,18 @@
 
 					Vector4f diff;
 
-					if(state.vertexDiffuseMaterialSourceActive == Context::MATERIAL)
+					if(state.vertexDiffuseMaterialSourceActive == MATERIAL_MATERIAL)
 					{
 						diff.x = diff.y = diff.z = *Pointer<Float4>(r.data + OFFSET(DrawData,ff.materialDiffuse));   // FIXME: Unpack
 						diff.x = diff.x.xxxx;
 						diff.y = diff.y.yyyy;
 						diff.z = diff.z.zzzz;
 					}
-					else if(state.vertexDiffuseMaterialSourceActive == Context::COLOR1)
+					else if(state.vertexDiffuseMaterialSourceActive == MATERIAL_COLOR1)
 					{
 						diff = r.v[Color0];
 					}
-					else if(state.vertexDiffuseMaterialSourceActive == Context::COLOR2)
+					else if(state.vertexDiffuseMaterialSourceActive == MATERIAL_COLOR2)
 					{
 						diff = r.v[Color1];
 					}
@@ -347,7 +347,7 @@
 
 					Vector4f spec;
 
-					if(state.vertexSpecularMaterialSourceActive == Context::MATERIAL)
+					if(state.vertexSpecularMaterialSourceActive == MATERIAL_MATERIAL)
 					{
 						Float4 materialSpecular = *Pointer<Float4>(r.data + OFFSET(DrawData,ff.materialSpecular));   // FIXME: Unpack
 
@@ -355,11 +355,11 @@
 						spec.y = materialSpecular.y;
 						spec.z = materialSpecular.z;
 					}
-					else if(state.vertexSpecularMaterialSourceActive == Context::COLOR1)
+					else if(state.vertexSpecularMaterialSourceActive == MATERIAL_COLOR1)
 					{
 						spec = r.v[Color0];
 					}
-					else if(state.vertexSpecularMaterialSourceActive == Context::COLOR2)
+					else if(state.vertexSpecularMaterialSourceActive == MATERIAL_COLOR2)
 					{
 						spec = r.v[Color1];
 					}
@@ -391,7 +391,7 @@
 			r.o[D0].y = r.o[D0].y + globalAmbient.y;
 			r.o[D0].z = r.o[D0].z + globalAmbient.z;
 
-			if(state.vertexAmbientMaterialSourceActive == Context::MATERIAL)
+			if(state.vertexAmbientMaterialSourceActive == MATERIAL_MATERIAL)
 			{
 				Float4 materialAmbient = *Pointer<Float4>(r.data + OFFSET(DrawData,ff.materialAmbient));   // FIXME: Unpack
 
@@ -399,7 +399,7 @@
 				r.o[D0].y = r.o[D0].y * materialAmbient.y;
 				r.o[D0].z = r.o[D0].z * materialAmbient.z;
 			}
-			else if(state.vertexAmbientMaterialSourceActive == Context::COLOR1)
+			else if(state.vertexAmbientMaterialSourceActive == MATERIAL_COLOR1)
 			{
 				Vector4f materialDiffuse = r.v[Color0];
 
@@ -407,7 +407,7 @@
 				r.o[D0].y = r.o[D0].y * materialDiffuse.y;
 				r.o[D0].z = r.o[D0].z * materialDiffuse.z;
 			}
-			else if(state.vertexAmbientMaterialSourceActive == Context::COLOR2)
+			else if(state.vertexAmbientMaterialSourceActive == MATERIAL_COLOR2)
 			{
 				Vector4f materialSpecular = r.v[Color1];
 
@@ -422,7 +422,7 @@
 			r.o[D0].z = r.o[D0].z + diffuseSum.z;
 
 			// Emissive
-			if(state.vertexEmissiveMaterialSourceActive == Context::MATERIAL)
+			if(state.vertexEmissiveMaterialSourceActive == MATERIAL_MATERIAL)
 			{
 				Float4 materialEmission = *Pointer<Float4>(r.data + OFFSET(DrawData,ff.materialEmission));   // FIXME: Unpack
 
@@ -430,7 +430,7 @@
 				r.o[D0].y = r.o[D0].y + materialEmission.y;
 				r.o[D0].z = r.o[D0].z + materialEmission.z;
 			}
-			else if(state.vertexEmissiveMaterialSourceActive == Context::COLOR1)
+			else if(state.vertexEmissiveMaterialSourceActive == MATERIAL_COLOR1)
 			{
 				Vector4f materialSpecular = r.v[Color0];
 
@@ -438,7 +438,7 @@
 				r.o[D0].y = r.o[D0].y + materialSpecular.y;
 				r.o[D0].z = r.o[D0].z + materialSpecular.z;
 			}
-			else if(state.vertexEmissiveMaterialSourceActive == Context::COLOR2)
+			else if(state.vertexEmissiveMaterialSourceActive == MATERIAL_COLOR2)
 			{
 				Vector4f materialSpecular = r.v[Color1];
 
@@ -449,16 +449,16 @@
 			else ASSERT(false);
 
 			// Diffuse alpha component
-			if(state.vertexDiffuseMaterialSourceActive == Context::MATERIAL)
+			if(state.vertexDiffuseMaterialSourceActive == MATERIAL_MATERIAL)
 			{
 				r.o[D0].w = Float4(*Pointer<Float4>(r.data + OFFSET(DrawData,ff.materialDiffuse[0]))).wwww;   // FIXME: Unpack
 			}
-			else if(state.vertexDiffuseMaterialSourceActive == Context::COLOR1)
+			else if(state.vertexDiffuseMaterialSourceActive == MATERIAL_COLOR1)
 			{
 				Vector4f alpha = r.v[Color0];
 				r.o[D0].w = alpha.w;
 			}
-			else if(state.vertexDiffuseMaterialSourceActive == Context::COLOR2)
+			else if(state.vertexDiffuseMaterialSourceActive == MATERIAL_COLOR2)
 			{
 				Vector4f alpha = r.v[Color1];
 				r.o[D0].w = alpha.w;
@@ -468,16 +468,16 @@
 			if(state.vertexSpecularActive)
 			{
 				// Specular alpha component
-				if(state.vertexSpecularMaterialSourceActive == Context::MATERIAL)
+				if(state.vertexSpecularMaterialSourceActive == MATERIAL_MATERIAL)
 				{
 					r.o[D1].w = Float4(*Pointer<Float4>(r.data + OFFSET(DrawData,ff.materialSpecular[3]))).wwww;   // FIXME: Unpack
 				}
-				else if(state.vertexSpecularMaterialSourceActive == Context::COLOR1)
+				else if(state.vertexSpecularMaterialSourceActive == MATERIAL_COLOR1)
 				{
 					Vector4f alpha = r.v[Color0];
 					r.o[D1].w = alpha.w;
 				}
-				else if(state.vertexSpecularMaterialSourceActive == Context::COLOR2)
+				else if(state.vertexSpecularMaterialSourceActive == MATERIAL_COLOR2)
 				{
 					Vector4f alpha = r.v[Color1];
 					r.o[D1].w = alpha.w;
@@ -490,7 +490,7 @@
 		{
 			switch(state.vertexFogMode)
 			{
-			case Context::FOG_NONE:
+			case FOG_NONE:
 				if(state.specularActive)
 				{
 					r.o[Fog].x = r.o[D1].w;
@@ -500,9 +500,9 @@
 					r.o[Fog].x = Float4(0.0f);
 				}
 				break;
-			case Context::FOG_LINEAR:
-			case Context::FOG_EXP:
-			case Context::FOG_EXP2:
+			case FOG_LINEAR:
+			case FOG_EXP:
+			case FOG_EXP2:
 				if(!state.rangeFogActive)
 				{
 					r.o[Fog].x = r.o[Pos].z;
@@ -542,7 +542,7 @@
 
 			switch(state.textureState[stage].texGenActive)
 			{
-			case Context::TEXGEN_PASSTHRU:
+			case TEXGEN_PASSTHRU:
 				{
 					Vector4f v = r.v[TexCoord0 + i];
 
@@ -575,7 +575,7 @@
 					}
 				}
 				break;
-			case Context::TEXGEN_NORMAL:
+			case TEXGEN_NORMAL:
 				{
 					Vector4f Nc;   // Normal vector in camera space
 
@@ -598,7 +598,7 @@
 					r.o[T0 + stage].w = Nc.w;
 				}
 				break;
-			case Context::TEXGEN_POSITION:
+			case TEXGEN_POSITION:
 				{
 					Vector4f Pn = transformBlend(r, r.v[Position], Pointer<Byte>(r.data + OFFSET(DrawData,ff.cameraTransformT)), true);   // Position in camera space
 
@@ -610,7 +610,7 @@
 					r.o[T0 + stage].w = Pn.w;
 				}
 				break;
-			case Context::TEXGEN_REFLECTION:
+			case TEXGEN_REFLECTION:
 				{
 					Vector4f R;   // Reflection vector
 
@@ -661,7 +661,7 @@
 					r.o[T0 + stage].w = R.w;
 				}
 				break;
-			case Context::TEXGEN_SPHEREMAP:
+			case TEXGEN_SPHEREMAP:
 				{
 					Vector4f R;   // Reflection vector