#include "bgfx_p.h"
namespace bgfx { namespace noop
{
struct RendererContextNOOP : public RendererContextI
{
RendererContextNOOP()
{
g_caps.supported = 0
| BGFX_CAPS_ALPHA_TO_COVERAGE
| BGFX_CAPS_BLEND_INDEPENDENT
| BGFX_CAPS_COMPUTE
| BGFX_CAPS_CONSERVATIVE_RASTER
| BGFX_CAPS_DRAW_INDIRECT
| BGFX_CAPS_FRAGMENT_DEPTH
| BGFX_CAPS_FRAGMENT_ORDERING
| BGFX_CAPS_GRAPHICS_DEBUGGER
| BGFX_CAPS_HIDPI
| BGFX_CAPS_INDEX32
| BGFX_CAPS_INSTANCING
| BGFX_CAPS_OCCLUSION_QUERY
| BGFX_CAPS_RENDERER_MULTITHREADED
| BGFX_CAPS_SWAP_CHAIN
| BGFX_CAPS_TEXTURE_2D_ARRAY
| BGFX_CAPS_TEXTURE_3D
| BGFX_CAPS_TEXTURE_BLIT
| BGFX_CAPS_TEXTURE_COMPARE_ALL
| BGFX_CAPS_TEXTURE_COMPARE_LEQUAL
| BGFX_CAPS_TEXTURE_CUBE_ARRAY
| BGFX_CAPS_TEXTURE_READ_BACK
| BGFX_CAPS_VERTEX_ATTRIB_HALF
| BGFX_CAPS_VERTEX_ATTRIB_UINT10
;
for (uint32_t formatIdx = 0; formatIdx < TextureFormat::Count; ++formatIdx)
{
g_caps.formats[formatIdx] = 0
| BGFX_CAPS_FORMAT_TEXTURE_NONE
| BGFX_CAPS_FORMAT_TEXTURE_2D
| BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB
| BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED
| BGFX_CAPS_FORMAT_TEXTURE_3D
| BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB
| BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED
| BGFX_CAPS_FORMAT_TEXTURE_CUBE
| BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB
| BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED
| BGFX_CAPS_FORMAT_TEXTURE_VERTEX
| BGFX_CAPS_FORMAT_TEXTURE_IMAGE_READ
| BGFX_CAPS_FORMAT_TEXTURE_IMAGE_WRITE
| BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER
| BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA
| BGFX_CAPS_FORMAT_TEXTURE_MSAA
| BGFX_CAPS_FORMAT_TEXTURE_MIP_AUTOGEN
;
}
g_caps.limits.maxTextureSize = 16384;
g_caps.limits.maxTextureLayers = 2048;
g_caps.limits.maxComputeBindings = g_caps.limits.maxTextureSamplers;
g_caps.limits.maxFBAttachments = BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS;
g_caps.limits.maxVertexStreams = BGFX_CONFIG_MAX_VERTEX_STREAMS;
}
~RendererContextNOOP()
{
}
RendererType::Enum getRendererType() const override
{
return RendererType::Noop;
}
const char* getRendererName() const override
{
return BGFX_RENDERER_NOOP_NAME;
}
bool isDeviceRemoved() override
{
return false;
}
void flip() override
{
}
void createIndexBuffer(IndexBufferHandle , const Memory* , uint16_t ) override
{
}
void destroyIndexBuffer(IndexBufferHandle ) override
{
}
void createVertexLayout(VertexLayoutHandle , const VertexLayout& ) override
{
}
void destroyVertexLayout(VertexLayoutHandle ) override
{
}
void createVertexBuffer(VertexBufferHandle , const Memory* , VertexLayoutHandle , uint16_t ) override
{
}
void destroyVertexBuffer(VertexBufferHandle ) override
{
}
void createDynamicIndexBuffer(IndexBufferHandle , uint32_t , uint16_t ) override
{
}
void updateDynamicIndexBuffer(IndexBufferHandle , uint32_t , uint32_t , const Memory* ) override
{
}
void destroyDynamicIndexBuffer(IndexBufferHandle ) override
{
}
void createDynamicVertexBuffer(VertexBufferHandle , uint32_t , uint16_t ) override
{
}
void updateDynamicVertexBuffer(VertexBufferHandle , uint32_t , uint32_t , const Memory* ) override
{
}
void destroyDynamicVertexBuffer(VertexBufferHandle ) override
{
}
void createShader(ShaderHandle , const Memory* ) override
{
}
void destroyShader(ShaderHandle ) override
{
}
void createProgram(ProgramHandle , ShaderHandle , ShaderHandle ) override
{
}
void destroyProgram(ProgramHandle ) override
{
}
void* createTexture(TextureHandle , const Memory* , uint64_t , uint8_t ) override
{
return NULL;
}
void updateTextureBegin(TextureHandle , uint8_t , uint8_t ) override
{
}
void updateTexture(TextureHandle , uint8_t , uint8_t , const Rect& , uint16_t , uint16_t , uint16_t , const Memory* ) override
{
}
void updateTextureEnd() override
{
}
void readTexture(TextureHandle , void* , uint8_t ) override
{
}
void resizeTexture(TextureHandle , uint16_t , uint16_t , uint8_t , uint16_t ) override
{
}
void overrideInternal(TextureHandle , uintptr_t ) override
{
}
uintptr_t getInternal(TextureHandle ) override
{
return 0;
}
void destroyTexture(TextureHandle ) override
{
}
void createFrameBuffer(FrameBufferHandle , uint8_t , const Attachment* ) override
{
}
void createFrameBuffer(FrameBufferHandle , void* , uint32_t , uint32_t , TextureFormat::Enum , TextureFormat::Enum ) override
{
}
void destroyFrameBuffer(FrameBufferHandle ) override
{
}
void createUniform(UniformHandle , UniformType::Enum , uint16_t , const char* ) override
{
}
void destroyUniform(UniformHandle ) override
{
}
void requestScreenShot(FrameBufferHandle , const char* ) override
{
}
void updateViewName(ViewId , const char* ) override
{
}
void updateUniform(uint16_t , const void* , uint32_t ) override
{
}
void invalidateOcclusionQuery(OcclusionQueryHandle ) override
{
}
void setMarker(const char* , uint16_t ) override
{
}
virtual void setName(Handle , const char* , uint16_t ) override
{
}
void submit(Frame* _render, ClearQuad& , TextVideoMemBlitter& ) override
{
const int64_t timerFreq = bx::getHPFrequency();
const int64_t timeBegin = bx::getHPCounter();
Stats& perfStats = _render->m_perfStats;
perfStats.cpuTimeBegin = timeBegin;
perfStats.cpuTimeEnd = timeBegin;
perfStats.cpuTimerFreq = timerFreq;
perfStats.gpuTimeBegin = 0;
perfStats.gpuTimeEnd = 0;
perfStats.gpuTimerFreq = 1000000000;
perfStats.gpuFrameNum = 0;
bx::memSet(perfStats.numPrims, 0, sizeof(perfStats.numPrims) );
perfStats.gpuMemoryMax = -INT64_MAX;
perfStats.gpuMemoryUsed = -INT64_MAX;
}
void blitSetup(TextVideoMemBlitter& ) override
{
}
void blitRender(TextVideoMemBlitter& , uint32_t ) override
{
}
};
static RendererContextNOOP* s_renderNOOP;
RendererContextI* rendererCreate(const Init& _init)
{
BX_UNUSED(_init);
s_renderNOOP = BX_NEW(g_allocator, RendererContextNOOP);
return s_renderNOOP;
}
void rendererDestroy()
{
bx::deleteObject(g_allocator, s_renderNOOP);
s_renderNOOP = NULL;
}
} }