177 lines
4.5 KiB
C++
177 lines
4.5 KiB
C++
#pragma once
|
|
|
|
#ifndef Engine_h
|
|
#define Engine_h
|
|
|
|
#define NOMINMAX // Because I hate Microsoft now. ~Angry Dan. http://lolengine.net/blog/2011/3/4/fuck-you-microsoft-near-far-macros
|
|
|
|
#include "EngineIncludes.h"
|
|
|
|
namespace Oyster
|
|
{
|
|
class Engine
|
|
{
|
|
private:
|
|
Engine();
|
|
~Engine();
|
|
|
|
public:
|
|
class Init
|
|
{
|
|
public:
|
|
struct Setup
|
|
{
|
|
struct
|
|
{
|
|
bool InitWindow;
|
|
LPCSTR appname;
|
|
LPCSTR classname;
|
|
HINSTANCE hinstance;
|
|
int nCmdShow;
|
|
WNDPROC wProc;
|
|
bool ManageWindow;
|
|
}Window;
|
|
struct
|
|
{
|
|
int NrOfBuffers;
|
|
bool MSAA_Quality;
|
|
bool Fullscreen;
|
|
bool SingleThreaded;
|
|
bool Reference;
|
|
bool ForceDX11;
|
|
bool GenerateDepthStencil;
|
|
bool BindDefault;
|
|
}Common;
|
|
//all but Window params have Default Values
|
|
Setup()
|
|
{
|
|
Common.NrOfBuffers=1;
|
|
Common.MSAA_Quality = false;
|
|
Common.Fullscreen = true;
|
|
Common.SingleThreaded = true;
|
|
Common.Reference = false;
|
|
Common.ForceDX11 = false;
|
|
Common.GenerateDepthStencil = true;
|
|
Common.BindDefault = true;
|
|
}
|
|
|
|
};
|
|
|
|
static bool IsInstanced();
|
|
|
|
//Creates Device and DeviceContext, if not Initialized
|
|
static bool Instance(bool SingleThreaded=true,bool Reference=false,bool ForceDX11=false);
|
|
static bool HasSwapChain();
|
|
|
|
//Creates Swapchain, if not Aready Created
|
|
static bool CreateSwapChain(HWND Window, int NrofBuffers=1,bool MSAA_Quality=false,bool Fullscreen=true);
|
|
|
|
//CreateWindow, if Not Already Created
|
|
static bool InitializeWindow(const LPCSTR appName, const LPCSTR className,const HINSTANCE &hInstance, const int &nCmdShow, WNDPROC wProc, bool HandleLoop = false );
|
|
|
|
//Performs a full initialization of a rendering pipeline, including a Window
|
|
static bool FullInit(const Setup& setup);
|
|
struct Buffers
|
|
{
|
|
static Buffer* CreateBuffer(const Buffer::BUFFER_INIT_DESC BufferDesc);
|
|
};
|
|
private:
|
|
Init();
|
|
~Init();
|
|
};
|
|
|
|
class States
|
|
{
|
|
public:
|
|
//SSAO Quality
|
|
static void SetNrOfSSAOSamples(int);
|
|
static int GetNrOfSSAOSamples();
|
|
|
|
//SSAO Frequency
|
|
static void SetSSAOSampleSpread(int);
|
|
static int GetSSAOSampleSpread();
|
|
|
|
//PointLights
|
|
static void SetMaxPointlights(int);
|
|
static int GetMaxPointlights();
|
|
|
|
|
|
private:
|
|
States();
|
|
~States();
|
|
};
|
|
|
|
class Render
|
|
{
|
|
public:
|
|
/// Render a number of models, setting the Per model data to the included cBuffer
|
|
/// specify NULL if no such data exists
|
|
static void Geometry(const Oyster::Render::Model* models,int count,Oyster::Buffer* cBufferEveryObject, int slot);
|
|
static void Text(std::string text, Oyster::Math::Float2 size, Oyster::Math::Float3 Pos);
|
|
//static void TextBox(const Oyster::Render::
|
|
|
|
//ensure that a compatible 2D shadereffect is applied
|
|
static void ScreenQuad(ID3D11ShaderResourceView* srv, float ZPos=1);
|
|
|
|
//ensure that a compatible 2D shadereffect is applied and that pos.z is between 0 and 1
|
|
static void Sprite(ID3D11ShaderResourceView* srv, Oyster::Math::Float2 size, Oyster::Math::Float3 Pos);
|
|
|
|
static void PresentScene();
|
|
|
|
private:
|
|
Render();
|
|
~Render();
|
|
};
|
|
|
|
class PrepareForRendering
|
|
{
|
|
public:
|
|
//Binds several rendertargets and a depthstencil
|
|
static void BindRenderTargets(ID3D11RenderTargetView** RenderTargets,int NrOfTargets,ID3D11DepthStencilView* depth);
|
|
|
|
//Binds several Rendertargest and a default depthstencil
|
|
static void BindRenderTargets(ID3D11RenderTargetView** RenderTargets,int NrOfTargets);
|
|
|
|
//Binds the backbuffer and a depthstencil
|
|
static void BindBackBuffer(ID3D11DepthStencilView* depth);
|
|
|
|
//Binds the backbuffer and a default depthstencil
|
|
static void BindBackBuffer();
|
|
|
|
//Binds the backbuffer to the compute shader
|
|
static void BindBackBufferAsUAV();
|
|
|
|
//binds several UAV to the computeshader
|
|
static void BindUAV(ID3D11UnorderedAccessView** uav, int NrOfUavs);
|
|
|
|
//Clears the backbuffer and default depthstencil
|
|
static void ClearBackBuffer(Math::Float4 color);
|
|
|
|
static void Begin2DRender();
|
|
|
|
static void Begin2DTextRender();
|
|
};
|
|
|
|
class Pipeline
|
|
{
|
|
public:
|
|
class Deffered_Lightning
|
|
{
|
|
public:
|
|
//Basic Setup
|
|
static void NewFrame(const Float4& Color, const Matrix& View, const Matrix& Projection);
|
|
|
|
//Geometry Pass
|
|
static void BeginRenderGeometry();
|
|
static void RenderGeometry(const Oyster::Render::Model* models,int count);
|
|
static void EndRenderGeometry();
|
|
|
|
//Lightning Pass
|
|
static void InputPointLights(Oyster::Resources::BufferDefinitions::PointLightDescription *p, int NrOfPointlights );
|
|
static void RenderLightning();
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
#endif |