Home | History | Annotate | Download | only in opengl
      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 
     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 } 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>
    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