Program Listing for File RawStorageFormat.cpp

Return to documentation for file (Source\Core\Src\RawStorageFormat.cpp)

#include "Core/RawStorageFormat.h"
#include "Utils/Macros.h"

#include <boost/preprocessor/stringize.hpp>

namespace Azura {

#define ENUM_SIZE_CASE(ENUM_TUPLE)                                                                                     \
  FORWARD_MAPPING(GET_FULL_FORMAT_NAME_FROM_TUPLE(ENUM_TUPLE), GET_FORMAT_WIDTH_FROM_TUPLE(ENUM_TUPLE))

#define ENUM_ASPECT_DEPTH_CHECK(ENUM_TUPLE)                                                                            \
  case GET_FULL_FORMAT_NAME_FROM_TUPLE(ENUM_TUPLE):                                                                    \
    return (GET_ASPECT_MASK_FROM_TUPLE(ENUM_TUPLE) & AspectMaskBits::DepthBit) == AspectMaskBits::DepthBit;

#define ENUM_ASPECT_STENCIL_CHECK(ENUM_TUPLE)                                                                            \
  case GET_FULL_FORMAT_NAME_FROM_TUPLE(ENUM_TUPLE):                                                                      \
    return (GET_ASPECT_MASK_FROM_TUPLE(ENUM_TUPLE) & AspectMaskBits::StencilBit) == AspectMaskBits::StencilBit;

#define TO_STRING_MACRO(VAR) #VAR

#define ENUM_TO_STRING_CASE(ENUM_TUPLE)                                                                                     \
  FORWARD_MAPPING(GET_FULL_FORMAT_NAME_FROM_TUPLE(ENUM_TUPLE), BOOST_PP_STRINGIZE(GET_FORMAT_NAME_FROM_TUPLE(ENUM_TUPLE)))



U32 GetFormatSizeBits(RawStorageFormat format) {
  switch (format) {
    RAW_STORAGE_FORMAT_ITERATOR(ENUM_SIZE_CASE)

  default:
    return 0U;
  }
}

bool HasDepthComponent(RawStorageFormat format)
{
  switch (format) {
    RAW_STORAGE_FORMAT_ITERATOR(ENUM_ASPECT_DEPTH_CHECK)

  default:
    return false;
  }
}

bool HasStencilComponent(RawStorageFormat format)
{
  switch (format) {
    RAW_STORAGE_FORMAT_ITERATOR(ENUM_ASPECT_STENCIL_CHECK)

  default:
    return false;
  }
}

bool HasDepthOrStencilComponent(RawStorageFormat format)
{
  return HasDepthComponent(format) || HasStencilComponent(format);
}

bool HasDepthAndStencilComponent(RawStorageFormat format)
{
  return HasDepthComponent(format) || HasStencilComponent(format);
}

U32 GetFormatSize(RawStorageFormat format) {
  return GetFormatSizeBits(format) / 8;
}

String ToString(RawStorageFormat format)
{
  switch (format) {
    RAW_STORAGE_FORMAT_ITERATOR(ENUM_TO_STRING_CASE)

  default:
    return "Invalid Format";
  }
}

}  // namespace Azura