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