Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # HG changeset patch
- # User Beyzend <abcdefg@gmail.com>
- # Date 1323214148 25200
- # Node ID 9e2dd5eabefdfbff8e46b53e8f458d2fba262d70
- # Parent 3b0558273b253023aa124d28d5f4cfdf638a4f19
- -merged Crashy's patch
- diff -r 3b0558273b25 -r 9e2dd5eabefd RenderSystems/Direct3D11/include/OgreD3D11DepthBuffer.h
- --- a/RenderSystems/Direct3D11/include/OgreD3D11DepthBuffer.h Tue Dec 06 13:49:19 2011 -0700
- +++ b/RenderSystems/Direct3D11/include/OgreD3D11DepthBuffer.h Tue Dec 06 16:29:08 2011 -0700
- @@ -36,7 +36,7 @@
- class D3D11DepthBuffer : public DepthBuffer
- {
- public:
- - D3D11DepthBuffer( uint16 poolId,
- + D3D11DepthBuffer( uint16 poolId, D3D11RenderSystem *renderSystem,
- ID3D11DepthStencilView *depthBufferView,
- uint32 width, uint32 height,
- uint32 fsaa, uint32 multiSampleQuality, bool isManual );
- @@ -50,6 +50,7 @@
- protected:
- ID3D11DepthStencilView *mDepthStencilView; //aka. actual "DepthBuffer"
- uint32 mMultiSampleQuality;
- + D3D11RenderSystem *mRenderSystem;
- };
- }
- #endif
- diff -r 3b0558273b25 -r 9e2dd5eabefd RenderSystems/Direct3D11/include/OgreD3D11RenderSystem.h
- --- a/RenderSystems/Direct3D11/include/OgreD3D11RenderSystem.h Tue Dec 06 13:49:19 2011 -0700
- +++ b/RenderSystems/Direct3D11/include/OgreD3D11RenderSystem.h Tue Dec 06 16:29:08 2011 -0700
- @@ -131,9 +131,11 @@
- PolygonMode mPolygonMode;
- - FilterOptions FilterMinification;
- - FilterOptions FilterMagnification;
- - FilterOptions FilterMips;
- + FilterOptions FilterMinification[OGRE_MAX_TEXTURE_LAYERS];
- + FilterOptions FilterMagnification[OGRE_MAX_TEXTURE_LAYERS];
- + FilterOptions FilterMips[OGRE_MAX_TEXTURE_LAYERS];
- +
- + bool CompareEnabled[OGRE_MAX_TEXTURE_LAYERS];
- D3D11_RECT mScissorRect;
- @@ -356,7 +358,10 @@
- /// @copydoc RenderSystem::getDisplayMonitorCount
- unsigned int getDisplayMonitorCount() const {return 1;} //todo
- -
- +
- + //Added Missing filter options from Crashy's patch as these FilterOptions weren't defined in the header in that patch.
- + void _setTextureUnitCompareEnabled(size_t unit, bool compare);
- + void _setTextureUnitCompareFunction(size_t unit, CompareFunction function);
- };
- }
- #endif
- diff -r 3b0558273b25 -r 9e2dd5eabefd RenderSystems/Direct3D11/src/OgreD3D11DepthBuffer.cpp
- --- a/RenderSystems/Direct3D11/src/OgreD3D11DepthBuffer.cpp Tue Dec 06 13:49:19 2011 -0700
- +++ b/RenderSystems/Direct3D11/src/OgreD3D11DepthBuffer.cpp Tue Dec 06 16:29:08 2011 -0700
- @@ -31,13 +31,14 @@
- namespace Ogre
- {
- - D3D11DepthBuffer::D3D11DepthBuffer( uint16 poolId,
- + D3D11DepthBuffer::D3D11DepthBuffer( uint16 poolId, D3D11RenderSystem *renderSystem,
- ID3D11DepthStencilView *depthBufferView,
- uint32 width, uint32 height,
- uint32 fsaa, uint32 multiSampleQuality, bool isManual ) :
- DepthBuffer( poolId, 0, width, height, fsaa, "", isManual ),
- mDepthStencilView( depthBufferView ),
- - mMultiSampleQuality( multiSampleQuality )
- + mMultiSampleQuality( multiSampleQuality ),
- + mRenderSystem(renderSystem)
- {
- /*D3D11_DEPTH_STENCIL_VIEW_DESC pDesc;
- mDepthStencilView->GetDesc( &pDesc );
- @@ -65,7 +66,7 @@
- {
- //TODO:
- //Urgh! This bit of "isTexture" is a bit ugly and potentially unsafe
- - bool isTexture = true;
- + /*bool isTexture = true;
- renderTarget->getCustomAttribute( "isTexture", &isTexture );
- ID3D11Texture2D *D3D11texture;
- @@ -93,6 +94,53 @@
- }
- return false;
- + */
- +
- + D3D11_TEXTURE2D_DESC BBDesc;
- +
- + bool isTexture = false;
- + renderTarget->getCustomAttribute( "isTexture", &isTexture );
- +
- + if(isTexture)
- + {
- + ID3D11Texture2D *D3D11texture;
- + D3D11HardwarePixelBuffer *pBuffer;
- + renderTarget->getCustomAttribute( "BUFFER", &pBuffer );
- + D3D11texture = static_cast<ID3D11Texture2D*>( pBuffer->getParentTexture()->getTextureResource() );
- + D3D11texture->GetDesc(&BBDesc);
- + }
- + else
- + {
- + ID3D11Texture2D* pBack[OGRE_MAX_MULTIPLE_RENDER_TARGETS];
- + memset( pBack, 0, sizeof(pBack) );
- + renderTarget->getCustomAttribute( "DDBACKBUFFER", &pBack );
- +
- + if( pBack[0] )
- + {
- + pBack[0]->GetDesc(&BBDesc);
- + }
- + else
- + {
- + ID3D11Texture2D *D3D11texture;
- + renderTarget->getCustomAttribute( "ID3D11Texture2D", &D3D11texture );
- + D3D11texture->GetDesc( &BBDesc );
- + }
- + }
- +
- + //RenderSystem will determine if bitdepths match (i.e. 32 bit RT don't like 16 bit Depth)
- + //This is the same function used to create them. Note results are usually cached so this should
- + //be quick
- +
- + //TODO: Needs to check format too!
- + if( mFsaa == BBDesc.SampleDesc.Count &&
- + mMultiSampleQuality == BBDesc.SampleDesc.Quality &&
- + this->getWidth() == renderTarget->getWidth() &&
- + this->getHeight() == renderTarget->getHeight() )
- + {
- + return true;
- + }
- +
- + return false;
- }
- //---------------------------------------------------------------------
- ID3D11DepthStencilView* D3D11DepthBuffer::getDepthStencilView() const
- diff -r 3b0558273b25 -r 9e2dd5eabefd RenderSystems/Direct3D11/src/OgreD3D11MultiRenderTarget.cpp
- --- a/RenderSystems/Direct3D11/src/OgreD3D11MultiRenderTarget.cpp Tue Dec 06 13:49:19 2011 -0700
- +++ b/RenderSystems/Direct3D11/src/OgreD3D11MultiRenderTarget.cpp Tue Dec 06 16:29:08 2011 -0700
- @@ -66,18 +66,19 @@
- /// If there is another target bound, compare sizes
- if(targets[y]->getWidth() != buffer->getWidth() ||
- targets[y]->getHeight() != buffer->getHeight() ||
- - PixelUtil::getNumElemBits(targets[y]->getFormat()) !=
- + PixelUtil::getNumElemBits(targets[y]->getFormat()) !=
- PixelUtil::getNumElemBits(buffer->getFormat()))
- {
- OGRE_EXCEPT(
- - Exception::ERR_INVALIDPARAMS,
- - "MultiRenderTarget surfaces are not of same size or bit depth",
- + Exception::ERR_INVALIDPARAMS,
- + "MultiRenderTarget surfaces are not of same size or bit depth",
- "D3D11MultiRenderTarget::bindSurface"
- );
- }
- }
- targets[attachment] = buffer;
- + //mRenderTargets[attachment] = target;
- checkAndUpdate();
- }
- //---------------------------------------------------------------------
- @@ -144,6 +145,21 @@
- mWidth = 0;
- mHeight = 0;
- }
- +
- + /*if(name == "ID3D11RenderTargetView")
- + {
- + ID3D11RenderTargetView ** pRTView = (ID3D11RenderTargetView**)pData;
- +
- + memset(pRTView,0,sizeof(pRTView));
- +
- + for(int y=0; y<OGRE_MAX_MULTIPLE_RENDER_TARGETS && mRenderTargets[y]; ++y)
- + {
- + ID3D11RenderTargetView * view;
- + mRenderTargets[y]->getCustomAttribute("ID3D11RenderTargetView",&view);
- + pRTView[y]=view;
- + }
- + return;
- + }*/
- }
- //---------------------------------------------------------------------
- diff -r 3b0558273b25 -r 9e2dd5eabefd RenderSystems/Direct3D11/src/OgreD3D11RenderSystem.cpp
- --- a/RenderSystems/Direct3D11/src/OgreD3D11RenderSystem.cpp Tue Dec 06 13:49:19 2011 -0700
- +++ b/RenderSystems/Direct3D11/src/OgreD3D11RenderSystem.cpp Tue Dec 06 16:29:08 2011 -0700
- @@ -1,10 +1,10 @@
- /*
- ------------------------------------------------------------------------------
- +
- This source file is part of OGRE
- (Object-oriented Graphics Rendering Engine)
- For the latest info, see http://www.ogre3d.org/
- -Copyright (c) 2000-2009 Torus Knot Software Ltd
- +Copyright (c) 2000-2011 Torus Knot Software Ltd
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- @@ -23,7 +23,7 @@
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- ------------------------------------------------------------------------------
- +
- */
- #include "OgreD3D11RenderSystem.h"
- #include "OgreD3D11Prerequisites.h"
- @@ -1192,7 +1192,7 @@
- }
- //Create the abstract container
- - D3D11DepthBuffer *newDepthBuffer = new D3D11DepthBuffer( DepthBuffer::POOL_DEFAULT, depthStencilView,
- + D3D11DepthBuffer *newDepthBuffer = new D3D11DepthBuffer( DepthBuffer::POOL_DEFAULT,this, depthStencilView,
- descDepth.Width, descDepth.Height,
- descDepth.SampleDesc.Count, descDepth.SampleDesc.Quality,
- false );
- @@ -1217,7 +1217,7 @@
- }
- //Create a new container for it
- - D3D11DepthBuffer *newDepthBuffer = new D3D11DepthBuffer( DepthBuffer::POOL_DEFAULT, depthSurface,
- + D3D11DepthBuffer *newDepthBuffer = new D3D11DepthBuffer( DepthBuffer::POOL_DEFAULT,this, depthSurface,
- width, height, fsaa, fsaaQuality, true );
- //Add the 'main' depth buffer to the pool
- @@ -1514,9 +1514,12 @@
- //---------------------------------------------------------------------
- void D3D11RenderSystem::_setAlphaRejectSettings( CompareFunction func, unsigned char value, bool alphaToCoverage )
- {
- - mSceneAlphaRejectFunc = func;
- - mSceneAlphaRejectValue = value;
- + mSceneAlphaRejectFunc = func;
- + mSceneAlphaRejectValue = value;
- +
- +
- mSceneAlphaToCoverage = alphaToCoverage;
- + //Do nothing, alpha rejection unavailable in Direct3D11
- }
- //---------------------------------------------------------------------
- void D3D11RenderSystem::_setCullingMode( CullingMode mode )
- @@ -1626,19 +1629,29 @@
- {
- switch(ftype) {
- case FT_MIN:
- - FilterMinification = filter;
- + FilterMinification[unit] = filter;
- break;
- case FT_MAG:
- - FilterMagnification = filter;
- + FilterMagnification[unit] = filter;
- break;
- case FT_MIP:
- - FilterMips = filter;
- + FilterMips[unit] = filter;
- break;
- }
- - mTexStageDesc[unit].samplerDesc.Filter = D3D11Mappings::get(FilterMinification, FilterMagnification, FilterMips);
- + mTexStageDesc[unit].samplerDesc.Filter = D3D11Mappings::get(FilterMinification[unit], FilterMagnification[unit], FilterMips[unit],CompareEnabled[unit]);
- }
- + //---------------------------------------------------------------------
- + void D3D11RenderSystem::_setTextureUnitCompareEnabled(size_t unit, bool compare)
- + {
- + CompareEnabled[unit] = compare;
- + }
- + //---------------------------------------------------------------------
- + void D3D11RenderSystem::_setTextureUnitCompareFunction(size_t unit, CompareFunction function)
- + {
- + mTexStageDesc[unit].samplerDesc.ComparisonFunc = D3D11Mappings::get(function);
- + }
- //---------------------------------------------------------------------
- DWORD D3D11RenderSystem::_getCurrentAnisotropy(size_t unit)
- {
- @@ -1654,9 +1667,17 @@
- mActiveRenderTarget = target;
- if (mActiveRenderTarget)
- {
- - ID3D11RenderTargetView * pRTView = NULL;
- + ID3D11RenderTargetView * pRTView[OGRE_MAX_MULTIPLE_RENDER_TARGETS];
- + memset(pRTView, 0, sizeof(pRTView));
- +
- + uint count = 0;
- target->getCustomAttribute( "ID3D11RenderTargetView", &pRTView );
- + while(pRTView[count] != NULL)
- + {
- + count++;
- + }
- +
- //Retrieve depth buffer
- D3D11DepthBuffer *depthBuffer = static_cast<D3D11DepthBuffer*>(target->getDepthBuffer());
- @@ -1670,8 +1691,7 @@
- //Retrieve depth buffer again (it may have changed)
- depthBuffer = static_cast<D3D11DepthBuffer*>(target->getDepthBuffer());
- -
- - // we need to clear the state
- + // we need to clear the state
- mDevice.GetImmediateContext()->ClearState();
- if (mDevice.isError())
- @@ -1685,8 +1705,8 @@
- // now switch to the new render target
- - mDevice.GetImmediateContext()->OMSetRenderTargets(1,
- - &pRTView,
- + mDevice.GetImmediateContext()->OMSetRenderTargets(count,
- + pRTView,
- depthBuffer ? depthBuffer->getDepthStencilView() : 0 );
- @@ -1698,7 +1718,6 @@
- "D3D11RenderSystem::_setViewport");
- }
- }
- - // TODO - support MRT
- }
- //---------------------------------------------------------------------
- @@ -1941,7 +1960,6 @@
- opState->mTextures[opState->mTexturesCount] = texture;
- opState->mTexturesCount++;
- - stage.samplerDesc.ComparisonFunc = D3D11Mappings::get(mSceneAlphaRejectFunc);
- stage.samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
- stage.currentSamplerDesc = stage.samplerDesc;
- @@ -2472,19 +2490,20 @@
- if (mActiveRenderTarget)
- {
- ID3D11RenderTargetView * pRTView[OGRE_MAX_MULTIPLE_RENDER_TARGETS];
- - std::memset(pRTView, 0, sizeof(pRTView));
- + memset(pRTView, 0, sizeof(pRTView));
- mActiveRenderTarget->getCustomAttribute( "ID3D11RenderTargetView", &pRTView );
- - if (buffers & FBT_COLOUR)
- + uint count = 0;
- + while(pRTView[count] != NULL)
- {
- - float ClearColor[4];
- - D3D11Mappings::get(colour, ClearColor);
- - for(size_t i = 0; i < OGRE_MAX_MULTIPLE_RENDER_TARGETS; ++i)
- + if (buffers & FBT_COLOUR)
- {
- - if(pRTView[i])
- - mDevice.GetImmediateContext()->ClearRenderTargetView( pRTView[i], ClearColor );
- + float ClearColor[4];
- + D3D11Mappings::get(colour, ClearColor);
- + mDevice.GetImmediateContext()->ClearRenderTargetView( pRTView[count], ClearColor );
- }
- + count++;
- }
- UINT ClearFlags = 0;
- if (buffers & FBT_DEPTH)
- @@ -2825,10 +2844,12 @@
- ZeroMemory( &mDepthStencilDesc, sizeof(mDepthStencilDesc));
- ZeroMemory( &mScissorRect, sizeof(mScissorRect));
- - FilterMinification = FO_NONE;
- - FilterMagnification = FO_NONE;
- - FilterMips = FO_NONE;
- -
- + for(size_t i = 0; i < OGRE_MAX_TEXTURE_LAYERS; ++i)
- + {
- + FilterMinification[i] = FO_NONE;
- + FilterMagnification[i] = FO_NONE;
- + FilterMips[i] = FO_NONE;
- + }
- mPolygonMode = PM_SOLID;
- ZeroMemory(mTexStageDesc, OGRE_MAX_TEXTURE_LAYERS * sizeof(sD3DTextureStageDesc));
- diff -r 3b0558273b25 -r 9e2dd5eabefd RenderSystems/Direct3D11/src/OgreD3D11Texture.cpp
- --- a/RenderSystems/Direct3D11/src/OgreD3D11Texture.cpp Tue Dec 06 13:49:19 2011 -0700
- +++ b/RenderSystems/Direct3D11/src/OgreD3D11Texture.cpp Tue Dec 06 16:29:08 2011 -0700
- @@ -965,6 +965,7 @@
- {
- // IDXGISurface ** pSurf = (IDXGISurface **)pData;
- //*pSurf = static_cast<D3D11HardwarePixelBuffer*>(mBuffer)->getSurface();
- + *static_cast<HardwarePixelBuffer**>(pData) = mBuffer;
- return;
- }
- else if(name == "HWND")
- @@ -973,6 +974,11 @@
- *pHwnd = NULL;
- return;
- }
- + else if(name == "isTexture")
- + {
- + bool *b = reinterpret_cast< bool * >( pData );
- + *b = true;
- + }
- else if(name == "BUFFER")
- {
- *static_cast<HardwarePixelBuffer**>(pData) = mBuffer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement