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,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];
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 alphaToCoverage;
00109 float zNear;
00110 };
00111
00114 static int init(HWND hwnd,D3D::Options &createOptions);
00115 static void uninit();
00116 static int resize(int X, int Y, bool fullScreen);
00118
00121 static void newFrame();
00122 static void clear(D3D::Vec4& clearColor);
00123 static void clearDepth();
00125
00128 static void map(bool clear);
00129 static void render();
00130 static void present();
00132
00135 static void indexTriangleFan(int num);
00136 static void indexQuad();
00137 static D3D::Vertex* getVertex();
00138
00140
00143 static void setViewPort(int X, int Y, int left, int top);
00144 static void setProjectionMode(D3D::ProjectionMode mode);
00145 static void setProjection(float aspect, float XoverZ);
00146 static void setFlags(int flags, int d3dflags);
00148
00151 static ID3D10Texture2D *createTexture(D3D10_TEXTURE2D_DESC &desc, D3D10_SUBRESOURCE_DATA &data);
00152 static void updateMip(DWORD64 id,int mipNum,D3D10_SUBRESOURCE_DATA &data);
00153 static void cacheTexture(DWORD64 id,TextureMetaData &metadata,ID3D10Texture2D *tex);
00154 static bool textureIsCached(DWORD64 id);
00155 static D3D::TextureMetaData &getTextureMetaData(DWORD64 id);
00156 static D3D::TextureMetaData *setTexture(D3D::TexturePass pass,DWORD64 id);
00157 static void deleteTexture(DWORD64 id);
00158 static void flush();
00160
00163 static void flash(bool enable,D3D::Vec4 &color);
00164 static void fog(float dist, D3D::Vec4 *color);
00165 static TCHAR *getModes();
00166 static void getScreenshot(D3D::Vec4_byte* buf);
00167 static void setBrightness(float brightness);
00169 };