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 enum 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  *//*--------------------------------------------------------------------*/
     49 struct 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 
    115 void						parseRenderConfig		(RenderConfig* config, const tcu::CommandLine& cmdLine);
    116 RenderConfig::Visibility	parseWindowVisibility	(const tcu::CommandLine& cmdLine);
    117 
    118 template<typename T>
    119 T 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