mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
Cleanup.
This commit is contained in:
parent
0ad579f4cb
commit
b6ae6fda61
6 changed files with 127 additions and 56 deletions
|
@ -114,10 +114,10 @@ static void updateTextureCubeRectBgra8(bgfx::TextureHandle _handle, uint8_t _sid
|
||||||
|
|
||||||
int _main_(int /*_argc*/, char** /*_argv*/)
|
int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
{
|
{
|
||||||
uint32_t width = 1280;
|
uint32_t width = 1280;
|
||||||
uint32_t height = 720;
|
uint32_t height = 720;
|
||||||
uint32_t debug = BGFX_DEBUG_TEXT;
|
uint32_t debug = BGFX_DEBUG_TEXT;
|
||||||
uint32_t reset = BGFX_RESET_VSYNC;
|
uint32_t reset = BGFX_RESET_VSYNC;
|
||||||
|
|
||||||
bgfx::init();
|
bgfx::init();
|
||||||
bgfx::reset(width, height, reset);
|
bgfx::reset(width, height, reset);
|
||||||
|
|
|
@ -217,10 +217,10 @@ class Deferred : public entry::AppI
|
||||||
{
|
{
|
||||||
void init(int /*_argc*/, char** /*_argv*/) BX_OVERRIDE
|
void init(int /*_argc*/, char** /*_argv*/) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
m_width = 1280;
|
m_width = 1280;
|
||||||
m_height = 720;
|
m_height = 720;
|
||||||
m_debug = BGFX_DEBUG_TEXT;
|
m_debug = BGFX_DEBUG_TEXT;
|
||||||
m_reset = BGFX_RESET_VSYNC;
|
m_reset = BGFX_RESET_VSYNC;
|
||||||
|
|
||||||
bgfx::init();
|
bgfx::init();
|
||||||
bgfx::reset(m_width, m_height, m_reset);
|
bgfx::reset(m_width, m_height, m_reset);
|
||||||
|
@ -410,9 +410,9 @@ class Deferred : public entry::AppI
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_oldWidth != m_width
|
if (m_oldWidth != m_width
|
||||||
|| m_oldHeight != m_height
|
|| m_oldHeight != m_height
|
||||||
|| m_oldReset != m_reset
|
|| m_oldReset != m_reset
|
||||||
|| !bgfx::isValid(m_gbuffer) )
|
|| !bgfx::isValid(m_gbuffer) )
|
||||||
{
|
{
|
||||||
// Recreate variable size render targets when resolution changes.
|
// Recreate variable size render targets when resolution changes.
|
||||||
m_oldWidth = m_width;
|
m_oldWidth = m_width;
|
||||||
|
|
|
@ -4240,23 +4240,96 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uint32_t msaaQuality = bx::uint32_satsub( (texture.m_flags&BGFX_TEXTURE_RT_MSAA_MASK)>>BGFX_TEXTURE_RT_MSAA_SHIFT, 1);
|
||||||
|
const DXGI_SAMPLE_DESC& msaa = s_msaa[msaaQuality];
|
||||||
|
|
||||||
if (isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
|
if (isDepth( (TextureFormat::Enum)texture.m_textureFormat) )
|
||||||
{
|
{
|
||||||
BX_CHECK(NULL == m_dsv, "Frame buffer already has depth-stencil attached.");
|
BX_CHECK(NULL == m_dsv, "Frame buffer already has depth-stencil attached.");
|
||||||
|
|
||||||
const uint32_t msaaQuality = bx::uint32_satsub( (texture.m_flags&BGFX_TEXTURE_RT_MSAA_MASK)>>BGFX_TEXTURE_RT_MSAA_SHIFT, 1);
|
switch (texture.m_type)
|
||||||
const DXGI_SAMPLE_DESC& msaa = s_msaa[msaaQuality];
|
{
|
||||||
|
default:
|
||||||
|
case TextureD3D11::Texture2D:
|
||||||
|
{
|
||||||
|
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
|
||||||
|
dsvDesc.Format = s_textureFormat[texture.m_textureFormat].m_fmtDsv;
|
||||||
|
dsvDesc.ViewDimension = 1 < msaa.Count
|
||||||
|
? D3D11_DSV_DIMENSION_TEXTURE2DMS
|
||||||
|
: D3D11_DSV_DIMENSION_TEXTURE2D
|
||||||
|
;
|
||||||
|
dsvDesc.Flags = 0;
|
||||||
|
dsvDesc.Texture2D.MipSlice = 0;
|
||||||
|
DX_CHECK(s_renderD3D11->m_device->CreateDepthStencilView(texture.m_ptr, &dsvDesc, &m_dsv) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
|
case TextureD3D11::TextureCube:
|
||||||
dsvDesc.Format = s_textureFormat[texture.m_textureFormat].m_fmtDsv;
|
{
|
||||||
dsvDesc.ViewDimension = 1 < msaa.Count ? D3D11_DSV_DIMENSION_TEXTURE2DMS : D3D11_DSV_DIMENSION_TEXTURE2D;
|
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc;
|
||||||
dsvDesc.Flags = 0;
|
dsvDesc.Format = s_textureFormat[texture.m_textureFormat].m_fmtDsv;
|
||||||
dsvDesc.Texture2D.MipSlice = 0;
|
if (1 < msaa.Count)
|
||||||
DX_CHECK(s_renderD3D11->m_device->CreateDepthStencilView(texture.m_ptr, &dsvDesc, &m_dsv) );
|
{
|
||||||
|
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY;
|
||||||
|
dsvDesc.Texture2DMSArray.ArraySize = 1;
|
||||||
|
dsvDesc.Texture2DMSArray.FirstArraySlice = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DARRAY;
|
||||||
|
dsvDesc.Texture2DArray.ArraySize = 1;
|
||||||
|
dsvDesc.Texture2DArray.FirstArraySlice = 0;
|
||||||
|
dsvDesc.Texture2DArray.MipSlice = 0;
|
||||||
|
}
|
||||||
|
dsvDesc.Flags = 0;
|
||||||
|
DX_CHECK(s_renderD3D11->m_device->CreateDepthStencilView(texture.m_ptr, &dsvDesc, &m_dsv) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, NULL, &m_rtv[m_num]) );
|
switch (texture.m_type)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case TextureD3D11::Texture2D:
|
||||||
|
DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, NULL, &m_rtv[m_num]) );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TextureD3D11::TextureCube:
|
||||||
|
{
|
||||||
|
D3D11_RENDER_TARGET_VIEW_DESC desc;
|
||||||
|
desc.Format = s_textureFormat[texture.m_textureFormat].m_fmt;
|
||||||
|
if (1 < msaa.Count)
|
||||||
|
{
|
||||||
|
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY;
|
||||||
|
desc.Texture2DMSArray.ArraySize = 1;
|
||||||
|
desc.Texture2DMSArray.FirstArraySlice = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
|
||||||
|
desc.Texture2DArray.ArraySize = 1;
|
||||||
|
desc.Texture2DArray.FirstArraySlice = 0;
|
||||||
|
desc.Texture2DArray.MipSlice = 0;
|
||||||
|
}
|
||||||
|
DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TextureD3D11::Texture3D:
|
||||||
|
{
|
||||||
|
D3D11_RENDER_TARGET_VIEW_DESC desc;
|
||||||
|
desc.Format = s_textureFormat[texture.m_textureFormat].m_fmt;
|
||||||
|
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
|
||||||
|
desc.Texture3D.MipSlice = 0;
|
||||||
|
desc.Texture3D.WSize = 1;
|
||||||
|
desc.Texture3D.FirstWSlice = 0;
|
||||||
|
DX_CHECK(s_renderD3D11->m_device->CreateRenderTargetView(texture.m_ptr, &desc, &m_rtv[m_num]) );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
DX_CHECK(s_renderD3D11->m_device->CreateShaderResourceView(texture.m_ptr, NULL, &m_srv[m_num]) );
|
DX_CHECK(s_renderD3D11->m_device->CreateShaderResourceView(texture.m_ptr, NULL, &m_srv[m_num]) );
|
||||||
m_num++;
|
m_num++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2573,6 +2573,28 @@ namespace bgfx { namespace d3d9
|
||||||
BX_CHECK(false, "You should not be here.");
|
BX_CHECK(false, "You should not be here.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IDirect3DSurface9* TextureD3D9::getSurface(uint8_t _side, uint8_t _mip) const
|
||||||
|
{
|
||||||
|
IDirect3DSurface9* surface = NULL;
|
||||||
|
|
||||||
|
switch (m_type)
|
||||||
|
{
|
||||||
|
case Texture2D:
|
||||||
|
DX_CHECK(m_texture2d->GetSurfaceLevel(_mip, &surface) );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Texture3D:
|
||||||
|
BX_CHECK(false, "");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TextureCube:
|
||||||
|
DX_CHECK(m_textureCube->GetCubeMapSurface(D3DCUBEMAP_FACES(_side), _mip, &surface) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
void TextureD3D9::create(const Memory* _mem, uint32_t _flags, uint8_t _skip)
|
void TextureD3D9::create(const Memory* _mem, uint32_t _flags, uint8_t _skip)
|
||||||
{
|
{
|
||||||
ImageContainer imageContainer;
|
ImageContainer imageContainer;
|
||||||
|
@ -2796,8 +2818,7 @@ namespace bgfx { namespace d3d9
|
||||||
if (NULL != m_surface
|
if (NULL != m_surface
|
||||||
&& NULL != m_texture2d)
|
&& NULL != m_texture2d)
|
||||||
{
|
{
|
||||||
IDirect3DSurface9* surface;
|
IDirect3DSurface9* surface = getSurface();
|
||||||
DX_CHECK(m_texture2d->GetSurfaceLevel(0, &surface) );
|
|
||||||
DX_CHECK(s_renderD3D9->m_device->StretchRect(m_surface
|
DX_CHECK(s_renderD3D9->m_device->StretchRect(m_surface
|
||||||
, NULL
|
, NULL
|
||||||
, surface
|
, surface
|
||||||
|
@ -2856,7 +2877,7 @@ namespace bgfx { namespace d3d9
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DX_CHECK(texture.m_texture2d->GetSurfaceLevel(0, &m_depthStencil) );
|
m_depthStencil = texture.getSurface();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2869,7 +2890,7 @@ namespace bgfx { namespace d3d9
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DX_CHECK(texture.m_texture2d->GetSurfaceLevel(0, &m_color[m_num]) );
|
m_color[m_num] = texture.getSurface();
|
||||||
}
|
}
|
||||||
m_num++;
|
m_num++;
|
||||||
}
|
}
|
||||||
|
@ -3057,7 +3078,7 @@ namespace bgfx { namespace d3d9
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DX_CHECK(texture.m_texture2d->GetSurfaceLevel(0, &m_color[ii]) );
|
m_color[ii] = texture.getSurface();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3072,7 +3093,7 @@ namespace bgfx { namespace d3d9
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DX_CHECK(texture.m_texture2d->GetSurfaceLevel(0, &m_depthStencil) );
|
m_depthStencil = texture.getSurface();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 == m_num)
|
if (0 == m_num)
|
||||||
|
@ -3336,37 +3357,8 @@ namespace bgfx { namespace d3d9
|
||||||
RECT srcRect = { LONG(blit.m_srcX), LONG(blit.m_srcY), LONG(blit.m_srcX + width), LONG(blit.m_srcY + height) };
|
RECT srcRect = { LONG(blit.m_srcX), LONG(blit.m_srcY), LONG(blit.m_srcX + width), LONG(blit.m_srcY + height) };
|
||||||
RECT dstRect = { LONG(blit.m_dstX), LONG(blit.m_dstY), LONG(blit.m_dstX + width), LONG(blit.m_dstY + height) };
|
RECT dstRect = { LONG(blit.m_dstX), LONG(blit.m_dstY), LONG(blit.m_dstX + width), LONG(blit.m_dstY + height) };
|
||||||
|
|
||||||
IDirect3DSurface9* srcSurface;
|
IDirect3DSurface9* srcSurface = src.getSurface(uint8_t(blit.m_srcZ), blit.m_srcMip);
|
||||||
switch (src.m_type)
|
IDirect3DSurface9* dstSurface = dst.getSurface(uint8_t(blit.m_dstZ), blit.m_dstMip);
|
||||||
{
|
|
||||||
case TextureD3D9::Texture2D:
|
|
||||||
DX_CHECK(src.m_texture2d->GetSurfaceLevel(blit.m_srcMip, &srcSurface) );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TextureD3D9::Texture3D:
|
|
||||||
BX_CHECK(false, "");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TextureD3D9::TextureCube:
|
|
||||||
DX_CHECK(src.m_textureCube->GetCubeMapSurface(D3DCUBEMAP_FACES(blit.m_srcZ), blit.m_srcMip, &srcSurface) );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
IDirect3DSurface9* dstSurface;
|
|
||||||
switch (dst.m_type)
|
|
||||||
{
|
|
||||||
case TextureD3D9::Texture2D:
|
|
||||||
DX_CHECK(dst.m_texture2d->GetSurfaceLevel(blit.m_dstMip, &dstSurface) );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TextureD3D9::Texture3D:
|
|
||||||
BX_CHECK(false, "");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TextureD3D9::TextureCube:
|
|
||||||
DX_CHECK(dst.m_textureCube->GetCubeMapSurface(D3DCUBEMAP_FACES(blit.m_dstZ), blit.m_dstMip, &dstSurface) );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT hr = m_device->StretchRect(srcSurface
|
HRESULT hr = m_device->StretchRect(srcSurface
|
||||||
, &srcRect
|
, &srcRect
|
||||||
|
|
|
@ -321,6 +321,7 @@ namespace bgfx { namespace d3d9
|
||||||
uint8_t* lock(uint8_t _side, uint8_t _lod, uint32_t& _pitch, uint32_t& _slicePitch, const Rect* _rect = NULL);
|
uint8_t* lock(uint8_t _side, uint8_t _lod, uint32_t& _pitch, uint32_t& _slicePitch, const Rect* _rect = NULL);
|
||||||
void unlock(uint8_t _side, uint8_t _lod);
|
void unlock(uint8_t _side, uint8_t _lod);
|
||||||
void dirty(uint8_t _side, const Rect& _rect, uint16_t _z, uint16_t _depth);
|
void dirty(uint8_t _side, const Rect& _rect, uint16_t _z, uint16_t _depth);
|
||||||
|
IDirect3DSurface9* getSurface(uint8_t _side = 0, uint8_t _mip = 0) const;
|
||||||
|
|
||||||
void create(const Memory* _mem, uint32_t _flags, uint8_t _skip);
|
void create(const Memory* _mem, uint32_t _flags, uint8_t _skip);
|
||||||
|
|
||||||
|
|
|
@ -4904,9 +4904,14 @@ namespace bgfx { namespace gl
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
GLenum target = GL_TEXTURE_CUBE_MAP == texture.m_target
|
||||||
|
? GL_TEXTURE_CUBE_MAP_POSITIVE_X
|
||||||
|
: texture.m_target
|
||||||
|
;
|
||||||
|
|
||||||
GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER
|
GL_CHECK(glFramebufferTexture2D(GL_FRAMEBUFFER
|
||||||
, attachment
|
, attachment
|
||||||
, texture.m_target
|
, target
|
||||||
, texture.m_id
|
, texture.m_id
|
||||||
, 0
|
, 0
|
||||||
) );
|
) );
|
||||||
|
|
Loading…
Reference in a new issue