#pragma once #include "Vec2.h" // DirectX 11 Types struct ID3D11Device; struct ID3D11DeviceContext; struct IDXGISwapChain; struct ID3D11Texture2D; struct ID3D11SamplerState; struct ID3D11ShaderResourceView; struct ID3D11RenderTargetView; struct ID3D11DepthStencilView; struct ID3D11DepthStencilState; struct ID3D11RasterizerState; struct ID3D11BlendState; struct D3D11_VIEWPORT; // DirectX 9 Types struct IDirect3D9; struct IDirect3DDevice9; struct IDirect3DSurface9; struct _D3DLOCKED_RECT; namespace Framework { class WFenster; class Bild; class Textur; class PixelShader; class VertexShader; class TexturModel; class Render3D; class TexturList; class Kam3D; enum GraphicApiType { NOT_SUPPORTED, // no graphic api supported DIRECTX9, // only 2d DIRECTX11, // 3d simple phong model without shadows DIRECTX12 // 3d phong model with raytraycing }; class GraphicsApi { protected: GraphicApiType typ; WFenster *fenster; Vec2 backBufferSize; bool fullScreen; private: int ref; public: GraphicsApi( GraphicApiType typ ); virtual ~GraphicsApi(); virtual void initialize( WFenster *fenster, Vec2 backBufferSize, bool fullScreen ); virtual void setBackBufferSize( Vec2< int > size ); virtual void setFullScreen( bool fullScreen ); virtual void update() = 0; virtual void beginFrame( bool fill2D = 0, bool fill3D = 0, int fillColor = 0 ); virtual void renderKamera( Kam3D *zKamera ); virtual void presentFrame() = 0; GraphicApiType getTyp() const; Vec2< int > getBackBufferSize() const; bool isFullScreen() const; virtual Bild *zUIRenderBild() const = 0; GraphicsApi *getThis(); GraphicsApi *release(); }; class DirectX9 : public GraphicsApi { private: IDirect3D9 *pDirect3D; IDirect3DDevice9 *pDevice; IDirect3DSurface9 *pBackBuffer; _D3DLOCKED_RECT *backRect; Bild *uiBild; public: DirectX9(); ~DirectX9(); void initialize( WFenster *fenster, Vec2 backBufferSize, bool fullScreen ) override; void update() override; void beginFrame( bool fill2D, bool fill3D, int fillColor ) override; void presentFrame() override; Bild *zUIRenderBild() const override; }; class DirectX11 : public GraphicsApi { private: ID3D11Device *d3d11Device; ID3D11DeviceContext *d3d11Context; IDXGISwapChain *d3d11SpawChain; Textur *uiTextur; VertexShader *vertexShader; PixelShader *pixelShader; ID3D11SamplerState *sampleState; ID3D11RenderTargetView *rtview; ID3D11DepthStencilView *dsView; ID3D11Texture2D *depthStencilBuffer; ID3D11DepthStencilState *depthStencilState; ID3D11DepthStencilState *depthDisabledStencilState; ID3D11BlendState *blendStateAlphaBlend; D3D11_VIEWPORT *vp; TexturModel *texturModel; Render3D *renderObj; TexturList *texturRegister; public: DirectX11(); ~DirectX11(); void initialize( WFenster *fenster, Vec2 backBufferSize, bool fullScreen ) override; void update() override; void beginFrame( bool fill2D, bool fill3D, int fillColor ) override; void renderKamera( Kam3D *zKamera ) override; void presentFrame() override; Bild *zUIRenderBild() const override; }; class DirectX12 : public GraphicsApi { }; }