WIP: Init params.
This commit is contained in:
parent
45b41f62d1
commit
9e00fad8b3
27
src/bgfx.cpp
27
src/bgfx.cpp
@ -1800,7 +1800,10 @@ namespace bgfx
|
||||
m_frameTimeLast = now;
|
||||
}
|
||||
|
||||
RendererContextI* rendererCreate(RendererType::Enum _type);
|
||||
///
|
||||
RendererContextI* rendererCreate(RendererType::Enum _type, const Init& _init);
|
||||
|
||||
///
|
||||
void rendererDestroy(RendererContextI* _renderCtx);
|
||||
|
||||
void Context::flip()
|
||||
@ -1816,7 +1819,8 @@ namespace bgfx
|
||||
// Something horribly went wrong, fallback to noop renderer.
|
||||
rendererDestroy(m_renderCtx);
|
||||
|
||||
m_renderCtx = rendererCreate(RendererType::Noop);
|
||||
Init init;
|
||||
m_renderCtx = rendererCreate(RendererType::Noop, init);
|
||||
g_caps.rendererType = RendererType::Noop;
|
||||
}
|
||||
}
|
||||
@ -1971,14 +1975,14 @@ namespace bgfx
|
||||
}
|
||||
}
|
||||
|
||||
typedef RendererContextI* (*RendererCreateFn)();
|
||||
typedef RendererContextI* (*RendererCreateFn)(const Init& _init);
|
||||
typedef void (*RendererDestroyFn)();
|
||||
|
||||
#define BGFX_RENDERER_CONTEXT(_namespace) \
|
||||
namespace _namespace \
|
||||
{ \
|
||||
extern RendererContextI* rendererCreate(); \
|
||||
extern void rendererDestroy(); \
|
||||
#define BGFX_RENDERER_CONTEXT(_namespace) \
|
||||
namespace _namespace \
|
||||
{ \
|
||||
extern RendererContextI* rendererCreate(const Init& _init); \
|
||||
extern void rendererDestroy(); \
|
||||
}
|
||||
|
||||
BGFX_RENDERER_CONTEXT(noop);
|
||||
@ -2060,7 +2064,7 @@ namespace bgfx
|
||||
return *(const int32_t*)_rhs - *(const int32_t*)_lhs;
|
||||
}
|
||||
|
||||
RendererContextI* rendererCreate(RendererType::Enum _type)
|
||||
RendererContextI* rendererCreate(RendererType::Enum _type, const Init& _init)
|
||||
{
|
||||
int32_t scores[RendererType::Count];
|
||||
uint32_t numScores = 0;
|
||||
@ -2136,7 +2140,7 @@ namespace bgfx
|
||||
for (uint32_t ii = 0; ii < numScores; ++ii)
|
||||
{
|
||||
RendererType::Enum renderer = RendererType::Enum(scores[ii] & 0xff);
|
||||
renderCtx = s_rendererCreator[renderer].createFn();
|
||||
renderCtx = s_rendererCreator[renderer].createFn(_init);
|
||||
if (NULL != renderCtx)
|
||||
{
|
||||
break;
|
||||
@ -2187,7 +2191,8 @@ namespace bgfx
|
||||
RendererType::Enum type;
|
||||
_cmdbuf.read(type);
|
||||
|
||||
m_renderCtx = rendererCreate(type);
|
||||
Init init;
|
||||
m_renderCtx = rendererCreate(type, init);
|
||||
|
||||
m_rendererInitialized = NULL != m_renderCtx;
|
||||
|
||||
|
16
src/bgfx_p.h
16
src/bgfx_p.h
@ -176,9 +176,6 @@ namespace stl = std;
|
||||
# include <windows.h>
|
||||
#endif // BX_PLATFORM_*
|
||||
|
||||
#define BGFX_DEFAULT_WIDTH 1280
|
||||
#define BGFX_DEFAULT_HEIGHT 720
|
||||
|
||||
#define BGFX_MAX_COMPUTE_BINDINGS 8
|
||||
|
||||
#define BGFX_TEXTURE_INTERNAL_DEFAULT_SAMPLER UINT32_C(0x10000000)
|
||||
@ -473,7 +470,7 @@ namespace bgfx
|
||||
, m_height(0)
|
||||
, m_small(false)
|
||||
{
|
||||
resize();
|
||||
resize(false, 1, 1);
|
||||
clear();
|
||||
}
|
||||
|
||||
@ -482,7 +479,7 @@ namespace bgfx
|
||||
BX_FREE(g_allocator, m_mem);
|
||||
}
|
||||
|
||||
void resize(bool _small = false, uint32_t _width = BGFX_DEFAULT_WIDTH, uint32_t _height = BGFX_DEFAULT_HEIGHT)
|
||||
void resize(bool _small, uint32_t _width, uint32_t _height)
|
||||
{
|
||||
uint32_t width = bx::uint32_imax(1, _width/8);
|
||||
uint32_t height = bx::uint32_imax(1, _height/(_small ? 8 : 16) );
|
||||
@ -1560,8 +1557,8 @@ namespace bgfx
|
||||
struct Resolution
|
||||
{
|
||||
Resolution()
|
||||
: m_width(BGFX_DEFAULT_WIDTH)
|
||||
, m_height(BGFX_DEFAULT_HEIGHT)
|
||||
: m_width(1280)
|
||||
, m_height(720)
|
||||
, m_flags(BGFX_RESET_NONE)
|
||||
{
|
||||
}
|
||||
@ -1571,6 +1568,11 @@ namespace bgfx
|
||||
uint32_t m_flags;
|
||||
};
|
||||
|
||||
struct Init
|
||||
{
|
||||
Resolution resolution;
|
||||
};
|
||||
|
||||
struct VertexBuffer
|
||||
{
|
||||
uint16_t m_stride;
|
||||
|
@ -761,7 +761,7 @@ namespace bgfx { namespace d3d11
|
||||
{
|
||||
}
|
||||
|
||||
bool init()
|
||||
bool init(const Init& _init)
|
||||
{
|
||||
struct ErrorState
|
||||
{
|
||||
@ -1260,8 +1260,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
}
|
||||
|
||||
bx::memSet(&m_scd, 0, sizeof(m_scd) );
|
||||
m_scd.Width = BGFX_DEFAULT_WIDTH;
|
||||
m_scd.Height = BGFX_DEFAULT_HEIGHT;
|
||||
m_scd.Width = _init.resolution.m_width;
|
||||
m_scd.Height = _init.resolution.m_height;
|
||||
m_scd.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
m_scd.Stereo = false;
|
||||
m_scd.SampleDesc.Count = 1;
|
||||
@ -1320,8 +1320,8 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
}
|
||||
|
||||
bx::memSet(&m_scd, 0, sizeof(m_scd) );
|
||||
m_scd.BufferDesc.Width = BGFX_DEFAULT_WIDTH;
|
||||
m_scd.BufferDesc.Height = BGFX_DEFAULT_HEIGHT;
|
||||
m_scd.BufferDesc.Width = _init.resolution.m_width;
|
||||
m_scd.BufferDesc.Height = _init.resolution.m_height;
|
||||
m_scd.BufferDesc.RefreshRate.Numerator = 60;
|
||||
m_scd.BufferDesc.RefreshRate.Denominator = 1;
|
||||
m_scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
@ -1385,7 +1385,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
bx::memSet(&m_scd, 0, sizeof(m_scd) );
|
||||
m_scd.SampleDesc.Count = 1;
|
||||
m_scd.SampleDesc.Quality = 0;
|
||||
setBufferSize(BGFX_DEFAULT_WIDTH, BGFX_DEFAULT_HEIGHT);
|
||||
setBufferSize(_init.resolution.m_width, _init.resolution.m_height);
|
||||
m_backBufferColor = (ID3D11RenderTargetView*)g_platformData.backBuffer;
|
||||
m_backBufferDepthStencil = (ID3D11DepthStencilView*)g_platformData.backBufferDS;
|
||||
}
|
||||
@ -3905,10 +3905,10 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
|
||||
static RendererContextD3D11* s_renderD3D11;
|
||||
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
s_renderD3D11 = BX_NEW(g_allocator, RendererContextD3D11);
|
||||
if (!s_renderD3D11->init() )
|
||||
if (!s_renderD3D11->init(_init) )
|
||||
{
|
||||
BX_DELETE(g_allocator, s_renderD3D11);
|
||||
s_renderD3D11 = NULL;
|
||||
@ -6903,8 +6903,9 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
|
||||
namespace bgfx { namespace d3d11
|
||||
{
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -561,7 +561,7 @@ namespace bgfx { namespace d3d12
|
||||
{
|
||||
}
|
||||
|
||||
bool init()
|
||||
bool init(const Init& _init)
|
||||
{
|
||||
struct ErrorState
|
||||
{
|
||||
@ -888,8 +888,8 @@ namespace bgfx { namespace d3d12
|
||||
goto error;
|
||||
}
|
||||
|
||||
m_scd.Width = BGFX_DEFAULT_WIDTH;
|
||||
m_scd.Height = BGFX_DEFAULT_HEIGHT;
|
||||
m_scd.Width = _init.resolution.m_width;
|
||||
m_scd.Height = _init.resolution.m_height;
|
||||
m_scd.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
m_scd.Stereo = false;
|
||||
m_scd.SampleDesc.Count = 1;
|
||||
@ -937,8 +937,8 @@ namespace bgfx { namespace d3d12
|
||||
# endif // BX_PLATFORM_WINRT
|
||||
}
|
||||
#else
|
||||
m_scd.BufferDesc.Width = BGFX_DEFAULT_WIDTH;
|
||||
m_scd.BufferDesc.Height = BGFX_DEFAULT_HEIGHT;
|
||||
m_scd.BufferDesc.Width = _init.resolution.m_width;
|
||||
m_scd.BufferDesc.Height = _init.resolution.m_height;
|
||||
m_scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
m_scd.BufferDesc.Scaling = DXGI_MODE_SCALING_STRETCHED;
|
||||
m_scd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
|
||||
@ -972,8 +972,8 @@ namespace bgfx { namespace d3d12
|
||||
m_presentElapsed = 0;
|
||||
|
||||
{
|
||||
m_resolution.m_width = BGFX_DEFAULT_WIDTH;
|
||||
m_resolution.m_height = BGFX_DEFAULT_HEIGHT;
|
||||
m_resolution.m_width = _init.resolution.m_width;
|
||||
m_resolution.m_height = _init.resolution.m_height;
|
||||
|
||||
m_numWindows = 1;
|
||||
|
||||
@ -3035,10 +3035,10 @@ data.NumQualityLevels = 0;
|
||||
|
||||
static RendererContextD3D12* s_renderD3D12;
|
||||
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
s_renderD3D12 = BX_NEW(g_allocator, RendererContextD3D12);
|
||||
if (!s_renderD3D12->init() )
|
||||
if (!s_renderD3D12->init(_init) )
|
||||
{
|
||||
BX_DELETE(g_allocator, s_renderD3D12);
|
||||
s_renderD3D12 = NULL;
|
||||
@ -5970,8 +5970,9 @@ data.NumQualityLevels = 0;
|
||||
|
||||
namespace bgfx { namespace d3d12
|
||||
{
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -399,7 +399,7 @@ namespace bgfx { namespace d3d9
|
||||
{
|
||||
}
|
||||
|
||||
bool init()
|
||||
bool init(const Init& _init)
|
||||
{
|
||||
struct ErrorState
|
||||
{
|
||||
@ -422,8 +422,8 @@ namespace bgfx { namespace d3d9
|
||||
|
||||
// http://msdn.microsoft.com/en-us/library/windows/desktop/bb172588%28v=vs.85%29.aspx
|
||||
bx::memSet(&m_params, 0, sizeof(m_params) );
|
||||
m_params.BackBufferWidth = BGFX_DEFAULT_WIDTH;
|
||||
m_params.BackBufferHeight = BGFX_DEFAULT_HEIGHT;
|
||||
m_params.BackBufferWidth = _init.resolution.m_width;
|
||||
m_params.BackBufferHeight = _init.resolution.m_height;
|
||||
m_params.BackBufferFormat = adapterFormat;
|
||||
m_params.BackBufferCount = 1;
|
||||
m_params.MultiSampleType = D3DMULTISAMPLE_NONE;
|
||||
@ -2247,10 +2247,10 @@ namespace bgfx { namespace d3d9
|
||||
|
||||
static RendererContextD3D9* s_renderD3D9;
|
||||
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
s_renderD3D9 = BX_NEW(g_allocator, RendererContextD3D9);
|
||||
if (!s_renderD3D9->init() )
|
||||
if (!s_renderD3D9->init(_init) )
|
||||
{
|
||||
BX_DELETE(g_allocator, s_renderD3D9);
|
||||
s_renderD3D9 = NULL;
|
||||
@ -4494,8 +4494,9 @@ namespace bgfx { namespace d3d9
|
||||
|
||||
namespace bgfx { namespace d3d9
|
||||
{
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1750,7 +1750,7 @@ namespace bgfx { namespace gl
|
||||
{
|
||||
}
|
||||
|
||||
bool init()
|
||||
bool init(const Init& _init)
|
||||
{
|
||||
struct ErrorState
|
||||
{
|
||||
@ -1768,7 +1768,7 @@ namespace bgfx { namespace gl
|
||||
bx::memSet(m_uniforms, 0, sizeof(m_uniforms) );
|
||||
bx::memSet(&m_resolution, 0, sizeof(m_resolution) );
|
||||
|
||||
setRenderContextSize(BGFX_DEFAULT_WIDTH, BGFX_DEFAULT_HEIGHT);
|
||||
setRenderContextSize(_init.resolution.m_width, _init.resolution.m_height);
|
||||
|
||||
// Must be after context is initialized?!
|
||||
VRImplI* vrImpl = NULL;
|
||||
@ -3943,10 +3943,10 @@ namespace bgfx { namespace gl
|
||||
|
||||
RendererContextGL* s_renderGL;
|
||||
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
s_renderGL = BX_NEW(g_allocator, RendererContextGL);
|
||||
if (!s_renderGL->init() )
|
||||
if (!s_renderGL->init(_init) )
|
||||
{
|
||||
BX_DELETE(g_allocator, s_renderGL);
|
||||
s_renderGL = NULL;
|
||||
@ -7821,8 +7821,9 @@ namespace bgfx { namespace gl
|
||||
|
||||
namespace bgfx { namespace gl
|
||||
{
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -33,8 +33,9 @@ BGFX_DECLARE_EMBEDDED_SHADER(fs_clear7);
|
||||
|
||||
namespace bgfx { namespace gnm
|
||||
{
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -358,7 +358,7 @@ namespace bgfx { namespace mtl
|
||||
{
|
||||
}
|
||||
|
||||
bool init()
|
||||
bool init(const Init& _init)
|
||||
{
|
||||
BX_TRACE("Init.");
|
||||
|
||||
@ -1847,10 +1847,10 @@ namespace bgfx { namespace mtl
|
||||
|
||||
static RendererContextMtl* s_renderMtl;
|
||||
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
s_renderMtl = BX_NEW(g_allocator, RendererContextMtl);
|
||||
if (!s_renderMtl->init() )
|
||||
if (!s_renderMtl->init(_init) )
|
||||
{
|
||||
BX_DELETE(g_allocator, s_renderMtl);
|
||||
s_renderMtl = NULL;
|
||||
@ -4061,8 +4061,9 @@ namespace bgfx { namespace mtl
|
||||
|
||||
namespace bgfx { namespace mtl
|
||||
{
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -224,8 +224,9 @@ namespace bgfx { namespace noop
|
||||
|
||||
static RendererContextNOOP* s_renderNOOP;
|
||||
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
s_renderNOOP = BX_NEW(g_allocator, RendererContextNOOP);
|
||||
return s_renderNOOP;
|
||||
}
|
||||
|
@ -703,7 +703,7 @@ VK_IMPORT_DEVICE
|
||||
{
|
||||
}
|
||||
|
||||
bool init()
|
||||
bool init(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(s_checkMsaa, s_textureAddress);
|
||||
|
||||
@ -1361,8 +1361,8 @@ VK_IMPORT_DEVICE
|
||||
m_sci.minImageCount = BX_COUNTOF(m_backBufferColorImage);
|
||||
m_sci.imageFormat = surfaceFormats[surfaceFormatIdx].format;
|
||||
m_sci.imageColorSpace = surfaceFormats[surfaceFormatIdx].colorSpace;
|
||||
m_sci.imageExtent.width = 1280;
|
||||
m_sci.imageExtent.height = 720;
|
||||
m_sci.imageExtent.width = _init.resolution.m_width;
|
||||
m_sci.imageExtent.height = _init.resolution.m_height;
|
||||
m_sci.imageArrayLayers = 1;
|
||||
m_sci.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||
m_sci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
@ -3056,10 +3056,10 @@ VK_IMPORT_DEVICE
|
||||
|
||||
static RendererContextVK* s_renderVK;
|
||||
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
s_renderVK = BX_NEW(g_allocator, RendererContextVK);
|
||||
if (!s_renderVK->init() )
|
||||
if (!s_renderVK->init(_init) )
|
||||
{
|
||||
BX_DELETE(g_allocator, s_renderVK);
|
||||
s_renderVK = NULL;
|
||||
@ -4599,8 +4599,9 @@ BX_UNUSED(presentMin, presentMax);
|
||||
|
||||
namespace bgfx { namespace vk
|
||||
{
|
||||
RendererContextI* rendererCreate()
|
||||
RendererContextI* rendererCreate(const Init& _init)
|
||||
{
|
||||
BX_UNUSED(_init);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user