#include "BsRenderStateManager.h" #include "BsSamplerState.h" #include "BsDepthStencilState.h" #include "BsRasterizerState.h" #include "BsBlendState.h" namespace BansheeEngine { SamplerStatePtr RenderStateManager::createSamplerState(const SAMPLER_STATE_DESC& desc) const { SamplerStatePtr samplerState = bs_core_ptr(new (bs_alloc()) SamplerState(desc)); samplerState->_setThisPtr(samplerState); samplerState->initialize(); return samplerState; } DepthStencilStatePtr RenderStateManager::createDepthStencilState(const DEPTH_STENCIL_STATE_DESC& desc) const { DepthStencilStatePtr depthStencilState = bs_core_ptr(new (bs_alloc()) DepthStencilState(desc)); depthStencilState->_setThisPtr(depthStencilState); depthStencilState->initialize(); return depthStencilState; } RasterizerStatePtr RenderStateManager::createRasterizerState(const RASTERIZER_STATE_DESC& desc) const { RasterizerStatePtr rasterizerState = bs_core_ptr(new (bs_alloc()) RasterizerState(desc)); rasterizerState->_setThisPtr(rasterizerState); rasterizerState->initialize(); return rasterizerState; } BlendStatePtr RenderStateManager::createBlendState(const BLEND_STATE_DESC& desc) const { BlendStatePtr blendState = bs_core_ptr(new (bs_alloc()) BlendState(desc)); blendState->_setThisPtr(blendState); blendState->initialize(); return blendState; } SamplerStatePtr RenderStateManager::createEmptySamplerState() const { SamplerStatePtr samplerState = bs_core_ptr( new (bs_alloc()) SamplerState(SAMPLER_STATE_DESC())); samplerState->_setThisPtr(samplerState); return samplerState; } DepthStencilStatePtr RenderStateManager::createEmptyDepthStencilState() const { DepthStencilStatePtr depthStencilState = bs_core_ptr( new (bs_alloc()) DepthStencilState(DEPTH_STENCIL_STATE_DESC())); depthStencilState->_setThisPtr(depthStencilState); return depthStencilState; } RasterizerStatePtr RenderStateManager::createEmptyRasterizerState() const { RasterizerStatePtr rasterizerState = bs_core_ptr( new (bs_alloc()) RasterizerState(RASTERIZER_STATE_DESC())); rasterizerState->_setThisPtr(rasterizerState); return rasterizerState; } BlendStatePtr RenderStateManager::createEmptyBlendState() const { BlendStatePtr blendState = bs_core_ptr( new (bs_alloc()) BlendState(BLEND_STATE_DESC())); blendState->_setThisPtr(blendState); return blendState; } const SamplerStatePtr& RenderStateManager::getDefaultSamplerState() const { if(mDefaultSamplerState == nullptr) mDefaultSamplerState = createSamplerState(SAMPLER_STATE_DESC()); return mDefaultSamplerState; } const BlendStatePtr& RenderStateManager::getDefaultBlendState() const { if(mDefaultBlendState == nullptr) mDefaultBlendState = createBlendState(BLEND_STATE_DESC()); return mDefaultBlendState; } const RasterizerStatePtr& RenderStateManager::getDefaultRasterizerState() const { if(mDefaultRasterizerState == nullptr) mDefaultRasterizerState = createRasterizerState(RASTERIZER_STATE_DESC()); return mDefaultRasterizerState; } const DepthStencilStatePtr& RenderStateManager::getDefaultDepthStencilState() const { if(mDefaultDepthStencilState == nullptr) mDefaultDepthStencilState = createDepthStencilState(DEPTH_STENCIL_STATE_DESC()); return mDefaultDepthStencilState; } SPtr RenderStateCoreManager::createSamplerState(const SAMPLER_STATE_DESC& desc) const { SPtr samplerState = createSamplerStateInternal(desc); samplerState->initialize(); return samplerState; } SPtr RenderStateCoreManager::createDepthStencilState(const DEPTH_STENCIL_STATE_DESC& desc) const { SPtr depthStencilState = createDepthStencilStateInternal(desc); depthStencilState->initialize(); return depthStencilState; } SPtr RenderStateCoreManager::createRasterizerState(const RASTERIZER_STATE_DESC& desc) const { SPtr rasterizerState = createRasterizerStateInternal(desc); rasterizerState->initialize(); return rasterizerState; } SPtr RenderStateCoreManager::createBlendState(const BLEND_STATE_DESC& desc) const { SPtr blendState = createBlendStateInternal(desc); blendState->initialize(); return blendState; } const SPtr& RenderStateCoreManager::getDefaultSamplerState() const { if (mDefaultSamplerState == nullptr) mDefaultSamplerState = createSamplerState(SAMPLER_STATE_DESC()); return mDefaultSamplerState; } const SPtr& RenderStateCoreManager::getDefaultBlendState() const { if (mDefaultBlendState == nullptr) mDefaultBlendState = createBlendState(BLEND_STATE_DESC()); return mDefaultBlendState; } const SPtr& RenderStateCoreManager::getDefaultRasterizerState() const { if (mDefaultRasterizerState == nullptr) mDefaultRasterizerState = createRasterizerState(RASTERIZER_STATE_DESC()); return mDefaultRasterizerState; } const SPtr& RenderStateCoreManager::getDefaultDepthStencilState() const { if (mDefaultDepthStencilState == nullptr) mDefaultDepthStencilState = createDepthStencilState(DEPTH_STENCIL_STATE_DESC()); return mDefaultDepthStencilState; } SPtr RenderStateCoreManager::createSamplerStateInternal(const SAMPLER_STATE_DESC& desc) const { SPtr samplerState = bs_shared_ptr(new (bs_alloc()) SamplerStateCore(desc)); samplerState->_setThisPtr(samplerState); return samplerState; } SPtr RenderStateCoreManager::createDepthStencilStateInternal(const DEPTH_STENCIL_STATE_DESC& desc) const { SPtr depthStencilState = bs_shared_ptr(new (bs_alloc()) DepthStencilStateCore(desc)); depthStencilState->_setThisPtr(depthStencilState); return depthStencilState; } SPtr RenderStateCoreManager::createRasterizerStateInternal(const RASTERIZER_STATE_DESC& desc) const { SPtr rasterizerState = bs_shared_ptr(new (bs_alloc()) RasterizerStateCore(desc)); rasterizerState->_setThisPtr(rasterizerState); return rasterizerState; } SPtr RenderStateCoreManager::createBlendStateInternal(const BLEND_STATE_DESC& desc) const { SPtr blendState = bs_shared_ptr(new (bs_alloc()) BlendStateCore(desc)); blendState->_setThisPtr(blendState); return blendState; } }