diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp | 1390 |
1 files changed, 746 insertions, 644 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp index 16d9c1775d..64f67d7d6d 100644 --- a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp +++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp @@ -1,3 +1,4 @@ +#include "precompiled.h" // // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be @@ -6,29 +7,19 @@ // libGLESv2.cpp: Implements the exported OpenGL ES 2.0 functions. -#define GL_APICALL -#include <GLES2/gl2.h> -#include <GLES2/gl2ext.h> - -#include <exception> -#include <limits> - -#include "common/debug.h" #include "common/version.h" #include "libGLESv2/main.h" -#include "libGLESv2/mathutil.h" #include "libGLESv2/utilities.h" #include "libGLESv2/Buffer.h" -#include "libGLESv2/Context.h" #include "libGLESv2/Fence.h" #include "libGLESv2/Framebuffer.h" +#include "libGLESv2/Renderbuffer.h" #include "libGLESv2/Program.h" #include "libGLESv2/ProgramBinary.h" -#include "libGLESv2/Renderbuffer.h" -#include "libGLESv2/Shader.h" #include "libGLESv2/Texture.h" #include "libGLESv2/Query.h" +#include "libGLESv2/Context.h" bool validImageSize(GLint level, GLsizei width, GLsizei height) { @@ -71,7 +62,7 @@ bool checkTextureFormatType(GLenum format, GLenum type) case GL_DEPTH_STENCIL_OES: break; default: - return error(GL_INVALID_ENUM, false); + return gl::error(GL_INVALID_ENUM, false); } // invalid <type> -> sets INVALID_ENUM @@ -89,7 +80,7 @@ bool checkTextureFormatType(GLenum format, GLenum type) case GL_LUMINANCE_ALPHA: return true; default: - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } case GL_FLOAT: @@ -103,7 +94,7 @@ bool checkTextureFormatType(GLenum format, GLenum type) case GL_LUMINANCE_ALPHA: return true; default: - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } case GL_UNSIGNED_SHORT_4_4_4_4: @@ -113,7 +104,7 @@ bool checkTextureFormatType(GLenum format, GLenum type) case GL_RGBA: return true; default: - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } case GL_UNSIGNED_SHORT_5_6_5: @@ -122,7 +113,7 @@ bool checkTextureFormatType(GLenum format, GLenum type) case GL_RGB: return true; default: - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } case GL_UNSIGNED_SHORT: @@ -132,7 +123,7 @@ bool checkTextureFormatType(GLenum format, GLenum type) case GL_DEPTH_COMPONENT: return true; default: - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } case GL_UNSIGNED_INT_24_8_OES: @@ -141,11 +132,11 @@ bool checkTextureFormatType(GLenum format, GLenum type) case GL_DEPTH_STENCIL_OES: return true; default: - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } default: - return error(GL_INVALID_ENUM, false); + return gl::error(GL_INVALID_ENUM, false); } } @@ -155,12 +146,12 @@ bool validateSubImageParams2D(bool compressed, GLsizei width, GLsizei height, { if (!texture) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } if (compressed != texture->isCompressed(level)) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } if (format != GL_NONE) @@ -168,7 +159,7 @@ bool validateSubImageParams2D(bool compressed, GLsizei width, GLsizei height, GLenum internalformat = gl::ConvertSizedInternalFormat(format, type); if (internalformat != texture->getInternalFormat(level)) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } } @@ -177,14 +168,14 @@ bool validateSubImageParams2D(bool compressed, GLsizei width, GLsizei height, if ((width % 4 != 0 && width != texture->getWidth(0)) || (height % 4 != 0 && height != texture->getHeight(0))) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } } if (xoffset + width > texture->getWidth(level) || yoffset + height > texture->getHeight(level)) { - return error(GL_INVALID_VALUE, false); + return gl::error(GL_INVALID_VALUE, false); } return true; @@ -196,12 +187,12 @@ bool validateSubImageParamsCube(bool compressed, GLsizei width, GLsizei height, { if (!texture) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } if (compressed != texture->isCompressed(target, level)) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } if (format != GL_NONE) @@ -209,7 +200,7 @@ bool validateSubImageParamsCube(bool compressed, GLsizei width, GLsizei height, GLenum internalformat = gl::ConvertSizedInternalFormat(format, type); if (internalformat != texture->getInternalFormat(target, level)) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } } @@ -218,14 +209,14 @@ bool validateSubImageParamsCube(bool compressed, GLsizei width, GLsizei height, if ((width % 4 != 0 && width != texture->getWidth(target, 0)) || (height % 4 != 0 && height != texture->getHeight(target, 0))) { - return error(GL_INVALID_OPERATION, false); + return gl::error(GL_INVALID_OPERATION, false); } } if (xoffset + width > texture->getWidth(target, level) || yoffset + height > texture->getHeight(target, level)) { - return error(GL_INVALID_VALUE, false); + return gl::error(GL_INVALID_VALUE, false); } return true; @@ -277,7 +268,7 @@ void __stdcall glActiveTexture(GLenum texture) { if (texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + context->getMaximumCombinedTextureImageUnits() - 1) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } context->setActiveSampler(texture - GL_TEXTURE0); @@ -285,7 +276,7 @@ void __stdcall glActiveTexture(GLenum texture) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -306,11 +297,11 @@ void __stdcall glAttachShader(GLuint program, GLuint shader) { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -318,23 +309,23 @@ void __stdcall glAttachShader(GLuint program, GLuint shader) { if (context->getProgram(shader)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } if (!programObject->attachShader(shaderObject)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -350,12 +341,12 @@ void __stdcall glBeginQueryEXT(GLenum target, GLuint id) case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (id == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::Context *context = gl::getNonLostContext(); @@ -367,7 +358,7 @@ void __stdcall glBeginQueryEXT(GLenum target, GLuint id) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -379,7 +370,7 @@ void __stdcall glBindAttribLocation(GLuint program, GLuint index, const GLchar* { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -392,17 +383,17 @@ void __stdcall glBindAttribLocation(GLuint program, GLuint index, const GLchar* { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } if (strncmp(name, "gl_", 3) == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } programObject->bindAttributeLocation(index, name); @@ -410,7 +401,7 @@ void __stdcall glBindAttribLocation(GLuint program, GLuint index, const GLchar* } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -433,13 +424,13 @@ void __stdcall glBindBuffer(GLenum target, GLuint buffer) context->bindElementArrayBuffer(buffer); return; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -451,7 +442,7 @@ void __stdcall glBindFramebuffer(GLenum target, GLuint framebuffer) { if (target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -471,7 +462,7 @@ void __stdcall glBindFramebuffer(GLenum target, GLuint framebuffer) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -483,7 +474,7 @@ void __stdcall glBindRenderbuffer(GLenum target, GLuint renderbuffer) { if (target != GL_RENDERBUFFER) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -495,7 +486,7 @@ void __stdcall glBindRenderbuffer(GLenum target, GLuint renderbuffer) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -513,7 +504,7 @@ void __stdcall glBindTexture(GLenum target, GLuint texture) if (textureObject && textureObject->getTarget() != target && texture != 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } switch (target) @@ -525,13 +516,13 @@ void __stdcall glBindTexture(GLenum target, GLuint texture) context->bindTextureCubeMap(texture); return; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -551,7 +542,7 @@ void __stdcall glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclamp } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -573,7 +564,7 @@ void __stdcall glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) case GL_FUNC_REVERSE_SUBTRACT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (modeAlpha) @@ -583,7 +574,7 @@ void __stdcall glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) case GL_FUNC_REVERSE_SUBTRACT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -595,7 +586,7 @@ void __stdcall glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -630,7 +621,7 @@ void __stdcall glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha case GL_SRC_ALPHA_SATURATE: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (dstRGB) @@ -651,7 +642,7 @@ void __stdcall glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha case GL_ONE_MINUS_CONSTANT_ALPHA: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (srcAlpha) @@ -673,7 +664,7 @@ void __stdcall glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha case GL_SRC_ALPHA_SATURATE: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (dstAlpha) @@ -694,7 +685,7 @@ void __stdcall glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha case GL_ONE_MINUS_CONSTANT_ALPHA: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } bool constantColorUsed = (srcRGB == GL_CONSTANT_COLOR || srcRGB == GL_ONE_MINUS_CONSTANT_COLOR || @@ -706,7 +697,7 @@ void __stdcall glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha if (constantColorUsed && constantAlphaUsed) { ERR("Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR invalid under WebGL"); - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::Context *context = gl::getNonLostContext(); @@ -718,7 +709,7 @@ void __stdcall glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -731,7 +722,7 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, { if (size < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (usage) @@ -741,7 +732,7 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, case GL_DYNAMIC_DRAW: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -759,12 +750,12 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, buffer = context->getElementArrayBuffer(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (!buffer) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } buffer->bufferData(data, size, usage); @@ -772,7 +763,7 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -785,7 +776,7 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, { if (size < 0 || offset < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (data == NULL) @@ -808,17 +799,17 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, buffer = context->getElementArrayBuffer(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (!buffer) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if ((size_t)size + offset > buffer->size()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } buffer->bufferSubData(data, size, offset); @@ -826,7 +817,7 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -838,7 +829,7 @@ GLenum __stdcall glCheckFramebufferStatus(GLenum target) { if (target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE) { - return error(GL_INVALID_ENUM, 0); + return gl::error(GL_INVALID_ENUM, 0); } gl::Context *context = gl::getNonLostContext(); @@ -860,7 +851,7 @@ GLenum __stdcall glCheckFramebufferStatus(GLenum target) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, 0); + return gl::error(GL_OUT_OF_MEMORY, 0); } return 0; @@ -881,7 +872,7 @@ void __stdcall glClear(GLbitfield mask) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -901,7 +892,7 @@ void __stdcall glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclamp } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -920,7 +911,7 @@ void __stdcall glClearDepthf(GLclampf depth) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -939,7 +930,7 @@ void __stdcall glClearStencil(GLint s) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -959,7 +950,7 @@ void __stdcall glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboo } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -979,11 +970,11 @@ void __stdcall glCompileShader(GLuint shader) { if (context->getProgram(shader)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -992,7 +983,7 @@ void __stdcall glCompileShader(GLuint shader) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1007,7 +998,7 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna { if (!validImageSize(level, width, height) || border != 0 || imageSize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (internalformat) @@ -1018,12 +1009,22 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (border != 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_OPERATION); + } + + if (width != 1 && width != 2 && width % 4 != 0) + { + return gl::error(GL_INVALID_OPERATION); + } + + if (height != 1 && height != 2 && height % 4 != 0) + { + return gl::error(GL_INVALID_OPERATION); } gl::Context *context = gl::getNonLostContext(); @@ -1032,7 +1033,7 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna { if (level > context->getMaximumTextureLevel()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (target) @@ -1041,7 +1042,7 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna if (width > (context->getMaximumTextureDimension() >> level) || height > (context->getMaximumTextureDimension() >> level)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: @@ -1052,17 +1053,17 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: if (width != height) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (width > (context->getMaximumCubeTextureDimension() >> level) || height > (context->getMaximumCubeTextureDimension() >> level)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (internalformat) { @@ -1070,19 +1071,19 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: if (!context->supportsDXT1Textures()) { - return error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed + return gl::error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed } break; case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: if (!context->supportsDXT3Textures()) { - return error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed + return gl::error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed } break; case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: if (!context->supportsDXT5Textures()) { - return error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed + return gl::error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed } break; default: UNREACHABLE(); @@ -1090,7 +1091,7 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna if (imageSize != gl::ComputeCompressedSize(width, height, internalformat)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (target == GL_TEXTURE_2D) @@ -1099,12 +1100,12 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna if (!texture) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texture->setCompressedImage(level, internalformat, width, height, imageSize, data); @@ -1115,12 +1116,12 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna if (!texture) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } switch (target) @@ -1141,7 +1142,7 @@ void __stdcall glCompressedTexImage2D(GLenum target, GLint level, GLenum interna } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1157,12 +1158,12 @@ void __stdcall glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffs { if (!gl::IsInternalTextureTarget(target)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (format) @@ -1173,7 +1174,7 @@ void __stdcall glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffs case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (width == 0 || height == 0 || data == NULL) @@ -1187,7 +1188,7 @@ void __stdcall glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffs { if (level > context->getMaximumTextureLevel()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (format) { @@ -1195,19 +1196,19 @@ void __stdcall glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffs case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: if (!context->supportsDXT1Textures()) { - return error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed + return gl::error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed } break; case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: if (!context->supportsDXT3Textures()) { - return error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed + return gl::error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed } break; case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: if (!context->supportsDXT5Textures()) { - return error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed + return gl::error(GL_INVALID_ENUM); // in this case, it's as though the internal format switch failed } break; default: UNREACHABLE(); @@ -1215,12 +1216,12 @@ void __stdcall glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffs if (imageSize != gl::ComputeCompressedSize(width, height, format)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (xoffset % 4 != 0 || yoffset % 4 != 0) { - return error(GL_INVALID_OPERATION); // we wait to check the offsets until this point, because the multiple-of-four restriction + return gl::error(GL_INVALID_OPERATION); // we wait to check the offsets until this point, because the multiple-of-four restriction // does not exist unless DXT textures are supported. } @@ -1248,7 +1249,7 @@ void __stdcall glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffs } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1262,12 +1263,12 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma { if (!validImageSize(level, width, height)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (border != 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -1276,7 +1277,7 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma { if (level > context->getMaximumTextureLevel()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (target) @@ -1285,7 +1286,7 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma if (width > (context->getMaximumTextureDimension() >> level) || height > (context->getMaximumTextureDimension() >> level)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: @@ -1296,32 +1297,32 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: if (width != height) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (width > (context->getMaximumCubeTextureDimension() >> level) || height > (context->getMaximumCubeTextureDimension() >> level)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Framebuffer *framebuffer = context->getReadFramebuffer(); if (framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE) { - return error(GL_INVALID_FRAMEBUFFER_OPERATION); + return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION); } - if (context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() != 0) + if (context->getReadFramebufferHandle() != 0 && framebuffer->getSamples() != 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } - gl::Renderbuffer *source = framebuffer->getColorbuffer(); + gl::Renderbuffer *source = framebuffer->getReadColorbuffer(); GLenum colorbufferFormat = source->getInternalFormat(); // [OpenGL ES 2.0.24] table 3.9 @@ -1331,9 +1332,10 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma if (colorbufferFormat != GL_ALPHA8_EXT && colorbufferFormat != GL_RGBA4 && colorbufferFormat != GL_RGB5_A1 && + colorbufferFormat != GL_BGRA8_EXT && colorbufferFormat != GL_RGBA8_OES) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_LUMINANCE: @@ -1342,49 +1344,51 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma colorbufferFormat != GL_RGB8_OES && colorbufferFormat != GL_RGBA4 && colorbufferFormat != GL_RGB5_A1 && + colorbufferFormat != GL_BGRA8_EXT && colorbufferFormat != GL_RGBA8_OES) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_LUMINANCE_ALPHA: case GL_RGBA: if (colorbufferFormat != GL_RGBA4 && colorbufferFormat != GL_RGB5_A1 && + colorbufferFormat != GL_BGRA8_EXT && colorbufferFormat != GL_RGBA8_OES) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: if (context->supportsDXT1Textures()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: if (context->supportsDXT3Textures()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: if (context->supportsDXT5Textures()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_DEPTH_COMPONENT: @@ -1394,14 +1398,14 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma case GL_DEPTH24_STENCIL8_OES: if (context->supportsDepthTextures()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (target == GL_TEXTURE_2D) @@ -1410,12 +1414,12 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma if (!texture) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texture->copyImage(level, internalformat, x, y, width, height, framebuffer); @@ -1426,12 +1430,12 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma if (!texture) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texture->copyImage(target, level, internalformat, x, y, width, height, framebuffer); @@ -1441,7 +1445,7 @@ void __stdcall glCopyTexImage2D(GLenum target, GLint level, GLenum internalforma } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1455,17 +1459,17 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL { if (!gl::IsInternalTextureTarget(target)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (width == 0 || height == 0) @@ -1479,22 +1483,22 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL { if (level > context->getMaximumTextureLevel()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Framebuffer *framebuffer = context->getReadFramebuffer(); if (framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE) { - return error(GL_INVALID_FRAMEBUFFER_OPERATION); + return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION); } - if (context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() != 0) + if (context->getReadFramebufferHandle() != 0 && framebuffer->getSamples() != 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } - gl::Renderbuffer *source = framebuffer->getColorbuffer(); + gl::Renderbuffer *source = framebuffer->getReadColorbuffer(); GLenum colorbufferFormat = source->getInternalFormat(); gl::Texture *texture = NULL; GLenum textureFormat = GL_RGBA; @@ -1532,7 +1536,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL colorbufferFormat != GL_RGB5_A1 && colorbufferFormat != GL_RGBA8_OES) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_LUMINANCE: @@ -1543,7 +1547,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL colorbufferFormat != GL_RGB5_A1 && colorbufferFormat != GL_RGBA8_OES) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_LUMINANCE_ALPHA: @@ -1552,19 +1556,19 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL colorbufferFormat != GL_RGB5_A1 && colorbufferFormat != GL_RGBA8_OES) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); case GL_DEPTH_COMPONENT: case GL_DEPTH_STENCIL_OES: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); default: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texture->copySubImage(target, level, xoffset, yoffset, x, y, width, height, framebuffer); @@ -1573,7 +1577,7 @@ void __stdcall glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GL catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1592,7 +1596,7 @@ GLuint __stdcall glCreateProgram(void) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, 0); + return gl::error(GL_OUT_OF_MEMORY, 0); } return 0; @@ -1614,13 +1618,13 @@ GLuint __stdcall glCreateShader(GLenum type) case GL_VERTEX_SHADER: return context->createShader(type); default: - return error(GL_INVALID_ENUM, 0); + return gl::error(GL_INVALID_ENUM, 0); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, 0); + return gl::error(GL_OUT_OF_MEMORY, 0); } return 0; @@ -1647,12 +1651,12 @@ void __stdcall glCullFace(GLenum mode) } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1664,7 +1668,7 @@ void __stdcall glDeleteBuffers(GLsizei n, const GLuint* buffers) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -1679,7 +1683,7 @@ void __stdcall glDeleteBuffers(GLsizei n, const GLuint* buffers) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1691,7 +1695,7 @@ void __stdcall glDeleteFencesNV(GLsizei n, const GLuint* fences) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -1706,7 +1710,7 @@ void __stdcall glDeleteFencesNV(GLsizei n, const GLuint* fences) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1718,7 +1722,7 @@ void __stdcall glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -1736,7 +1740,7 @@ void __stdcall glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1759,11 +1763,11 @@ void __stdcall glDeleteProgram(GLuint program) { if(context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -1772,7 +1776,7 @@ void __stdcall glDeleteProgram(GLuint program) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1784,7 +1788,7 @@ void __stdcall glDeleteQueriesEXT(GLsizei n, const GLuint *ids) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -1799,7 +1803,7 @@ void __stdcall glDeleteQueriesEXT(GLsizei n, const GLuint *ids) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1811,7 +1815,7 @@ void __stdcall glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -1826,7 +1830,7 @@ void __stdcall glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1849,11 +1853,11 @@ void __stdcall glDeleteShader(GLuint shader) { if(context->getProgram(shader)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -1862,7 +1866,7 @@ void __stdcall glDeleteShader(GLuint shader) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1874,7 +1878,7 @@ void __stdcall glDeleteTextures(GLsizei n, const GLuint* textures) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -1892,7 +1896,7 @@ void __stdcall glDeleteTextures(GLsizei n, const GLuint* textures) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1914,7 +1918,7 @@ void __stdcall glDepthFunc(GLenum func) case GL_NOTEQUAL: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -1926,7 +1930,7 @@ void __stdcall glDepthFunc(GLenum func) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1945,7 +1949,7 @@ void __stdcall glDepthMask(GLboolean flag) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1964,7 +1968,7 @@ void __stdcall glDepthRangef(GLclampf zNear, GLclampf zFar) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -1988,11 +1992,11 @@ void __stdcall glDetachShader(GLuint program, GLuint shader) shaderByProgramHandle = context->getShader(program); if (!shaderByProgramHandle) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } else { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } @@ -2001,23 +2005,23 @@ void __stdcall glDetachShader(GLuint program, GLuint shader) gl::Program *programByShaderHandle = context->getProgram(shader); if (!programByShaderHandle) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } else { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } if (!programObject->detachShader(shaderObject)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2043,13 +2047,13 @@ void __stdcall glDisable(GLenum cap) case GL_BLEND: context->setBlend(false); break; case GL_DITHER: context->setDither(false); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2061,7 +2065,7 @@ void __stdcall glDisableVertexAttribArray(GLuint index) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2073,7 +2077,7 @@ void __stdcall glDisableVertexAttribArray(GLuint index) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2085,7 +2089,7 @@ void __stdcall glDrawArrays(GLenum mode, GLint first, GLsizei count) { if (count < 0 || first < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2097,7 +2101,7 @@ void __stdcall glDrawArrays(GLenum mode, GLint first, GLsizei count) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2109,7 +2113,7 @@ void __stdcall glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei coun { if (count < 0 || first < 0 || primcount < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (primcount > 0) @@ -2124,7 +2128,7 @@ void __stdcall glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei coun } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2137,7 +2141,7 @@ void __stdcall glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLv { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2152,11 +2156,11 @@ void __stdcall glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLv case GL_UNSIGNED_INT: if (!context->supports32bitIndices()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } context->drawElements(mode, count, type, indices, 0); @@ -2164,7 +2168,7 @@ void __stdcall glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLv } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2177,7 +2181,7 @@ void __stdcall glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum t { if (count < 0 || primcount < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (primcount > 0) @@ -2194,11 +2198,11 @@ void __stdcall glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum t case GL_UNSIGNED_INT: if (!context->supports32bitIndices()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } context->drawElements(mode, count, type, indices, primcount); @@ -2207,7 +2211,7 @@ void __stdcall glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum t } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2233,13 +2237,13 @@ void __stdcall glEnable(GLenum cap) case GL_BLEND: context->setBlend(true); break; case GL_DITHER: context->setDither(true); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2251,7 +2255,7 @@ void __stdcall glEnableVertexAttribArray(GLuint index) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2263,7 +2267,7 @@ void __stdcall glEnableVertexAttribArray(GLuint index) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2279,7 +2283,7 @@ void __stdcall glEndQueryEXT(GLenum target) case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -2291,7 +2295,7 @@ void __stdcall glEndQueryEXT(GLenum target) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2309,7 +2313,7 @@ void __stdcall glFinishFenceNV(GLuint fence) if (fenceObject == NULL) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } fenceObject->finishFence(); @@ -2317,7 +2321,7 @@ void __stdcall glFinishFenceNV(GLuint fence) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2336,7 +2340,7 @@ void __stdcall glFinish(void) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2355,7 +2359,7 @@ void __stdcall glFlush(void) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2369,7 +2373,7 @@ void __stdcall glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenu if ((target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE) || (renderbuffertarget != GL_RENDERBUFFER && renderbuffer != 0)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -2391,28 +2395,39 @@ void __stdcall glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenu if (!framebuffer || (framebufferHandle == 0 && renderbuffer != 0)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } - switch (attachment) + if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT) { - case GL_COLOR_ATTACHMENT0: - framebuffer->setColorbuffer(GL_RENDERBUFFER, renderbuffer); - break; - case GL_DEPTH_ATTACHMENT: - framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer); - break; - case GL_STENCIL_ATTACHMENT: - framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer); - break; - default: - return error(GL_INVALID_ENUM); + const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT); + + if (colorAttachment >= context->getMaximumRenderTargets()) + { + return gl::error(GL_INVALID_VALUE); + } + + framebuffer->setColorbuffer(colorAttachment, GL_RENDERBUFFER, renderbuffer); + } + else + { + switch (attachment) + { + case GL_DEPTH_ATTACHMENT: + framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer); + break; + case GL_STENCIL_ATTACHMENT: + framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer); + break; + default: + return gl::error(GL_INVALID_ENUM); + } } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2425,23 +2440,34 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t { if (target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE) { - return error(GL_INVALID_ENUM); - } - - switch (attachment) - { - case GL_COLOR_ATTACHMENT0: - case GL_DEPTH_ATTACHMENT: - case GL_STENCIL_ATTACHMENT: - break; - default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); if (context) { + if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT) + { + const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT); + + if (colorAttachment >= context->getMaximumRenderTargets()) + { + return gl::error(GL_INVALID_VALUE); + } + } + else + { + switch (attachment) + { + case GL_DEPTH_ATTACHMENT: + case GL_STENCIL_ATTACHMENT: + break; + default: + return gl::error(GL_INVALID_ENUM); + } + } + if (texture == 0) { textarget = GL_NONE; @@ -2452,7 +2478,7 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t if (tex == NULL) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } switch (textarget) @@ -2461,12 +2487,12 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t { if (tex->getTarget() != GL_TEXTURE_2D) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::Texture2D *tex2d = static_cast<gl::Texture2D *>(tex); if (tex2d->isCompressed(0)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; } @@ -2480,23 +2506,23 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t { if (tex->getTarget() != GL_TEXTURE_CUBE_MAP) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::TextureCubeMap *texcube = static_cast<gl::TextureCubeMap *>(tex); if (texcube->isCompressed(textarget, level)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; } default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (level != 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -2515,20 +2541,33 @@ void __stdcall glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum t if (framebufferHandle == 0 || !framebuffer) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } - switch (attachment) + if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT) { - case GL_COLOR_ATTACHMENT0: framebuffer->setColorbuffer(textarget, texture); break; - case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture); break; - case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break; + const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT); + + if (colorAttachment >= context->getMaximumRenderTargets()) + { + return gl::error(GL_INVALID_VALUE); + } + + framebuffer->setColorbuffer(colorAttachment, textarget, texture); + } + else + { + switch (attachment) + { + case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture); break; + case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break; + } } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2552,12 +2591,12 @@ void __stdcall glFrontFace(GLenum mode) } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2569,7 +2608,7 @@ void __stdcall glGenBuffers(GLsizei n, GLuint* buffers) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2584,7 +2623,7 @@ void __stdcall glGenBuffers(GLsizei n, GLuint* buffers) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2606,11 +2645,11 @@ void __stdcall glGenerateMipmap(GLenum target) if (tex2d->isCompressed(0)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (tex2d->isDepth(0)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } tex2d->generateMipmaps(); @@ -2623,7 +2662,7 @@ void __stdcall glGenerateMipmap(GLenum target) if (texcube->isCompressed(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texcube->generateMipmaps(); @@ -2631,13 +2670,13 @@ void __stdcall glGenerateMipmap(GLenum target) } default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2649,7 +2688,7 @@ void __stdcall glGenFencesNV(GLsizei n, GLuint* fences) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2664,7 +2703,7 @@ void __stdcall glGenFencesNV(GLsizei n, GLuint* fences) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2676,7 +2715,7 @@ void __stdcall glGenFramebuffers(GLsizei n, GLuint* framebuffers) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2691,7 +2730,7 @@ void __stdcall glGenFramebuffers(GLsizei n, GLuint* framebuffers) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2703,7 +2742,7 @@ void __stdcall glGenQueriesEXT(GLsizei n, GLuint* ids) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2718,7 +2757,7 @@ void __stdcall glGenQueriesEXT(GLsizei n, GLuint* ids) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2730,7 +2769,7 @@ void __stdcall glGenRenderbuffers(GLsizei n, GLuint* renderbuffers) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2745,7 +2784,7 @@ void __stdcall glGenRenderbuffers(GLsizei n, GLuint* renderbuffers) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2757,7 +2796,7 @@ void __stdcall glGenTextures(GLsizei n, GLuint* textures) { if (n < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2772,7 +2811,7 @@ void __stdcall glGenTextures(GLsizei n, GLuint* textures) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2786,7 +2825,7 @@ void __stdcall glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, { if (bufsize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2799,17 +2838,17 @@ void __stdcall glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } if (index >= (GLuint)programObject->getActiveAttributeCount()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } programObject->getActiveAttribute(index, bufsize, length, size, type, name); @@ -2817,7 +2856,7 @@ void __stdcall glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2831,7 +2870,7 @@ void __stdcall glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, { if (bufsize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2844,17 +2883,17 @@ void __stdcall glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } if (index >= (GLuint)programObject->getActiveUniformCount()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } programObject->getActiveUniform(index, bufsize, length, size, type, name); @@ -2862,7 +2901,7 @@ void __stdcall glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2875,7 +2914,7 @@ void __stdcall glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* c { if (maxcount < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -2888,11 +2927,11 @@ void __stdcall glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* c { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -2901,7 +2940,7 @@ void __stdcall glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* c } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -2922,18 +2961,18 @@ int __stdcall glGetAttribLocation(GLuint program, const GLchar* name) { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION, -1); + return gl::error(GL_INVALID_OPERATION, -1); } else { - return error(GL_INVALID_VALUE, -1); + return gl::error(GL_INVALID_VALUE, -1); } } gl::ProgramBinary *programBinary = programObject->getProgramBinary(); if (!programObject->isLinked() || !programBinary) { - return error(GL_INVALID_OPERATION, -1); + return gl::error(GL_INVALID_OPERATION, -1); } return programBinary->getAttributeLocation(name); @@ -2941,7 +2980,7 @@ int __stdcall glGetAttribLocation(GLuint program, const GLchar* name) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, -1); + return gl::error(GL_OUT_OF_MEMORY, -1); } return -1; @@ -2962,7 +3001,7 @@ void __stdcall glGetBooleanv(GLenum pname, GLboolean* params) GLenum nativeType; unsigned int numParams = 0; if (!context->getQueryParameterInfo(pname, &nativeType, &numParams)) - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); if (numParams == 0) return; // it is known that the pname is valid, but there are no parameters to return @@ -3006,7 +3045,7 @@ void __stdcall glGetBooleanv(GLenum pname, GLboolean* params) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3030,13 +3069,13 @@ void __stdcall glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params case GL_ELEMENT_ARRAY_BUFFER: buffer = context->getElementArrayBuffer(); break; - default: return error(GL_INVALID_ENUM); + default: return gl::error(GL_INVALID_ENUM); } if (!buffer) { // A null buffer means that "0" is bound to the requested buffer target - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } switch (pname) @@ -3047,13 +3086,13 @@ void __stdcall glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params case GL_BUFFER_SIZE: *params = buffer->size(); break; - default: return error(GL_INVALID_ENUM); + default: return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3086,7 +3125,7 @@ void __stdcall glGetFenceivNV(GLuint fence, GLenum pname, GLint *params) if (fenceObject == NULL) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } fenceObject->getFenceiv(pname, params); @@ -3094,7 +3133,7 @@ void __stdcall glGetFenceivNV(GLuint fence, GLenum pname, GLint *params) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3113,7 +3152,7 @@ void __stdcall glGetFloatv(GLenum pname, GLfloat* params) GLenum nativeType; unsigned int numParams = 0; if (!context->getQueryParameterInfo(pname, &nativeType, &numParams)) - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); if (numParams == 0) return; // it is known that the pname is valid, but that there are no parameters to return. @@ -3154,7 +3193,7 @@ void __stdcall glGetFloatv(GLenum pname, GLfloat* params) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3171,7 +3210,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac { if (target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Framebuffer *framebuffer = NULL; @@ -3179,7 +3218,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac { if(context->getReadFramebufferHandle() == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } framebuffer = context->getReadFramebuffer(); @@ -3188,7 +3227,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac { if (context->getDrawFramebufferHandle() == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } framebuffer = context->getDrawFramebuffer(); @@ -3196,21 +3235,33 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac GLenum attachmentType; GLuint attachmentHandle; - switch (attachment) + + if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT) { - case GL_COLOR_ATTACHMENT0: - attachmentType = framebuffer->getColorbufferType(); - attachmentHandle = framebuffer->getColorbufferHandle(); - break; - case GL_DEPTH_ATTACHMENT: - attachmentType = framebuffer->getDepthbufferType(); - attachmentHandle = framebuffer->getDepthbufferHandle(); - break; - case GL_STENCIL_ATTACHMENT: - attachmentType = framebuffer->getStencilbufferType(); - attachmentHandle = framebuffer->getStencilbufferHandle(); - break; - default: return error(GL_INVALID_ENUM); + const unsigned int colorAttachment = (attachment - GL_COLOR_ATTACHMENT0_EXT); + + if (colorAttachment >= context->getMaximumRenderTargets()) + { + return gl::error(GL_INVALID_ENUM); + } + + attachmentType = framebuffer->getColorbufferType(colorAttachment); + attachmentHandle = framebuffer->getColorbufferHandle(colorAttachment); + } + else + { + switch (attachment) + { + case GL_DEPTH_ATTACHMENT: + attachmentType = framebuffer->getDepthbufferType(); + attachmentHandle = framebuffer->getDepthbufferHandle(); + break; + case GL_STENCIL_ATTACHMENT: + attachmentType = framebuffer->getStencilbufferType(); + attachmentHandle = framebuffer->getStencilbufferHandle(); + break; + default: return gl::error(GL_INVALID_ENUM); + } } GLenum attachmentObjectType; // Type category @@ -3240,7 +3291,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: @@ -3250,7 +3301,7 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: @@ -3267,17 +3318,17 @@ void __stdcall glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attac } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3317,7 +3368,7 @@ void __stdcall glGetIntegerv(GLenum pname, GLint* params) GLenum nativeType; unsigned int numParams = 0; if (!context->getQueryParameterInfo(pname, &nativeType, &numParams)) - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); if (numParams == 0) return; // it is known that pname is valid, but there are no parameters to return @@ -3363,7 +3414,7 @@ void __stdcall glGetIntegerv(GLenum pname, GLint* params) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3381,7 +3432,7 @@ void __stdcall glGetProgramiv(GLuint program, GLenum pname, GLint* params) if (!programObject) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (pname) @@ -3417,13 +3468,13 @@ void __stdcall glGetProgramiv(GLuint program, GLenum pname, GLint* params) *params = programObject->getProgramBinaryLength(); return; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3436,7 +3487,7 @@ void __stdcall glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* len { if (bufsize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -3447,7 +3498,7 @@ void __stdcall glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* len if (!programObject) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } programObject->getInfoLog(bufsize, length, infolog); @@ -3455,7 +3506,7 @@ void __stdcall glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* len } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3470,7 +3521,7 @@ void __stdcall glGetQueryivEXT(GLenum target, GLenum pname, GLint *params) case GL_CURRENT_QUERY_EXT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -3482,7 +3533,7 @@ void __stdcall glGetQueryivEXT(GLenum target, GLenum pname, GLint *params) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3498,7 +3549,7 @@ void __stdcall glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params) case GL_QUERY_RESULT_AVAILABLE_EXT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -3508,12 +3559,12 @@ void __stdcall glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params) if (!queryObject) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (context->getActiveQuery(queryObject->getType()) == id) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } switch(pname) @@ -3531,7 +3582,7 @@ void __stdcall glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3547,12 +3598,12 @@ void __stdcall glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* { if (target != GL_RENDERBUFFER) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (context->getRenderbufferHandle() == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getRenderbufferHandle()); @@ -3575,17 +3626,17 @@ void __stdcall glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3603,7 +3654,7 @@ void __stdcall glGetShaderiv(GLuint shader, GLenum pname, GLint* params) if (!shaderObject) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (pname) @@ -3627,13 +3678,13 @@ void __stdcall glGetShaderiv(GLuint shader, GLenum pname, GLint* params) *params = shaderObject->getTranslatedSourceLength(); return; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3646,7 +3697,7 @@ void __stdcall glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* lengt { if (bufsize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -3657,7 +3708,7 @@ void __stdcall glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* lengt if (!shaderObject) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } shaderObject->getInfoLog(bufsize, length, infolog); @@ -3665,7 +3716,7 @@ void __stdcall glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* lengt } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3682,7 +3733,7 @@ void __stdcall glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontyp case GL_FRAGMENT_SHADER: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (precisiontype) @@ -3705,12 +3756,12 @@ void __stdcall glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontyp *precision = 0; break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3723,7 +3774,7 @@ void __stdcall glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length { if (bufsize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -3734,7 +3785,7 @@ void __stdcall glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length if (!shaderObject) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } shaderObject->getSource(bufsize, length, source); @@ -3742,7 +3793,7 @@ void __stdcall glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3755,7 +3806,7 @@ void __stdcall glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, { if (bufsize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -3766,7 +3817,7 @@ void __stdcall glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, if (!shaderObject) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } shaderObject->getTranslatedSource(bufsize, length, source); @@ -3774,7 +3825,7 @@ void __stdcall glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3799,12 +3850,12 @@ const GLubyte* __stdcall glGetString(GLenum name) case GL_EXTENSIONS: return (GLubyte*)((context != NULL) ? context->getExtensionString() : ""); default: - return error(GL_INVALID_ENUM, (GLubyte*)NULL); + return gl::error(GL_INVALID_ENUM, (GLubyte*)NULL); } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, (GLubyte*)NULL); + return gl::error(GL_OUT_OF_MEMORY, (GLubyte*)NULL); } } @@ -3829,7 +3880,7 @@ void __stdcall glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) texture = context->getTextureCubeMap(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (pname) @@ -3855,18 +3906,18 @@ void __stdcall glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (!context->supportsTextureFilterAnisotropy()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } *params = (GLfloat)texture->getMaxAnisotropy(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3891,7 +3942,7 @@ void __stdcall glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) texture = context->getTextureCubeMap(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (pname) @@ -3917,18 +3968,18 @@ void __stdcall glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (!context->supportsTextureFilterAnisotropy()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } *params = (GLint)texture->getMaxAnisotropy(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3941,7 +3992,7 @@ void __stdcall glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSiz { if (bufSize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -3950,31 +4001,31 @@ void __stdcall glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSiz { if (program == 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Program *programObject = context->getProgram(program); if (!programObject || !programObject->isLinked()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::ProgramBinary *programBinary = programObject->getProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->getUniformfv(location, &bufSize, params)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -3990,31 +4041,31 @@ void __stdcall glGetUniformfv(GLuint program, GLint location, GLfloat* params) { if (program == 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Program *programObject = context->getProgram(program); if (!programObject || !programObject->isLinked()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::ProgramBinary *programBinary = programObject->getProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->getUniformfv(location, NULL, params)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4027,7 +4078,7 @@ void __stdcall glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSiz { if (bufSize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -4036,31 +4087,31 @@ void __stdcall glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSiz { if (program == 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Program *programObject = context->getProgram(program); if (!programObject || !programObject->isLinked()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::ProgramBinary *programBinary = programObject->getProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->getUniformiv(location, &bufSize, params)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4076,31 +4127,31 @@ void __stdcall glGetUniformiv(GLuint program, GLint location, GLint* params) { if (program == 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Program *programObject = context->getProgram(program); if (!programObject || !programObject->isLinked()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::ProgramBinary *programBinary = programObject->getProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->getUniformiv(location, NULL, params)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4125,18 +4176,18 @@ int __stdcall glGetUniformLocation(GLuint program, const GLchar* name) { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION, -1); + return gl::error(GL_INVALID_OPERATION, -1); } else { - return error(GL_INVALID_VALUE, -1); + return gl::error(GL_INVALID_VALUE, -1); } } gl::ProgramBinary *programBinary = programObject->getProgramBinary(); if (!programObject->isLinked() || !programBinary) { - return error(GL_INVALID_OPERATION, -1); + return gl::error(GL_INVALID_OPERATION, -1); } return programBinary->getUniformLocation(name); @@ -4144,7 +4195,7 @@ int __stdcall glGetUniformLocation(GLuint program, const GLchar* name) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, -1); + return gl::error(GL_OUT_OF_MEMORY, -1); } return -1; @@ -4162,7 +4213,7 @@ void __stdcall glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } const gl::VertexAttribute &attribState = context->getVertexAttribState(index); @@ -4196,13 +4247,13 @@ void __stdcall glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) case GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: *params = (GLfloat)attribState.mDivisor; break; - default: return error(GL_INVALID_ENUM); + default: return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4218,7 +4269,7 @@ void __stdcall glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } const gl::VertexAttribute &attribState = context->getVertexAttribState(index); @@ -4253,13 +4304,13 @@ void __stdcall glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) case GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: *params = (GLint)attribState.mDivisor; break; - default: return error(GL_INVALID_ENUM); + default: return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4275,12 +4326,12 @@ void __stdcall glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** po { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } *pointer = const_cast<GLvoid*>(context->getVertexAttribPointer(index)); @@ -4288,7 +4339,7 @@ void __stdcall glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** po } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4305,7 +4356,7 @@ void __stdcall glHint(GLenum target, GLenum mode) case GL_DONT_CARE: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -4318,12 +4369,12 @@ void __stdcall glHint(GLenum target, GLenum mode) if (context) context->setFragmentShaderDerivativeHint(mode); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4347,7 +4398,7 @@ GLboolean __stdcall glIsBuffer(GLuint buffer) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4375,13 +4426,13 @@ GLboolean __stdcall glIsEnabled(GLenum cap) case GL_BLEND: return context->isBlendEnabled(); case GL_DITHER: return context->isDitherEnabled(); default: - return error(GL_INVALID_ENUM, false); + return gl::error(GL_INVALID_ENUM, false); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, false); + return gl::error(GL_OUT_OF_MEMORY, false); } return false; @@ -4409,7 +4460,7 @@ GLboolean __stdcall glIsFenceNV(GLuint fence) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4435,7 +4486,7 @@ GLboolean __stdcall glIsFramebuffer(GLuint framebuffer) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4461,7 +4512,7 @@ GLboolean __stdcall glIsProgram(GLuint program) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4492,7 +4543,7 @@ GLboolean __stdcall glIsQueryEXT(GLuint id) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4518,7 +4569,7 @@ GLboolean __stdcall glIsRenderbuffer(GLuint renderbuffer) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4544,7 +4595,7 @@ GLboolean __stdcall glIsShader(GLuint shader) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4570,7 +4621,7 @@ GLboolean __stdcall glIsTexture(GLuint texture) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, GL_FALSE); + return gl::error(GL_OUT_OF_MEMORY, GL_FALSE); } return GL_FALSE; @@ -4584,7 +4635,7 @@ void __stdcall glLineWidth(GLfloat width) { if (width <= 0.0f) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -4596,7 +4647,7 @@ void __stdcall glLineWidth(GLfloat width) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4616,11 +4667,11 @@ void __stdcall glLinkProgram(GLuint program) { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -4629,7 +4680,7 @@ void __stdcall glLinkProgram(GLuint program) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4648,7 +4699,7 @@ void __stdcall glPixelStorei(GLenum pname, GLint param) case GL_UNPACK_ALIGNMENT: if (param != 1 && param != 2 && param != 4 && param != 8) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } context->setUnpackAlignment(param); @@ -4657,7 +4708,7 @@ void __stdcall glPixelStorei(GLenum pname, GLint param) case GL_PACK_ALIGNMENT: if (param != 1 && param != 2 && param != 4 && param != 8) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } context->setPackAlignment(param); @@ -4668,13 +4719,13 @@ void __stdcall glPixelStorei(GLenum pname, GLint param) break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4693,7 +4744,7 @@ void __stdcall glPolygonOffset(GLfloat factor, GLfloat units) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4709,7 +4760,7 @@ void __stdcall glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, { if (width < 0 || height < 0 || bufSize < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -4726,7 +4777,7 @@ void __stdcall glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, if (!(currentFormat == format && currentType == type) && !validReadFormatType(format, type)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } context->readPixels(x, y, width, height, format, type, &bufSize, data); @@ -4734,7 +4785,7 @@ void __stdcall glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4749,7 +4800,7 @@ void __stdcall glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, { if (width < 0 || height < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -4766,7 +4817,7 @@ void __stdcall glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, if (!(currentFormat == format && currentType == type) && !validReadFormatType(format, type)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } context->readPixels(x, y, width, height, format, type, NULL, pixels); @@ -4774,7 +4825,7 @@ void __stdcall glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4788,7 +4839,7 @@ void __stdcall glReleaseShaderCompiler(void) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4804,17 +4855,17 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp case GL_RENDERBUFFER: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (!gl::IsColorRenderable(internalformat) && !gl::IsDepthRenderable(internalformat) && !gl::IsStencilRenderable(internalformat)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (width < 0 || height < 0 || samples < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -4825,41 +4876,35 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp height > context->getMaximumRenderbufferDimension() || samples > context->getMaxSupportedSamples()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } GLuint handle = context->getRenderbufferHandle(); if (handle == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } switch (internalformat) { case GL_DEPTH_COMPONENT16: - context->setRenderbufferStorage(new gl::Depthbuffer(width, height, samples)); - break; case GL_RGBA4: case GL_RGB5_A1: case GL_RGB565: case GL_RGB8_OES: case GL_RGBA8_OES: - context->setRenderbufferStorage(new gl::Colorbuffer(width, height, internalformat, samples)); - break; case GL_STENCIL_INDEX8: - context->setRenderbufferStorage(new gl::Stencilbuffer(width, height, samples)); - break; case GL_DEPTH24_STENCIL8_OES: - context->setRenderbufferStorage(new gl::DepthStencilbuffer(width, height, samples)); + context->setRenderbufferStorage(width, height, internalformat, samples); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4883,7 +4928,7 @@ void __stdcall glSampleCoverage(GLclampf value, GLboolean invert) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4895,7 +4940,7 @@ void __stdcall glSetFenceNV(GLuint fence, GLenum condition) { if (condition != GL_ALL_COMPLETED_NV) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -4906,7 +4951,7 @@ void __stdcall glSetFenceNV(GLuint fence, GLenum condition) if (fenceObject == NULL) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } fenceObject->setFence(condition); @@ -4914,7 +4959,7 @@ void __stdcall glSetFenceNV(GLuint fence, GLenum condition) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4926,7 +4971,7 @@ void __stdcall glScissor(GLint x, GLint y, GLsizei width, GLsizei height) { if (width < 0 || height < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context* context = gl::getNonLostContext(); @@ -4938,7 +4983,7 @@ void __stdcall glScissor(GLint x, GLint y, GLsizei width, GLsizei height) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4951,11 +4996,11 @@ void __stdcall glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryfor try { // No binary shader formats are supported. - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -4968,7 +5013,7 @@ void __stdcall glShaderSource(GLuint shader, GLsizei count, const GLchar** strin { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -4981,11 +5026,11 @@ void __stdcall glShaderSource(GLuint shader, GLsizei count, const GLchar** strin { if (context->getProgram(shader)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -4994,7 +5039,7 @@ void __stdcall glShaderSource(GLuint shader, GLsizei count, const GLchar** strin } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5016,7 +5061,7 @@ void __stdcall glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint case GL_FRONT_AND_BACK: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (func) @@ -5031,7 +5076,7 @@ void __stdcall glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint case GL_NOTEQUAL: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -5051,7 +5096,7 @@ void __stdcall glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5073,7 +5118,7 @@ void __stdcall glStencilMaskSeparate(GLenum face, GLuint mask) case GL_FRONT_AND_BACK: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -5093,7 +5138,7 @@ void __stdcall glStencilMaskSeparate(GLenum face, GLuint mask) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5116,7 +5161,7 @@ void __stdcall glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenu case GL_FRONT_AND_BACK: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (fail) @@ -5131,7 +5176,7 @@ void __stdcall glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenu case GL_DECR_WRAP: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (zfail) @@ -5146,7 +5191,7 @@ void __stdcall glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenu case GL_DECR_WRAP: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (zpass) @@ -5161,7 +5206,7 @@ void __stdcall glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenu case GL_DECR_WRAP: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -5181,7 +5226,7 @@ void __stdcall glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenu } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5199,7 +5244,7 @@ GLboolean __stdcall glTestFenceNV(GLuint fence) if (fenceObject == NULL) { - return error(GL_INVALID_OPERATION, GL_TRUE); + return gl::error(GL_INVALID_OPERATION, GL_TRUE); } return fenceObject->testFence(); @@ -5207,7 +5252,7 @@ GLboolean __stdcall glTestFenceNV(GLuint fence) } catch(std::bad_alloc&) { - error(GL_OUT_OF_MEMORY); + gl::error(GL_OUT_OF_MEMORY); } return GL_TRUE; @@ -5224,12 +5269,12 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL { if (!validImageSize(level, width, height)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (internalformat != GLint(format)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } // validate <type> by itself (used as secondary key below) @@ -5246,7 +5291,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_FLOAT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } // validate <format> + <type> combinations @@ -5264,7 +5309,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_HALF_FLOAT_OES: break; default: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_RGB: @@ -5276,7 +5321,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_HALF_FLOAT_OES: break; default: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_RGBA: @@ -5289,7 +5334,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_HALF_FLOAT_OES: break; default: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_BGRA_EXT: @@ -5298,7 +5343,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_UNSIGNED_BYTE: break; default: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: // error cases for compressed textures are handled below @@ -5313,7 +5358,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_UNSIGNED_INT: break; default: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; case GL_DEPTH_STENCIL_OES: @@ -5322,16 +5367,16 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_UNSIGNED_INT_24_8_OES: break; default: - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (border != 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -5340,7 +5385,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL { if (level > context->getMaximumTextureLevel()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (target) @@ -5349,7 +5394,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL if (width > (context->getMaximumTextureDimension() >> level) || height > (context->getMaximumTextureDimension() >> level)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: @@ -5360,17 +5405,17 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: if (width != height) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (width > (context->getMaximumCubeTextureDimension() >> level) || height > (context->getMaximumCubeTextureDimension() >> level)) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (format) { @@ -5378,48 +5423,48 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: if (context->supportsDXT1Textures()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: if (context->supportsDXT3Textures()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: if (context->supportsDXT5Textures()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_DEPTH_COMPONENT: case GL_DEPTH_STENCIL_OES: if (!context->supportsDepthTextures()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (target != GL_TEXTURE_2D) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } // OES_depth_texture supports loading depth data and multiple levels, // but ANGLE_depth_texture does not if (pixels != NULL || level != 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; default: @@ -5430,14 +5475,14 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL { if (!context->supportsFloat32Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } else if (type == GL_HALF_FLOAT_OES) { if (!context->supportsFloat16Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } @@ -5447,12 +5492,12 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL if (!texture) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texture->setImage(level, width, height, format, type, context->getUnpackAlignment(), pixels); @@ -5463,12 +5508,12 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL if (!texture) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } switch (target) @@ -5498,7 +5543,7 @@ void __stdcall glTexImage2D(GLenum target, GLint level, GLint internalformat, GL } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5523,7 +5568,7 @@ void __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param) texture = context->getTextureCubeMap(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (pname) @@ -5531,51 +5576,51 @@ void __stdcall glTexParameterf(GLenum target, GLenum pname, GLfloat param) case GL_TEXTURE_WRAP_S: if (!texture->setWrapS((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_WRAP_T: if (!texture->setWrapT((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_MIN_FILTER: if (!texture->setMinFilter((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_MAG_FILTER: if (!texture->setMagFilter((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_USAGE_ANGLE: if (!texture->setUsage((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (!context->supportsTextureFilterAnisotropy()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (!texture->setMaxAnisotropy((float)param, context->getTextureMaxAnisotropy())) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5605,7 +5650,7 @@ void __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param) texture = context->getTextureCubeMap(); break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } switch (pname) @@ -5613,51 +5658,51 @@ void __stdcall glTexParameteri(GLenum target, GLenum pname, GLint param) case GL_TEXTURE_WRAP_S: if (!texture->setWrapS((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_WRAP_T: if (!texture->setWrapT((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_MIN_FILTER: if (!texture->setMinFilter((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_MAG_FILTER: if (!texture->setMagFilter((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_USAGE_ANGLE: if (!texture->setUsage((GLenum)param)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (!context->supportsTextureFilterAnisotropy()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (!texture->setMaxAnisotropy((float)param, context->getTextureMaxAnisotropy())) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5675,22 +5720,22 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf { if (target != GL_TEXTURE_2D && target != GL_TEXTURE_CUBE_MAP) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (width < 1 || height < 1 || levels < 1) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (target == GL_TEXTURE_CUBE_MAP && width != height) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (levels != 1 && levels != gl::log2(std::max(width, height)) + 1) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } GLenum format = gl::ExtractFormat(internalformat); @@ -5698,7 +5743,7 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf if (format == GL_NONE || type == GL_NONE) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Context *context = gl::getNonLostContext(); @@ -5711,25 +5756,25 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf if (width > context->getMaximumTextureDimension() || height > context->getMaximumTextureDimension()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; case GL_TEXTURE_CUBE_MAP: if (width > context->getMaximumCubeTextureDimension() || height > context->getMaximumCubeTextureDimension()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (levels != 1 && !context->supportsNonPower2Texture()) { if (!gl::isPow2(width) || !gl::isPow2(height)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } @@ -5739,19 +5784,19 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: if (!context->supportsDXT1Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: if (!context->supportsDXT3Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: if (!context->supportsDXT5Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_RGBA32F_EXT: @@ -5761,7 +5806,7 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf case GL_LUMINANCE_ALPHA32F_EXT: if (!context->supportsFloat32Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_RGBA16F_EXT: @@ -5771,7 +5816,7 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf case GL_LUMINANCE_ALPHA16F_EXT: if (!context->supportsFloat16Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } break; case GL_DEPTH_COMPONENT16: @@ -5779,16 +5824,16 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf case GL_DEPTH24_STENCIL8_OES: if (!context->supportsDepthTextures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (target != GL_TEXTURE_2D) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } // ANGLE_depth_texture only supports 1-level textures if (levels != 1) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } break; default: @@ -5801,12 +5846,12 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf if (!texture || texture->id() == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texture->storage(levels, internalformat, width, height); @@ -5817,12 +5862,12 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf if (!texture || texture->id() == 0) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (texture->isImmutable()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } texture->storage(levels, internalformat, width); @@ -5832,7 +5877,7 @@ void __stdcall glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalf } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5848,17 +5893,17 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint { if (!gl::IsInternalTextureTarget(target)) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (!checkTextureFormatType(format, type)) @@ -5872,35 +5917,35 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint { if (level > context->getMaximumTextureLevel()) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (format == GL_FLOAT) { if (!context->supportsFloat32Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } else if (format == GL_HALF_FLOAT_OES) { if (!context->supportsFloat16Textures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } } else if (gl::IsDepthTexture(format)) { if (!context->supportsDepthTextures()) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (target != GL_TEXTURE_2D) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } // OES_depth_texture supports loading depth data, but ANGLE_depth_texture does not - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (width == 0 || height == 0 || pixels == NULL) @@ -5932,7 +5977,7 @@ void __stdcall glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5949,7 +5994,7 @@ void __stdcall glUniform1fv(GLint location, GLsizei count, const GLfloat* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -5964,18 +6009,18 @@ void __stdcall glUniform1fv(GLint location, GLsizei count, const GLfloat* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform1fv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -5992,7 +6037,7 @@ void __stdcall glUniform1iv(GLint location, GLsizei count, const GLint* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6007,18 +6052,18 @@ void __stdcall glUniform1iv(GLint location, GLsizei count, const GLint* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform1iv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6037,7 +6082,7 @@ void __stdcall glUniform2fv(GLint location, GLsizei count, const GLfloat* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6052,18 +6097,18 @@ void __stdcall glUniform2fv(GLint location, GLsizei count, const GLfloat* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform2fv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6082,7 +6127,7 @@ void __stdcall glUniform2iv(GLint location, GLsizei count, const GLint* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6097,18 +6142,18 @@ void __stdcall glUniform2iv(GLint location, GLsizei count, const GLint* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform2iv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6127,7 +6172,7 @@ void __stdcall glUniform3fv(GLint location, GLsizei count, const GLfloat* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6142,18 +6187,18 @@ void __stdcall glUniform3fv(GLint location, GLsizei count, const GLfloat* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform3fv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6172,7 +6217,7 @@ void __stdcall glUniform3iv(GLint location, GLsizei count, const GLint* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6187,18 +6232,18 @@ void __stdcall glUniform3iv(GLint location, GLsizei count, const GLint* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform3iv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6217,7 +6262,7 @@ void __stdcall glUniform4fv(GLint location, GLsizei count, const GLfloat* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6232,18 +6277,18 @@ void __stdcall glUniform4fv(GLint location, GLsizei count, const GLfloat* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform4fv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6262,7 +6307,7 @@ void __stdcall glUniform4iv(GLint location, GLsizei count, const GLint* v) { if (count < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6277,18 +6322,18 @@ void __stdcall glUniform4iv(GLint location, GLsizei count, const GLint* v) gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniform4iv(location, count, v)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6301,7 +6346,7 @@ void __stdcall glUniformMatrix2fv(GLint location, GLsizei count, GLboolean trans { if (count < 0 || transpose != GL_FALSE) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6316,18 +6361,18 @@ void __stdcall glUniformMatrix2fv(GLint location, GLsizei count, GLboolean trans gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniformMatrix2fv(location, count, value)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6340,7 +6385,7 @@ void __stdcall glUniformMatrix3fv(GLint location, GLsizei count, GLboolean trans { if (count < 0 || transpose != GL_FALSE) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6355,18 +6400,18 @@ void __stdcall glUniformMatrix3fv(GLint location, GLsizei count, GLboolean trans gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniformMatrix3fv(location, count, value)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6379,7 +6424,7 @@ void __stdcall glUniformMatrix4fv(GLint location, GLsizei count, GLboolean trans { if (count < 0 || transpose != GL_FALSE) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (location == -1) @@ -6394,18 +6439,18 @@ void __stdcall glUniformMatrix4fv(GLint location, GLsizei count, GLboolean trans gl::ProgramBinary *programBinary = context->getCurrentProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->setUniformMatrix4fv(location, count, value)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } } } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6425,17 +6470,17 @@ void __stdcall glUseProgram(GLuint program) { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } if (program != 0 && !programObject->isLinked()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } context->useProgram(program); @@ -6443,7 +6488,7 @@ void __stdcall glUseProgram(GLuint program) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6463,11 +6508,11 @@ void __stdcall glValidateProgram(GLuint program) { if (context->getShader(program)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } else { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } } @@ -6476,7 +6521,7 @@ void __stdcall glValidateProgram(GLuint program) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6488,7 +6533,7 @@ void __stdcall glVertexAttrib1f(GLuint index, GLfloat x) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6501,7 +6546,7 @@ void __stdcall glVertexAttrib1f(GLuint index, GLfloat x) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6513,7 +6558,7 @@ void __stdcall glVertexAttrib1fv(GLuint index, const GLfloat* values) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6526,7 +6571,7 @@ void __stdcall glVertexAttrib1fv(GLuint index, const GLfloat* values) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6538,7 +6583,7 @@ void __stdcall glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6551,7 +6596,7 @@ void __stdcall glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6563,7 +6608,7 @@ void __stdcall glVertexAttrib2fv(GLuint index, const GLfloat* values) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6576,7 +6621,7 @@ void __stdcall glVertexAttrib2fv(GLuint index, const GLfloat* values) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6588,7 +6633,7 @@ void __stdcall glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6601,7 +6646,7 @@ void __stdcall glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6613,7 +6658,7 @@ void __stdcall glVertexAttrib3fv(GLuint index, const GLfloat* values) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6626,7 +6671,7 @@ void __stdcall glVertexAttrib3fv(GLuint index, const GLfloat* values) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6638,7 +6683,7 @@ void __stdcall glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, G { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6651,7 +6696,7 @@ void __stdcall glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, G } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6663,7 +6708,7 @@ void __stdcall glVertexAttrib4fv(GLuint index, const GLfloat* values) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6675,7 +6720,7 @@ void __stdcall glVertexAttrib4fv(GLuint index, const GLfloat* values) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6687,7 +6732,7 @@ void __stdcall glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6699,7 +6744,7 @@ void __stdcall glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6713,12 +6758,12 @@ void __stdcall glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLbo { if (index >= gl::MAX_VERTEX_ATTRIBS) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (size < 1 || size > 4) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } switch (type) @@ -6731,12 +6776,12 @@ void __stdcall glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLbo case GL_FLOAT: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if (stride < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6748,7 +6793,7 @@ void __stdcall glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLbo } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6760,7 +6805,7 @@ void __stdcall glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { if (width < 0 || height < 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } gl::Context *context = gl::getNonLostContext(); @@ -6772,7 +6817,7 @@ void __stdcall glViewport(GLint x, GLint y, GLsizei width, GLsizei height) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6791,18 +6836,18 @@ void __stdcall glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLi case GL_NEAREST: break; default: - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } if ((mask & ~(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)) != 0) { - return error(GL_INVALID_VALUE); + return gl::error(GL_INVALID_VALUE); } if (srcX1 - srcX0 != dstX1 - dstX0 || srcY1 - srcY0 != dstY1 - dstY0) { ERR("Scaling and flipping in BlitFramebufferANGLE not supported by this implementation"); - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::Context *context = gl::getNonLostContext(); @@ -6812,7 +6857,7 @@ void __stdcall glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLi if (context->getReadFramebufferHandle() == context->getDrawFramebufferHandle()) { ERR("Blits with the same source and destination framebuffer are not supported by this implementation."); - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask); @@ -6820,7 +6865,7 @@ void __stdcall glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLi } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6838,7 +6883,7 @@ void __stdcall glTexImage3DOES(GLenum target, GLint level, GLenum internalformat } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6858,19 +6903,19 @@ void __stdcall glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *l if (!programObject || !programObject->isLinked()) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } gl::ProgramBinary *programBinary = programObject->getProgramBinary(); if (!programBinary) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } if (!programBinary->save(binary, bufSize, length)) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } *binaryFormat = GL_PROGRAM_BINARY_ANGLE; @@ -6878,7 +6923,7 @@ void __stdcall glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *l } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6896,14 +6941,14 @@ void __stdcall glProgramBinaryOES(GLuint program, GLenum binaryFormat, { if (binaryFormat != GL_PROGRAM_BINARY_ANGLE) { - return error(GL_INVALID_ENUM); + return gl::error(GL_INVALID_ENUM); } gl::Program *programObject = context->getProgram(program); if (!programObject) { - return error(GL_INVALID_OPERATION); + return gl::error(GL_INVALID_OPERATION); } context->setProgramBinary(program, binary, length); @@ -6911,7 +6956,63 @@ void __stdcall glProgramBinaryOES(GLuint program, GLenum binaryFormat, } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY); + return gl::error(GL_OUT_OF_MEMORY); + } +} + +void __stdcall glDrawBuffersEXT(GLsizei n, const GLenum *bufs) +{ + EVENT("(GLenum n = %d, bufs = 0x%0.8p)", n, bufs); + + try + { + gl::Context *context = gl::getNonLostContext(); + + if (context) + { + if (n < 0 || (unsigned int)n > context->getMaximumRenderTargets()) + { + return gl::error(GL_INVALID_VALUE); + } + + if (context->getDrawFramebufferHandle() == 0) + { + if (n > 1) + { + return gl::error(GL_INVALID_OPERATION); + } + + if (n == 1) + { + if (bufs[0] != GL_NONE && bufs[0] != GL_BACK) + { + return gl::error(GL_INVALID_OPERATION); + } + } + } + else + { + for (int colorAttachment = 0; colorAttachment < n; colorAttachment++) + { + const GLenum attachment = GL_COLOR_ATTACHMENT0_EXT + colorAttachment; + if (bufs[colorAttachment] != GL_NONE && bufs[colorAttachment] != attachment) + { + return gl::error(GL_INVALID_OPERATION); + } + } + } + + gl::Framebuffer *framebuffer = context->getDrawFramebuffer(); + + for (int colorAttachment = 0; colorAttachment < n; colorAttachment++) + { + framebuffer->setDrawBufferState(colorAttachment, bufs[colorAttachment]); + } + } + } + catch (std::bad_alloc&) + { + return gl::error(GL_OUT_OF_MEMORY); } } @@ -6948,13 +7049,14 @@ __eglMustCastToProperFunctionPointerType __stdcall glGetProcAddress(const char * {"glEndQueryEXT", (__eglMustCastToProperFunctionPointerType)glEndQueryEXT}, {"glGetQueryivEXT", (__eglMustCastToProperFunctionPointerType)glGetQueryivEXT}, {"glGetQueryObjectuivEXT", (__eglMustCastToProperFunctionPointerType)glGetQueryObjectuivEXT}, + {"glDrawBuffersEXT", (__eglMustCastToProperFunctionPointerType)glDrawBuffersEXT}, {"glVertexAttribDivisorANGLE", (__eglMustCastToProperFunctionPointerType)glVertexAttribDivisorANGLE}, {"glDrawArraysInstancedANGLE", (__eglMustCastToProperFunctionPointerType)glDrawArraysInstancedANGLE}, {"glDrawElementsInstancedANGLE", (__eglMustCastToProperFunctionPointerType)glDrawElementsInstancedANGLE}, {"glGetProgramBinaryOES", (__eglMustCastToProperFunctionPointerType)glGetProgramBinaryOES}, {"glProgramBinaryOES", (__eglMustCastToProperFunctionPointerType)glProgramBinaryOES}, }; - for (int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++) + for (unsigned int ext = 0; ext < ArraySize(glExtensions); ext++) { if (strcmp(procname, glExtensions[ext].name) == 0) { @@ -6993,7 +7095,7 @@ bool __stdcall glBindTexImage(egl::Surface *surface) } catch(std::bad_alloc&) { - return error(GL_OUT_OF_MEMORY, false); + return gl::error(GL_OUT_OF_MEMORY, false); } return true; |