1/*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES Utilities 3 * ------------------------------------------------ 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief OpenGL value to string utilities. 22 *//*--------------------------------------------------------------------*/ 23 24#include "gluStrUtil.hpp" 25#include "glwEnums.hpp" 26 27namespace glu 28{ 29 30namespace detail 31{ 32 33std::ostream& operator<< (std::ostream& str, const BooleanPointerFmt& fmt) 34{ 35 if (fmt.value) 36 { 37 str << "{ "; 38 for (deUint32 ndx = 0; ndx < fmt.size; ndx++) 39 { 40 if (ndx != 0) 41 str << ", "; 42 str << getBooleanStr(fmt.value[ndx]); 43 } 44 str << " }"; 45 return str; 46 } 47 else 48 return str << "(null)"; 49} 50 51 52std::ostream& operator<< (std::ostream& str, const EnumPointerFmt& fmt) 53{ 54 if (fmt.value) 55 { 56 str << "{ "; 57 for (deUint32 ndx = 0; ndx < fmt.size; ndx++) 58 { 59 if (ndx != 0) 60 str << ", "; 61 // use storage size (4) as print width for clarity 62 str << tcu::Format::Enum<int, 4>(fmt.getName, fmt.value[ndx]); 63 } 64 str << " }"; 65 return str; 66 } 67 else 68 return str << "(null)"; 69} 70 71std::ostream& operator<< (std::ostream& str, const TextureUnitStr& unitStr) 72{ 73 int unitNdx = unitStr.texUnit - GL_TEXTURE0; 74 if (unitNdx >= 0) 75 return str << "GL_TEXTURE" << unitNdx; 76 else 77 return str << tcu::toHex(unitStr.texUnit); 78} 79 80std::ostream& operator<< (std::ostream& str, const TextureParameterValueStr& valueStr) 81{ 82 switch (valueStr.param) 83 { 84 case GL_TEXTURE_WRAP_S: 85 case GL_TEXTURE_WRAP_T: 86 case GL_TEXTURE_WRAP_R: 87 return str << getTextureWrapModeStr(valueStr.value); 88 89 case GL_TEXTURE_BASE_LEVEL: 90 case GL_TEXTURE_MAX_LEVEL: 91 case GL_TEXTURE_MAX_LOD: 92 case GL_TEXTURE_MIN_LOD: 93 return str << valueStr.value; 94 95 case GL_TEXTURE_COMPARE_MODE: 96 return str << getTextureCompareModeStr(valueStr.value); 97 98 case GL_TEXTURE_COMPARE_FUNC: 99 return str << getCompareFuncStr(valueStr.value); 100 101 case GL_TEXTURE_SWIZZLE_R: 102 case GL_TEXTURE_SWIZZLE_G: 103 case GL_TEXTURE_SWIZZLE_B: 104 case GL_TEXTURE_SWIZZLE_A: 105 return str << getTextureSwizzleStr(valueStr.value); 106 107 case GL_TEXTURE_MIN_FILTER: 108 case GL_TEXTURE_MAG_FILTER: 109 return str << getTextureFilterStr(valueStr.value); 110 111 case GL_DEPTH_STENCIL_TEXTURE_MODE: 112 return str << getTextureDepthStencilModeStr(valueStr.value); 113 114 default: 115 return str << tcu::toHex(valueStr.value); 116 } 117} 118 119} // detail 120 121detail::EnumPointerFmt getInvalidateAttachmentStr (const deUint32* attachments, int numAttachments) 122{ 123 return detail::EnumPointerFmt(attachments, (deUint32)numAttachments, getInvalidateAttachmentName); 124} 125 126std::ostream& operator<< (std::ostream& str, ApiType apiType) 127{ 128 str << "OpenGL "; 129 130 if (apiType.getProfile() == PROFILE_ES) 131 str << "ES "; 132 133 str << apiType.getMajorVersion() << "." << apiType.getMinorVersion(); 134 135 if (apiType.getProfile() == PROFILE_CORE) 136 str << " core profile"; 137 else if (apiType.getProfile() == PROFILE_COMPATIBILITY) 138 str << " compatibility profile"; 139 else if (apiType.getProfile() != PROFILE_ES) 140 str << " (unknown profile)"; 141 142 return str; 143} 144 145std::ostream& operator<< (std::ostream& str, ContextType contextType) 146{ 147 str << contextType.getAPI(); 148 149 if (contextType.getFlags() != ContextFlags(0)) 150 { 151 static const struct 152 { 153 ContextFlags flag; 154 const char* desc; 155 } s_descs[] = 156 { 157 { CONTEXT_DEBUG, "debug" }, 158 { CONTEXT_FORWARD_COMPATIBLE, "forward-compatible" }, 159 { CONTEXT_ROBUST, "robust" } 160 }; 161 ContextFlags flags = contextType.getFlags(); 162 163 str << " ("; 164 165 for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_descs) && flags != 0; ndx++) 166 { 167 if ((flags & s_descs[ndx].flag) != 0) 168 { 169 if (flags != contextType.getFlags()) 170 str << ", "; 171 172 str << s_descs[ndx].desc; 173 flags = flags & ~s_descs[ndx].flag; 174 } 175 } 176 177 if (flags != 0) 178 { 179 // Unresolved 180 if (flags != contextType.getFlags()) 181 str << ", "; 182 str << tcu::toHex(flags); 183 } 184 185 str << ")"; 186 } 187 188 return str; 189} 190 191#include "gluStrUtil.inl" 192 193} // glu 194