diff --git a/src/OpenGL/libGLES_CM/Renderbuffer.cpp b/src/OpenGL/libGLES_CM/Renderbuffer.cpp
index 733b9ac..a0d64cc 100644
--- a/src/OpenGL/libGLES_CM/Renderbuffer.cpp
+++ b/src/OpenGL/libGLES_CM/Renderbuffer.cpp
@@ -242,7 +242,7 @@
 {
 	mWidth = 0;
 	mHeight = 0;
-	format = GL_NONE;
+	format = GL_NONE_OES;
 	mSamples = 0;
 }
 
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cpp b/src/OpenGL/libGLES_CM/libGLES_CM.cpp
index f80aa89..440f6cf 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.cpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.cpp
@@ -1882,7 +1882,7 @@
 		case GL_RENDERBUFFER_INTERNAL_FORMAT_OES:
 			{
 				GLint internalformat = renderbuffer->getFormat();
-				*params = (internalformat == GL_NONE) ? GL_RGBA4_OES : internalformat;
+				*params = (internalformat == GL_NONE_OES) ? GL_RGBA4_OES : internalformat;
 			}
 			break;
 		case GL_RENDERBUFFER_RED_SIZE_OES:        *params = renderbuffer->getRedSize();     break;
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 50ef1ac..7fd1f02 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -1589,7 +1589,7 @@
 
 		*data = static_cast<const unsigned char*>(mState.pixelUnpackBuffer->data()) + (ptrdiff_t)(*data);
 	}
-	return GL_NONE;
+	return GL_NO_ERROR;
 }
 
 bool Context::getBuffer(GLenum target, es2::Buffer **buffer) const
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index b14dbcf..507f989 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -795,7 +795,7 @@
 		}
 
 		GLenum validationError = context->getPixels(&data, GL_UNSIGNED_BYTE, imageSize);
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -865,7 +865,7 @@
 		}
 
 		GLenum validationError = context->getPixels(&data, GL_UNSIGNED_BYTE, imageSize);
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -875,7 +875,7 @@
 			es2::Texture2D *texture = context->getTexture2D(target);
 
 			GLenum validationError = ValidateSubImageParams(true, false, target, level, xoffset, yoffset, width, height, format, GL_NONE, texture, context->getClientVersion());
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return error(validationError);
 			}
@@ -887,7 +887,7 @@
 			es2::TextureCubeMap *texture = context->getTextureCubeMap();
 
 			GLenum validationError = ValidateSubImageParams(true, false, target, level, xoffset, yoffset, width, height, format, GL_NONE, texture, context->getClientVersion());
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return error(validationError);
 			}
@@ -1072,7 +1072,7 @@
 		else UNREACHABLE(target);
 
 		GLenum validationError = ValidateSubImageParams(false, true, target, level, xoffset, yoffset, width, height, GL_NONE, GL_NONE, texture, context->getClientVersion());
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -4958,7 +4958,7 @@
 		}
 
 		GLenum validationError = ValidateTextureFormatType(format, type, internalformat, target, context->getClientVersion());
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -5002,7 +5002,7 @@
 		GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type);
 
 		validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, 1, format, type));
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -5373,13 +5373,13 @@
 			es2::Texture2D *texture = context->getTexture2D(target);
 
 			GLenum validationError = ValidateSubImageParams(false, false, target, level, xoffset, yoffset, width, height, format, type, texture, context->getClientVersion());
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return error(validationError);
 			}
 
 			validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, 1, format, type));
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return error(validationError);
 			}
@@ -5391,13 +5391,13 @@
 			es2::TextureCubeMap *texture = context->getTextureCubeMap();
 
 			GLenum validationError = ValidateSubImageParams(false, false, target, level, xoffset, yoffset, width, height, format, type, texture, context->getClientVersion());
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return error(validationError);
 			}
 
 			validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, 1, format, type));
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return error(validationError);
 			}
@@ -6206,7 +6206,7 @@
 	}
 
 	GLenum validationError = ValidateTextureFormatType(format, type, internalformat, target, egl::getClientVersion());
-	if(validationError != GL_NONE)
+	if(validationError != GL_NO_ERROR)
 	{
 		return error(validationError);
 	}
