00001
00005 #pragma once
00006 #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
00007 #define CLAMP(p,min,max) { if(p < min) p = min; else if (p>max) p = max; }
00008
00009 #include <D3D10.h>
00010
00011 class D3D
00012 {
00013 private:
00014 static int createRenderTargetViews();
00015 static int findAALevel();
00016 static void commit();
00017 static ID3D10EffectPass* switchToPass(int index);
00018
00019 public:
00024 enum TexturePass {PASS_DIFFUSE,PASS_LIGHT,PASS_DETAIL,PASS_FOG,PASS_MACRO,PASS_BUMP,DUMMY_NUM_PASSES};
00025
00032 enum ProjectionMode {PROJ_NORMAL,PROJ_Z_ONLY,PROJ_COMPENSATE_Z_NEAR};
00033
00037
00038
00040 struct Vec2
00041 {
00042 float x,y;
00043 };
00044
00046 struct Vec3
00047 {
00048 float x,y,z;
00049 };
00050
00052 struct Vec4
00053 {
00054 float x,y,z,w;
00055 };
00056
00058 struct Vec4_byte
00059 {
00060 BYTE x,y,z,w;
00061 };
00062
00064 struct Vertex
00065 {
00066 Vec3 Pos;
00067 Vec4 Color;
00068 Vec4 Fog;
00069 Vec3 Normal;
00070 Vec2 TexCoord[D3D::DUMMY_NUM_PASSES-1];
00071 DWORD flags;
00072 };
00073
00075 struct SimpleVertex
00076 {
00077 Vec3 Pos;
00078 };
00079
00081 struct TextureMetaData
00082 {
00083
00084
00085
00087 FLOAT multU;
00088 FLOAT multV;
00089 bool masked;
00090 };
00091
00093 struct CachedTexture
00094 {
00095 TextureMetaData metadata;
00096 ID3D10ShaderResourceView* resourceView;
00097 };
00098
00100 static struct Options
00101 {
00102 int samples;
00103 int VSync;
00104 int aniso;
00105 int LODBias;
00106 float brightness;
00107 int POM;
00108 int bumpMapping;
00109 int alphaToCoverage;
00110 float zNear;
00111 };
00112
00115 static int init(HWND hwnd,D3D::Options &createOptions);
00116 static void uninit();
00117 static int resize(int X, int Y, bool fullScreen);
00119
00122 static void newFrame();
00123 static void clear(D3D::Vec4& clearColor);
00124 static void clearDepth();
00126
00129 static void map(bool clear);
00130 static void render();
00131 static void present();
00133
00136 static void indexTriangleFan(int num);
00137 static void indexQuad();
00138 static D3D::Vertex* getVertex();
00139
00141
00144 static void setViewPort(int X, int Y, int left, int top);
00145 static void setProjectionMode(D3D::ProjectionMode mode);
00146 static void setProjection(float aspect, float XoverZ);
00147 static void setFlags(int flags, int d3dflags);
00149
00152 static ID3D10Texture2D *createTexture(D3D10_TEXTURE2D_DESC &desc, D3D10_SUBRESOURCE_DATA &data);
00153 static void updateMip(DWORD64 id,int mipNum,D3D10_SUBRESOURCE_DATA &data);
00154 static bool loadFileTexture(wchar_t* fileName, ID3D10Texture2D **tex);
00155 static void cacheTexture(DWORD64 id,TextureMetaData &metadata,ID3D10Texture2D *tex);
00156 static bool textureIsCached(DWORD64 id);
00157 static D3D::TextureMetaData &getTextureMetaData(DWORD64 id);
00158 static D3D::TextureMetaData *setTexture(D3D::TexturePass pass,DWORD64 id);
00159 static void deleteTexture(DWORD64 id);
00160 static void flush();
00162
00165 static void flash(bool enable,D3D::Vec4 &color);
00166 static void fog(float dist, D3D::Vec4 *color);
00167 static TCHAR *getModes();
00168 static void getScreenshot(D3D::Vec4_byte* buf);
00169 static void setBrightness(float brightness);
00171 };