/*------------------------------------------------------------------------- * 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 GL call wrapper for logging. *//*--------------------------------------------------------------------*/ #include "gluCallLogWrapper.hpp" #include "gluStrUtil.hpp" #include "glwFunctions.hpp" #include "glwEnums.hpp" using tcu::TestLog; using tcu::toHex; namespace glu { CallLogWrapper::CallLogWrapper (const glw::Functions& gl, tcu::TestLog& log) : m_gl (gl) , m_log (log) , m_enableLog (false) { } CallLogWrapper::~CallLogWrapper (void) { } template <typename T> inline tcu::Format::ArrayPointer<T> getPointerStr (const T* arr, deUint32 size) { return tcu::formatArray(arr, (int)size); } template <typename T> inline tcu::Format::ArrayPointer<T> getPointerStr (const T* arr, int size) { return tcu::formatArray(arr, de::max(size, 0)); } // String formatter. class StringFmt { public: const glw::GLchar* str; StringFmt (const glw::GLchar* str_) : str(str_) {} }; inline std::ostream& operator<< (std::ostream& str, StringFmt fmt) { return str << (fmt.str ? (const char*)fmt.str : "NULL"); } inline StringFmt getStringStr (const char* value) { return StringFmt(value); } inline StringFmt getStringStr (const glw::GLubyte* value) { return StringFmt((const char*)value); } // Framebuffer parameter pointer formatter. class FboParamPtrFmt { public: deUint32 param; const int* value; FboParamPtrFmt (deUint32 param_, const int* value_) : param(param_), value(value_) {} }; std::ostream& operator<< (std::ostream& str, FboParamPtrFmt fmt) { if (fmt.value) { switch (fmt.param) { case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: return str << tcu::Format::Enum<int, 2>(getFramebufferAttachmentTypeName, *fmt.value); case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: return str << tcu::Format::Enum<int, 2>(getCubeMapFaceName, *fmt.value); case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: return str << tcu::Format::Enum<int, 2>(getTypeName, *fmt.value); case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: return str << tcu::Format::Enum<int, 2>(getFramebufferColorEncodingName, *fmt.value); case GL_FRAMEBUFFER_ATTACHMENT_LAYERED: return str << tcu::Format::Enum<int, 2>(getBooleanName, *fmt.value); case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: return str << *fmt.value; default: return str << tcu::toHex(*fmt.value); } } else return str << "(null)"; } inline FboParamPtrFmt getFramebufferAttachmentParameterValueStr (deUint32 param, const int* value) { return FboParamPtrFmt(param, value); } #include "gluQueryUtil.inl" #include "gluCallLogUtil.inl" // API entry-point implementations are auto-generated #include "gluCallLogWrapper.inl" } // glu