File: context.h

package info (click to toggle)
scummvm 2.9.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 450,268 kB
  • sloc: cpp: 4,297,604; asm: 28,322; python: 12,901; sh: 11,219; java: 8,477; xml: 7,843; perl: 2,633; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (136 lines) | stat: -rw-r--r-- 3,896 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef GRAPHICS_OPENGL_CONTEXT_H
#define GRAPHICS_OPENGL_CONTEXT_H

#include "common/singleton.h"

namespace OpenGL {

enum ContextType {
	kContextNone,
	kContextGL,
	kContextGLES,
	kContextGLES2
};

/**
 * Description structure of the OpenGL (ES) context.
 */
class Context : public Common::Singleton<Context> {
public:
	Context();

	/**
	 * Initialize the context description from currently active context.
	 *
	 * The extensions and features are marked as available according
	 * to the current context capabilities.
	 */
	void initialize(ContextType contextType);

	/**
	 * Reset context.
	 *
	 * This marks all extensions as unavailable.
	 */
	void reset();

	/** The type of the active context. */
	ContextType type;

	/** Helper function for checking the GL version supported by the context. */
	inline bool isGLVersionOrHigher(int major, int minor) const {
		return ((majorVersion > major) || ((majorVersion == major) && (minorVersion >= minor)));
	}

	/** The GL version supported by the context. */
	int majorVersion, minorVersion;

	/** The GLSL version supported by the context */
	int glslVersion;

	/** The maximum texture size supported by the context. */
	int maxTextureSize;

	/** Whether GL_ARB_texture_non_power_of_two is available or not. */
	bool NPOTSupported;

	/** Whether shader support is available or not. */
	bool shadersSupported;

	/** Whether shader support is good enough for engines or not. */
	bool enginesShadersSupported;

	/** Whether multi texture support is available or not. */
	bool multitextureSupported;

	/** Whether FBO support is available or not. */
	bool framebufferObjectSupported;

	/** Whether multisample FBO support is available or not */
	bool framebufferObjectMultisampleSupported;

	/**
	 * Contains the maximum number of supported multisample samples
	 * if multisample FBOs are supported. Contains -1 otherwise.
	 */
	int multisampleMaxSamples;

	/** Whether packed pixels support is available or not. */
	bool packedPixelsSupported;

	/** Whether packing the depth and stencil buffers is possible or not. */
	bool packedDepthStencilSupported;

	/** Whether specifying a pitch when uploading to textures is available or not */
	bool unpackSubImageSupported;

	/** Whether depth component 24 is supported or not */
	bool OESDepth24;

	/** Whether texture coordinate edge clamping is available or not. */
	bool textureEdgeClampSupported;

	/** Whether texture coordinate border clamping is available or not. */
	bool textureBorderClampSupported;

	/** Whether texture coordinate mirrored repeat is available or not. */
	bool textureMirrorRepeatSupported;

	/** Whether texture max level is available or not. */
	bool textureMaxLevelSupported;

private:
	/**
	 * Returns the native GLSL version supported by the driver.
	 * This does NOT take shaders ARB extensions into account.
	 */
	int getGLSLVersion() const;
};

} // End of namespace OpenGL

/** Shortcut for accessing the active OpenGL context. */
#define OpenGLContext OpenGL::Context::instance()

#endif