gluRenderConfig.hpp revision 3c827367444ee418f129b2c238299f49d3264554
1#ifndef _GLURENDERCONFIG_HPP
2#define _GLURENDERCONFIG_HPP
3/*-------------------------------------------------------------------------
4 * drawElements Quality Program OpenGL ES Utilities
5 * ------------------------------------------------
6 *
7 * Copyright 2014 The Android Open Source Project
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 *//*!
22 * \file
23 * \brief OpenGL rendering configuration.
24 *//*--------------------------------------------------------------------*/
25
26#include "tcuDefs.hpp"
27#include "gluRenderContext.hpp"
28
29namespace tcu
30{
31class CommandLine;
32}
33
34namespace glu
35{
36
37/*--------------------------------------------------------------------*//*!
38 * \brief Rendering context configuration.
39 *//*--------------------------------------------------------------------*/
40struct RenderConfig
41{
42	enum SurfaceType
43	{
44		SURFACETYPE_DONT_CARE = 0,
45		SURFACETYPE_WINDOW,				//!< Native window.
46		SURFACETYPE_OFFSCREEN_NATIVE,	//!< Native renderable offscreen buffer, such as pixmap or bitmap.
47		SURFACETYPE_OFFSCREEN_GENERIC,	//!< Generic offscreen buffer, such as EGL pbuffer.
48
49		SURFACETYPE_LAST
50	};
51
52	enum Visibility
53	{
54		VISIBILITY_HIDDEN = 0,
55		VISIBILITY_VISIBLE,
56		VISIBILITY_FULLSCREEN,
57
58		VISIBILITY_LAST
59	};
60
61	enum
62	{
63		DONT_CARE = -1
64	};
65
66	ContextType			type;
67
68	int					width;
69	int					height;
70	SurfaceType			surfaceType;
71	Visibility			windowVisibility;
72
73	int					id;
74
75	int					redBits;
76	int					greenBits;
77	int					blueBits;
78	int					alphaBits;
79	int					depthBits;
80	int					stencilBits;
81	int					numSamples;
82
83	RenderConfig (ContextType type_ = ContextType())
84		: type				(type_)
85		, width				(DONT_CARE)
86		, height			(DONT_CARE)
87		, surfaceType		(SURFACETYPE_DONT_CARE)
88		, windowVisibility	(VISIBILITY_VISIBLE)
89		, id				(DONT_CARE)
90		, redBits			(DONT_CARE)
91		, greenBits			(DONT_CARE)
92		, blueBits			(DONT_CARE)
93		, alphaBits			(DONT_CARE)
94		, depthBits			(DONT_CARE)
95		, stencilBits		(DONT_CARE)
96		, numSamples		(DONT_CARE)
97	{
98	}
99};
100
101// Utilities
102
103void						parseRenderConfig		(RenderConfig* config, const tcu::CommandLine& cmdLine);
104RenderConfig::Visibility	parseWindowVisibility	(const tcu::CommandLine& cmdLine);
105
106template<typename T>
107T getValueOrDefault (const RenderConfig& config, const T RenderConfig::*field, T defaultValue)
108{
109	T value = config.*field;
110	return value == (T)RenderConfig::DONT_CARE ? defaultValue : value;
111}
112
113} // glu
114
115#endif // _GLURENDERCONFIG_HPP
116