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
00018
00019 public:
00024 enum TexturePass {PASS_DIFFUSE,PASS_LIGHT,PASS_DETAIL,PASS_FOG,PASS_MACRO,DUMMY_NUM_PASSES};
00025
00027 struct Vec2
00028 {
00029 float x,y;
00030 };
00031
00033 struct Vec3
00034 {
00035 float x,y,z;
00036 };
00037
00039 struct Vec4
00040 {
00041 float x,y,z,w;
00042 };
00043
00045 struct Vec4_byte
00046 {
00047 BYTE x,y,z,w;
00048 };
00049
00051 struct Vertex
00052 {
00053 Vec3 Pos;
00054 Vec4 Color;
00055 Vec4 Fog;
00056 Vec3 Normal;
00057 Vec2 TexCoord[D3D::DUMMY_NUM_PASSES];
00058 DWORD flags;
00059 };
00060
00062 struct TextureMetaData
00063 {
00064
00065
00066
00068 FLOAT multU;
00069 FLOAT multV;
00070 bool masked;
00071 };
00072
00074 struct CachedTexture
00075 {
00076 TextureMetaData metadata;
00077 ID3D10ShaderResourceView* resourceView;
00078 };
00079
00081 static struct Options
00082 {
00083 int samples;
00084 int VSync;
00085 int aniso;
00086 int LODBias;
00087 float brightness;
00088 };
00089
00092 static int init(HWND hwnd,D3D::Options &createOptions);
00093 static void uninit();
00094 static int resize(int X, int Y, bool fullScreen);
00096
00099 static void newFrame();
00100 static void clear(D3D::Vec4& clearColor);
00101 static void clearDepth();
00103
00106 static void map(bool clear);
00107 static void render();
00108 static void present();
00110
00113 static void indexTriangleFan(int num);
00114 static void indexQuad();
00115 static D3D::Vertex* getVertex();
00117
00120 static void setViewPort(int X, int Y, int left, int top);
00121 static void setProjectionOnOff(bool on);
00122 static void setProjection(float aspect, float XoverZ);
00123 static void setFlags(int flags);
00125
00128 static ID3D10Texture2D *createTexture(D3D10_TEXTURE2D_DESC &desc, D3D10_SUBRESOURCE_DATA &data);
00129 static void updateMip(DWORD64 id,int mipNum,D3D10_SUBRESOURCE_DATA &data);
00130 static void cacheTexture(DWORD64 id,TextureMetaData &metadata,ID3D10Texture2D *tex);
00131 static bool textureIsCached(DWORD64 id);
00132 static D3D::TextureMetaData &getTextureMetaData(DWORD64 id);
00133 static D3D::TextureMetaData *setTexture(D3D::TexturePass pass,DWORD64 id);
00134 static void deleteTexture(DWORD64 id);
00135 static void flush();
00137
00140 static void flash(bool enable,D3D::Vec4 &color);
00141 static void fog(float dist, D3D::Vec4 *color);
00142 static TCHAR *getModes();
00143 static void getScreenshot(D3D::Vec4_byte* buf);
00144 static void setBrightness(float brightness);
00146 };