Removed context static inialization.

This commit is contained in:
bkaradzic
2013-09-20 22:13:58 -07:00
parent 083ada2fbd
commit a5948679ca
13 changed files with 682 additions and 542 deletions

View File

@@ -1181,7 +1181,7 @@ namespace bgfx
uint32_t m_fsChanges;
};
static RendererContext s_renderCtx;
static RendererContext* s_renderCtx;
void IndexBuffer::create(uint32_t _size, void* _data)
{
@@ -1199,7 +1199,7 @@ namespace bgfx
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
DX_CHECK(s_renderCtx.m_device->CreateBuffer(&desc
DX_CHECK(s_renderCtx->m_device->CreateBuffer(&desc
, NULL
, &m_ptr
) );
@@ -1214,7 +1214,7 @@ namespace bgfx
srd.SysMemPitch = 0;
srd.SysMemSlicePitch = 0;
DX_CHECK(s_renderCtx.m_device->CreateBuffer(&desc
DX_CHECK(s_renderCtx->m_device->CreateBuffer(&desc
, &srd
, &m_ptr
) );
@@ -1223,7 +1223,7 @@ namespace bgfx
void IndexBuffer::update(uint32_t _offset, uint32_t _size, void* _data)
{
ID3D11DeviceContext* deviceCtx = s_renderCtx.m_deviceCtx;
ID3D11DeviceContext* deviceCtx = s_renderCtx->m_deviceCtx;
BX_CHECK(m_dynamic, "Must be dynamic!");
D3D11_MAPPED_SUBRESOURCE mapped;
@@ -1250,7 +1250,7 @@ namespace bgfx
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.StructureByteStride = 0;
DX_CHECK(s_renderCtx.m_device->CreateBuffer(&desc
DX_CHECK(s_renderCtx->m_device->CreateBuffer(&desc
, NULL
, &m_ptr
) );
@@ -1266,7 +1266,7 @@ namespace bgfx
srd.SysMemPitch = 0;
srd.SysMemSlicePitch = 0;
DX_CHECK(s_renderCtx.m_device->CreateBuffer(&desc
DX_CHECK(s_renderCtx->m_device->CreateBuffer(&desc
, &srd
, &m_ptr
) );
@@ -1275,7 +1275,7 @@ namespace bgfx
void VertexBuffer::update(uint32_t _offset, uint32_t _size, void* _data)
{
ID3D11DeviceContext* deviceCtx = s_renderCtx.m_deviceCtx;
ID3D11DeviceContext* deviceCtx = s_renderCtx->m_deviceCtx;
BX_CHECK(m_dynamic, "Must be dynamic!");
D3D11_MAPPED_SUBRESOURCE mapped;
@@ -1318,7 +1318,7 @@ namespace bgfx
case UniformType::_uniform: \
case UniformType::_uniform|BGFX_UNIFORM_FRAGMENTBIT: \
{ \
s_renderCtx.setShaderConstant(type, loc, data, num); \
s_renderCtx->setShaderConstant(type, loc, data, num); \
} \
break;
@@ -1349,13 +1349,13 @@ namespace bgfx
void TextVideoMemBlitter::setup()
{
ID3D11DeviceContext* deviceCtx = s_renderCtx.m_deviceCtx;
ID3D11DeviceContext* deviceCtx = s_renderCtx->m_deviceCtx;
uint32_t width = s_renderCtx.m_scd.BufferDesc.Width;
uint32_t height = s_renderCtx.m_scd.BufferDesc.Height;
uint32_t width = s_renderCtx->m_scd.BufferDesc.Width;
uint32_t height = s_renderCtx->m_scd.BufferDesc.Height;
RenderTargetHandle rt = BGFX_INVALID_HANDLE;
s_renderCtx.setRenderTarget(rt, false);
s_renderCtx->setRenderTarget(rt, false);
D3D11_VIEWPORT vp;
vp.TopLeftX = 0;
@@ -1371,25 +1371,25 @@ namespace bgfx
| BGFX_STATE_DEPTH_TEST_ALWAYS
;
s_renderCtx.setBlendState(state);
s_renderCtx.setDepthStencilState(state);
s_renderCtx.setRasterizerState(state);
s_renderCtx->setBlendState(state);
s_renderCtx->setDepthStencilState(state);
s_renderCtx->setRasterizerState(state);
Program& program = s_renderCtx.m_program[m_program.idx];
s_renderCtx.m_currentProgram = &program;
Program& program = s_renderCtx->m_program[m_program.idx];
s_renderCtx->m_currentProgram = &program;
deviceCtx->VSSetShader( (ID3D11VertexShader*)program.m_vsh->m_ptr, NULL, 0);
deviceCtx->VSSetConstantBuffers(0, 1, &program.m_vsh->m_buffer);
deviceCtx->PSSetShader( (ID3D11PixelShader*)program.m_fsh->m_ptr, NULL, 0);
deviceCtx->PSSetConstantBuffers(0, 1, &program.m_fsh->m_buffer);
VertexBuffer& vb = s_renderCtx.m_vertexBuffers[m_vb->handle.idx];
VertexDecl& vertexDecl = s_renderCtx.m_vertexDecls[m_vb->decl.idx];
VertexBuffer& vb = s_renderCtx->m_vertexBuffers[m_vb->handle.idx];
VertexDecl& vertexDecl = s_renderCtx->m_vertexDecls[m_vb->decl.idx];
uint32_t stride = vertexDecl.m_stride;
uint32_t offset = 0;
deviceCtx->IASetVertexBuffers(0, 1, &vb.m_ptr, &stride, &offset);
s_renderCtx.setInputLayout(vertexDecl, program, 0);
s_renderCtx->setInputLayout(vertexDecl, program, 0);
IndexBuffer& ib = s_renderCtx.m_indexBuffers[m_ib->handle.idx];
IndexBuffer& ib = s_renderCtx->m_indexBuffers[m_ib->handle.idx];
deviceCtx->IASetIndexBuffer(ib.m_ptr, DXGI_FORMAT_R16_UINT, 0);
float proj[16];
@@ -1397,22 +1397,22 @@ namespace bgfx
PredefinedUniform& predefined = program.m_predefined[0];
uint8_t flags = predefined.m_type;
s_renderCtx.setShaderConstant(flags, predefined.m_loc, proj, 4);
s_renderCtx->setShaderConstant(flags, predefined.m_loc, proj, 4);
s_renderCtx.commitShaderConstants();
s_renderCtx.m_textures[m_texture.idx].commit(0);
s_renderCtx.commitTextureStage();
s_renderCtx->commitShaderConstants();
s_renderCtx->m_textures[m_texture.idx].commit(0);
s_renderCtx->commitTextureStage();
}
void TextVideoMemBlitter::render(uint32_t _numIndices)
{
ID3D11DeviceContext* deviceCtx = s_renderCtx.m_deviceCtx;
ID3D11DeviceContext* deviceCtx = s_renderCtx->m_deviceCtx;
IndexBuffer& ib = s_renderCtx.m_indexBuffers[m_ib->handle.idx];
IndexBuffer& ib = s_renderCtx->m_indexBuffers[m_ib->handle.idx];
ib.update(0, _numIndices*2, m_ib->data);
uint32_t numVertices = _numIndices*4/6;
s_renderCtx.m_vertexBuffers[m_vb->handle.idx].update(0, numVertices*m_decl.m_stride, m_vb->data);
s_renderCtx->m_vertexBuffers[m_vb->handle.idx].update(0, numVertices*m_decl.m_stride, m_vb->data);
deviceCtx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
deviceCtx->DrawIndexed(_numIndices, 0, 0);
@@ -1421,19 +1421,19 @@ namespace bgfx
void ClearQuad::clear(const Rect& _rect, const Clear& _clear, uint32_t _height)
{
BX_UNUSED(_height);
uint32_t width = s_renderCtx.m_scd.BufferDesc.Width;
uint32_t height = s_renderCtx.m_scd.BufferDesc.Height;
uint32_t width = s_renderCtx->m_scd.BufferDesc.Width;
uint32_t height = s_renderCtx->m_scd.BufferDesc.Height;
if (0 == _rect.m_x
&& 0 == _rect.m_y
&& width == _rect.m_width
&& height == _rect.m_height)
{
s_renderCtx.clear(_clear);
s_renderCtx->clear(_clear);
}
else
{
ID3D11DeviceContext* deviceCtx = s_renderCtx.m_deviceCtx;
ID3D11DeviceContext* deviceCtx = s_renderCtx->m_deviceCtx;
uint64_t state = 0;
state |= _clear.m_flags & BGFX_CLEAR_COLOR_BIT ? BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE : 0;
@@ -1450,19 +1450,19 @@ namespace bgfx
: 0
;
s_renderCtx.setBlendState(state);
s_renderCtx.setDepthStencilState(state, stencil);
s_renderCtx.setRasterizerState(state);
s_renderCtx->setBlendState(state);
s_renderCtx->setDepthStencilState(state, stencil);
s_renderCtx->setRasterizerState(state);
Program& program = s_renderCtx.m_program[m_program.idx];
s_renderCtx.m_currentProgram = &program;
Program& program = s_renderCtx->m_program[m_program.idx];
s_renderCtx->m_currentProgram = &program;
deviceCtx->VSSetShader( (ID3D11VertexShader*)program.m_vsh->m_ptr, NULL, 0);
deviceCtx->VSSetConstantBuffers(0, 0, NULL);
deviceCtx->PSSetShader( (ID3D11PixelShader*)program.m_fsh->m_ptr, NULL, 0);
deviceCtx->PSSetConstantBuffers(0, 0, NULL);
VertexBuffer& vb = s_renderCtx.m_vertexBuffers[m_vb->handle.idx];
VertexDecl& vertexDecl = s_renderCtx.m_vertexDecls[m_vb->decl.idx];
VertexBuffer& vb = s_renderCtx->m_vertexBuffers[m_vb->handle.idx];
VertexDecl& vertexDecl = s_renderCtx->m_vertexDecls[m_vb->decl.idx];
uint32_t stride = vertexDecl.m_stride;
uint32_t offset = 0;
@@ -1500,11 +1500,11 @@ namespace bgfx
vertex->m_abgr = abgr;
}
s_renderCtx.m_vertexBuffers[m_vb->handle.idx].update(0, 4*m_decl.m_stride, m_vb->data);
s_renderCtx->m_vertexBuffers[m_vb->handle.idx].update(0, 4*m_decl.m_stride, m_vb->data);
deviceCtx->IASetVertexBuffers(0, 1, &vb.m_ptr, &stride, &offset);
s_renderCtx.setInputLayout(vertexDecl, program, 0);
s_renderCtx->setInputLayout(vertexDecl, program, 0);
IndexBuffer& ib = s_renderCtx.m_indexBuffers[m_ib.idx];
IndexBuffer& ib = s_renderCtx->m_indexBuffers[m_ib.idx];
deviceCtx->IASetIndexBuffer(ib.m_ptr, DXGI_FORMAT_R16_UINT, 0);
deviceCtx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
@@ -1539,7 +1539,7 @@ namespace bgfx
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
desc.StructureByteStride = 0;
DX_CHECK(s_renderCtx.m_device->CreateBuffer(&desc, NULL, &m_buffer) );
DX_CHECK(s_renderCtx->m_device->CreateBuffer(&desc, NULL, &m_buffer) );
}
m_numPredefined = 0;
@@ -1588,7 +1588,7 @@ namespace bgfx
}
else
{
const UniformInfo* info = s_renderCtx.m_uniformReg.find(name);
const UniformInfo* info = s_renderCtx->m_uniformReg.find(name);
UniformBuffer* uniform = info != NULL ? (UniformBuffer*)info->m_data : NULL;
if (NULL != uniform)
@@ -1620,7 +1620,7 @@ namespace bgfx
if (_fragment)
{
DX_CHECK(s_renderCtx.m_device->CreatePixelShader(code, shaderSize, NULL, (ID3D11PixelShader**)&m_ptr) );
DX_CHECK(s_renderCtx->m_device->CreatePixelShader(code, shaderSize, NULL, (ID3D11PixelShader**)&m_ptr) );
BGFX_FATAL(NULL != m_ptr, bgfx::Fatal::InvalidShader, "Failed to create fragment shader.");
}
else
@@ -1629,14 +1629,14 @@ namespace bgfx
m_code = alloc(shaderSize);
memcpy(m_code->data, code, shaderSize);
DX_CHECK(s_renderCtx.m_device->CreateVertexShader(code, shaderSize, NULL, (ID3D11VertexShader**)&m_ptr) );
DX_CHECK(s_renderCtx->m_device->CreateVertexShader(code, shaderSize, NULL, (ID3D11VertexShader**)&m_ptr) );
BGFX_FATAL(NULL != m_ptr, bgfx::Fatal::InvalidShader, "Failed to create vertex shader.");
}
}
void Texture::create(const Memory* _mem, uint32_t _flags)
{
m_sampler = s_renderCtx.getSamplerState(_flags);
m_sampler = s_renderCtx->getSamplerState(_flags);
ImageContainer imageContainer;
@@ -1757,7 +1757,7 @@ namespace bgfx
srvd.Texture2D.MipLevels = imageContainer.m_numMips;
}
DX_CHECK(s_renderCtx.m_device->CreateTexture2D(&desc, kk == 0 ? NULL : srd, &m_texture2d) );
DX_CHECK(s_renderCtx->m_device->CreateTexture2D(&desc, kk == 0 ? NULL : srd, &m_texture2d) );
}
break;
@@ -1777,12 +1777,12 @@ namespace bgfx
srvd.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
srvd.Texture3D.MipLevels = imageContainer.m_numMips;
DX_CHECK(s_renderCtx.m_device->CreateTexture3D(&desc, kk == 0 ? NULL : srd, &m_texture3d) );
DX_CHECK(s_renderCtx->m_device->CreateTexture3D(&desc, kk == 0 ? NULL : srd, &m_texture3d) );
}
break;
}
DX_CHECK(s_renderCtx.m_device->CreateShaderResourceView(m_ptr, &srvd, &m_srv) );
DX_CHECK(s_renderCtx->m_device->CreateShaderResourceView(m_ptr, &srvd, &m_srv) );
if (convert
&& 0 != kk)
@@ -1808,17 +1808,17 @@ namespace bgfx
void Texture::commit(uint8_t _stage, uint32_t _flags)
{
TextureStage& ts = s_renderCtx.m_textureStage;
TextureStage& ts = s_renderCtx->m_textureStage;
ts.m_srv[_stage] = m_srv;
ts.m_sampler[_stage] = 0 == (BGFX_SAMPLER_DEFAULT_FLAGS & _flags)
? s_renderCtx.getSamplerState(_flags)
? s_renderCtx->getSamplerState(_flags)
: m_sampler
;
}
void Texture::update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, const Memory* _mem)
{
ID3D11DeviceContext* deviceCtx = s_renderCtx.m_deviceCtx;
ID3D11DeviceContext* deviceCtx = s_renderCtx->m_deviceCtx;
D3D11_BOX box;
box.left = _rect.m_x;
@@ -1875,9 +1875,9 @@ namespace bgfx
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
DX_CHECK(s_renderCtx.m_device->CreateTexture2D(&desc, NULL, &m_colorTexture) );
DX_CHECK(s_renderCtx.m_device->CreateRenderTargetView(m_colorTexture, NULL, &m_rtv) );
DX_CHECK(s_renderCtx.m_device->CreateShaderResourceView(m_colorTexture, NULL, &m_srv) );
DX_CHECK(s_renderCtx->m_device->CreateTexture2D(&desc, NULL, &m_colorTexture) );
DX_CHECK(s_renderCtx->m_device->CreateRenderTargetView(m_colorTexture, NULL, &m_rtv) );
DX_CHECK(s_renderCtx->m_device->CreateShaderResourceView(m_colorTexture, NULL, &m_srv) );
if (0 < depthFormat)
{
@@ -1894,12 +1894,12 @@ namespace bgfx
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
DX_CHECK(s_renderCtx.m_device->CreateTexture2D(&desc, NULL, &m_depthTexture) );
DX_CHECK(s_renderCtx.m_device->CreateDepthStencilView(m_depthTexture, NULL, &m_dsv) );
// DX_CHECK(s_renderCtx.m_device->CreateShaderResourceView(m_depthTexture, NULL, &m_srv) );
DX_CHECK(s_renderCtx->m_device->CreateTexture2D(&desc, NULL, &m_depthTexture) );
DX_CHECK(s_renderCtx->m_device->CreateDepthStencilView(m_depthTexture, NULL, &m_dsv) );
// DX_CHECK(s_renderCtx->m_device->CreateShaderResourceView(m_depthTexture, NULL, &m_srv) );
}
m_sampler = s_renderCtx.getSamplerState(_textureFlags);
m_sampler = s_renderCtx->getSamplerState(_textureFlags);
}
void RenderTarget::destroy()
@@ -1915,10 +1915,10 @@ namespace bgfx
void RenderTarget::commit(uint8_t _stage, uint32_t _flags)
{
TextureStage& ts = s_renderCtx.m_textureStage;
TextureStage& ts = s_renderCtx->m_textureStage;
ts.m_srv[_stage] = m_srv;
ts.m_sampler[_stage] = 0 == (BGFX_SAMPLER_DEFAULT_FLAGS & _flags)
? s_renderCtx.getSamplerState(_flags)
? s_renderCtx->getSamplerState(_flags)
: m_sampler
;
}
@@ -1939,7 +1939,7 @@ namespace bgfx
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
desc.StructureByteStride = 0;
DX_CHECK(s_renderCtx.m_device->CreateBuffer(&desc, NULL, &m_ptr) );
DX_CHECK(s_renderCtx->m_device->CreateBuffer(&desc, NULL, &m_ptr) );
}
void UniformBuffer::destroy()
@@ -1955,32 +1955,38 @@ namespace bgfx
void Context::flip()
{
s_renderCtx.flip();
if (NULL != s_renderCtx)
{
s_renderCtx->flip();
}
}
void Context::rendererInit()
{
s_renderCtx.init();
s_renderCtx = BX_NEW(g_allocator, RendererContext);
s_renderCtx->init();
}
void Context::rendererShutdown()
{
s_renderCtx.shutdown();
s_renderCtx->shutdown();
BX_DELETE(g_allocator, s_renderCtx);
s_renderCtx = NULL;
}
void Context::rendererCreateIndexBuffer(IndexBufferHandle _handle, Memory* _mem)
{
s_renderCtx.m_indexBuffers[_handle.idx].create(_mem->size, _mem->data);
s_renderCtx->m_indexBuffers[_handle.idx].create(_mem->size, _mem->data);
}
void Context::rendererDestroyIndexBuffer(IndexBufferHandle _handle)
{
s_renderCtx.m_indexBuffers[_handle.idx].destroy();
s_renderCtx->m_indexBuffers[_handle.idx].destroy();
}
void Context::rendererCreateVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl)
{
VertexDecl& decl = s_renderCtx.m_vertexDecls[_handle.idx];
VertexDecl& decl = s_renderCtx->m_vertexDecls[_handle.idx];
memcpy(&decl, &_decl, sizeof(VertexDecl) );
dump(decl);
}
@@ -1991,78 +1997,78 @@ namespace bgfx
void Context::rendererCreateVertexBuffer(VertexBufferHandle _handle, Memory* _mem, VertexDeclHandle _declHandle)
{
s_renderCtx.m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle);
s_renderCtx->m_vertexBuffers[_handle.idx].create(_mem->size, _mem->data, _declHandle);
}
void Context::rendererDestroyVertexBuffer(VertexBufferHandle _handle)
{
s_renderCtx.m_vertexBuffers[_handle.idx].destroy();
s_renderCtx->m_vertexBuffers[_handle.idx].destroy();
}
void Context::rendererCreateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _size)
{
s_renderCtx.m_indexBuffers[_handle.idx].create(_size, NULL);
s_renderCtx->m_indexBuffers[_handle.idx].create(_size, NULL);
}
void Context::rendererUpdateDynamicIndexBuffer(IndexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem)
{
s_renderCtx.m_indexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
s_renderCtx->m_indexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
void Context::rendererDestroyDynamicIndexBuffer(IndexBufferHandle _handle)
{
s_renderCtx.m_indexBuffers[_handle.idx].destroy();
s_renderCtx->m_indexBuffers[_handle.idx].destroy();
}
void Context::rendererCreateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _size)
{
VertexDeclHandle decl = BGFX_INVALID_HANDLE;
s_renderCtx.m_vertexBuffers[_handle.idx].create(_size, NULL, decl);
s_renderCtx->m_vertexBuffers[_handle.idx].create(_size, NULL, decl);
}
void Context::rendererUpdateDynamicVertexBuffer(VertexBufferHandle _handle, uint32_t _offset, uint32_t _size, Memory* _mem)
{
s_renderCtx.m_vertexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
s_renderCtx->m_vertexBuffers[_handle.idx].update(_offset, bx::uint32_min(_size, _mem->size), _mem->data);
}
void Context::rendererDestroyDynamicVertexBuffer(VertexBufferHandle _handle)
{
s_renderCtx.m_vertexBuffers[_handle.idx].destroy();
s_renderCtx->m_vertexBuffers[_handle.idx].destroy();
}
void Context::rendererCreateVertexShader(VertexShaderHandle _handle, Memory* _mem)
{
s_renderCtx.m_vertexShaders[_handle.idx].create(false, _mem);
s_renderCtx->m_vertexShaders[_handle.idx].create(false, _mem);
}
void Context::rendererDestroyVertexShader(VertexShaderHandle _handle)
{
s_renderCtx.m_vertexShaders[_handle.idx].destroy();
s_renderCtx->m_vertexShaders[_handle.idx].destroy();
}
void Context::rendererCreateFragmentShader(FragmentShaderHandle _handle, Memory* _mem)
{
s_renderCtx.m_fragmentShaders[_handle.idx].create(true, _mem);
s_renderCtx->m_fragmentShaders[_handle.idx].create(true, _mem);
}
void Context::rendererDestroyFragmentShader(FragmentShaderHandle _handle)
{
s_renderCtx.m_fragmentShaders[_handle.idx].destroy();
s_renderCtx->m_fragmentShaders[_handle.idx].destroy();
}
void Context::rendererCreateProgram(ProgramHandle _handle, VertexShaderHandle _vsh, FragmentShaderHandle _fsh)
{
s_renderCtx.m_program[_handle.idx].create(s_renderCtx.m_vertexShaders[_vsh.idx], s_renderCtx.m_fragmentShaders[_fsh.idx]);
s_renderCtx->m_program[_handle.idx].create(s_renderCtx->m_vertexShaders[_vsh.idx], s_renderCtx->m_fragmentShaders[_fsh.idx]);
}
void Context::rendererDestroyProgram(FragmentShaderHandle _handle)
{
s_renderCtx.m_program[_handle.idx].destroy();
s_renderCtx->m_program[_handle.idx].destroy();
}
void Context::rendererCreateTexture(TextureHandle _handle, Memory* _mem, uint32_t _flags)
{
s_renderCtx.m_textures[_handle.idx].create(_mem, _flags);
s_renderCtx->m_textures[_handle.idx].create(_mem, _flags);
}
void Context::rendererUpdateTextureBegin(TextureHandle /*_handle*/, uint8_t /*_side*/, uint8_t /*_mip*/)
@@ -2071,7 +2077,7 @@ namespace bgfx
void Context::rendererUpdateTexture(TextureHandle _handle, uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, const Memory* _mem)
{
s_renderCtx.m_textures[_handle.idx].update(_side, _mip, _rect, _z, _depth, _mem);
s_renderCtx->m_textures[_handle.idx].update(_side, _mip, _rect, _z, _depth, _mem);
}
void Context::rendererUpdateTextureEnd()
@@ -2080,33 +2086,33 @@ namespace bgfx
void Context::rendererDestroyTexture(TextureHandle _handle)
{
s_renderCtx.m_textures[_handle.idx].destroy();
s_renderCtx->m_textures[_handle.idx].destroy();
}
void Context::rendererCreateRenderTarget(RenderTargetHandle _handle, uint16_t _width, uint16_t _height, uint32_t _flags, uint32_t _textureFlags)
{
s_renderCtx.m_renderTargets[_handle.idx].create(_width, _height, _flags, _textureFlags);
s_renderCtx->m_renderTargets[_handle.idx].create(_width, _height, _flags, _textureFlags);
}
void Context::rendererDestroyRenderTarget(RenderTargetHandle _handle)
{
s_renderCtx.m_renderTargets[_handle.idx].destroy();
s_renderCtx->m_renderTargets[_handle.idx].destroy();
}
void Context::rendererCreateUniform(UniformHandle _handle, UniformType::Enum _type, uint16_t _num, const char* _name)
{
s_renderCtx.m_uniforms[_handle.idx].create(_type, _num);
s_renderCtx.m_uniformReg.add(_name, &s_renderCtx.m_uniforms[_handle.idx]);
s_renderCtx->m_uniforms[_handle.idx].create(_type, _num);
s_renderCtx->m_uniformReg.add(_name, &s_renderCtx->m_uniforms[_handle.idx]);
}
void Context::rendererDestroyUniform(UniformHandle _handle)
{
s_renderCtx.m_uniforms[_handle.idx].destroy();
s_renderCtx->m_uniforms[_handle.idx].destroy();
}
void Context::rendererSaveScreenShot(const char* _filePath)
{
s_renderCtx.saveScreenShot(_filePath);
s_renderCtx->saveScreenShot(_filePath);
}
void Context::rendererUpdateViewName(uint8_t _id, const char* _name)
@@ -2116,7 +2122,7 @@ namespace bgfx
void Context::rendererUpdateUniform(uint16_t _loc, const void* _data, uint32_t _size)
{
memcpy(s_renderCtx.m_uniforms[_loc].m_data, _data, _size);
memcpy(s_renderCtx->m_uniforms[_loc].m_data, _data, _size);
}
void Context::rendererSetMarker(const char* _marker, uint32_t _size)
@@ -2134,9 +2140,9 @@ namespace bgfx
{
PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), L"rendererSubmit");
ID3D11DeviceContext* deviceCtx = s_renderCtx.m_deviceCtx;
ID3D11DeviceContext* deviceCtx = s_renderCtx->m_deviceCtx;
s_renderCtx.updateResolution(m_render->m_resolution);
s_renderCtx->updateResolution(m_render->m_resolution);
int64_t elapsed = -bx::getHPCounter();
int64_t captureElapsed = 0;
@@ -2144,13 +2150,13 @@ namespace bgfx
if (0 < m_render->m_iboffset)
{
TransientIndexBuffer* ib = m_render->m_transientIb;
s_renderCtx.m_indexBuffers[ib->handle.idx].update(0, m_render->m_iboffset, ib->data);
s_renderCtx->m_indexBuffers[ib->handle.idx].update(0, m_render->m_iboffset, ib->data);
}
if (0 < m_render->m_vboffset)
{
TransientVertexBuffer* vb = m_render->m_transientVb;
s_renderCtx.m_vertexBuffers[vb->handle.idx].update(0, m_render->m_vboffset, vb->data);
s_renderCtx->m_vertexBuffers[vb->handle.idx].update(0, m_render->m_vboffset, vb->data);
}
m_render->sort();
@@ -2168,7 +2174,7 @@ namespace bgfx
bool wireframe = !!(m_render->m_debug&BGFX_DEBUG_WIREFRAME);
bool scissorEnabled = false;
s_renderCtx.setDebugWireframe(wireframe);
s_renderCtx->setDebugWireframe(wireframe);
uint16_t programIdx = invalidHandle;
SortKey key;
@@ -2220,7 +2226,7 @@ namespace bgfx
if (m_render->m_rt[view].idx != rt.idx)
{
rt = m_render->m_rt[view];
s_renderCtx.setRenderTarget(rt);
s_renderCtx->setRenderTarget(rt);
}
const Rect& rect = m_render->m_rect[view];
@@ -2243,8 +2249,8 @@ namespace bgfx
m_clearQuad.clear(rect, clear);
}
s_renderCtx.setBlendState(newFlags);
s_renderCtx.setDepthStencilState(newFlags, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT) );
s_renderCtx->setBlendState(newFlags);
s_renderCtx->setDepthStencilState(newFlags, packStencil(BGFX_STENCIL_DEFAULT, BGFX_STENCIL_DEFAULT) );
uint8_t primIndex = uint8_t( (newFlags&BGFX_STATE_PT_MASK)>>BGFX_STATE_PT_SHIFT);
if (primType != s_primType[primIndex])
@@ -2286,13 +2292,13 @@ namespace bgfx
deviceCtx->RSSetScissorRects(1, &rc);
}
s_renderCtx.setRasterizerState(newFlags, wireframe, scissorEnabled);
s_renderCtx->setRasterizerState(newFlags, wireframe, scissorEnabled);
}
if ( (BGFX_STATE_DEPTH_WRITE|BGFX_STATE_DEPTH_TEST_MASK) & changedFlags
|| 0 != changedStencil)
{
s_renderCtx.setDepthStencilState(newFlags, newStencil);
s_renderCtx->setDepthStencilState(newFlags, newStencil);
}
if ( (0
@@ -2309,12 +2315,12 @@ namespace bgfx
{
if ( (BGFX_STATE_BLEND_MASK|BGFX_STATE_BLEND_EQUATION_MASK|BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags)
{
s_renderCtx.setBlendState(newFlags, state.m_rgba);
s_renderCtx->setBlendState(newFlags, state.m_rgba);
}
if ( (BGFX_STATE_CULL_MASK|BGFX_STATE_MSAA) & changedFlags)
{
s_renderCtx.setRasterizerState(newFlags, wireframe, scissorEnabled);
s_renderCtx->setRasterizerState(newFlags, wireframe, scissorEnabled);
}
if (BGFX_STATE_ALPHA_REF_MASK & changedFlags)
@@ -2342,15 +2348,15 @@ namespace bgfx
if (invalidHandle == programIdx)
{
s_renderCtx.m_currentProgram = NULL;
s_renderCtx->m_currentProgram = NULL;
deviceCtx->VSSetShader(NULL, 0, 0);
deviceCtx->PSSetShader(NULL, 0, 0);
}
else
{
Program& program = s_renderCtx.m_program[programIdx];
s_renderCtx.m_currentProgram = &program;
Program& program = s_renderCtx->m_program[programIdx];
s_renderCtx->m_currentProgram = &program;
deviceCtx->VSSetShader( (ID3D11VertexShader*)program.m_vsh->m_ptr, NULL, 0);
deviceCtx->VSSetConstantBuffers(0, 1, &program.m_vsh->m_buffer);
@@ -2365,7 +2371,7 @@ namespace bgfx
if (invalidHandle != programIdx)
{
Program& program = s_renderCtx.m_program[programIdx];
Program& program = s_renderCtx->m_program[programIdx];
if (constantsChanged)
{
@@ -2386,7 +2392,7 @@ namespace bgfx
rect[2] = m_render->m_rect[view].m_width;
rect[3] = m_render->m_rect[view].m_height;
s_renderCtx.setShaderConstant(flags, predefined.m_loc, &rect[0], 1);
s_renderCtx->setShaderConstant(flags, predefined.m_loc, &rect[0], 1);
}
break;
@@ -2396,26 +2402,26 @@ namespace bgfx
rect[0] = 1.0f/float(m_render->m_rect[view].m_width);
rect[1] = 1.0f/float(m_render->m_rect[view].m_height);
s_renderCtx.setShaderConstant(flags, predefined.m_loc, &rect[0], 1);
s_renderCtx->setShaderConstant(flags, predefined.m_loc, &rect[0], 1);
}
break;
case PredefinedUniform::View:
{
s_renderCtx.setShaderConstant(flags, predefined.m_loc, m_render->m_view[view].val, bx::uint32_min(4, predefined.m_count) );
s_renderCtx->setShaderConstant(flags, predefined.m_loc, m_render->m_view[view].val, bx::uint32_min(4, predefined.m_count) );
}
break;
case PredefinedUniform::ViewProj:
{
s_renderCtx.setShaderConstant(flags, predefined.m_loc, viewProj[view].val, bx::uint32_min(4, predefined.m_count) );
s_renderCtx->setShaderConstant(flags, predefined.m_loc, viewProj[view].val, bx::uint32_min(4, predefined.m_count) );
}
break;
case PredefinedUniform::Model:
{
const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix];
s_renderCtx.setShaderConstant(flags, predefined.m_loc, model.val, bx::uint32_min(state.m_num*4, predefined.m_count) );
s_renderCtx->setShaderConstant(flags, predefined.m_loc, model.val, bx::uint32_min(state.m_num*4, predefined.m_count) );
}
break;
@@ -2424,7 +2430,7 @@ namespace bgfx
Matrix4 modelView;
const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix];
mtxMul(modelView.val, model.val, m_render->m_view[view].val);
s_renderCtx.setShaderConstant(flags, predefined.m_loc, modelView.val, bx::uint32_min(4, predefined.m_count) );
s_renderCtx->setShaderConstant(flags, predefined.m_loc, modelView.val, bx::uint32_min(4, predefined.m_count) );
}
break;
@@ -2433,7 +2439,7 @@ namespace bgfx
Matrix4 modelViewProj;
const Matrix4& model = m_render->m_matrixCache.m_cache[state.m_matrix];
mtxMul(modelViewProj.val, model.val, viewProj[view].val);
s_renderCtx.setShaderConstant(flags, predefined.m_loc, modelViewProj.val, bx::uint32_min(4, predefined.m_count) );
s_renderCtx->setShaderConstant(flags, predefined.m_loc, modelViewProj.val, bx::uint32_min(4, predefined.m_count) );
}
break;
@@ -2456,7 +2462,7 @@ namespace bgfx
Matrix4 modelViewProj;
mtxMul(modelViewProj.val, model.val, viewProjBias.val);
s_renderCtx.setShaderConstant(flags, predefined.m_loc, modelViewProj.val, bx::uint32_min(4, predefined.m_count) );
s_renderCtx->setShaderConstant(flags, predefined.m_loc, modelViewProj.val, bx::uint32_min(4, predefined.m_count) );
}
break;
@@ -2474,13 +2480,13 @@ namespace bgfx
Matrix4 viewProjBias;
mtxMul(viewProjBias.val, viewProj[other].val, s_bias);
s_renderCtx.setShaderConstant(flags, predefined.m_loc, viewProjBias.val, bx::uint32_min(4, predefined.m_count) );
s_renderCtx->setShaderConstant(flags, predefined.m_loc, viewProjBias.val, bx::uint32_min(4, predefined.m_count) );
}
break;
case PredefinedUniform::AlphaRef:
{
s_renderCtx.setShaderConstant(flags, predefined.m_loc, &alphaRef, 1);
s_renderCtx->setShaderConstant(flags, predefined.m_loc, &alphaRef, 1);
}
break;
@@ -2493,7 +2499,7 @@ namespace bgfx
if (constantsChanged
|| program.m_numPredefined > 0)
{
s_renderCtx.commitShaderConstants();
s_renderCtx->commitShaderConstants();
}
}
@@ -2515,29 +2521,29 @@ namespace bgfx
{
case BGFX_SAMPLER_TEXTURE:
{
Texture& texture = s_renderCtx.m_textures[sampler.m_idx];
Texture& texture = s_renderCtx->m_textures[sampler.m_idx];
texture.commit(stage, sampler.m_flags);
}
break;
case BGFX_SAMPLER_RENDERTARGET_COLOR:
{
RenderTarget& rt = s_renderCtx.m_renderTargets[sampler.m_idx];
RenderTarget& rt = s_renderCtx->m_renderTargets[sampler.m_idx];
rt.commit(stage, sampler.m_flags);
}
break;
case BGFX_SAMPLER_RENDERTARGET_DEPTH:
{
// id = s_renderCtx.m_renderTargets[sampler.m_idx].m_depth.m_id;
// id = s_renderCtx->m_renderTargets[sampler.m_idx].m_depth.m_id;
}
break;
}
}
else
{
s_renderCtx.m_textureStage.m_srv[stage] = NULL;
s_renderCtx.m_textureStage.m_sampler[stage] = NULL;
s_renderCtx->m_textureStage.m_srv[stage] = NULL;
s_renderCtx->m_textureStage.m_sampler[stage] = NULL;
}
++changes;
@@ -2549,7 +2555,7 @@ namespace bgfx
if (0 < changes)
{
s_renderCtx.commitTextureStage();
s_renderCtx->commitTextureStage();
}
}
@@ -2567,25 +2573,25 @@ namespace bgfx
uint16_t handle = state.m_vertexBuffer.idx;
if (invalidHandle != handle)
{
const VertexBuffer& vb = s_renderCtx.m_vertexBuffers[handle];
const VertexBuffer& vb = s_renderCtx->m_vertexBuffers[handle];
uint16_t decl = vb.m_decl.idx == invalidHandle ? state.m_vertexDecl.idx : vb.m_decl.idx;
const VertexDecl& vertexDecl = s_renderCtx.m_vertexDecls[decl];
const VertexDecl& vertexDecl = s_renderCtx->m_vertexDecls[decl];
uint32_t stride = vertexDecl.m_stride;
uint32_t offset = 0;
deviceCtx->IASetVertexBuffers(0, 1, &vb.m_ptr, &stride, &offset);
if (invalidHandle != state.m_instanceDataBuffer.idx)
{
const VertexBuffer& inst = s_renderCtx.m_vertexBuffers[state.m_instanceDataBuffer.idx];
const VertexBuffer& inst = s_renderCtx->m_vertexBuffers[state.m_instanceDataBuffer.idx];
uint32_t instStride = state.m_instanceDataStride;
deviceCtx->IASetVertexBuffers(1, 1, &inst.m_ptr, &instStride, &state.m_instanceDataOffset);
s_renderCtx.setInputLayout(vertexDecl, s_renderCtx.m_program[programIdx], state.m_instanceDataStride/16);
s_renderCtx->setInputLayout(vertexDecl, s_renderCtx->m_program[programIdx], state.m_instanceDataStride/16);
}
else
{
deviceCtx->IASetVertexBuffers(1, 0, NULL, NULL, NULL);
s_renderCtx.setInputLayout(vertexDecl, s_renderCtx.m_program[programIdx], 0);
s_renderCtx->setInputLayout(vertexDecl, s_renderCtx->m_program[programIdx], 0);
}
}
else
@@ -2601,7 +2607,7 @@ namespace bgfx
uint16_t handle = state.m_indexBuffer.idx;
if (invalidHandle != handle)
{
const IndexBuffer& ib = s_renderCtx.m_indexBuffers[handle];
const IndexBuffer& ib = s_renderCtx->m_indexBuffers[handle];
deviceCtx->IASetIndexBuffer(ib.m_ptr, DXGI_FORMAT_R16_UINT, 0);
}
else
@@ -2615,9 +2621,9 @@ namespace bgfx
uint32_t numVertices = state.m_numVertices;
if (UINT32_C(0xffffffff) == numVertices)
{
const VertexBuffer& vb = s_renderCtx.m_vertexBuffers[currentState.m_vertexBuffer.idx];
const VertexBuffer& vb = s_renderCtx->m_vertexBuffers[currentState.m_vertexBuffer.idx];
uint16_t decl = vb.m_decl.idx == invalidHandle ? state.m_vertexDecl.idx : vb.m_decl.idx;
const VertexDecl& vertexDecl = s_renderCtx.m_vertexDecls[decl];
const VertexDecl& vertexDecl = s_renderCtx->m_vertexDecls[decl];
numVertices = vb.m_size/vertexDecl.m_stride;
}
@@ -2630,7 +2636,7 @@ namespace bgfx
{
if (UINT32_MAX == state.m_numIndices)
{
numIndices = s_renderCtx.m_indexBuffers[state.m_indexBuffer.idx].m_size/2;
numIndices = s_renderCtx->m_indexBuffers[state.m_indexBuffer.idx].m_size/2;
numPrimsSubmitted = numIndices/primNumVerts;
numInstances = state.m_numInstances;
numPrimsRendered = numPrimsSubmitted*state.m_numInstances;
@@ -2680,7 +2686,7 @@ namespace bgfx
if (0 < m_render->m_num)
{
captureElapsed = -bx::getHPCounter();
s_renderCtx.capture();
s_renderCtx->capture();
captureElapsed += bx::getHPCounter();
}
}
@@ -2701,7 +2707,7 @@ namespace bgfx
{
PIX_BEGINEVENT(D3DCOLOR_RGBA(0x40, 0x40, 0x40, 0xff), L"debugstats");
TextVideoMem& tvm = s_renderCtx.m_textVideoMem;
TextVideoMem& tvm = s_renderCtx->m_textVideoMem;
static int64_t next = now;
@@ -2715,7 +2721,7 @@ namespace bgfx
uint16_t pos = 0;
tvm.printf(0, pos++, BGFX_CONFIG_DEBUG ? 0x89 : 0x8f, " " BGFX_RENDERER_NAME " ");
const DXGI_ADAPTER_DESC& desc = s_renderCtx.m_adapterDesc;
const DXGI_ADAPTER_DESC& desc = s_renderCtx->m_adapterDesc;
char description[BX_COUNTOF(desc.Description)];
wcstombs(description, desc.Description, BX_COUNTOF(desc.Description) );
tvm.printf(0, pos++, 0x0f, " Device: %s", description);