/***********      .---.         .-"-.      ******************\
* -------- *     /   ._.       / ´ ` \     * --------------- *
* Author's *     \_  (__\      \_°v°_/     * humus@comhem.se *
*   note   *     //   \\       //   \\     * ICQ #47010716   *
* -------- *    ((     ))     ((     ))    * --------------- *
*          ****--""---""-------""---""--****                 *********\
* This file is a part of the work done by Humus. You are free to use  *
* the code in any way you like, modified, unmodified or copy'n'pasted *
* into your own work. However, I expect you to respect these points:  *
*  @ If you use this file and its contents unmodified, or use a major *
*    part of this file, please credit the author and leave this note. *
*  @ For use in anything commercial, please request my approval.      *
*  @ Share your work and ideas too as much as you can.                *
\*********************************************************************/

#include "../Framework3/Direct3D10/D3D10App.h"
#include "../Framework3/Util/Model.h"
#include "../Framework3/Util/BSP.h"

#define LAYERS 3

class App : public D3D10App {
public:
	char *getTitle() const { return "Deep deferred shading"; }

	void moveCamera(const float3 &dir);
	void resetCamera();

	void onSize(const int w, const int h);

	bool init();
	void exit();

	bool initAPI();
	void exitAPI();

	bool load();
	void unload();

	void drawFrame();

protected:
	ShaderID fillBuffers, ambient, lighting, lightSpot, shadow, preZ[2];
	TextureID base[6], bump[6];

	TextureID shadowMap, baseRT, normalRT, depthRT, lightTex;

	SamplerStateID trilinearAniso, trilinearClamp, pointClamp, shadowFilter;
	BlendStateID blendAdd;
	DepthStateID depthEqual;

	Model *map;
	BSP bsp;
};
