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
37enum ResetNotificationStrategy
38{
39	RESET_NOTIFICATION_STRATEGY_NOT_SPECIFIED = 0,		//!< Not specified, implementation-dependent
40	RESET_NOTIFICATION_STRATEGY_NO_RESET_NOTIFICATION,	//!< No reset notification (may not be supported)
41	RESET_NOTIFICATION_STRATEGY_LOSE_CONTEXT_ON_RESET,	//!< Lose context on reset (may not be supported)
42
43	RESET_NOTIFICATION_STRATEGY_LAST
44};
45
46/*--------------------------------------------------------------------*//*!
47 * \brief Rendering context configuration.
48 *//*--------------------------------------------------------------------*/
49struct RenderConfig
50{
51	enum SurfaceType
52	{
53		SURFACETYPE_DONT_CARE = 0,
54		SURFACETYPE_WINDOW,				//!< Native window.
55		SURFACETYPE_OFFSCREEN_NATIVE,	//!< Native renderable offscreen buffer, such as pixmap or bitmap.
56		SURFACETYPE_OFFSCREEN_GENERIC,	//!< Generic offscreen buffer, such as EGL pbuffer.
57
58		SURFACETYPE_LAST
59	};
60
61	enum Visibility
62	{
63		VISIBILITY_HIDDEN = 0,
64		VISIBILITY_VISIBLE,
65		VISIBILITY_FULLSCREEN,
66
67		VISIBILITY_LAST
68	};
69
70	enum
71	{
72		DONT_CARE = -1
73	};
74
75	ContextType					type;
76
77	int							width;
78	int							height;
79	SurfaceType					surfaceType;
80	Visibility					windowVisibility;
81
82	int							id;
83
84	int							redBits;
85	int							greenBits;
86	int							blueBits;
87	int							alphaBits;
88	int							depthBits;
89	int							stencilBits;
90	int							numSamples;
91
92	ResetNotificationStrategy	resetNotificationStrategy;
93
94	RenderConfig (ContextType type_ = ContextType())
95		: type						(type_)
96		, width						(DONT_CARE)
97		, height					(DONT_CARE)
98		, surfaceType				(SURFACETYPE_DONT_CARE)
99		, windowVisibility			(VISIBILITY_VISIBLE)
100		, id						(DONT_CARE)
101		, redBits					(DONT_CARE)
102		, greenBits					(DONT_CARE)
103		, blueBits					(DONT_CARE)
104		, alphaBits					(DONT_CARE)
105		, depthBits					(DONT_CARE)
106		, stencilBits				(DONT_CARE)
107		, numSamples				(DONT_CARE)
108		, resetNotificationStrategy	(RESET_NOTIFICATION_STRATEGY_NOT_SPECIFIED)
109	{
110	}
111} DE_WARN_UNUSED_TYPE;
112
113// Utilities
114
115void						parseRenderConfig		(RenderConfig* config, const tcu::CommandLine& cmdLine);
116RenderConfig::Visibility	parseWindowVisibility	(const tcu::CommandLine& cmdLine);
117
118template<typename T>
119T getValueOrDefault (const RenderConfig& config, const T RenderConfig::*field, T defaultValue)
120{
121	T value = config.*field;
122	return value == (T)RenderConfig::DONT_CARE ? defaultValue : value;
123}
124
125} // glu
126
127#endif // _GLURENDERCONFIG_HPP
128