Files
FlaxEngine/Source/Engine/Graphics/Textures/GPUSamplerDescription.h
2022-06-14 20:17:00 +02:00

161 lines
5.0 KiB
C++

// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/Types/BaseTypes.h"
/// <summary>
/// GPU sampler filter modes.
/// </summary>
API_ENUM() enum class GPUSamplerFilter
{
/// <summary>Filter using the nearest found pixel. Texture appears pixelated.</summary>
Point = 0,
/// <summary>Filter using the linear average of the nearby pixels. Texture appears blurry.</summary>
Bilinear = 1,
/// <summary>Filter using the linear average of the nearby pixels and nearby mipmaps. Texture appears blurry.</summary>
Trilinear = 2,
/// <summary>Filter using the anisotropic filtering that improves quality when viewing textures at a steep angles. Texture appears sharp at extreme viewing angles.</summary>
Anisotropic = 3,
API_ENUM(Attributes="HideInEditor") MAX
};
/// <summary>
/// GPU sampler address modes.
/// </summary>
API_ENUM() enum class GPUSamplerAddressMode
{
/// <summary>Texture coordinates wrap back to the valid range.</summary>
Wrap = 0,
/// <summary>Texture coordinates are clamped within the valid range.</summary>
Clamp = 1,
/// <summary>Texture coordinates flip every time the size of the valid range is passed.</summary>
Mirror = 2,
/// <summary>Texture coordinates outside of the valid range will return a separately set border color.</summary>
Border = 3,
API_ENUM(Attributes="HideInEditor") MAX
};
/// <summary>
/// GPU sampler comparision function types.
/// </summary>
API_ENUM() enum class GPUSamplerCompareFunction
{
/// <summary>Never pass the comparison.</summary>
Never = 0,
/// <summary>If the source data is less than the destination data, the comparison passes.</summary>
Less = 1,
API_ENUM(Attributes="HideInEditor") MAX
};
/// <summary>
/// GPU sampler border color types.
/// </summary>
API_ENUM() enum class GPUSamplerBorderColor
{
/// <summary>
/// Indicates black, with the alpha component as fully transparent.
/// </summary>
TransparentBlack = 0,
/// <summary>
/// Indicates black, with the alpha component as fully opaque.
/// </summary>
OpaqueBlack = 1,
/// <summary>
/// Indicates white, with the alpha component as fully opaque.
/// </summary>
OpaqueWhite = 2,
API_ENUM(Attributes="HideInEditor") MAX
};
/// <summary>
/// A common description for all samplers.
/// </summary>
API_STRUCT() struct FLAXENGINE_API GPUSamplerDescription
{
DECLARE_SCRIPTING_TYPE_MINIMAL(GPUSamplerDescription);
/// <summary>
/// The filtering method to use when sampling a texture.
/// </summary>
API_FIELD() GPUSamplerFilter Filter;
/// <summary>
/// The addressing mode for outside [0..1] range for U coordinate.
/// </summary>
API_FIELD() GPUSamplerAddressMode AddressU;
/// <summary>
/// The addressing mode for outside [0..1] range for V coordinate.
/// </summary>
API_FIELD() GPUSamplerAddressMode AddressV;
/// <summary>
/// The addressing mode for outside [0..1] range for W coordinate.
/// </summary>
API_FIELD() GPUSamplerAddressMode AddressW;
/// <summary>
/// The mip bias to be added to mipmap LOD calculation.
/// </summary>
API_FIELD() float MipBias;
/// <summary>
/// The minimum mip map level that will be used, where 0 is the highest resolution mip level.
/// </summary>
API_FIELD() float MinMipLevel;
/// <summary>
/// The maximum mip map level that will be used, where 0 is the highest resolution mip level. To have no upper limit on LOD set this to a large value such as MAX_float.
/// </summary>
API_FIELD() float MaxMipLevel;
/// <summary>
/// The maximum number of samples that can be used to improve the quality of sample footprints that are anisotropic.
/// </summary>
API_FIELD() int32 MaxAnisotropy;
/// <summary>
/// The border color to use if Border is specified for AddressU, AddressV, or AddressW.
/// </summary>
API_FIELD() GPUSamplerBorderColor BorderColor;
/// <summary>
/// A function that compares sampled data against existing sampled data.
/// </summary>
API_FIELD() GPUSamplerCompareFunction ComparisonFunction;
public:
/// <summary>
/// Creates a new <see cref="GPUSamplerDescription" /> with default settings.
/// </summary>
/// <param name="filter">The filtering method.</param>
/// <param name="addressMode">The addressing mode.</param>
/// <returns>A new instance of <see cref="GPUSamplerDescription" /> class.</returns>
static GPUSamplerDescription New(GPUSamplerFilter filter = GPUSamplerFilter::Point, GPUSamplerAddressMode addressMode = GPUSamplerAddressMode::Wrap);
public:
void Clear();
bool Equals(const GPUSamplerDescription& other) const;
String ToString() const;
public:
FORCE_INLINE bool operator==(const GPUSamplerDescription& other) const
{
return Equals(other);
}
FORCE_INLINE bool operator!=(const GPUSamplerDescription& other) const
{
return !Equals(other);
}
};
uint32 GetHash(const GPUSamplerDescription& key);