@@ -6239,7 +6239,7 @@
 		}
 
 		GLenum validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, depth, format, type));
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -6281,13 +6281,13 @@
 		es2::Texture3D *texture = context->getTexture3D();
 
 		GLenum validationError = ValidateSubImageParams(false, false, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texture, context->getClientVersion());
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
 
 		validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, depth, format, type));
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -6336,7 +6336,7 @@
 		es2::Texture3D *texture = context->getTexture3D();
 
 		GLenum validationError = ValidateSubImageParams(false, true, target, level, xoffset, yoffset, zoffset, width, height, 1, GL_NONE, GL_NONE, texture, context->getClientVersion());
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -6393,7 +6393,7 @@
 
 		GLenum validationError = context->getPixels(&data, GL_UNSIGNED_BYTE, imageSize);
 
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -6449,7 +6449,7 @@
 		}
 
 		GLenum validationError = context->getPixels(&data, GL_UNSIGNED_BYTE, imageSize);
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 5a11b0b..5006161 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -369,7 +369,7 @@
 	if(context)
 	{
 		GLenum validationError = ValidateTextureFormatType(format, type, internalformat, target, context->getClientVersion());
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -382,7 +382,7 @@
 		}
 
 		validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, depth, format, type));
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -419,19 +419,19 @@
 	}
 
 	es2::Context *context = es2::getContext();
-	
+
 	if(context)
 	{
 		es2::Texture3D *texture = (target == GL_TEXTURE_3D) ? context->getTexture3D() : context->getTexture2DArray();
 
 		GLenum validationError = ValidateSubImageParams(false, false, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texture, context->getClientVersion());
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
 
 		validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, depth, format, type));
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -487,7 +487,7 @@
 		es2::Texture3D *texture = (target == GL_TEXTURE_3D) ? context->getTexture3D() : context->getTexture2DArray();
 
 		GLenum validationError = ValidateSubImageParams(false, true, target, level, xoffset, yoffset, zoffset, width, height, 1, GL_NONE, GL_NONE, texture, context->getClientVersion());
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -551,7 +551,7 @@
 		}
 
 		GLenum validationError = context->getPixels(&data, GL_UNSIGNED_BYTE, imageSize);
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
@@ -638,7 +638,7 @@
 		}
 
 		GLenum validationError = context->getPixels(&data, GL_UNSIGNED_BYTE, imageSize);
-		if(validationError != GL_NONE)
+		if(validationError != GL_NO_ERROR)
 		{
 			return error(validationError);
 		}
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index c00f62d..c7f6bbb 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -468,7 +468,7 @@
 		else if(!copy)   // CopyTexSubImage doesn't have format/type parameters.
 		{
 			GLenum validationError = ValidateTextureFormatType(format, type, sizedInternalFormat, target, clientVersion);
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return validationError;
 			}
@@ -489,7 +489,7 @@
 			return GL_INVALID_VALUE;
 		}
 
-		return GL_NONE;
+		return GL_NO_ERROR;
 	}
 
 	GLenum ValidateSubImageParams(bool compressed, bool copy, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
@@ -510,7 +510,7 @@
 			GLenum sizedInternalFormat = texture->getFormat(target, level);
 
 			GLenum validationError = ValidateTextureFormatType(format, type, sizedInternalFormat, target, clientVersion);
-			if(validationError != GL_NONE)
+			if(validationError != GL_NO_ERROR)
 			{
 				return validationError;
 			}
@@ -533,7 +533,7 @@
 			return GL_INVALID_VALUE;
 		}
 
-		return GL_NONE;
+		return GL_NO_ERROR;
 	}
 
 	bool ValidateCopyFormats(GLenum textureFormat, GLenum colorbufferFormat)
@@ -943,7 +943,7 @@
 				return GL_INVALID_ENUM;
 			}
 
-			return GL_NONE;
+			return GL_NO_ERROR;
 		}
 
 		// Validate format, type, and sized internalformat combinations [OpenGL ES 3.0 Table 3.2]
@@ -1117,7 +1117,7 @@
 			return GL_INVALID_OPERATION;
 		}
 
-		return GL_NONE;
+		return GL_NO_ERROR;
 	}
 
 	GLsizei GetTypeSize(GLenum type)
