1//************************************ bs::framework - Copyright 2018 Marko Pintera **************************************//
2//*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********//
3#pragma once
4
5#include "BsCorePrerequisites.h"
6
7#if BS_THREAD_SUPPORT == 1
8# define GLEW_MX
9#endif
10
11// 4.1 is the minimum supported version for OpenGL
12#define BS_OPENGL_4_1 1
13
14#if BS_PLATFORM != BS_PLATFORM_OSX
15 #define BS_OPENGL_4_2 1
16 #define BS_OPENGL_4_3 1
17 #define BS_OPENGL_4_4 1
18 #define BS_OPENGL_4_5 1
19 #define BS_OPENGL_4_6 0
20#endif
21
22// 3.1 is the minimum supported version for OpenGL ES
23#define BS_OPENGLES_3_1 0
24#define BS_OPENGLES_3_2 0
25
26#if BS_PLATFORM == BS_PLATFORM_WIN32
27#if !defined( __MINGW32__ )
28# define WIN32_LEAN_AND_MEAN
29# ifndef NOMINMAX
30# define NOMINMAX // required to stop windows.h messing up std::min
31# endif
32#endif
33# include <windows.h>
34# include <wingdi.h>
35# include <GL/glew.h>
36# include <GL/wglew.h>
37#elif BS_PLATFORM == BS_PLATFORM_LINUX
38# include <GL/glew.h>
39# include <GL/glu.h>
40# define GL_GLEXT_PROTOTYPES
41#elif BS_PLATFORM == BS_PLATFORM_OSX
42#define GL_SILENCE_DEPRECATION 1
43#include <OpenGL/gl3.h>
44#include <OpenGL/gl3ext.h>
45#endif
46
47#if BS_THREAD_SUPPORT == 1
48 GLEWContext * glewGetContext();
49
50# if BS_PLATFORM == BS_PLATFORM_WIN32
51 WGLEWContext * wglewGetContext();
52# endif
53
54#endif
55
56// Lots of generated code in here which triggers the new VC CRT security warnings
57#if !defined( _CRT_SECURE_NO_DEPRECATE )
58#define _CRT_SECURE_NO_DEPRECATE
59#endif
60
61/** @addtogroup Plugins
62 * @{
63 */
64
65/** @defgroup GL bsfGLRenderAPI
66 * Wrapper around the OpenGL render API.
67 */
68
69/** @} */
70
71namespace bs { namespace ct
72{
73 /** Translated an OpenGL error code enum to an error code string. */
74 const char* bs_get_gl_error_string(GLenum errorCode);
75
76 /** Checks if there have been any OpenGL errors since the last call, and if so reports them. */
77 void bs_check_gl_error(const char* function, const char* file, INT32 line);
78
79#if BS_DEBUG_MODE && (!BS_OPENGL_4_3 && !BS_OPENGLES_3_2)
80 #define BS_CHECK_GL_ERROR() bs_check_gl_error(__PRETTY_FUNCTION__, __FILE__,__LINE__)
81#else
82 #define BS_CHECK_GL_ERROR()
83#endif
84
85 extern const char* MODULE_NAME;
86
87 class GLSupport;
88 class GLRenderAPI;
89 class GLTexture;
90 class GLVertexBuffer;
91 class GLContext;
92 class GLRTTManager;
93 class GLPixelBuffer;
94 class GLGpuParamBlock;
95 class GLSLGpuProgram;
96 class GLVertexArrayObject;
97 struct GLSLProgramPipeline;
98 class GLSLProgramPipelineManager;
99 class GLTextureView;
100
101 /** @addtogroup GL
102 * @{
103 */
104
105 /** OpenGL specific types to track resource statistics for. */
106 enum GLRenderStatResourceType
107 {
108 RenderStatObject_PipelineObject = 100,
109 RenderStatObject_FrameBufferObject,
110 RenderStatObject_VertexArrayObject
111 };
112
113 /** @} */
114}}
115