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 
29 namespace tcu
30 {
31 class CommandLine;
32 }
33 
34 namespace glu
35 {
36 
37 /*--------------------------------------------------------------------*//*!
38  * \brief Rendering context configuration.
39  *//*--------------------------------------------------------------------*/
40 struct 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 
RenderConfigglu::RenderConfig83 	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 } DE_WARN_UNUSED_TYPE;
100 
101 // Utilities
102 
103 void						parseRenderConfig		(RenderConfig* config, const tcu::CommandLine& cmdLine);
104 RenderConfig::Visibility	parseWindowVisibility	(const tcu::CommandLine& cmdLine);
105 
106 template<typename T>
getValueOrDefault(const RenderConfig & config,const T RenderConfig::* field,T defaultValue)107 T 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