mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Revert r7421 and r7422.
Should fix issue 4413. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7592 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -19,7 +19,9 @@
|
||||
|
||||
#include <stack>
|
||||
|
||||
#include "D3DUtil.h"
|
||||
struct ID3D11BlendState;
|
||||
struct ID3D11DepthStencilState;
|
||||
struct ID3D11RasterizerState;
|
||||
|
||||
namespace DX11
|
||||
{
|
||||
@ -27,35 +29,37 @@ namespace DX11
|
||||
namespace D3D
|
||||
{
|
||||
|
||||
typedef SharedPtr<ID3D11BlendState> AutoBlendState;
|
||||
typedef SharedPtr<ID3D11DepthStencilState> AutoDepthStencilState;
|
||||
typedef SharedPtr<ID3D11RasterizerState> AutoRasterizerState;
|
||||
template<typename T> class AutoState
|
||||
{
|
||||
public:
|
||||
AutoState(const T* object);
|
||||
AutoState(const AutoState<T> &source);
|
||||
~AutoState();
|
||||
|
||||
const inline T* GetPtr() const { return state; }
|
||||
|
||||
private:
|
||||
const T* state;
|
||||
};
|
||||
|
||||
typedef AutoState<ID3D11BlendState> AutoBlendState;
|
||||
typedef AutoState<ID3D11DepthStencilState> AutoDepthStencilState;
|
||||
typedef AutoState<ID3D11RasterizerState> AutoRasterizerState;
|
||||
|
||||
class StateManager
|
||||
{
|
||||
public:
|
||||
StateManager();
|
||||
|
||||
// call any of these to change the affected states
|
||||
void PushBlendState(const AutoBlendState& state)
|
||||
{
|
||||
blendstates.push(state);
|
||||
}
|
||||
|
||||
void PushDepthState(ID3D11DepthStencilState* state)
|
||||
{
|
||||
state->AddRef();
|
||||
depthstates.push(AutoDepthStencilState::FromPtr(state));
|
||||
}
|
||||
|
||||
void PushRasterizerState(ID3D11RasterizerState* state)
|
||||
{
|
||||
state->AddRef();
|
||||
raststates.push(AutoRasterizerState::FromPtr(state));
|
||||
}
|
||||
void PushBlendState(const ID3D11BlendState* state);
|
||||
void PushDepthState(const ID3D11DepthStencilState* state);
|
||||
void PushRasterizerState(const ID3D11RasterizerState* state);
|
||||
|
||||
// call these after drawing
|
||||
void PopBlendState() { blendstates.pop(); }
|
||||
void PopDepthState() { depthstates.pop(); }
|
||||
void PopRasterizerState() { raststates.pop(); }
|
||||
void PopBlendState();
|
||||
void PopDepthState();
|
||||
void PopRasterizerState();
|
||||
|
||||
// call this before any drawing operation if states could have changed meanwhile
|
||||
void Apply();
|
||||
@ -64,9 +68,12 @@ private:
|
||||
std::stack<AutoBlendState> blendstates;
|
||||
std::stack<AutoDepthStencilState> depthstates;
|
||||
std::stack<AutoRasterizerState> raststates;
|
||||
ID3D11BlendState* cur_blendstate;
|
||||
ID3D11DepthStencilState* cur_depthstate;
|
||||
ID3D11RasterizerState* cur_raststate;
|
||||
};
|
||||
|
||||
extern std::unique_ptr<StateManager> stateman;
|
||||
extern StateManager* stateman;
|
||||
|
||||
} // namespace
|
||||
|
||||
|
Reference in New Issue
Block a user