diff -r e70851cd9e5e -r a3f46bb01be2 holdingarea/libGLESv1/inc/GLESContext.h --- a/holdingarea/libGLESv1/inc/GLESContext.h Thu Sep 16 12:43:44 2010 +0100 +++ b/holdingarea/libGLESv1/inc/GLESContext.h Mon Sep 20 14:29:05 2010 +0100 @@ -1,205 +1,205 @@ -/* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and /or associated documentation files - * (the "Materials "), to deal in the Materials without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Materials, - * and to permit persons to whom the Materials are furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Materials. - * - * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR - * THE USE OR OTHER DEALINGS IN THE MATERIALS. - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: - * - */ - -#ifndef _GLESCONTEXT_H_ -#define _GLESCONTEXT_H_ - -#include -#include -#include -#include "GLESArray.h" -#include "glesInternal.h" -#include "GLESDesktopGL.h" -#include "glesOS.h" -#include "EGLInterface.h" - -struct GLESBuffer; -class GLESTexture; -struct GLESTextureLevel; - -namespace -{ -typedef std::map BufferMap; -typedef std::map TextureMap; -} - -enum GLESArrayFlag -{ - GLES_INVALID_ARRAY = 0, - GLES_VERTEX_ARRAY = 1 << 0, - GLES_NORMAL_ARRAY = 1 << 1, - GLES_COLOR_ARRAY = 1 << 2, - GLES_POINT_SIZE_ARRAY = 1 << 3, - GLES_TEXTURE_COORD_ARRAY = 1 << 4 -}; - -class GLESContext { -public: - GLESContext(void* nativeContext); - ~GLESContext(); - - bool Initialize(); - - bool IsInitialized() const { return m_initialized; } - const GLESDesktopGL& DGL() const { return m_dgl; } - void* NativeContext() const { return m_nativeContext; } - GLenum Error() const { return m_error; } - GLenum GetHostError(); - unsigned int MaxTextureLevel() const { return m_maxTextureLevel; } - unsigned int MaxTextureUnits() const { return m_maxTextureUnits; } - unsigned int MaxClipPlanes() const { return m_maxClipPlanes; } - unsigned int MaxLights() const { return m_maxLights; } - int ClientActiveTexture() const { return m_clientActiveTexture; } - GLESArray& VertexArray() { return m_vertexArray; } - const GLESArray& VertexArray() const { return m_vertexArray; } - GLESArray& NormalArray() { return m_normalArray; } - const GLESArray& NormalArray() const { return m_normalArray; } - GLESArray& ColorArray() { return m_colorArray; } - const GLESArray& ColorArray() const { return m_colorArray; } - const GLESArray& PointSizeArray() const { return m_pointSizeArray; } - GLESArray& TexCoordArray(unsigned int texture); - GLESArray& TexCoordArray(); - const GLESArray& TexCoordArray(unsigned int texture) const; - const GLESArray& TexCoordArray() const; - unsigned int ArrayBufferBinding() const { return m_arrayBufferBinding; } - GLESBuffer* ArrayBuffer(); - unsigned int ElementArrayBufferBinding() const { return m_elementArrayBufferBinding; } - GLESBuffer* ElementArrayBuffer(); - const GLESBuffer* Buffer(unsigned int buffer) const; - unsigned int TextureBinding() const { return m_textureBinding; } - GLESTexture* Texture(unsigned int name); - const GLESTextureLevel* TextureLevel(GLint level) const; - - bool IsArrayEnabled(GLESArrayFlag array) const { return !!(m_enabledArrays & array); } - - void SetError(GLenum error) { m_error = error; } - void SetClientActiveTexture(int texture) { m_clientActiveTexture = texture; } - void SetVertexArray(int size, GLenum type, int stride, const void *pointer); - void SetNormalArray(GLenum type, int stride, const void *pointer); - void SetColorArray(int size, GLenum type, int stride, const void *pointer); - void SetPointerSizeArray(GLenum type, int stride, const void *pointer); - void SetTexCoordArray(int size, GLenum type, int stride, const void *pointer); - - void EnableArray(GLESArrayFlag array) { m_enabledArrays |= array; } - void DisableArray(GLESArrayFlag array) { m_enabledArrays &= ~array; } - - void ReserveBufferNames(int num, unsigned int* names); - void DeleteBuffer(unsigned int buffer); - - bool BindArrayBuffer(unsigned int buffer); - bool BindElementArrayBuffer(unsigned int buffer); - - void DeleteTexture(unsigned int texture); - bool BindTexture(unsigned int texture); - -private: - bool m_initialized; - void* m_nativeContext; - GLESDesktopGL m_dgl; - GLenum m_error; - unsigned int m_maxTextureLevel; - unsigned int m_maxTextureUnits; - unsigned int m_maxClipPlanes; - unsigned int m_maxLights; - int m_clientActiveTexture; - GLESArray m_vertexArray; - GLESArray m_normalArray; - GLESArray m_colorArray; - GLESArray m_pointSizeArray; - GLESArray* m_texCoordArray; - unsigned int m_enabledArrays; - unsigned int m_arrayBufferBinding; - unsigned int m_elementArrayBufferBinding; - unsigned int m_textureBinding; - BufferMap m_buffers; - TextureMap m_textures; -}; - -void* glesGetCurrentGLESContext(); - -#define GLES_ENTER_RET(RETVAL) \ - GLESContext* ctx; \ - do \ - { \ - glesGetLock(); \ - ctx = (GLESContext*)glesGetCurrentGLESContext(); \ - if(!ctx) \ - { \ - glesReleaseLock(); \ - return RETVAL; \ - } \ - if(!ctx->IsInitialized()) \ - { \ - if(!ctx->Initialize()) \ - { \ - std::cerr << "Failed to initialize context" << std::endl; \ - exit(1); \ - } \ - } \ - } while(0) - -#define GLES_ENTER() GLES_ENTER_RET(GLES_NO_RETVAL) - -// Check the host error after every API function call so that the error flag -// in the wrapper always contains the latest error. -#define GLES_LEAVE_RET(RETVAL) \ - do \ - { \ - ctx->GetHostError(); \ - glesReleaseLock(); \ - return RETVAL; \ - } while(0) - -#define GLES_LEAVE() GLES_LEAVE_RET(GLES_NO_RETVAL) - -#define GLES_LEAVE_NO_ERROR_CHECK_RET(RETVAL) \ - do \ - { \ - glesReleaseLock(); \ - return RETVAL; \ - } while(0) - -#define GLES_LEAVE_NO_ERROR_CHECK() GLES_LEAVE_NO_ERROR_CHECK_RET(GLES_NO_RETVAL) - -#define GLES_ERROR_IF_RET(COND, ERROR, RETVAL) \ - do \ - { \ - if(COND) \ - { \ - ctx->SetError(ERROR); \ - return RETVAL; \ - } \ - } while(0) - -#define GLES_ERROR_IF(COND, ERROR) GLES_ERROR_IF_RET(COND, ERROR, GLES_NO_RETVAL) -#define GLES_ERROR_RET(ERROR, RETVAL) GLES_ERROR_IF_RET(true, ERROR, RETVAL) -#define GLES_ERROR(ERROR) GLES_ERROR_IF(true, ERROR) - +/* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and /or associated documentation files + * (the "Materials "), to deal in the Materials without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Materials, + * and to permit persons to whom the Materials are furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR + * THE USE OR OTHER DEALINGS IN THE MATERIALS. + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ + +#ifndef _GLESCONTEXT_H_ +#define _GLESCONTEXT_H_ + +#include +#include +#include +#include "GLESArray.h" +#include "glesInternal.h" +#include "GLESDesktopGL.h" +#include "glesOS.h" +#include "EGLInterface.h" + +struct GLESBuffer; +class GLESTexture; +struct GLESTextureLevel; + +namespace +{ +typedef std::map BufferMap; +typedef std::map TextureMap; +} + +enum GLESArrayFlag +{ + GLES_INVALID_ARRAY = 0, + GLES_VERTEX_ARRAY = 1 << 0, + GLES_NORMAL_ARRAY = 1 << 1, + GLES_COLOR_ARRAY = 1 << 2, + GLES_POINT_SIZE_ARRAY = 1 << 3, + GLES_TEXTURE_COORD_ARRAY = 1 << 4 +}; + +class GLESContext { +public: + GLESContext(void* nativeContext); + ~GLESContext(); + + bool Initialize(); + + bool IsInitialized() const { return m_initialized; } + const GLESDesktopGL& DGL() const { return m_dgl; } + void* NativeContext() const { return m_nativeContext; } + GLenum Error() const { return m_error; } + GLenum GetHostError(); + unsigned int MaxTextureLevel() const { return m_maxTextureLevel; } + unsigned int MaxTextureUnits() const { return m_maxTextureUnits; } + unsigned int MaxClipPlanes() const { return m_maxClipPlanes; } + unsigned int MaxLights() const { return m_maxLights; } + int ClientActiveTexture() const { return m_clientActiveTexture; } + GLESArray& VertexArray() { return m_vertexArray; } + const GLESArray& VertexArray() const { return m_vertexArray; } + GLESArray& NormalArray() { return m_normalArray; } + const GLESArray& NormalArray() const { return m_normalArray; } + GLESArray& ColorArray() { return m_colorArray; } + const GLESArray& ColorArray() const { return m_colorArray; } + const GLESArray& PointSizeArray() const { return m_pointSizeArray; } + GLESArray& TexCoordArray(unsigned int texture); + GLESArray& TexCoordArray(); + const GLESArray& TexCoordArray(unsigned int texture) const; + const GLESArray& TexCoordArray() const; + unsigned int ArrayBufferBinding() const { return m_arrayBufferBinding; } + GLESBuffer* ArrayBuffer(); + unsigned int ElementArrayBufferBinding() const { return m_elementArrayBufferBinding; } + GLESBuffer* ElementArrayBuffer(); + const GLESBuffer* Buffer(unsigned int buffer) const; + unsigned int TextureBinding() const { return m_textureBinding; } + GLESTexture* Texture(unsigned int name); + const GLESTextureLevel* TextureLevel(GLint level) const; + + bool IsArrayEnabled(GLESArrayFlag array) const { return !!(m_enabledArrays & array); } + + void SetError(GLenum error) { m_error = error; } + void SetClientActiveTexture(int texture) { m_clientActiveTexture = texture; } + void SetVertexArray(int size, GLenum type, int stride, const void *pointer); + void SetNormalArray(GLenum type, int stride, const void *pointer); + void SetColorArray(int size, GLenum type, int stride, const void *pointer); + void SetPointerSizeArray(GLenum type, int stride, const void *pointer); + void SetTexCoordArray(int size, GLenum type, int stride, const void *pointer); + + void EnableArray(GLESArrayFlag array) { m_enabledArrays |= array; } + void DisableArray(GLESArrayFlag array) { m_enabledArrays &= ~array; } + + void ReserveBufferNames(int num, unsigned int* names); + void DeleteBuffer(unsigned int buffer); + + bool BindArrayBuffer(unsigned int buffer); + bool BindElementArrayBuffer(unsigned int buffer); + + void DeleteTexture(unsigned int texture); + bool BindTexture(unsigned int texture); + +private: + bool m_initialized; + void* m_nativeContext; + GLESDesktopGL m_dgl; + GLenum m_error; + unsigned int m_maxTextureLevel; + unsigned int m_maxTextureUnits; + unsigned int m_maxClipPlanes; + unsigned int m_maxLights; + int m_clientActiveTexture; + GLESArray m_vertexArray; + GLESArray m_normalArray; + GLESArray m_colorArray; + GLESArray m_pointSizeArray; + GLESArray* m_texCoordArray; + unsigned int m_enabledArrays; + unsigned int m_arrayBufferBinding; + unsigned int m_elementArrayBufferBinding; + unsigned int m_textureBinding; + BufferMap m_buffers; + TextureMap m_textures; +}; + +void* glesGetCurrentGLESContext(); + +#define GLES_ENTER_RET(RETVAL) \ + GLESContext* ctx; \ + do \ + { \ + glesGetLock(); \ + ctx = (GLESContext*)glesGetCurrentGLESContext(); \ + if(!ctx) \ + { \ + glesReleaseLock(); \ + return RETVAL; \ + } \ + if(!ctx->IsInitialized()) \ + { \ + if(!ctx->Initialize()) \ + { \ + std::cerr << "Failed to initialize context" << std::endl; \ + exit(1); \ + } \ + } \ + } while(0) + +#define GLES_ENTER() GLES_ENTER_RET(GLES_NO_RETVAL) + +// Check the host error after every API function call so that the error flag +// in the wrapper always contains the latest error. +#define GLES_LEAVE_RET(RETVAL) \ + do \ + { \ + ctx->GetHostError(); \ + glesReleaseLock(); \ + return RETVAL; \ + } while(0) + +#define GLES_LEAVE() GLES_LEAVE_RET(GLES_NO_RETVAL) + +#define GLES_LEAVE_NO_ERROR_CHECK_RET(RETVAL) \ + do \ + { \ + glesReleaseLock(); \ + return RETVAL; \ + } while(0) + +#define GLES_LEAVE_NO_ERROR_CHECK() GLES_LEAVE_NO_ERROR_CHECK_RET(GLES_NO_RETVAL) + +#define GLES_ERROR_IF_RET(COND, ERROR, RETVAL) \ + do \ + { \ + if(COND) \ + { \ + ctx->SetError(ERROR); \ + return RETVAL; \ + } \ + } while(0) + +#define GLES_ERROR_IF(COND, ERROR) GLES_ERROR_IF_RET(COND, ERROR, GLES_NO_RETVAL) +#define GLES_ERROR_RET(ERROR, RETVAL) GLES_ERROR_IF_RET(true, ERROR, RETVAL) +#define GLES_ERROR(ERROR) GLES_ERROR_IF(true, ERROR) + #endif // _GLESCONTEXT_H_ \ No newline at end of file