| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- #include "CmDeferredRenderContext.h"
- #include "CmCommandQueue.h"
- #include "CmRenderSystemManager.h"
- #include "CmRenderSystem.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::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::setTextureFiltering(UINT16 unit, FilterOptions minFilter,
- FilterOptions magFilter, FilterOptions mipFilter)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setTextureFiltering, mRenderSystem, unit, minFilter, magFilter, mipFilter));
- }
- void DeferredRenderContext::setTextureAnisotropy(UINT16 unit, unsigned int maxAnisotropy)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setTextureAnisotropy, mRenderSystem, unit, maxAnisotropy));
- }
- void DeferredRenderContext::setTextureAddressingMode(UINT16 unit, const UVWAddressingMode& uvw)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setTextureAddressingMode, mRenderSystem, unit, uvw));
- }
- void DeferredRenderContext::setTextureBorderColor(UINT16 unit, const Color& color)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setTextureBorderColor, mRenderSystem, unit, color));
- }
- void DeferredRenderContext::setTextureMipmapBias(UINT16 unit, float bias)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setTextureMipmapBias, mRenderSystem, unit, bias));
- }
- void DeferredRenderContext::setPointParameters(float size, bool attenuationEnabled,
- float constant, float linear, float quadratic, float minSize, float maxSize)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setPointParameters, mRenderSystem, size, attenuationEnabled, constant, linear, quadratic, minSize, maxSize));
- }
- void DeferredRenderContext::setSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendOperation op)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setSceneBlending, mRenderSystem, sourceFactor, destFactor, op));
- }
- void DeferredRenderContext::setSeparateSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendFactor sourceFactorAlpha,
- SceneBlendFactor destFactorAlpha, SceneBlendOperation op, SceneBlendOperation alphaOp)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setSeparateSceneBlending, mRenderSystem, sourceFactor, destFactor, sourceFactorAlpha, destFactorAlpha, op, alphaOp));
- }
- void DeferredRenderContext::setAlphaRejectSettings(CompareFunction func, unsigned char value, bool alphaToCoverage)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setAlphaRejectSettings, mRenderSystem, func, value, alphaToCoverage));
- }
- 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::setColorBufferWriteEnabled(bool red, bool green, bool blue, bool alpha)
- {
- mCommandQueue->queue(boost::bind(&RenderSystem::setColorBufferWriteEnabled, mRenderSystem, red, green, blue, alpha));
- }
- 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));
- }
- }
|