mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-10-06 17:15:23 +00:00
Added alpha to coverage and anti-aliased lines support.
This commit is contained in:
@@ -261,6 +261,7 @@ namespace bgfx { namespace d3d9
|
||||
{ D3DFMT_NULL, D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, false },
|
||||
{ D3DFMT_RESZ, D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, false },
|
||||
{ D3DFMT_RAWZ, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, false },
|
||||
{ D3DFMT_ATOC, 0, D3DRTYPE_SURFACE, false },
|
||||
};
|
||||
|
||||
static const GUID IID_IDirect3D9 = { 0x81bdcbca, 0x64d4, 0x426d, { 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c } };
|
||||
@@ -288,9 +289,10 @@ namespace bgfx { namespace d3d9
|
||||
, m_initialized(false)
|
||||
, m_amd(false)
|
||||
, m_nvidia(false)
|
||||
, m_atocSupport(false)
|
||||
, m_instancingSupport(false)
|
||||
, m_timerQuerySupport(false)
|
||||
, m_occlusionQuerySupport(false)
|
||||
, m_timerQuerySupport(false)
|
||||
, m_rtMsaa(false)
|
||||
{
|
||||
}
|
||||
@@ -598,6 +600,10 @@ namespace bgfx { namespace d3d9
|
||||
|| (m_caps.VertexShaderVersion >= D3DVS_VERSION(3, 0) )
|
||||
;
|
||||
|
||||
m_atocSupport = false
|
||||
|| s_extendedFormats[ExtendedFormat::Atoc].m_supported
|
||||
;
|
||||
|
||||
if (m_amd
|
||||
&& s_extendedFormats[ExtendedFormat::Inst].m_supported)
|
||||
{ // AMD only
|
||||
@@ -613,7 +619,8 @@ namespace bgfx { namespace d3d9
|
||||
s_textureFormat[TextureFormat::BC4].m_fmt = s_extendedFormats[ExtendedFormat::Ati1].m_supported ? D3DFMT_ATI1 : D3DFMT_UNKNOWN;
|
||||
s_textureFormat[TextureFormat::BC5].m_fmt = s_extendedFormats[ExtendedFormat::Ati2].m_supported ? D3DFMT_ATI2 : D3DFMT_UNKNOWN;
|
||||
|
||||
g_caps.supported |= m_instancingSupport ? BGFX_CAPS_INSTANCING : 0;
|
||||
g_caps.supported |= m_instancingSupport ? BGFX_CAPS_INSTANCING : 0;
|
||||
g_caps.supported |= m_atocSupport ? BGFX_CAPS_ALPHA_TO_COVERAGE : 0;
|
||||
}
|
||||
|
||||
for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii)
|
||||
@@ -2066,9 +2073,10 @@ namespace bgfx { namespace d3d9
|
||||
bool m_initialized;
|
||||
bool m_amd;
|
||||
bool m_nvidia;
|
||||
bool m_atocSupport;
|
||||
bool m_instancingSupport;
|
||||
bool m_timerQuerySupport;
|
||||
bool m_occlusionQuerySupport;
|
||||
bool m_timerQuerySupport;
|
||||
|
||||
D3DFORMAT m_fmtDepth;
|
||||
|
||||
@@ -3844,6 +3852,11 @@ namespace bgfx { namespace d3d9
|
||||
DX_CHECK(device->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, (newFlags&BGFX_STATE_MSAA) == BGFX_STATE_MSAA) );
|
||||
}
|
||||
|
||||
if (BGFX_STATE_LINEAA & changedFlags)
|
||||
{
|
||||
DX_CHECK(m_device->SetRenderState(D3DRS_ANTIALIASEDLINEENABLE, !!(newFlags&BGFX_STATE_LINEAA) ) );
|
||||
}
|
||||
|
||||
if ( (BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags)
|
||||
{
|
||||
uint32_t writeEnable = (newFlags&BGFX_STATE_ALPHA_WRITE) ? D3DCOLORWRITEENABLE_ALPHA : 0;
|
||||
@@ -3851,12 +3864,26 @@ namespace bgfx { namespace d3d9
|
||||
DX_CHECK(device->SetRenderState(D3DRS_COLORWRITEENABLE, writeEnable) );
|
||||
}
|
||||
|
||||
if ( (BGFX_STATE_BLEND_MASK|BGFX_STATE_BLEND_EQUATION_MASK) & changedFlags
|
||||
if ( ( (0
|
||||
| BGFX_STATE_BLEND_MASK
|
||||
| BGFX_STATE_BLEND_EQUATION_MASK
|
||||
| BGFX_STATE_BLEND_ALPHA_TO_COVERAGE
|
||||
) & changedFlags)
|
||||
|| blendFactor != draw.m_rgba)
|
||||
{
|
||||
bool enabled = !!(BGFX_STATE_BLEND_MASK & newFlags);
|
||||
DX_CHECK(device->SetRenderState(D3DRS_ALPHABLENDENABLE, enabled) );
|
||||
|
||||
if (m_atocSupport
|
||||
&& BGFX_STATE_BLEND_ALPHA_TO_COVERAGE & changedFlags)
|
||||
{
|
||||
DX_CHECK(m_device->SetRenderState(D3DRS_ADAPTIVETESS_Y
|
||||
, !!(newFlags&BGFX_STATE_BLEND_ALPHA_TO_COVERAGE)
|
||||
? D3DFMT_ATOC
|
||||
: 0
|
||||
) );
|
||||
}
|
||||
|
||||
if (enabled)
|
||||
{
|
||||
const uint32_t blend = uint32_t( (newFlags&BGFX_STATE_BLEND_MASK)>>BGFX_STATE_BLEND_SHIFT);
|
||||
|
||||
Reference in New Issue
Block a user