summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/gl/GL.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/gl/GL.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/gl/GL.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/gl/GL.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/gl/GL.h
new file mode 100644
index 0000000..943c7d0
--- /dev/null
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/gui/gl/GL.h
@@ -0,0 +1,111 @@
1/*
2 * Copyright (C) 2005-2019 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11//==============================================================================
12///
13/// \defgroup cpp_kodi_gui_gl OpenGL helpers
14/// \ingroup cpp_kodi_gui
15/// \brief Auxiliary functions for Open GL
16///
17/// This group includes help for definitions, functions, and classes for
18/// OpenGL.
19///
20/// To use OpenGL for your system, add the \ref GL.h "#include <kodi/gui/gl/GL.h>".
21///
22///
23///-----------------------------------------------------------------------------
24///
25/// The \ref HAS_GL is declared if Open GL is required and \ref HAS_GLES if Open GL
26/// Embedded Systems (ES) is required, with ES the version is additionally given
27/// in the definition, this can be "2" or "3".
28///
29///
30///-----------------------------------------------------------------------------
31///
32/// Following \ref GL_TYPE_STRING define can be used, for example, to manage
33/// different folders for GL and GLES and make the selection easier.
34/// This are on OpenGL <b>"GL"</b> and on Open GL|ES <b>"GLES"</b>.
35///
36/// **Example:**
37/// ~~~~~~~~~~~~~~~~~{.cpp}
38/// kodi::GetAddonPath("resources/shaders/" GL_TYPE_STRING "/frag.glsl");
39/// ~~~~~~~~~~~~~~~~~
40///
41///
42///----------------------------------------------------------------------------
43///
44/// In addition, \ref BUFFER_OFFSET is declared in it which can be used to give an
45/// offset on the array to GL.
46///
47/// **Example:**
48/// ~~~~~~~~~~~~~~~~~{.cpp}
49/// const struct PackedVertex {
50/// float position[3]; // Position x, y, z
51/// float color[4]; // Color r, g, b, a
52/// } vertices[3] = {
53/// { { -0.5f, -0.5f, 0.0f }, { 1.0f, 0.0f, 0.0f, 1.0f } },
54/// { { 0.5f, -0.5f, 0.0f }, { 0.0f, 1.0f, 0.0f, 1.0f } },
55/// { { 0.0f, 0.5f, 0.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } }
56/// };
57///
58/// glVertexAttribPointer(m_aPosition, 3, GL_FLOAT, GL_FALSE, sizeof(PackedVertex), BUFFER_OFFSET(offsetof(PackedVertex, position)));
59/// glEnableVertexAttribArray(m_aPosition);
60///
61/// glVertexAttribPointer(m_aColor, 4, GL_FLOAT, GL_FALSE, sizeof(PackedVertex), BUFFER_OFFSET(offsetof(PackedVertex, color)));
62/// glEnableVertexAttribArray(m_aColor);
63/// ~~~~~~~~~~~~~~~~~
64
65#if HAS_GL
66 #define GL_TYPE_STRING "GL"
67 // always define GL_GLEXT_PROTOTYPES before include gl headers
68 #if !defined(GL_GLEXT_PROTOTYPES)
69 #define GL_GLEXT_PROTOTYPES
70 #endif
71 #if defined(TARGET_LINUX)
72 #include <GL/gl.h>
73 #include <GL/glext.h>
74 #elif defined(TARGET_FREEBSD)
75 #include <GL/gl.h>
76 #elif defined(TARGET_DARWIN)
77 #include <OpenGL/gl3.h>
78 #include <OpenGL/gl3ext.h>
79 #elif defined(WIN32)
80 #error Use of GL under Windows is not possible
81 #endif
82#elif HAS_GLES >= 2
83 #define GL_TYPE_STRING "GLES"
84 #if defined(WIN32)
85 #if defined(HAS_ANGLE)
86 #include <angle_gl.h>
87 #else
88 #error Use of GLES only be available under Windows by the use of angle
89 #endif
90 #elif defined(TARGET_DARWIN)
91 #if HAS_GLES == 3
92 #include <OpenGLES/ES3/gl.h>
93 #include <OpenGLES/ES3/glext.h>
94 #else
95 #include <OpenGLES/ES2/gl.h>
96 #include <OpenGLES/ES2/glext.h>
97 #endif
98 #else
99 #if HAS_GLES == 3
100 #include <GLES3/gl3.h>
101 #include <GLES3/gl3ext.h>
102 #else
103 #include <GLES2/gl2.h>
104 #include <GLES2/gl2ext.h>
105 #endif
106 #endif
107#endif
108
109#ifndef BUFFER_OFFSET
110#define BUFFER_OFFSET(i) ((char *)nullptr + (i))
111#endif