 |
Gorgon Game Engine
|
Go to the documentation of this file.
8 #include "../Graphics/Color.h"
9 #include "../Containers/Image.h"
20 # define WINDOWS_LEAN_AND_MEAN
23 # define APIENTRYP __stdcall *
28 #define GL_MAP_READ_BIT 0x0001
29 #define GL_MAP_WRITE_BIT 0x0002
30 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
31 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
32 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
33 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
34 #define GL_TEXTURE0 0x84C0
35 #define GL_TEXTURE1 0x84C1
36 #define GL_TEXTURE2 0x84C2
37 #define GL_TEXTURE3 0x84C3
38 #define GL_TEXTURE4 0x84C4
39 #define GL_TEXTURE5 0x84C5
40 #define GL_TEXTURE6 0x84C6
41 #define GL_TEXTURE7 0x84C7
42 #define GL_TEXTURE8 0x84C8
43 #define GL_TEXTURE9 0x84C9
44 #define GL_TEXTURE10 0x84CA
45 #define GL_TEXTURE11 0x84CB
46 #define GL_TEXTURE12 0x84CC
47 #define GL_TEXTURE13 0x84CD
48 #define GL_TEXTURE14 0x84CE
49 #define GL_TEXTURE15 0x84CF
50 #define GL_TEXTURE16 0x84D0
51 #define GL_TEXTURE17 0x84D1
52 #define GL_TEXTURE18 0x84D2
53 #define GL_TEXTURE19 0x84D3
54 #define GL_TEXTURE20 0x84D4
55 #define GL_TEXTURE21 0x84D5
56 #define GL_TEXTURE22 0x84D6
57 #define GL_TEXTURE23 0x84D7
58 #define GL_TEXTURE24 0x84D8
59 #define GL_TEXTURE25 0x84D9
60 #define GL_TEXTURE26 0x84DA
61 #define GL_TEXTURE27 0x84DB
62 #define GL_TEXTURE28 0x84DC
63 #define GL_TEXTURE29 0x84DD
64 #define GL_TEXTURE30 0x84DE
65 #define GL_TEXTURE31 0x84DF
66 #define GL_ARRAY_BUFFER 0x8892
67 #define GL_STREAM_DRAW 0x88E0
68 #define GL_STREAM_READ 0x88E1
69 #define GL_STREAM_COPY 0x88E2
70 #define GL_STATIC_DRAW 0x88E4
71 #define GL_STATIC_READ 0x88E5
72 #define GL_STATIC_COPY 0x88E6
73 #define GL_DYNAMIC_DRAW 0x88E8
74 #define GL_DYNAMIC_READ 0x88E9
75 #define GL_DYNAMIC_COPY 0x88EA
76 #define GL_UNIFORM_BUFFER 0x8A11
77 #define GL_FRAGMENT_SHADER 0x8B30
78 #define GL_VERTEX_SHADER 0x8B31
79 #define GL_COMPILE_STATUS 0x8B81
80 #define GL_LINK_STATUS 0x8B82
81 #define GL_INFO_LOG_LENGTH 0x8B84
82 #define GL_GEOMETRY_SHADER 0x8DD9
83 #define GL_COLOR_ATTACHMENT0 0x8CE0
84 #define GL_COLOR_ATTACHMENT1 0x8CE1
85 #define GL_COLOR_ATTACHMENT2 0x8CE2
86 #define GL_COLOR_ATTACHMENT3 0x8CE3
87 #define GL_COLOR_ATTACHMENT4 0x8CE4
88 #define GL_GENERATE_MIPMAP 0x8191
89 #define GL_DEPTH_ATTACHMENT 0x8D00
90 #define GL_STENCIL_ATTACHMENT 0x8D20
91 #define GL_FRAMEBUFFER 0x8D40
92 #define GL_RENDERBUFFER 0x8D41
96 typedef ptrdiff_t GLsizeiptr;
97 typedef ptrdiff_t GLintptr;
99 typedef void (APIENTRY *DEBUGPROC)(GLenum source,
104 const GLchar *message,
105 const void *userParam);
107 typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, GLenum *bufs);
108 typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program,
const GLchar *name);
109 typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index,
const GLchar * name);
110 typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
111 typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
112 typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
113 typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
114 typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
115 typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size,
const GLvoid *data, GLenum usage);
116 typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size,
const GLvoid* data);
117 typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
118 typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
119 typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
120 typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n,
const GLuint *buffers);
121 typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n,
const GLuint *arrays);
122 typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
123 typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
124 typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
125 typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
126 typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
127 typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum);
128 typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
129 typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
130 typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
131 typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
132 typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
133 typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program,
const GLchar* uniformBlockName);
134 typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program,
const GLchar* name);
135 typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
136 typedef void * (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
137 typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
138 typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count,
const GLchar*
const *string,
const GLint *length);
139 typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
140 typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
141 typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, GLfloat* v0);
142 typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, GLfloat* v0);
143 typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, GLfloat* v0);
144 typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
145 typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat* value);
146 typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat* value);
147 typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat* value);
148 typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat* value);
149 typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat* value);
150 typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
151 typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
152 typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
const GLvoid *pointer);
153 typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride,
const GLvoid *pointer);
154 typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
156 typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (DEBUGPROC callback,
void * userParam);
159 typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
160 typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum);
161 typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei,
const GLuint *);
162 typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum, GLenum, GLenum, GLuint, GLint);
163 typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (int, GLuint*);
168 typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFER) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
169 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGE) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
170 typedef void (APIENTRYP PFNGLGENRENDERBUFFERS) (GLsizei n, GLuint *renderbuffers);
171 typedef void (APIENTRYP PFNGLDELETERENDERBUFFERS) (GLsizei n,
const GLuint *renderbuffers);
172 typedef void (APIENTRYP PFNGLBINDRENDERBUFFER) (GLenum target, GLuint renderbuffer);
PFNGLDELETESHADERPROC glDeleteShader
Definition: OpenGL.cpp:38
This class represents boundaries of 2D objects.
Definition: Bounds.h:27
PFNGLDELETERENDERBUFFERS glDeleteRenderbuffers
Definition: OpenGL.cpp:81
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays
Definition: OpenGL.cpp:43
Texture GenerateTexture(const Containers::Image &data)
This function generates a texture from the given image data.
Definition: OpenGL.cpp:146
PFNGLBINDBUFFERPROC glBindBuffer
Definition: OpenGL.cpp:27
Graphics::ColorMode GetMode() const
Returns the color mode of the image.
Definition: Image.h:1311
void settexturedata(Texture tex, const Containers::Image &data)
Definition: OpenGL.cpp:128
PFNGLBINDVERTEXARRAYPROC glBindVertexArray
Definition: OpenGL.cpp:29
#define GL_BGR
Definition: OpenGL.cpp:14
void Clear()
Clears the window pointed by the active context.
Definition: OpenGL.cpp:277
PFNGLUNMAPBUFFERPROC glUnmapBuffer
Definition: OpenGL.cpp:65
ColorMode
Color modes for images.
Definition: Color.h:16
PFNGLMAPBUFFERRANGEPROC glMapBufferRange
Definition: OpenGL.cpp:52
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers
Definition: OpenGL.cpp:76
PFNGLCREATEPROGRAMPROC glCreateProgram
Definition: OpenGL.cpp:33
PFNGLACTIVETEXTUREPROC glActiveTexture
Definition: OpenGL.cpp:21
@ RGB
24bit red, green, blue color mode that has red component in the lowest byte order
@ Invalid
This is used to mark invalid color data.
PFNGLFRAMEBUFFERRENDERBUFFER glFramebufferRenderbuffer
Definition: OpenGL.cpp:80
T_ X
X coordinate.
Definition: Point.h:368
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays
Definition: OpenGL.cpp:36
PFNGLATTACHSHADERPROC glAttachShader
Definition: OpenGL.cpp:26
Byte * RawData()
Returns the raw data pointer.
Definition: Image.h:211
void debug_proc(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *)
Definition: OpenGL.cpp:91
T_ Height
Height of this size object.
Definition: Size.h:261
PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation
Definition: OpenGL.cpp:24
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding
Definition: OpenGL.cpp:59
T_ Width() const
Calculates and returns the width of the bounds.
Definition: Bounds.h:130
@ RGBA
32bit red, green, blue and alpha channel image. Red component is in the lowest byte order and
PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer
Definition: OpenGL.cpp:68
PFNGLBUFFERSUBDATAPROC glBufferSubData
Definition: OpenGL.cpp:31
void DisplayMessage(const std::string &message)
This function shows a OS message box to display errors, for other messages its better to use in-game ...
Definition: Linux.cpp:104
PFNGLGENERATEMIPMAPPROC glGenerateMipmap
Definition: OpenGL.cpp:42
PFNGLDETACHSHADERPROC glDetachShader
Definition: OpenGL.cpp:39
void LoadFunctions()
Definition: OpenGL.cpp:281
PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv
Definition: OpenGL.cpp:63
T_ Height() const
Calculates and returns the height of the bounds.
Definition: Bounds.h:135
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv
Definition: OpenGL.cpp:62
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex
Definition: OpenGL.cpp:48
int GetWidth() const
Returns the width of the image.
Definition: Image.h:1296
void SetupContext(const Geometry::Size &size)
Performs first time initialization on GL context.
Definition: OpenGL.cpp:225
PFNGLUNIFORM1FPROC glUniform1f
Definition: OpenGL.cpp:54
PFNGLSHADERSOURCEPROC glShaderSource
Definition: OpenGL.cpp:53
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray
Definition: OpenGL.cpp:40
Texture GenerateEmptyTexture(const Geometry::Size &size, Graphics::ColorMode mode)
This function generates a texture from the given image data.
Definition: OpenGL.cpp:154
@ Grayscale
8bit gray scale color mode
PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus
Definition: OpenGL.cpp:73
PFNGLGENBUFFERSPROC glGenBuffers
Definition: OpenGL.cpp:41
PFNGLBINDRENDERBUFFER glBindRenderbuffer
Definition: OpenGL.cpp:77
T_ Left
Left-most boundary.
Definition: Bounds.h:399
Root namespace for Gorgon Game Engine.
Definition: Any.h:19
This class represents a 2D geometric size.
Definition: Size.h:23
static bool HardwareSupport
Whether hardware supports frame buffers.
Definition: FrameBuffer.h:69
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers
Definition: OpenGL.cpp:74
void SetDefaultClear()
Sets default clear parameters as current.
Definition: OpenGL.cpp:268
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog
Definition: OpenGL.cpp:44
PFNGLGETPROGRAMIVPROC glGetProgramiv
Definition: OpenGL.cpp:45
PFNGLCOMPILESHADERPROC glCompileShader
Definition: OpenGL.cpp:32
void Use()
Begin using this frame buffer.
Definition: FrameBuffer.cpp:65
Eases logging procedure by appending necessary information to the given data and streams to a standar...
Definition: Logging.h:19
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D
Definition: OpenGL.cpp:75
PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv
Definition: OpenGL.cpp:64
void DestroyTexture(Texture texture)
Destroys the given texture.
Definition: OpenGL.cpp:213
PFNGLUNIFORM1IPROC glUniform1i
Definition: OpenGL.cpp:55
PFNGLUNIFORM4FVPROC glUniform4fv
Definition: OpenGL.cpp:58
void ResizeTexture(Texture texture, const Geometry::Size &size, Graphics::ColorMode mode)
Resizes the given texture to the specified size.
Definition: OpenGL.cpp:169
#define GL_DEBUG_OUTPUT
Definition: OpenGL.cpp:16
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog
Definition: OpenGL.cpp:46
This is a frame buffer object that can be used for render to texture tasks.
Definition: FrameBuffer.h:13
@ Alpha
8bit alpha only color mode
This class represents a 2D point.
Definition: Point.h:32
PFNGLLINKPROGRAMPROC glLinkProgram
Definition: OpenGL.cpp:50
PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv
Definition: OpenGL.cpp:60
PFNGLRENDERBUFFERSTORAGE glRenderbufferStorage
Definition: OpenGL.cpp:78
PFNGLBINDBUFFERBASEPROC glBindBufferBase
Definition: OpenGL.cpp:28
PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate
Definition: OpenGL.cpp:69
PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv
Definition: OpenGL.cpp:61
PFNGLUNIFORM2FVPROC glUniform2fv
Definition: OpenGL.cpp:56
This class is a container for image data.
Definition: Image.h:19
PFNGLUSEPROGRAMPROC glUseProgram
Definition: OpenGL.cpp:66
void SetDefaultBlending()
Sets default blending parameters as current.
Definition: OpenGL.cpp:264
PFNGLMAPBUFFERPROC glMapBuffer
Definition: OpenGL.cpp:51
T_ Y
Y coordinate.
Definition: Point.h:371
T_ Width
Width of this size object.
Definition: Size.h:258
PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback
Definition: OpenGL.cpp:70
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer
Definition: OpenGL.cpp:67
PFNGLDELETEBUFFERSPROC glDeleteBuffers
Definition: OpenGL.cpp:35
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation
Definition: OpenGL.cpp:25
PFNGLBUFFERDATAPROC glBufferData
Definition: OpenGL.cpp:30
#define GL_BGRA
Definition: OpenGL.cpp:15
void RenderToScreen()
Stops rendering to a texture and start rendering to a buffer.
Definition: OpenGL.cpp:221
void RenderToTexture(FrameBuffer &buffer)
Begins using the given frame buffer.
Definition: OpenGL.cpp:217
int GetHeight() const
Returns the height of the image.
Definition: Image.h:1301
PFNGLCREATESHADERPROC glCreateShader
Definition: OpenGL.cpp:34
void Resize(const Geometry::Size &size)
Resizes the active context.
Definition: OpenGL.cpp:273
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer
Definition: OpenGL.cpp:72
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation
Definition: OpenGL.cpp:49
PFNGLDRAWBUFFERSPROC glDrawBuffers
Definition: OpenGL.cpp:23
void CopyToTexture(Texture texture, const Containers::Image &data, Geometry::Point target)
Copies the data from the given image to the texture starting from the given target.
Definition: OpenGL.cpp:181
PFNGLDELETEPROGRAMPROC glDeleteProgram
Definition: OpenGL.cpp:37
void UpdateTexture(Texture texture, const Containers::Image &data)
Updates the given texture to contain the given data.
Definition: OpenGL.cpp:177
PFNGLUNIFORM3FVPROC glUniform3fv
Definition: OpenGL.cpp:57
Gorgon::Utils::Logger log
The logger that is used for GL operations. Default is unset and will not log anything....
Definition: Shader.cpp:19
PFNGLGETSHADERIVPROC glGetShaderiv
Definition: OpenGL.cpp:47
GLenum getGLColorMode(Graphics::ColorMode mode)
Definition: OpenGL.cpp:107
Geometry::Size GetSize() const
Returns the size of the image.
Definition: Image.h:1291
T_ Top
Top-most boundary.
Definition: Bounds.h:402
PFNGLGENRENDERBUFFERS glGenRenderbuffers
Definition: OpenGL.cpp:79