summaryrefslogtreecommitdiff
path: root/Runtime/Graphics/TextureSettings.cpp
blob: a11b565f0c8bb1346d38cd4bdd1a071754df3184 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "UnityPrefix.h"
#include "TextureSettings.h"
#include "Runtime/Utilities/Utility.h"
#include "Runtime/GfxDevice/GfxDevice.h"

static int gUserMinAniso = 1;
static int gUserMaxAniso = 16;


void TextureSettings::SetAnisoLimits (int minAniso, int maxAniso)
{
	gUserMinAniso = minAniso;
	gUserMaxAniso = maxAniso;
	ErrorIf (gUserMinAniso < 1);
	ErrorIf (gUserMaxAniso > 16);
}

void TextureSettings::GetAnisoLimits (int& minAniso, int& maxAniso)
{
	minAniso = gUserMinAniso;
	maxAniso = gUserMaxAniso;
}


void TextureSettings::Reset ()
{
	m_FilterMode = kTexFilterBilinear;
	m_Aniso = 1;
	m_MipBias = 0.0f;
	m_WrapMode = 0;
}

void TextureSettings::CheckConsistency()
{
	m_FilterMode = clamp<int> (m_FilterMode, 0, kTexFilterCount-1);
	m_WrapMode = clamp<int> (m_WrapMode, 0, kTexWrapCount-1);
}


void TextureSettings::Apply (TextureID texture, TextureDimension texDim, bool hasMipMap, TextureColorSpace colorSpace) const
{
	GfxDevice& device = GetGfxDevice();

	int aniso;
	// Never use anisotropic on textures where we certainly don't want it,
	// and on Point filtered textures.
	if (m_Aniso == 0 || m_FilterMode == kTexFilterNearest)
		aniso = 1;
	else
		aniso = clamp (m_Aniso, gUserMinAniso, gUserMaxAniso);
	
	device.SetTextureParams (texture, texDim, (TextureFilterMode)m_FilterMode,
		(TextureWrapMode)m_WrapMode, aniso, hasMipMap, colorSpace);
}

#if UNITY_EDITOR
void TextureSettings::Invalidate ()
{
	m_FilterMode = -1;
	m_Aniso = -1;
	m_MipBias = -1.0f;
	m_WrapMode = -1;
}
#endif