diff -r 39e5f73667ba -r c2ef9095503a hostsupport/hostopengles11/inc/glesInternal.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hostsupport/hostopengles11/inc/glesInternal.h Wed Oct 06 17:59:01 2010 +0100 @@ -0,0 +1,136 @@ +/* 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 _GLINTERNAL_H_ +#define _GLINTERNAL_H_ + +#include "glesOS.h" +#include +#include + +#define X_TO_D(x) ((x) / 65536.0) +#define X_TO_F(x) ((x) / 65536.0f) +#define D_TO_X(d) ((d) > 32767.65535 ? 32767 * 65536 + 65535 : \ + (d) < -32768.65535 ? -32768 * 65536 + 65535 : \ + ((GLfixed) ((d) * 65536))) +#define F_TO_X(f) D_TO_X(f) +#define F_TO_D(f) ((double) (f)) +#define I_TO_X(i) ((GLfixed) ((i) * 65536)) +#define X_TO_I(x) ((x) / 65536) + +#include + +#if defined(_DEBUG) +#define GLES_ASSERT assert +#else // defined(_DEBUG) +#define GLES_ASSERT +#endif // !defined(_DEBUG) + +#define GLES_NEW new(std::nothrow) + +// Types not in OpenGL ES +typedef double GLdouble; +typedef double GLclampd; + +// Definitions not in OpenGL ES +#define GL_POINT_SIZE_ARRAY 0x8B9C +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_RGB8 0x8051 +#define GL_RGBA8 0x8058 +#ifndef GLES_NO_SRGB +#define GL_SRGB8 0x8C41 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SLUMINANCE8 0x8C47 +#else +// No sRGB support in OpenGL 2.0. +#define GL_SRGB8 GL_RGB8 +#define GL_SRGB8_ALPHA8 GL_RGBA8 +#define GL_SLUMINANCE8 GL_LUMINANCE8 +#endif +#define GL_LUMINANCE8 0x8040 +#define GL_ALPHA8 0x803C +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 + +#define GLES_API_CALL GL_API + +#define GLES_MIN(A, B) (A < B ? A : B) +#define GLES_MAX(A, B) (A > B ? A : B) + +#define GLES_NO_RETVAL ; + +// Surface locking +#define GLES_LOCK_SURFACE_RET(READ, DRAW, RETVAL) \ + do \ + { \ + if(!EGLtoGLESInterface::GetEGLInterface()->LockGLESSurface(READ, DRAW)) \ + { \ + GLES_LEAVE_NO_ERROR_CHECK_RET(RETVAL); \ + } \ + } while(0) + +#define GLES_LOCK_SURFACE(READ, DRAW) GLES_LOCK_SURFACE_RET(READ, DRAW, GLES_NO_RETVAL) + +#define GLES_LOCK_DRAW_SURFACE_RET(RETVAL) GLES_LOCK_SURFACE_RET(false, true, RETVAL) +#define GLES_LOCK_READ_SURFACE_RET(RETVAL) GLES_LOCK_SURFACE_RET(true, false, RETVAL) +#define GLES_LOCK_DRAW_SURFACE() GLES_LOCK_SURFACE_RET(false, true, GLES_NO_RETVAL) +#define GLES_LOCK_READ_SURFACE() GLES_LOCK_SURFACE_RET(true, false, GLES_NO_RETVAL) + +#define GLES_UNLOCK_SURFACE_RET(RETVAL) \ + do \ + { \ + if(!EGLtoGLESInterface::GetEGLInterface()->UnlockGLESSurface()) \ + { \ + GLES_LEAVE_RET(RETVAL); \ + } \ + } while(0) + +#define GLES_UNLOCK_SURFACE() GLES_UNLOCK_SURFACE_RET(GLES_NO_RETVAL) + +inline bool glesIsPowerOfTwo(int x) +{ + return (x != 0) && ((x & (x - 1)) == 0); +} + +inline int glesLog2(unsigned int x) +{ + int r = 0; + while(x >>= 1) + { + r++; + } + return r; +} + +#endif // _GLINTERNAL_H_ \ No newline at end of file