mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-21 14:23:02 +01:00
Fixed DX11 texture filtering. Added anisotropic texture flag.
This commit is contained in:
@@ -177,11 +177,13 @@
|
||||
#define BGFX_TEXTURE_W_SHIFT 8
|
||||
#define BGFX_TEXTURE_W_MASK UINT32_C(0x00000300)
|
||||
#define BGFX_TEXTURE_MIN_POINT UINT32_C(0x00001000)
|
||||
#define BGFX_TEXTURE_MIN_ANISOTROPIC UINT32_C(0x00002000)
|
||||
#define BGFX_TEXTURE_MIN_SHIFT 12
|
||||
#define BGFX_TEXTURE_MIN_MASK UINT32_C(0x00001000)
|
||||
#define BGFX_TEXTURE_MIN_MASK UINT32_C(0x00003000)
|
||||
#define BGFX_TEXTURE_MAG_POINT UINT32_C(0x00010000)
|
||||
#define BGFX_TEXTURE_MAG_ANISOTROPIC UINT32_C(0x00020000)
|
||||
#define BGFX_TEXTURE_MAG_SHIFT 16
|
||||
#define BGFX_TEXTURE_MAG_MASK UINT32_C(0x00010000)
|
||||
#define BGFX_TEXTURE_MAG_MASK UINT32_C(0x00030000)
|
||||
#define BGFX_TEXTURE_MIP_POINT UINT32_C(0x00100000)
|
||||
#define BGFX_TEXTURE_MIP_SHIFT 20
|
||||
#define BGFX_TEXTURE_MIP_MASK UINT32_C(0x00100000)
|
||||
|
||||
@@ -98,6 +98,42 @@ namespace bgfx
|
||||
D3D11_TEXTURE_ADDRESS_CLAMP,
|
||||
};
|
||||
|
||||
/*
|
||||
* D3D11_FILTER_MIN_MAG_MIP_POINT = 0x00,
|
||||
* D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,
|
||||
* D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,
|
||||
* D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,
|
||||
* D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
|
||||
* D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
|
||||
* D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
|
||||
* D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
|
||||
* D3D11_FILTER_ANISOTROPIC = 0x55,
|
||||
*
|
||||
* According to D3D11_FILTER enum bits for mip, mag and mip are:
|
||||
* 0x10 // MIN_LINEAR
|
||||
* 0x04 // MAG_LINEAR
|
||||
* 0x01 // MIP_LINEAR
|
||||
*/
|
||||
|
||||
static const uint32_t s_textureFilter[3][3] =
|
||||
{
|
||||
{
|
||||
0x10, // min linear
|
||||
0x00, // min point
|
||||
0x55, // anisotopic
|
||||
},
|
||||
{
|
||||
0x04, // mag linear
|
||||
0x00, // mag point
|
||||
0x55, // anisotopic
|
||||
},
|
||||
{
|
||||
0x01, // mip linear
|
||||
0x00, // mip point
|
||||
0x55, // anisotopic
|
||||
},
|
||||
};
|
||||
|
||||
struct TextureFormatInfo
|
||||
{
|
||||
DXGI_FORMAT m_fmt;
|
||||
@@ -1265,13 +1301,19 @@ namespace bgfx
|
||||
|
||||
void Texture::create(const Memory* _mem, uint32_t _flags)
|
||||
{
|
||||
_flags &= BGFX_TEXTURE_U_MASK|BGFX_TEXTURE_V_MASK|BGFX_TEXTURE_W_MASK;
|
||||
_flags &= BGFX_TEXTURE_MIN_MASK|BGFX_TEXTURE_MAG_MASK|BGFX_TEXTURE_MIP_MASK
|
||||
| BGFX_TEXTURE_U_MASK|BGFX_TEXTURE_V_MASK|BGFX_TEXTURE_W_MASK
|
||||
;
|
||||
|
||||
m_sampler = s_renderCtx.m_samplerStateCache.find(_flags);
|
||||
if (NULL == m_sampler)
|
||||
{
|
||||
uint8_t minFilter = s_textureFilter[0][(_flags&BGFX_TEXTURE_MIN_MASK)>>BGFX_TEXTURE_MIN_SHIFT];
|
||||
uint8_t magFilter = s_textureFilter[1][(_flags&BGFX_TEXTURE_MAG_MASK)>>BGFX_TEXTURE_MAG_SHIFT];
|
||||
uint8_t mipFilter = s_textureFilter[2][(_flags&BGFX_TEXTURE_MIP_MASK)>>BGFX_TEXTURE_MIP_SHIFT];
|
||||
|
||||
D3D11_SAMPLER_DESC desc;
|
||||
desc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
|
||||
desc.Filter = (D3D11_FILTER)(minFilter|magFilter|mipFilter);
|
||||
desc.AddressU = s_textureAddress[(_flags&BGFX_TEXTURE_U_MASK)>>BGFX_TEXTURE_U_SHIFT];
|
||||
desc.AddressV = s_textureAddress[(_flags&BGFX_TEXTURE_V_MASK)>>BGFX_TEXTURE_V_SHIFT];
|
||||
desc.AddressW = s_textureAddress[(_flags&BGFX_TEXTURE_W_MASK)>>BGFX_TEXTURE_W_SHIFT];
|
||||
|
||||
@@ -827,6 +827,7 @@ namespace bgfx
|
||||
{
|
||||
GL_LINEAR,
|
||||
GL_NEAREST,
|
||||
GL_LINEAR,
|
||||
};
|
||||
|
||||
struct TextureFormatInfo
|
||||
|
||||
Reference in New Issue
Block a user