// SwiftShader Software Renderer | |
// | |
// Copyright(c) 2005-2011 TransGaming Inc. | |
// | |
// All rights reserved. No part of this software may be copied, distributed, transmitted, | |
// transcribed, stored in a retrieval system, translated into any human or computer | |
// language by any means, or disclosed to third parties without the explicit written | |
// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express | |
// or implied, including but not limited to any patent rights, are granted to you. | |
// | |
#ifndef sw_Sampler_hpp | |
#define sw_Sampler_hpp | |
#include "Main/Config.hpp" | |
#include "Renderer/Surface.hpp" | |
namespace sw | |
{ | |
struct Mipmap | |
{ | |
void *buffer[6]; | |
union | |
{ | |
struct | |
{ | |
int64_t uInt; | |
int64_t vInt; | |
int64_t wInt; | |
int64_t uFrac; | |
int64_t vFrac; | |
int64_t wFrac; | |
}; | |
struct | |
{ | |
float4 fWidth; | |
float4 fHeight; | |
float4 fDepth; | |
}; | |
}; | |
short uHalf[4]; | |
short vHalf[4]; | |
short wHalf[4]; | |
short width[4]; | |
short height[4]; | |
short depth[4]; | |
short onePitchP[4]; | |
int sliceP[2]; | |
}; | |
struct Texture | |
{ | |
Mipmap mipmap[MIPMAP_LEVELS]; | |
float LOD; | |
float4 widthHeightLOD; | |
float4 widthLOD; | |
float4 heightLOD; | |
float4 depthLOD; | |
word4 borderColor4[4]; | |
float4 borderColorF[4]; | |
float maxAnisotropy; | |
}; | |
enum SamplerType | |
{ | |
SAMPLER_PIXEL, | |
SAMPLER_VERTEX | |
}; | |
enum TextureType | |
{ | |
TEXTURE_NULL, | |
TEXTURE_2D, | |
TEXTURE_CUBE, | |
TEXTURE_3D, | |
TEXTURE_LAST = TEXTURE_3D | |
}; | |
enum FilterType | |
{ | |
FILTER_POINT, | |
FILTER_GATHER, | |
FILTER_LINEAR, | |
FILTER_ANISOTROPIC, | |
FILTER_LAST = FILTER_ANISOTROPIC | |
}; | |
enum MipmapType | |
{ | |
MIPMAP_NONE, | |
MIPMAP_POINT, | |
MIPMAP_LINEAR, | |
MIPMAP_LAST = MIPMAP_LINEAR | |
}; | |
enum AddressingMode | |
{ | |
ADDRESSING_WRAP, | |
ADDRESSING_CLAMP, | |
ADDRESSING_MIRROR, | |
ADDRESSING_MIRRORONCE, | |
ADDRESSING_BORDER, | |
ADDRESSING_LAST = ADDRESSING_BORDER | |
}; | |
class Sampler | |
{ | |
public: | |
struct State | |
{ | |
State(); | |
unsigned int textureType : BITS(TEXTURE_LAST); | |
unsigned int textureFormat : BITS(FORMAT_LAST); | |
unsigned int textureFilter : BITS(FILTER_LAST); | |
unsigned int addressingModeU : BITS(ADDRESSING_LAST); | |
unsigned int addressingModeV : BITS(ADDRESSING_LAST); | |
unsigned int addressingModeW : BITS(ADDRESSING_LAST); | |
unsigned int mipmapFilter : BITS(FILTER_LAST); | |
unsigned int hasNPOTTexture : 1; | |
unsigned int sRGB : 1; | |
#if PERF_PROFILE | |
bool compressedFormat : 1; | |
#endif | |
}; | |
Sampler(); | |
~Sampler(); | |
State samplerState() const; | |
void setTextureLevel(int face, int level, Surface *surface, TextureType type); | |
void setTextureFilter(FilterType textureFilter); | |
void setMipmapFilter(MipmapType mipmapFilter); | |
void setGatherEnable(bool enable); | |
void setAddressingModeU(AddressingMode addressingMode); | |
void setAddressingModeV(AddressingMode addressingMode); | |
void setAddressingModeW(AddressingMode addressingMode); | |
void setReadSRGB(bool sRGB); | |
void setBorderColor(const Color<float> &borderColor); | |
void setMaxAnisotropy(unsigned int maxAnisotropy); | |
static void setFilterQuality(FilterType maximumFilterQuality); | |
static void setMipmapQuality(MipmapType maximumFilterQuality); | |
void setMipmapLOD(float lod); | |
bool hasTexture() const; | |
bool hasUnsignedTexture() const; | |
bool hasCubeTexture() const; | |
bool hasVolumeTexture() const; | |
const Texture &getTextureData(); | |
private: | |
MipmapType mipmapFilter() const; | |
bool hasNPOTTexture() const; | |
TextureType getTextureType() const; | |
FilterType getTextureFilter() const; | |
AddressingMode getAddressingModeU() const; | |
AddressingMode getAddressingModeV() const; | |
AddressingMode getAddressingModeW() const; | |
Format externalTextureFormat; | |
Format internalTextureFormat; | |
TextureType textureType; | |
FilterType textureFilter; | |
AddressingMode addressingModeU; | |
AddressingMode addressingModeV; | |
AddressingMode addressingModeW; | |
MipmapType mipmapFilterState; | |
bool sRGB; | |
bool gather; | |
Texture texture; | |
float exp2LOD; | |
static FilterType maximumTextureFilterQuality; | |
static MipmapType maximumMipmapFilterQuality; | |
}; | |
} | |
#endif // sw_Sampler_hpp |