Files
lime/project/include/renderer/opengl/OGL.h
2014-02-11 03:38:52 +01:00

248 lines
5.7 KiB
C++

#ifndef INCLUDED_OGL_H
#define INCLUDED_OGL_H
#if defined(BLACKBERRY) || defined(ANDROID) || defined(WEBOS) || defined(GPH) || defined(RASPBERRYPI) || defined(EMSCRIPTEN)
#define LIME_GLES
#ifdef LIME_FORCE_GLES1
#include <GLES/gl.h>
#include <GLES/glext.h>
#else
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#define ALLOW_OGL2
#define LIME_FORCE_GLES2
#endif
#elif defined(TIZEN)
//#include <osp/gl.h>
#include <FGraphicsOpengl.h>
//#include <FGraphicsOpengl2.h>
using namespace Tizen::Graphics::Opengl;
//#include <osp/gl2.h>
//#define ALLOW_OGL2
//#define LIME_FORCE_GLES2
#define LIME_FORCE_GLES1
#define LIME_GLES
#elif defined(IPHONE)
#include <OpenGLES/ES1/gl.h>
#include <OpenGLES/ES1/glext.h>
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>
#define ALLOW_OGL2
//typedef CAEAGLLayer *WinDC;
//typedef EAGLContext *GLCtx;
#define LIME_GLES
#elif !defined(HX_WINDOWS)
// Mac/Linux....
#ifdef SDL_OGL
#define GL_GLEXT_PROTOTYPES
#include <SDL_opengl.h>
#define FORCE_NON_PO2
#else
#include <GLFW/glfw3.h>
#endif
#ifndef HX_LINUX
#define ALLOW_OGL2
#endif
#ifdef HX_MACOS
#define glBindFramebuffer glBindFramebufferEXT
#define glBindRenderbuffer glBindRenderbufferEXT
#define glGenFramebuffers glGenFramebuffersEXT
#define glDeleteFramebuffers glDeleteFramebuffersEXT
#define glGenRenderbuffers glGenRenderbuffersEXT
#define glDeleteRenderbuffers glDeleteRenderbuffersEXT
#define glFramebufferRenderbuffer glFramebufferRenderbufferEXT
#define glFramebufferTexture2D glFramebufferTexture2DEXT
#define glRenderbufferStorage glRenderbufferStorageEXT
#define glCheckFramebufferStatus glCheckFramebufferStatusEXT
#define glCheckFramebufferStatus glCheckFramebufferStatusEXT
#define glGenerateMipmap glGenerateMipmapEXT
#define glGetFramebufferAttachmentParameteriv glGetFramebufferAttachmentParameterivEXT
#define glGetRenderbufferParameteriv glGetRenderbufferParameterivEXT
#define glIsFramebuffer glIsFramebufferEXT
#define glIsRenderbuffer glIsRenderbufferEXT
#endif
#else
// Windows ....
#include <windows.h>
#include <gl/GL.h>
//#define FORCE_NON_PO2
typedef ptrdiff_t GLsizeiptrARB;
#define NEED_EXTENSIONS
#define ALLOW_OGL2
#ifdef SDL_OGL
#include <SDL_opengl.h>
#endif
#ifdef GLFW_OGL
#include <GL/glext.h>
#include <GLFW/glfw3.h>
#endif
#endif
#ifdef HX_WINDOWS
typedef HDC WinDC;
typedef HGLRC GLCtx;
#else
typedef void *WinDC;
typedef void *GLCtx;
#endif
#ifndef GL_BUFFER_SIZE
#define GL_BUFFER_SIZE 0x8764
#define GL_BUFFER_USAGE 0x8765
#define GL_ARRAY_BUFFER 0x8892
#define GL_ELEMENT_ARRAY_BUFFER 0x8893
#define GL_ARRAY_BUFFER_BINDING 0x8894
#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
#define GL_READ_ONLY 0x88B8
#define GL_WRITE_ONLY 0x88B9
#define GL_READ_WRITE 0x88BA
#define GL_BUFFER_ACCESS 0x88BB
#define GL_BUFFER_MAPPED 0x88BC
#define GL_BUFFER_MAP_POINTER 0x88BD
#define GL_STREAM_DRAW 0x88E0
#define GL_STREAM_READ 0x88E1
#define GL_STREAM_COPY 0x88E2
#define GL_STATIC_DRAW 0x88E4
#define GL_STATIC_READ 0x88E5
#define GL_STATIC_COPY 0x88E6
#define GL_DYNAMIC_DRAW 0x88E8
#define GL_DYNAMIC_READ 0x88E9
#define GL_DYNAMIC_COPY 0x88EA
#define GL_COMPILE_STATUS 0x8B81
#define GL_LINK_STATUS 0x8B82
#define GL_VALIDATE_STATUS 0x8B83
#define GL_INFO_LOG_LENGTH 0x8B84
#define GL_ATTACHED_SHADERS 0x8B85
#define GL_ACTIVE_UNIFORMS 0x8B86
#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
#define GL_SHADER_SOURCE_LENGTH 0x8B88
#define GL_VERTEX_SHADER 0x8B31
#define GL_FRAGMENT_SHADER 0x8B30
#define GL_TEXTURE0 0x84C0
#endif
#ifndef GL_CLAMP_TO_EDGE
#define GL_CLAMP_TO_EDGE 0x812F
#endif
#ifndef GL_POINT_SMOOTH
#define GL_POINT_SMOOTH 0x0B10
#endif
#ifndef GL_LINE_SMOOTH
#define GL_LINE_SMOOTH 0x0B20
#endif
#ifdef GPH
#define LIME_DITHER
#endif
#include <Graphics.h>
#include "renderer/common/Surface.h"
#ifdef HX_MACOS
#define ALLOW_OGL2
#endif
#ifdef NEED_EXTENSIONS
#define DECLARE_EXTENSION
#include "OGLExtensions.h"
#undef DECLARE_EXTENSION
#endif
namespace lime
{
Texture *OGLCreateTexture(Surface *inSurface,unsigned int inFlags);
enum
{
PROG_TEXTURE = 0x0001,
PROG_ALPHA_TEXTURE = 0x0002,
PROG_COLOUR_PER_VERTEX = 0x0004,
PROG_NORMAL_DATA = 0x0008,
PROG_RADIAL = 0x0010,
PROG_RADIAL_FOCUS = 0x0020,
PROG_TINT = 0x0040,
PROG_COLOUR_OFFSET = 0x0080,
PROG_COUNT = 0x0100,
};
typedef float Trans4x4[4][4];
class GPUProg
{
public:
static GPUProg *create(unsigned int inID);
virtual ~GPUProg() {}
virtual bool bind() = 0;
virtual void disableSlots() = 0;
virtual void setTransform(const Trans4x4 &inTrans) = 0;
virtual void setColourTransform(const ColorTransform *inTransform, unsigned int inColour) = 0;
virtual void setGradientFocus(float inFocus) = 0;
int vertexSlot;
int textureSlot;
int normalSlot;
int colourSlot;
};
void InitOGL2Extensions();
} // end namespace lime
#endif // INCLUDED_OGL_H