/*-------------------------------------------------------------------------
* 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