OgreGLES2Prerequisites.h
Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2012 Torus Knot Software Ltd
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 -----------------------------------------------------------------------------
00027 */
00028 
00029 #ifndef __GLES2Prerequisites_H__
00030 #define __GLES2Prerequisites_H__
00031 
00032 #include "OgrePrerequisites.h"
00033 #include "OgreLogManager.h"
00034 #include "OgreMath.h"
00035 
00036 #if (OGRE_PLATFORM == OGRE_PLATFORM_WIN32)
00037 #   if !defined( __MINGW32__ )
00038 #       define __PRETTY_FUNCTION__ __FUNCTION__
00039 #       ifndef WIN32_LEAN_AND_MEAN
00040 #           define WIN32_LEAN_AND_MEAN 1
00041 #       endif
00042 #       ifndef NOMINMAX
00043 #           define NOMINMAX // required to stop windows.h messing up std::min
00044 #       endif
00045 #   endif
00046 #endif
00047 
00048 #ifndef GL_GLEXT_PROTOTYPES
00049 #  define  GL_GLEXT_PROTOTYPES
00050 #endif
00051 
00052 #if (OGRE_PLATFORM == OGRE_PLATFORM_APPLE_IOS)
00053 #   include <OpenGLES/ES2/gl.h>
00054 #   include <OpenGLES/ES2/glext.h>
00055 #   ifdef __OBJC__
00056 #       include <OpenGLES/EAGL.h>
00057 #   endif
00058 #elif (OGRE_PLATFORM == OGRE_PLATFORM_ANDROID) || (OGRE_PLATFORM == OGRE_PLATFORM_NACL)
00059 #   ifndef GL_GLEXT_PROTOTYPES
00060 #       define  GL_GLEXT_PROTOTYPES
00061 #   endif
00062 #   include <GLES2/gl2platform.h>
00063 #   include <GLES2/gl2.h>
00064 #   include <GLES2/gl2ext.h>
00065 #   if (OGRE_PLATFORM == OGRE_PLATFORM_NACL)
00066 #       include "ppapi/cpp/completion_callback.h"
00067 #       include "ppapi/cpp/instance.h"
00068 #       include "ppapi/c/ppp_graphics_3d.h"
00069 #       include "ppapi/cpp/graphics_3d.h"
00070 #       include "ppapi/cpp/graphics_3d_client.h"
00071 #       include "ppapi/gles2/gl2ext_ppapi.h"
00072 #       undef GL_OES_get_program_binary
00073 #       undef GL_OES_mapbuffer
00074 #   endif
00075 #else
00076 #   include <GLES2/gl2.h>
00077 #   include <GLES2/gl2ext.h>
00078 #   include <EGL/egl.h>
00079 
00080 // Function pointers for FBO extension methods
00081 // Declare them here since we don't have GLEW to do it for us
00082 
00083 #   ifndef GL_GLEXT_PROTOTYPES
00084 extern PFNGLMAPBUFFEROESPROC glMapBufferOES;
00085 extern PFNGLUNMAPBUFFEROESPROC glUnmapBufferOES;
00086 extern PFNGLDRAWBUFFERSARBPROC glDrawBuffersARB;
00087 extern PFNGLREADBUFFERNVPROC glReadBufferNV;
00088 extern PFNGLGETCOMPRESSEDTEXIMAGENVPROC glGetCompressedTexImageNV;
00089 extern PFNGLGETTEXIMAGENVPROC glGetTexImageNV;
00090 extern PFNGLGETTEXLEVELPARAMETERFVNVPROC glGetTexLevelParameterfvNV;
00091 extern PFNGLGETTEXLEVELPARAMETERiVNVPROC glGetTexLevelParameterivNV;
00092 #   endif
00093 
00094 // If we are going to use the PVRTC_CODEC make sure we
00095 // setup the needed constants
00096 #if (OGRE_NO_PVRTC_CODEC == 0)
00097 #   ifndef GL_IMG_texture_compression_pvrtc
00098 #       define GL_IMG_texture_compression_pvrtc 1
00099 #       define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
00100 #       define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
00101 #       define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
00102 #       define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
00103 #   endif
00104 #endif
00105 
00106 #endif
00107 
00108 
00109 // Define GL_NONE for convenience
00110 #define GL_NONE 0
00111 
00112 #if !defined(GL_BGRA) && OGRE_PLATFORM != OGRE_PLATFORM_NACL
00113 #   define GL_BGRA  0x80E1
00114 #endif
00115 
00116 #if (OGRE_PLATFORM == OGRE_PLATFORM_WIN32)
00117 // an error in all windows gles sdks...
00118 #   undef GL_OES_get_program_binary
00119 #endif
00120 
00121 #if (OGRE_PLATFORM == OGRE_PLATFORM_WIN32) && !defined(__MINGW32__) && !defined(OGRE_STATIC_LIB)
00122 #   ifdef OGRE_GLES2PLUGIN_EXPORTS
00123 #       define _OgreGLES2Export __declspec(dllexport)
00124 #   else
00125 #       if defined( __MINGW32__ )
00126 #           define _OgreGLES2Export
00127 #       else
00128 #           define _OgreGLES2Export __declspec(dllimport)
00129 #       endif
00130 #   endif
00131 #elif defined ( OGRE_GCC_VISIBILITY )
00132 #    define _OgreGLES2Export  __attribute__ ((visibility("default")))
00133 #else
00134 #    define _OgreGLES2Export
00135 #endif
00136 
00137 #define DEBUG_(text) \
00138     {\
00139         fprintf(stderr, "%s:%d: %s\n", __FUNCTION__, __LINE__, text); \
00140     }
00141 
00142 #define ENABLE_GL_CHECK 0
00143 
00144 #if ENABLE_GL_CHECK
00145 #define GL_CHECK_ERROR \
00146     { \
00147         int e = glGetError(); \
00148         if (e != 0) \
00149         { \
00150             const char * errorString = ""; \
00151             switch(e) \
00152             { \
00153             case GL_INVALID_ENUM:       errorString = "GL_INVALID_ENUM";        break; \
00154             case GL_INVALID_VALUE:      errorString = "GL_INVALID_VALUE";       break; \
00155             case GL_INVALID_OPERATION:  errorString = "GL_INVALID_OPERATION";   break; \
00156             case GL_OUT_OF_MEMORY:      errorString = "GL_OUT_OF_MEMORY";       break; \
00157             default:                                                            break; \
00158             } \
00159             char msgBuf[10000]; \
00160             sprintf(msgBuf, "OpenGL ES2 error 0x%04X %s in %s at line %i\n", e, errorString, __PRETTY_FUNCTION__, __LINE__); \
00161             LogManager::getSingleton().logMessage(msgBuf); \
00162         } \
00163     }
00164 #else
00165     #define GL_CHECK_ERROR {}
00166 #endif
00167 
00168 #if ENABLE_GL_CHECK
00169     #define EGL_CHECK_ERROR \
00170     { \
00171         int e = eglGetError(); \
00172         if ((e != 0) && (e != EGL_SUCCESS))\
00173         { \
00174             char msgBuf[10000]; \
00175             sprintf(msgBuf, "EGL error 0x%04X in %s at line %i\n", e, __PRETTY_FUNCTION__, __LINE__); \
00176             LogManager::getSingleton().logMessage(msgBuf); \
00177             OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, msgBuf, __PRETTY_FUNCTION__); \
00178         } \
00179     }
00180 #else
00181     #define EGL_CHECK_ERROR {}
00182 #endif
00183 
00184 #endif

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sun Sep 2 2012 07:27:21