| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- #include "CmDeferredRenderContext.h"
- #include "CmCommandQueue.h"
- #include "CmRenderSystemManager.h"
- #include "CmRenderSystem.h"
- #include "CmBlendState.h"
- namespace CamelotEngine
- {
- DeferredRenderContext::DeferredRenderContext(RenderSystem* rs, CM_THREAD_ID_TYPE threadId)
- :mCommandQueue(new CommandQueue(threadId))
- , mWaitForVerticalBlank(true)
- , mInvertVertexWinding(false)
- , mCullingMode(CULL_CLOCKWISE)
- , mRenderSystem(rs)
- {
- assert(mRenderSystem != nullptr);
- }
- DeferredRenderContext::~DeferredRenderContext()
- {
- delete mCommandQueue;
- }
- void DeferredRenderContext::swapAllRenderTargetBuffers(bool waitForVSync)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::swapAllRenderTargetBuffers, mRenderSystem, waitForVSync));
- }
- void DeferredRenderContext::setViewport(const Viewport& vp)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setViewport, mRenderSystem, vp));
- }
- void DeferredRenderContext::setSamplerState(UINT16 texUnit, const SamplerState& samplerState)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setSamplerState, mRenderSystem, texUnit, samplerState));
- }
- void DeferredRenderContext::setBlendState(const BlendState& blendState)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setBlendState, mRenderSystem, blendState));
- }
- void DeferredRenderContext::setTexture(UINT16 unit, bool enabled, const TexturePtr &texPtr)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setTexture, mRenderSystem, unit, enabled, texPtr));
- }
- void DeferredRenderContext::disableTextureUnit(UINT16 texUnit)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::disableTextureUnit, mRenderSystem, texUnit));
- }
- void DeferredRenderContext::disableTextureUnitsFrom(UINT16 texUnit)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::disableTextureUnitsFrom, mRenderSystem, texUnit));
- }
- void DeferredRenderContext::setScissorTest(bool enabled, UINT32 left, UINT32 top, UINT32 right, UINT32 bottom)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setScissorTest, mRenderSystem, enabled, left, top, right, bottom));
- }
- bool DeferredRenderContext::getWaitForVerticalBlank(void) const
- {
- return mWaitForVerticalBlank;
- }
- void DeferredRenderContext::setWaitForVerticalBlank(bool enabled)
- {
- mWaitForVerticalBlank = enabled;
- mCommandQueue->queue(boost::bind(&RenderSystem::setWaitForVerticalBlank, mRenderSystem, enabled));
- }
- void DeferredRenderContext::setInvertVertexWinding(bool invert)
- {
- mInvertVertexWinding = invert;
- mCommandQueue->queue(boost::bind(&RenderSystem::setInvertVertexWinding, mRenderSystem, invert));
- }
- bool DeferredRenderContext::getInvertVertexWinding(void) const
- {
- return mInvertVertexWinding;
- }
- void DeferredRenderContext::setDepthBufferParams(bool depthTest, bool depthWrite, CompareFunction depthFunction)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setDepthBufferParams, mRenderSystem, depthTest, depthWrite, depthFunction));
- }
- void DeferredRenderContext::setDepthBufferCheckEnabled(bool enabled)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setDepthBufferCheckEnabled, mRenderSystem, enabled));
- }
- void DeferredRenderContext::setDepthBufferWriteEnabled(bool enabled)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setDepthBufferWriteEnabled, mRenderSystem, enabled));
- }
- void DeferredRenderContext::setDepthBufferFunction(CompareFunction func)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setDepthBufferFunction, mRenderSystem, func));
- }
- void DeferredRenderContext::setDepthBias(float constantBias, float slopeScaleBias)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setDepthBias, mRenderSystem, constantBias, slopeScaleBias));
- }
- void DeferredRenderContext::setPolygonMode(PolygonMode level)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setPolygonMode, mRenderSystem, level));
- }
- void DeferredRenderContext::setStencilCheckEnabled(bool enabled)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setStencilCheckEnabled, mRenderSystem, enabled));
- }
- void DeferredRenderContext::setStencilBufferParams(CompareFunction func, UINT32 refValue, UINT32 mask, StencilOperation stencilFailOp,
- StencilOperation depthFailOp, StencilOperation passOp, bool twoSidedOperation)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setStencilBufferParams, mRenderSystem, func, refValue, mask, stencilFailOp, depthFailOp, passOp, twoSidedOperation));
- }
- void DeferredRenderContext::setCullingMode(CullingMode mode)
- {
- mCullingMode = mode;
- mCommandQueue->queue(boost::bind(&RenderSystem::setCullingMode, mRenderSystem, mode));
- }
- CullingMode DeferredRenderContext::getCullingMode(void) const
- {
- return mCullingMode;
- }
- void DeferredRenderContext::addClipPlane(const Plane &p)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::addClipPlane, mRenderSystem, p));
- }
- void DeferredRenderContext::addClipPlane(float A, float B, float C, float D)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::addClipPlane, mRenderSystem, A, B, C, D));
- }
- void DeferredRenderContext::setClipPlanes(const PlaneList& clipPlanes)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setClipPlanes, mRenderSystem, clipPlanes));
- }
- void DeferredRenderContext::resetClipPlanes()
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::resetClipPlanes, mRenderSystem));
- }
- void DeferredRenderContext::bindGpuProgram(GpuProgramHandle prg)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::bindGpuProgram, mRenderSystem, prg));
- }
- void DeferredRenderContext::unbindGpuProgram(GpuProgramType gptype)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::unbindGpuProgram, mRenderSystem, gptype));
- }
- void DeferredRenderContext::bindGpuProgramParameters(GpuProgramType gptype,
- GpuProgramParametersSharedPtr params, UINT16 variabilityMask)
- {
- GpuProgramParametersSharedPtr paramCopy = GpuProgramParametersSharedPtr(new GpuProgramParameters(*params));
- mCommandQueue->queue(boost::bind(&RenderSystem::bindGpuProgramParameters, mRenderSystem, gptype, paramCopy, variabilityMask));
- }
- void DeferredRenderContext::setRenderTarget(RenderTarget *target)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setRenderTarget, mRenderSystem, target));
- }
- void DeferredRenderContext::clearFrameBuffer(unsigned int buffers, const Color& color, float depth, unsigned short stencil)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::clearFrameBuffer, mRenderSystem, buffers, color, depth, stencil));
- }
- void DeferredRenderContext::beginFrame()
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::beginFrame, mRenderSystem));
- }
- void DeferredRenderContext::endFrame()
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::endFrame, mRenderSystem));
- }
- void DeferredRenderContext::render(const RenderOperation& op)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::render, mRenderSystem, op));
- }
- void DeferredRenderContext::submitToGpu()
- {
- vector<CommandQueue::Command>::type* commands = mCommandQueue->flush();
- RenderSystem* rs = RenderSystemManager::getActive();
- rs->queueCommand(boost::bind(&CommandQueue::playback, mCommandQueue, commands));
- }
- }
|