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 #include <D3DX10.h>
00011
00012 class D3D
00013 {
00014 private:
00015 static int createRenderTargetViews();
00016 static int findAALevel();
00017 static void commit();
00018 static ID3D10EffectPass* switchToPass(int index);
00019
00020
00021
00022 public:
00027 enum TexturePass {PASS_DIFFUSE,PASS_LIGHT,PASS_DETAIL,PASS_FOG,PASS_MACRO,PASS_BUMP,PASS_HEIGHT,DUMMY_NUM_PASSES};
00028
00032 enum ExtraTextures{EXTRA_TEX_DETAIL,EXTRA_TEX_BUMP,EXTRA_TEX_HEIGHT,DUMMY_NUM_EXTRA_EXTERNAL_TEXTURES};
00033
00034 struct ExtraTexture
00035 {
00036 wchar_t* suffix;
00037 UINT mipLevels;
00038 };
00039 static const D3D::ExtraTexture extraTextures[DUMMY_NUM_EXTRA_EXTERNAL_TEXTURES];
00040
00041
00042
00043
00050 enum ProjectionMode {PROJ_NORMAL,PROJ_Z_ONLY,PROJ_COMPENSATE_Z_NEAR};
00051
00055
00056
00058 struct Vec2
00059 {
00060 float x,y;
00061 };
00062
00064 struct Vec3
00065 {
00066 float x,y,z;
00067 };
00068
00070 struct Vec4
00071 {
00072 float x,y,z,w;
00073 };
00074
00076 struct Vec4_byte
00077 {
00078 BYTE x,y,z,w;
00079 };
00080
00082 struct Vertex
00083 {
00084 Vec3 Pos;
00085 Vec4 Color;
00086 Vec4 Fog;
00087 Vec3 Normal;
00088 Vec2 TexCoord[D3D::DUMMY_NUM_PASSES-2];
00089 DWORD flags;
00090 };
00091
00093 struct SimpleVertex
00094 {
00095 Vec3 Pos;
00096 };
00097
00099 struct TextureMetaData
00100 {
00101
00102
00103
00105 FLOAT multU;
00106 FLOAT multV;
00107 bool masked;
00108 bool extraTextures[DUMMY_NUM_EXTRA_EXTERNAL_TEXTURES];
00109 DWORD customPolyFlags;
00110 };
00111
00113 struct CachedTexture
00114 {
00115 TextureMetaData metadata;
00116 ID3D10ShaderResourceView* resourceView;
00117 ID3D10ShaderResourceView* extraExternalTextures[DUMMY_NUM_EXTRA_EXTERNAL_TEXTURES];
00118 };
00119
00121 static struct Options
00122 {
00123 int samples;
00124 int VSync;
00125 int aniso;
00126 int LODBias;
00127 float brightness;
00128 int POM;
00129 int bumpMapping;
00130 int alphaToCoverage;
00131 float zNear;
00132 int classicLighting;
00133 };
00134
00137 static int init(HWND hwnd,D3D::Options &createOptions);
00138 static void uninit();
00139 static int resize(int X, int Y, bool fullScreen);
00141
00144 static void newFrame();
00145 static void clear(D3D::Vec4& clearColor);
00146 static void clearDepth();
00148
00151 static void map(bool clear);
00152 static void render();
00153 static void present();
00155
00158 static void indexTriangleFan(int num);
00159 static void indexQuad();
00160 static D3D::Vertex* getVertex();
00161
00163
00166 static void setViewPort(int X, int Y, int left, int top);
00167 static void setProjectionMode(D3D::ProjectionMode mode);
00168 static void setProjection(float aspect, float XoverZ);
00169 static void setFlags(int flags, int d3dflags);
00171
00174 static ID3D10Texture2D *createTexture(D3D10_TEXTURE2D_DESC &desc, D3D10_SUBRESOURCE_DATA &data);
00175 static void updateMip(DWORD64 id,int mipNum,D3D10_SUBRESOURCE_DATA &data);
00176 static bool loadFileTexture(wchar_t* fileName, ID3D10Texture2D **tex, D3DX10_IMAGE_LOAD_INFO *loadInfo);
00177 static void cacheTexture(DWORD64 id,TextureMetaData &metadata,ID3D10Texture2D *tex,int extraIndex=-1);
00178 static bool textureIsCached(DWORD64 id);
00179 static D3D::TextureMetaData &getTextureMetaData(DWORD64 id);
00180 static D3D::TextureMetaData *setTexture(D3D::TexturePass pass,DWORD64 id,int extraIndex=-1);
00181 static void deleteTexture(DWORD64 id);
00182 static void flush();
00184
00187 static void flash(bool enable,D3D::Vec4 &color);
00188 static void fog(float dist, D3D::Vec4 *color);
00189 static TCHAR *getModes();
00190 static void getScreenshot(D3D::Vec4_byte* buf);
00191 static void setBrightness(float brightness);
00193 };