/*------------------------------------------------------------------------- * drawElements Quality Program OpenGL ES Utilities * ------------------------------------------------ * * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *//*! * \file * \brief OpenGL value to string utilities. *//*--------------------------------------------------------------------*/ #include "gluStrUtil.hpp" #include "glwEnums.hpp" namespace glu { namespace detail { std::ostream& operator<< (std::ostream& str, const BooleanPointerFmt& fmt) { if (fmt.value) { str << "{ "; for (deUint32 ndx = 0; ndx < fmt.size; ndx++) { if (ndx != 0) str << ", "; str << getBooleanStr(fmt.value[ndx]); } str << " }"; return str; } else return str << "(null)"; } std::ostream& operator<< (std::ostream& str, const EnumPointerFmt& fmt) { if (fmt.value) { str << "{ "; for (deUint32 ndx = 0; ndx < fmt.size; ndx++) { if (ndx != 0) str << ", "; // use storage size (4) as print width for clarity str << tcu::Format::Enum<int, 4>(fmt.getName, fmt.value[ndx]); } str << " }"; return str; } else return str << "(null)"; } std::ostream& operator<< (std::ostream& str, const TextureUnitStr& unitStr) { int unitNdx = unitStr.texUnit - GL_TEXTURE0; if (unitNdx >= 0) return str << "GL_TEXTURE" << unitNdx; else return str << tcu::toHex(unitStr.texUnit); } std::ostream& operator<< (std::ostream& str, const TextureParameterValueStr& valueStr) { switch (valueStr.param) { case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_T: case GL_TEXTURE_WRAP_R: return str << getTextureWrapModeStr(valueStr.value); case GL_TEXTURE_BASE_LEVEL: case GL_TEXTURE_MAX_LEVEL: case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_MIN_LOD: return str << valueStr.value; case GL_TEXTURE_COMPARE_MODE: return str << getTextureCompareModeStr(valueStr.value); case GL_TEXTURE_COMPARE_FUNC: return str << getCompareFuncStr(valueStr.value); case GL_TEXTURE_SWIZZLE_R: case GL_TEXTURE_SWIZZLE_G: case GL_TEXTURE_SWIZZLE_B: case GL_TEXTURE_SWIZZLE_A: return str << getTextureSwizzleStr(valueStr.value); case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MAG_FILTER: return str << getTextureFilterStr(valueStr.value); case GL_DEPTH_STENCIL_TEXTURE_MODE: return str << getTextureDepthStencilModeStr(valueStr.value); default: return str << tcu::toHex(valueStr.value); } } } // detail detail::EnumPointerFmt getInvalidateAttachmentStr (const deUint32* attachments, int numAttachments) { return detail::EnumPointerFmt(attachments, (deUint32)numAttachments, getInvalidateAttachmentName); } std::ostream& operator<< (std::ostream& str, ApiType apiType) { str << "OpenGL "; if (apiType.getProfile() == PROFILE_ES) str << "ES "; str << apiType.getMajorVersion() << "." << apiType.getMinorVersion(); if (apiType.getProfile() == PROFILE_CORE) str << " core profile"; else if (apiType.getProfile() == PROFILE_COMPATIBILITY) str << " compatibility profile"; else if (apiType.getProfile() != PROFILE_ES) str << " (unknown profile)"; return str; } std::ostream& operator<< (std::ostream& str, ContextType contextType) { str << contextType.getAPI(); if (contextType.getFlags() != ContextFlags(0)) { static const struct { ContextFlags flag; const char* desc; } s_descs[] = { { CONTEXT_DEBUG, "debug" }, { CONTEXT_FORWARD_COMPATIBLE, "forward-compatible" }, { CONTEXT_ROBUST, "robust" } }; ContextFlags flags = contextType.getFlags(); str << " ("; for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_descs) && flags != 0; ndx++) { if ((flags & s_descs[ndx].flag) != 0) { if (flags != contextType.getFlags()) str << ", "; str << s_descs[ndx].desc; flags = flags & ~s_descs[ndx].flag; } } if (flags != 0) { // Unresolved if (flags != contextType.getFlags()) str << ", "; str << tcu::toHex(flags); } str << ")"; } return str; } #include "gluStrUtil.inl" } // glu