91 lines
2.1 KiB
C++
91 lines
2.1 KiB
C++
//
|
|
// Copyright 2020 The ANGLE Project Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// InfoLog.h: Defines the gl::InfoLog class to handle the logs generated when
|
|
// compiling/linking shaders so useful error messages can be returned to the caller.
|
|
|
|
#ifndef LIBANGLE_INFOLOG_H_
|
|
#define LIBANGLE_INFOLOG_H_
|
|
|
|
namespace gl
|
|
{
|
|
|
|
class InfoLog : angle::NonCopyable
|
|
{
|
|
public:
|
|
InfoLog();
|
|
~InfoLog();
|
|
|
|
size_t getLength() const;
|
|
void getLog(GLsizei bufSize, GLsizei *length, char *infoLog) const;
|
|
|
|
void appendSanitized(const char *message);
|
|
void reset();
|
|
|
|
// This helper class ensures we append a newline after writing a line.
|
|
class StreamHelper : angle::NonCopyable
|
|
{
|
|
public:
|
|
StreamHelper(StreamHelper &&rhs) : mStream(rhs.mStream) { rhs.mStream = nullptr; }
|
|
|
|
StreamHelper &operator=(StreamHelper &&rhs)
|
|
{
|
|
std::swap(mStream, rhs.mStream);
|
|
return *this;
|
|
}
|
|
|
|
~StreamHelper()
|
|
{
|
|
// Write newline when destroyed on the stack
|
|
if (mStream && !mStream->str().empty())
|
|
{
|
|
(*mStream) << std::endl;
|
|
}
|
|
}
|
|
|
|
template <typename T>
|
|
StreamHelper &operator<<(const T &value)
|
|
{
|
|
(*mStream) << value;
|
|
return *this;
|
|
}
|
|
|
|
private:
|
|
friend class InfoLog;
|
|
|
|
StreamHelper(std::stringstream *stream) : mStream(stream) { ASSERT(stream); }
|
|
|
|
std::stringstream *mStream;
|
|
};
|
|
|
|
template <typename T>
|
|
StreamHelper operator<<(const T &value)
|
|
{
|
|
ensureInitialized();
|
|
StreamHelper helper(mLazyStream.get());
|
|
helper << value;
|
|
return helper;
|
|
}
|
|
|
|
std::string str() const { return mLazyStream ? mLazyStream->str() : ""; }
|
|
|
|
bool empty() const;
|
|
|
|
private:
|
|
void ensureInitialized()
|
|
{
|
|
if (!mLazyStream)
|
|
{
|
|
mLazyStream.reset(new std::stringstream());
|
|
}
|
|
}
|
|
|
|
std::unique_ptr<std::stringstream> mLazyStream;
|
|
};
|
|
|
|
} // namespace gl
|
|
|
|
#endif // LIBANGLE_INFOLOG_H_
|