Commit MetaInfo

修订版1bbf27697af0ed46858686aef19ba4de00b9f677 (tree)
时间2011-06-10 07:00:00
作者Jarmonik
CommiterJarmonik

Log Message

D3D9Client: engine cover animation issue is fixed

Would be good idea to run some test to be sure that nothing else gone broken.
I didn't notice anything in my usual set of tests.

更改概述

差异

diff -r eb02c6eeadfa -r 1bbf27697af0 D3D9Client.cfg
--- a/D3D9Client.cfg Mon Oct 24 14:41:06 2011 +0200
+++ b/D3D9Client.cfg Fri Jun 10 00:00:00 2011 +0200
@@ -3,7 +3,7 @@
33 PlanetAnisoMode = 2
44 PlanetMipmapMode = 1
55 PlanetMipmapBias = 0
6-DebugLvl = 2
6+DebugLvl = 1
77 VCNearPlane = 0.02
88 LightSourcesInUse = 12
99 MemAllocLogic = 0
@@ -11,3 +11,4 @@
1111 NearClipPlaneMode = 0
1212 InSurfaceBlit = font1tex.dds Cockpit\hud.dds DG\dg_panel.dds Cockpit\hud_red.dds Cockpit\hud_blue.dds Cockpit\hud_yellow.dds
1313 NVPerfHUD = 0
14+RejectRTDC = 0
diff -r eb02c6eeadfa -r 1bbf27697af0 Modules/D3D9Client/CKBlit.fx
--- a/Modules/D3D9Client/CKBlit.fx Mon Oct 24 14:41:06 2011 +0200
+++ b/Modules/D3D9Client/CKBlit.fx Fri Jun 10 00:00:00 2011 +0200
@@ -14,7 +14,6 @@
1414 MinFilter = POINT;
1515 MagFilter = POINT;
1616 MipFilter = None;
17- MaxAnisotropy = 2;
1817 AddressU = CLAMP;
1918 AddressV = CLAMP;
2019 };
diff -r eb02c6eeadfa -r 1bbf27697af0 Modules/D3D9Client/D3D9Client.fx
--- a/Modules/D3D9Client/D3D9Client.fx Mon Oct 24 14:41:06 2011 +0200
+++ b/Modules/D3D9Client/D3D9Client.fx Fri Jun 10 00:00:00 2011 +0200
@@ -128,7 +128,7 @@
128128 {
129129 Texture = <gTex0>;
130130 MinFilter = ANISOTROPIC;
131- MagFilter = LINEAR;
131+ MagFilter = POINT;
132132 MipFilter = LINEAR;
133133 MaxAnisotropy = 4;
134134 MipMapLODBias = 0;
@@ -158,7 +158,7 @@
158158 AddressV = CLAMP;
159159 };
160160
161-sampler Panel0S = sampler_state // Sampler for mesh based panels. Must be compatible with Non-power of two conditional
161+sampler Panel0S = sampler_state // Sampler for mesh based panels, Panel MFDs. Must be compatible with Non-power of two conditional due to MFD screens.
162162 {
163163 Texture = <gTex0>;
164164 MinFilter = NONE;
@@ -168,6 +168,18 @@
168168 AddressV = CLAMP;
169169 };
170170
171+sampler SimpleS = sampler_state // Sampler used for SimpleTech. (Star, VC HUD)
172+{
173+ Texture = <gTex0>;
174+ MinFilter = ANISOTROPIC;
175+ MagFilter = LINEAR;
176+ MipFilter = LINEAR;
177+ MaxAnisotropy = 4;
178+ MipMapLODBias = 0;
179+ AddressU = WRAP;
180+ AddressV = WRAP;
181+};
182+
171183
172184 sampler Tile0S = sampler_state // Base tile sampler
173185 {
@@ -453,15 +465,15 @@
453465 }
454466
455467
456-
457468 float4 SimpleTechPS(SimpleVS frg) : COLOR
458469 {
459- return tex2D(Tex0S, frg.tex0);
470+ return tex2D(SimpleS, frg.tex0);
460471 }
461472
473+
462474 float4 PanelTechPS(SimpleVS frg) : COLOR
463475 {
464- return tex2D(Panel0S, frg.tex0*gMix);
476+ return tex2D(Panel0S, frg.tex0);
465477 }
466478
467479
@@ -560,6 +572,23 @@
560572 AlphaBlendEnable = true;
561573 BlendOp = Add;
562574 SrcBlend = SrcAlpha;
575+ DestBlend = One;
576+ ZEnable = false;
577+ ZWriteEnable = false;
578+ }
579+}
580+
581+technique PanelTechB
582+{
583+ pass P0
584+ {
585+ vertexShader = compile vs_3_0 SimpleTechVS();
586+ pixelShader = compile ps_3_0 PanelTechPS();
587+
588+ AlphaBlendEnable = true;
589+ BlendOp = Add;
590+ SrcBlend = SrcAlpha;
591+ DestBlend = InvSrcAlpha;
563592 ZEnable = false;
564593 ZWriteEnable = false;
565594 }
diff -r eb02c6eeadfa -r 1bbf27697af0 Modules/Plugin/D3D9Client.dll
Binary file Modules/Plugin/D3D9Client.dll has changed
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/ChangeLog.txt
--- a/Orbitersdk/D3D9Client/ChangeLog.txt Mon Oct 24 14:41:06 2011 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
1-D3D9Client Change Log
2-
3-RC2
4-- Shadow position bug fixed
5-- MFD and Multisampling conflict fixed from old style panels.
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Client.cpp
--- a/Orbitersdk/D3D9Client/D3D9Client.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Client.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -95,7 +95,7 @@
9595 {
9696 pFramework = NULL;
9797 pd3dDevice = NULL;
98- p2DPanelVB = NULL;
98+ //p2DPanelVB = NULL;
9999 vtab = NULL;
100100 cfg = new D3D9Config(); // Create the parameter manager
101101 uEnableLog = cfg->DebugLvl;
@@ -205,8 +205,8 @@
205205 meshmgr = new MeshManager(this);
206206 texmgr = new TextureManager(this);
207207
208- pDefRTGSurf = new D3D9ClientSurface(pd3dDevice, this);
209- pDefRTGSurf->MakeRenderingTexture(16,16);
208+ //pDefRTGSurf = new D3D9ClientSurface(pd3dDevice, this);
209+ //pDefRTGSurf->MakeRenderingTexture(16,16);
210210
211211 pDefaultTex = SURFACE(clbkLoadTexture("Null.dds"));
212212
@@ -217,10 +217,13 @@
217217 D3D9PadPen::D3D9TechInit(pd3dDevice);
218218 D3D9PadBrush::D3D9TechInit(pd3dDevice);
219219 D3D9Text::D3D9TechInit(pd3dDevice);
220+
221+ //ShowDefaultSplash(); // Warning D3D9ClientSurface is not yet fully initialized here
222+ SplashScreen();
220223
221- ShowDefaultSplash();
222- SplashScreen();
223-
224+ D3D9ClientSurface::D3D9TechInit(pd3dDevice);
225+ D3D9Effect::D3D9TechInit(pd3dDevice);
226+
224227 // Device-specific initialisations
225228
226229 TileManager::GlobalInit(this);
@@ -233,10 +236,8 @@
233236 vObject::GlobalInit(this);
234237 vVessel::GlobalInit(this);
235238
236- FX = D3D9Effect::D3D9TechInit(pd3dDevice);
237239 Scene::D3D9TechInit(pd3dDevice);
238- D3D9ClientSurface::D3D9TechInit(pd3dDevice);
239-
240+
240241 // Create scene instance
241242 scene = new Scene(this, viewW, viewH);
242243
@@ -1017,9 +1018,10 @@
10171018 HDC D3D9Client::clbkGetSurfaceDC(SURFHANDLE surf)
10181019 {
10191020 _TRACER;
1021+ LogOk("DC Acquired...");
10201022 if (surf==NULL) surf = pFramework->GetBackBufferHandle();
10211023 HDC hDC = SURFACE(surf)->GetDC();
1022- if (hDC==NULL) LogErr("clbkGetSurfaceDC(0x%X) failed",surf);
1024+ //if (hDC==NULL) LogErr("clbkGetSurfaceDC(0x%X) failed",surf);
10231025 return hDC;
10241026 }
10251027
@@ -1027,10 +1029,11 @@
10271029
10281030 void D3D9Client::clbkReleaseSurfaceDC(SURFHANDLE surf, HDC hDC)
10291031 {
1030- _TRACER;
10311032 if (hDC==NULL) { LogErr("D3D9Client::clbkReleaseSurfaceDC() Input hDC is NULL"); return; }
10321033 if (surf==NULL) surf = pFramework->GetBackBufferHandle();
1033- SURFACE(surf)->ReleaseDC(hDC);
1034+ SURFACE(surf)->ReleaseDC(hDC);
1035+ LogOk("...DC Released");
1036+ //if (SURFACE(surf)->GetWidth()==290) LogAlw("MFD rendering completed");
10341037 }
10351038
10361039 // =======================================================================
@@ -1099,11 +1102,33 @@
10991102
11001103 void D3D9Client::SplashScreen()
11011104 {
1102- HDC hDC = GetDC(hRenderWnd);
1105+ LPDIRECT3DSURFACE9 pBackBuffer = pFramework->GetBackBuffer();
1106+
1107+ DWORD Width = pFramework->GetRenderWidth();
1108+ DWORD Height = pFramework->GetRenderHeight();
1109+ HINSTANCE hInst = oapiGetOrbiterInstance();
1110+ SURFHANDLE hScaled = oapiCreateSurface(Width, Height);
1111+
1112+ HBITMAP hBM = LoadBitmap(hInst, MAKEINTRESOURCE(273));
1113+ BITMAP bm;
1114+
1115+ GetObject(hBM, sizeof(BITMAP), &bm);
1116+
1117+ HDC hSrc = CreateCompatibleDC(NULL);
1118+ HDC hDC = SURFACE(hScaled)->GetDCHard();
1119+
1120+ HGDIOBJ hOld = SelectObject(hSrc, hBM);
1121+
1122+ StretchBlt(hDC, 0, 0, Width, Height, hSrc, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
1123+
1124+ SelectObject(hSrc, hOld);
1125+ DeleteDC(hSrc);
1126+ DeleteObject(hBM);
11031127
11041128 LOGFONTA fnt; memset((void *)&fnt, 0, sizeof(LOGFONT));
1129+
11051130 fnt.lfHeight = 18;
1106- fnt.lfWeight = 500;
1131+ fnt.lfWeight = 700;
11071132 fnt.lfCharSet = ANSI_CHARSET;
11081133 fnt.lfOutPrecision = OUT_DEFAULT_PRECIS;
11091134 fnt.lfClipPrecision = CLIP_DEFAULT_PRECIS;
@@ -1116,13 +1141,33 @@
11161141 HFONT hO = (HFONT)SelectObject(hDC, hF);
11171142 SetTextColor(hDC, 0xC08080);
11181143 SetBkMode(hDC,TRANSPARENT);
1119- char data[128];
1120- sprintf_s(data,128,"D3D9Client RC22 Build [%s]",__DATE__);
1121- TextOut(hDC,viewW*1018/1600, viewH*705/875 + 2*18, data, strlen(data));
11221144
1145+ char *months[]={"???","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","???"};
1146+
1147+ DWORD d = oapiGetOrbiterVersion();
1148+ DWORD y = d/10000; d-=y*10000;
1149+ DWORD m = d/100; d-=m*100;
1150+ if (m>12) m=0;
1151+
1152+ char dataA[128];
1153+ sprintf_s(dataA,128,"D3D9Client RC23 Build [%s]",__DATE__);
1154+ char dataB[128];
1155+ sprintf_s(dataB,128,"Build %s %u 20%u [%u]", months[m], d, y, oapiGetOrbiterVersion());
1156+
1157+ int xc = Width*814/bm.bmWidth;
1158+ int yc = Height*544/bm.bmHeight;
1159+
1160+ TextOut(hDC, xc, yc + 0*20, "ORBITER Space Flight Simulator",30);
1161+ TextOut(hDC, xc, yc + 1*20, dataB, strlen(dataB));
1162+ TextOut(hDC, xc, yc + 2*20, dataA, strlen(dataA));
1163+
11231164 SelectObject(hDC, hO);
11241165 DeleteObject(hF);
1125- ReleaseDC(hRenderWnd, hDC);
1166+
1167+ SURFACE(hScaled)->ReleaseDC(hDC);
1168+
1169+ clbkBlt(NULL, 0, 0, hScaled);
1170+ clbkDisplayFrame();
11261171 }
11271172
11281173 #pragma region Drawing_(Sketchpad)_Interface
@@ -1142,21 +1187,22 @@
11421187 return new D3D9Pad(surf);
11431188 }
11441189 }
1145-
1146- /*
1147- if (SURFACE(surf)->IsBackBuffer()) {
1148- bSkpGDI=false;
1149- if (bScene==false) pd3dDevice->BeginScene();
1150- return new D3D9Pad(surf);
1151- }*/
1190+ else {
1191+ if (SURFACE(surf)->IsRenderTarget()) {
1192+
1193+ //LogErr("[INFO] Sketchpad is used for RenderTargetSurface Size=(%ux%u)",SURFACE(surf)->GetWidth(), SURFACE(surf)->GetHeight());
1194+ //bSkpGDI=false;
1195+ //if (bScene==false) pd3dDevice->BeginScene();
1196+ //return new D3D9Pad(surf);
1197+ }
1198+ }
11521199
11531200 bSkpGDI = true;
1154- return new GDIPad(surf, SURFACE(surf)->GetDC());
1201+ return new GDIPad(surf, clbkGetSurfaceDC(surf));
11551202 }
11561203
11571204 void D3D9Client::clbkReleaseSketchpad(oapi::Sketchpad *sp)
11581205 {
1159- _TRACER;
11601206 if (bSkpGDI) {
11611207 GDIPad *gdip = (GDIPad*)sp;
11621208 HDC hDC = gdip->GetDC();
@@ -1173,37 +1219,31 @@
11731219
11741220 Font *D3D9Client::clbkCreateFont(int height, bool prop, const char *face, Font::Style style, int orientation) const
11751221 {
1176- _TRACER;
11771222 return new D3D9PadFont(height, prop, face, style, orientation);
11781223 }
11791224
11801225 void D3D9Client::clbkReleaseFont(Font *font) const
11811226 {
1182- _TRACER;
11831227 delete ((D3D9PadFont*)font);
11841228 }
11851229
11861230 Pen *D3D9Client::clbkCreatePen(int style, int width, DWORD col) const
11871231 {
1188- _TRACER;
11891232 return new D3D9PadPen(style, width, col);
11901233 }
11911234
11921235 void D3D9Client::clbkReleasePen(Pen *pen) const
11931236 {
1194- _TRACER;
11951237 delete ((D3D9PadPen*)pen);
11961238 }
11971239
11981240 Brush *D3D9Client::clbkCreateBrush(DWORD col) const
11991241 {
1200- _TRACER;
12011242 return new D3D9PadBrush(col);
12021243 }
12031244
12041245 void D3D9Client::clbkReleaseBrush(Brush *brush) const
12051246 {
1206- _TRACER;
12071247 delete ((D3D9PadBrush*)brush);
12081248 }
12091249
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Client.h
--- a/Orbitersdk/D3D9Client/D3D9Client.h Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Client.h Fri Jun 10 00:00:00 2011 +0200
@@ -555,7 +555,6 @@
555555 public:
556556
557557 D3D9Config *cfg; // configuration manager
558- ID3DXEffect *FX;
559558
560559 private:
561560
@@ -563,9 +562,9 @@
563562
564563 LPDIRECT3D9 pD3D;
565564 LPDIRECT3DDEVICE9 pd3dDevice;
566- LPDIRECT3DVERTEXBUFFER9 p2DPanelVB;
565+ //LPDIRECT3DVERTEXBUFFER9 p2DPanelVB;
567566 LPD3D9CLIENTSURFACE pDefaultTex;
568- LPD3D9CLIENTSURFACE pDefRTGSurf;
567+ //LPD3D9CLIENTSURFACE pDefRTGSurf;
569568 LPD3D9CLIENTSURFACE pScatterTest;
570569
571570 CD3DFramework9* pFramework;
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Config.cpp
--- a/Orbitersdk/D3D9Client/D3D9Config.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Config.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -18,6 +18,7 @@
1818 int D3D9Config::def_DisableDriverManagement = 0;
1919 int D3D9Config::def_NearClipPlane = 0;
2020 int D3D9Config::def_NVPerfHUD = 0;
21+int D3D9Config::def_RejectRTDC = 0;
2122
2223
2324 // ==============================================================
@@ -46,6 +47,7 @@
4647 MemoryLogic = def_MemoryLogic;
4748 NearClipPlane = def_NearClipPlane;
4849 NVPerfHUD = def_NVPerfHUD;
50+ RejectRTDC = def_RejectRTDC;
4951
5052 DisableDriverManagement = def_DisableDriverManagement;
5153
@@ -74,6 +76,7 @@
7476 if (oapiReadItem_int (hFile, "DisableDrvMgm", i)) DisableDriverManagement = i;
7577 if (oapiReadItem_int (hFile, "NearClipPlaneMode", i)) NearClipPlane = i;
7678 if (oapiReadItem_int (hFile, "NVPerfHUD", i)) NVPerfHUD = i;
79+ if (oapiReadItem_int (hFile, "RejectRTDC", i)) RejectRTDC = i;
7780
7881 oapiReadItem_string (hFile, "InSurfaceBlit", InSurface);
7982
@@ -98,6 +101,7 @@
98101 oapiWriteItem_int (hFile, "NearClipPlaneMode", NearClipPlane);
99102 oapiWriteItem_string (hFile, "InSurfaceBlit", InSurface);
100103 oapiWriteItem_int (hFile, "NVPerfHUD", NVPerfHUD);
104+ oapiWriteItem_int (hFile, "RejectRTDC", RejectRTDC);
101105
102106 oapiCloseFile (hFile, FILE_OUT);
103107 }
\ No newline at end of file
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Config.h
--- a/Orbitersdk/D3D9Client/D3D9Config.h Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Config.h Fri Jun 10 00:00:00 2011 +0200
@@ -19,6 +19,7 @@
1919 int DisableDriverManagement;
2020 int MemoryLogic;
2121 int NearClipPlane;
22+ int RejectRTDC;
2223 double PlanetMipmapBias; // LOD bias (-1=sharp ... +1=smooth)
2324 double VCNearPlane;
2425 int DebugLvl;
@@ -42,6 +43,7 @@
4243 static int def_MemoryLogic;
4344 static int def_DisableDriverManagement;
4445 static int def_NVPerfHUD;
46+ static int def_RejectRTDC;
4547 };
4648
4749 #endif // !__D3D9CONFIG_H
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Effect.cpp
--- a/Orbitersdk/D3D9Client/D3D9Effect.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Effect.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -13,6 +13,7 @@
1313 ID3DXEffect * D3D9Effect::FX = 0;
1414
1515 D3DXHANDLE D3D9Effect::ePanelTech = 0; // Used to draw a new style 2D panel like stock delta-glider
16+D3DXHANDLE D3D9Effect::ePanelTechB = 0; // Used to draw a new style 2D panel like stock delta-glider
1617 D3DXHANDLE D3D9Effect::eVesselTech = 0; // Vessel exterior, surface bases.
1718 D3DXHANDLE D3D9Effect::eBuildingTech = 0;
1819 D3DXHANDLE D3D9Effect::eSimple = 0;
@@ -138,6 +139,7 @@
138139 eSpotTech = FX->GetTechniqueByName("SpotTech");
139140 eShadowTech = FX->GetTechniqueByName("ShadowTech");
140141 ePanelTech = FX->GetTechniqueByName("PanelTech");
142+ ePanelTechB = FX->GetTechniqueByName("PanelTechB");
141143 eCloudTech = FX->GetTechniqueByName("PlanetCloudTech");
142144 eCloudShadow = FX->GetTechniqueByName("PlanetCloudShadowTech");
143145 eSkyDomeTech = FX->GetTechniqueByName("SkyDomeTech");
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Effect.h
--- a/Orbitersdk/D3D9Client/D3D9Effect.h Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Effect.h Fri Jun 10 00:00:00 2011 +0200
@@ -35,6 +35,7 @@
3535 static D3DXHANDLE eExhaust;
3636 static D3DXHANDLE eSpotTech;
3737 static D3DXHANDLE ePanelTech;
38+ static D3DXHANDLE ePanelTechB;
3839 static D3DXHANDLE eBaseTile;
3940 static D3DXHANDLE eRingTech;
4041 static D3DXHANDLE eShadowTech;
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Frame.cpp
--- a/Orbitersdk/D3D9Client/D3D9Frame.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Frame.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -182,6 +182,7 @@
182182 LogAlw("MaxStreamStride........: %u",caps.MaxStreamStride);
183183 LogAlw("MaxVertexBlendMatrices.: %u",caps.MaxVertexBlendMatrices);
184184 LogAlw("MaxVShaderInstrExecuted: %u",caps.MaxVShaderInstructionsExecuted);
185+ LogAlw("MaxPointSize...........: %f",caps.MaxPointSize);
185186 LogAlw("VertexShaderVersion....: 0x%hX",(caps.VertexShaderVersion&0xFFFF));
186187 LogAlw("PixelShaderVersion.....: 0x%hX",(caps.PixelShaderVersion&0xFFFF));
187188 LogAlw("NumSimultaneousRTs.....: %u",caps.NumSimultaneousRTs);
@@ -247,6 +248,16 @@
247248 if (bIsFullscreen) hr = CreateFullscreenMode();
248249 else hr = CreateWindowedMode();
249250
251+ D3DVIEWPORT9 vp;
252+ vp.X = 0;
253+ vp.Y = 0;
254+ vp.Width = dwRenderWidth;
255+ vp.Height = dwRenderHeight;
256+ vp.MinZ = 0.0f;
257+ vp.MaxZ = 1.0f;
258+
259+ pd3dDevice->SetViewport(&vp);
260+
250261 if (FAILED(hr)) {
251262 LogErr("[Device Initialization Failed]");
252263 oapiWriteLog("D3D9Client:FAIL: [Device Initialization Failed]");
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Pad.cpp
--- a/Orbitersdk/D3D9Client/D3D9Pad.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Pad.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -21,6 +21,7 @@
2121
2222 int nfcache = 0;
2323
24+oapi::Font *deffont = NULL;
2425
2526 // ======================================================================
2627 // class GDIPad
@@ -30,6 +31,8 @@
3031 {
3132 _TRACE;
3233
34+ LogOk("Creating D3D9 SketchPad...");
35+
3336 cfont = NULL;
3437 cpen = NULL;
3538 cbrush = NULL;
@@ -43,31 +46,36 @@
4346 halign = TA_LEFT;
4447 valign = TA_TOP;
4548
49+ textcolor = D3DXCOLOR(0,1,0,1);
50+ pencolor = D3DXCOLOR(0,1,0,1);
51+ brushcolor = D3DXCOLOR(0,1,0,1);
52+ bkcolor = D3DXCOLOR(0,0,0,1);
53+
4654 D3DXMatrixOrthoOffCenterLH(&mVP, 0.0f, (float)pTgt->GetWidth(), (float)pTgt->GetHeight(), 0.0f, 0.0f, 10.0f);
55+
56+ HR(FX->SetMatrix(eVP, &mVP));
4757
4858 if (pTgt->IsBackBuffer()==false) {
49- LogAlw("Creating a D3D9_Sketchpad for rendering target surface 0x%X",s);
59+ LogErr("Creating a D3D9_Sketchpad for rendering target surface 0x%X",s);
5060 if (pTgt->BindGPU()==false) {
5161 pTgt=NULL;
5262 LogErr("D3D9Pad creation failed");
5363 return;
5464 }
5565 }
56- //else LogAlw("Creating a D3D9_Sketchpad for BackBuffer 0x%X",s);
5766
58- deffont = new D3D9PadFont(18,true,"fixed");
59- cfont = (oapi::Font *)deffont;
67+ if (deffont==NULL) deffont = (oapi::Font*) new D3D9PadFont(18, true, "fixed");
6068
61- HR(FX->SetMatrix(eVP, &mVP));
69+ cfont = deffont;
6270 }
6371
6472
6573 D3D9Pad::~D3D9Pad ()
6674 {
6775 _TRACE;
68- delete deffont;
6976 if (pTgt) if (pTgt->IsBackBuffer()==false) pTgt->ReleaseGPU();
7077 pTgt = NULL;
78+ LogOk("...D3D9 SketchPad Released");
7179 }
7280
7381
@@ -75,7 +83,8 @@
7583 {
7684 _TRACE;
7785 Font *pfont = cfont;
78- cfont = font;
86+ if (font) cfont = font;
87+ else cfont = deffont;
7988 return pfont;
8089 }
8190
@@ -118,6 +127,7 @@
118127 D3DXCOLOR prev = textcolor;
119128 textcolor = D3DXCOLOR(col);
120129 D3DXCOLORSWAP(&textcolor);
130+ D3DXCOLORSWAP(&prev);
121131 return prev;
122132 }
123133
@@ -126,6 +136,7 @@
126136 D3DXCOLOR prev = bkcolor;
127137 bkcolor = D3DXCOLOR(col);
128138 D3DXCOLORSWAP(&bkcolor);
139+ D3DXCOLORSWAP(&prev);
129140 return prev;
130141 }
131142
@@ -192,20 +203,22 @@
192203 void D3D9Pad::LineTo (int x, int y)
193204 {
194205 if (cpen==NULL) return;
195- D3DXVECTOR4 line(float(cx), float(cy), float(origx+x), float(origy+y));
196- Lines(&line, 1);
206+ D3DXVECTOR3 pts[2];
207+ pts[0] = D3DXVECTOR3(float(cx), float(cy), 0.5f);
208+ pts[1] = D3DXVECTOR3(float(origx+x), float(origy+y), 0.5f);
209+ Lines(pts, 1);
197210 cx=origx+x; cy=origy+y;
198211 }
199212
200213 void D3D9Pad::Line (int x0, int y0, int x1, int y1)
201214 {
202215 if (cpen==NULL) return;
203-
204216 x0+=origx; y0+=origy;
205217 x1+=origx; y1+=origy;
206-
207- D3DXVECTOR4 line = D3DXVECTOR4( float(x0), float(y0), float(x1), float(y1) );
208- Lines(&line, 1);
218+ D3DXVECTOR3 pts[2];
219+ pts[0] = D3DXVECTOR3(float(x0), float(y0), 0.5f);
220+ pts[1] = D3DXVECTOR3(float(x1), float(y1), 0.5f);
221+ Lines(pts, 1);
209222 cx = x1; cy = y1;
210223 }
211224
@@ -235,25 +248,19 @@
235248 {
236249 if (cpen==NULL) return;
237250 LogErr("D3D9SketchPad: Polyline not implemented");
251+ /*
252+ D3DXVECTOR3 *pVert = new D3DXVECTOR3[(npt-1)*2];
253+
254+ for (int i=0;i<npt;i++) {
255+ pVert[i].x = pt[i].x, pVert[i].y = pt[i].y, pVert[i].z = 0.5f;
256+ }
257+ */
238258 }
239259
240260 // -----------------------------------------------------------------------------------------------
241261 //
242-void D3D9Pad::Lines(D3DXVECTOR4 *lines, int count)
262+void D3D9Pad::Lines(D3DXVECTOR3 *pVert, int count)
243263 {
244- D3DXVECTOR3 *pVert = new D3DXVECTOR3[count*2];
245-
246- for (int i=0,z=0;i<count;i++) {
247- pVert[z].x = lines[i].x;
248- pVert[z].y = lines[i].y;
249- pVert[z].z = 0.5f;
250- z++;
251- pVert[z].x = lines[i].z;
252- pVert[z].y = lines[i].w;
253- pVert[z].z = 0.5f;
254- z++;
255- }
256-
257264 UINT numPasses=0;
258265 HR(pDev->SetVertexDeclaration(pPositionDecl));
259266 HR(FX->SetTechnique(eLine));
@@ -263,7 +270,6 @@
263270 HR(pDev->DrawPrimitiveUP(D3DPT_LINELIST, count, pVert, sizeof(D3DXVECTOR3)));
264271 HR(FX->EndPass());
265272 HR(FX->End());
266- delete []pVert;
267273 }
268274
269275 // -----------------------------------------------------------------------------------------------
@@ -291,8 +297,7 @@
291297 FX->SetValue(eColor, &pencolor, sizeof(D3DXCOLOR));
292298 FX->CommitChanges();
293299 if (w<24 && h<24) pDev->DrawPrimitive(D3DPT_LINESTRIP, 1, 15);
294- else pDev->DrawPrimitive(D3DPT_LINESTRIP, 1, 63);
295-
300+ else pDev->DrawPrimitive(D3DPT_LINESTRIP, 1, 63);
296301 }
297302 FX->EndPass();
298303 FX->End();
@@ -311,10 +316,11 @@
311316 {-1.0f,-1.0f,0.5f}
312317 };
313318
319+
314320 D3DXVECTOR4 data(x, y, w*0.5f, h*0.5f);
315321 UINT numPasses=0;
316322 pDev->SetVertexDeclaration(pPositionDecl);
317- pDev->SetStreamSource(0, pRect, 0, sizeof(D3DXVECTOR3));
323+ //pDev->SetStreamSource(0, pRect, 0, sizeof(D3DXVECTOR3));
318324 FX->SetValue(eData, &data, sizeof(D3DXVECTOR4));
319325 FX->SetTechnique(eDraw);
320326 FX->SetValue(eColor, &brushcolor, sizeof(D3DXCOLOR));
@@ -338,6 +344,9 @@
338344 //
339345 void D3D9Pad::GlobalExit()
340346 {
347+ if (deffont) delete deffont;
348+ deffont = NULL;
349+
341350 for (int i=0;i<nfcache;i++) {
342351 if (fcache[i].pFont) delete fcache[i].pFont;
343352 if (fcache[i].hFont) DeleteObject(fcache[i].hFont);
@@ -391,6 +400,7 @@
391400
392401 // Initialize Rectangles -------------------------------------------------------------------------
393402 //
403+ /*
394404 if (pRect->Lock(0,0,(void **)&pVert,0)==S_OK) {
395405 pVert[0].x=-1.0f; pVert[0].y=-1.0f; pVert[0].z=0.5f;
396406 pVert[1].x=+1.0f; pVert[1].y=-1.0f; pVert[1].z=0.5f;
@@ -398,7 +408,7 @@
398408 pVert[3].x=-1.0f; pVert[3].y=+1.0f; pVert[3].z=0.5f;
399409 pVert[4].x=-1.0f; pVert[4].y=-1.0f; pVert[4].z=0.5f;
400410 pRect->Unlock();
401- }
411+ }*/
402412
403413 // Initialize Techniques -------------------------------------------------------------------------
404414 //
@@ -500,8 +510,6 @@
500510 if (orientation==0) hFont = fcache[i].hFont;
501511 }
502512
503- //if (pFont && hFont) return; // Both fonts found from cache
504-
505513 int weight = (style & BOLD ? FW_BOLD : FW_NORMAL);
506514 DWORD italic = (style & ITALIC ? TRUE : FALSE);
507515 DWORD underline = (style & UNDERLINE ? TRUE : FALSE);
@@ -543,7 +551,7 @@
543551 pFont->SetTextScale(1.0f);
544552 pFont->Init(&fnt, 255);
545553
546- if (orientation) pFont->SetRotation(float(orientation)*0.1f);
554+ if (orientation) pFont->SetRotation(float(orientation)*0.00174532f);
547555 else pFont->SetRotation(0.0f);
548556
549557 // Fill the cache --------------------------------
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Pad.h
--- a/Orbitersdk/D3D9Client/D3D9Pad.h Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Pad.h Fri Jun 10 00:00:00 2011 +0200
@@ -14,6 +14,8 @@
1414 * \brief The GDIPad class defines the context for 2-D drawing using
1515 * Windows GDI calls.
1616 */
17+
18+
1719 class D3D9Pad: public oapi::Sketchpad {
1820
1921 public:
@@ -55,7 +57,7 @@
5557
5658 void Ellipse2(float x, float y, float w, float h);
5759 void Rectangle2(float l, float t, float r, float b);
58- void Lines(D3DXVECTOR4 *lines, int count);
60+ void Lines(D3DXVECTOR3 *lines, int count);
5961
6062 D3DXMATRIX mVP;
6163
@@ -68,14 +70,14 @@
6870 mutable D3DXCOLOR brushcolor;
6971 mutable D3DXCOLOR bkcolor;
7072
71- class D3D9PadFont *deffont;
72-
7373 DWORD bkmode;
7474 DWORD halign, valign;
7575 int origx, origy, cx, cy;
7676
7777 D3D9ClientSurface *pTgt;
7878
79+ //static oapi::Font *deffont; //Won't work for some reason
80+
7981 static LPDIRECT3DDEVICE9 pDev;
8082 static LPDIRECT3DVERTEXBUFFER9 pCircleLow;
8183 static LPDIRECT3DVERTEXBUFFER9 pCircleHigh;
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Surface.cpp
--- a/Orbitersdk/D3D9Client/D3D9Surface.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Surface.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -15,35 +15,46 @@
1515 D3DXHANDLE D3D9ClientSurface::eTex0 = 0;
1616
1717
18+bool bX = false;
19+
1820 // -----------------------------------------------------------------------------------------------
1921 //
2022 HRESULT D3D9ClientSurface::GPUCopyRect(D3D9ClientSurface *src, LPRECT s, LPRECT t)
2123 {
24+ // ATTENTION: Must use texture address mode CLAMP
25+
2226 //if (this!=hCurrentTgt) {
2327 // hCurrentTgt = this;
2428 D3DXMATRIX mVP;
25- D3DXMatrixOrthoOffCenterRH(&mVP, 0.0f, (float)desc.Width, (float)desc.Height, 0.0f, -10.0f, 10.0f);
29+ D3DXMatrixOrthoOffCenterLH(&mVP, 0.0f, (float)desc.Width, (float)desc.Height, 0.0f, 0.0f, 1.0f);
2630 HR(FX->SetMatrix(eVP, &mVP));
2731 //}
28-
29- float w = 1.0f/(float)src->desc.Width;
30- float h = 1.0f/(float)src->desc.Height;
32+
33+ float w = 1.0f / float(src->desc.Width);
34+ float h = 1.0f / float(src->desc.Height);
3135 float qw = w*0.5f;
3236 float qh = h*0.5f;
3337 float lwq = s->left*w+qw;
34- float rwq = s->right*w-qw;
3538 float thq = s->top*h+qh;
36- float bhq = s->bottom*h-qh;
39+ float rwq = s->right*w+qw;
40+ float bhq = s->bottom*h+qh;
3741
3842 SMVERTEX Vertex[4] = {
39- {(float)t->left, (float)t->top, 0, lwq, thq},
40- {(float)t->left, (float)t->bottom, 0, lwq, bhq},
41- {(float)t->right, (float)t->bottom, 0, rwq, bhq},
42- {(float)t->right, (float)t->top, 0, rwq, thq}
43+ {float(t->left), float(t->top), 0, lwq, thq},
44+ {float(t->left), float(t->bottom), 0, lwq, bhq},
45+ {float(t->right), float(t->bottom), 0, rwq, bhq},
46+ {float(t->right), float(t->top), 0, rwq, thq}
4347 };
4448
45- WORD Index[6] = {0,2,1,0,3,2};
46-
49+ static WORD Index[6] = {0,2,1,0,3,2};
50+
51+ //LogErr("GPU 0x%X (%s) (%d,%d,%d,%d) (%d,%d) (%d,%d)", this, name, t->left, t->top, t->right, t->bottom, s->left, s->right, src->desc.Width, src->desc.Height);
52+
53+ /*if (src->desc.Width==1920 && bX==false && oapiGetSimTime()>10.0) {
54+ D3DXSaveTextureToFile("Image.bmp",D3DXIFF_BMP, src->pTex, NULL);
55+ bX = true;
56+ }*/
57+
4758 UINT numPasses = 0;
4859
4960 HR(pDevice->SetVertexDeclaration(pPosTexDecl));
@@ -102,6 +113,7 @@
102113 bDCOpen = false;
103114 bCopy = false;
104115 bNoGDI = false;
116+ bDispWrn = true;
105117 pDevice = NULL;
106118 Creation = 0;
107119 wfact = 1.0f;
@@ -139,7 +151,6 @@
139151 bool D3D9ClientSurface::BindGPU()
140152 {
141153
142-
143154 if (pRTS==NULL) if (D3DXCreateRenderToSurface(pDevice, desc.Width, desc.Height, desc.Format, false, D3DFMT_UNKNOWN, &pRTS)!=S_OK) {
144155 pRTS=NULL;
145156 LogErr("D3D9ClientSurface::BindGPU() Failed");
@@ -337,6 +348,16 @@
337348
338349 // -----------------------------------------------------------------------------------------------
339350 //
351+bool D3D9ClientSurface::IsPowerOfTwo() const
352+{
353+ DWORD w = desc.Width, h = desc.Height;
354+ for (int i=0;i<14;i++) if ((w&1)==0) w=w>>1; else { if (w!=1) return false; else break; }
355+ for (int i=0;i<14;i++) if ((h&1)==0) h=h>>1; else { if (h!=1) return false; else break; }
356+ return true;
357+}
358+
359+// -----------------------------------------------------------------------------------------------
360+//
340361 void D3D9ClientSurface::ConvertToGDI()
341362 {
342363 if (pSurf && Creation==D3D9C_SURFACE && bNoGDI==false) {
@@ -473,11 +494,12 @@
473494 }
474495
475496
497+
476498 // -----------------------------------------------------------------------------------------------
477499 //
478500 void D3D9ClientSurface::CopyRect(D3D9ClientSurface *src, LPRECT s, LPRECT t, UINT ck)
479501 {
480- //_TRACER;
502+ _TRACER;
481503 bCopy = true;
482504 bool bRestart = true;
483505
@@ -487,8 +509,23 @@
487509 DWORD TgtHeight = t->bottom - t->top;
488510
489511 if (Width==0 || Height==0 || TgtWidth==0 || TgtHeight==0) return;
490- if (s->right > (long)src->desc.Width || s->bottom > (long)src->desc.Height) return;
491- if (t->right > (long)desc.Width || t->bottom > (long)desc.Height) return;
512+ //if (s->right > (long)src->desc.Width || s->bottom > (long)src->desc.Height) return;
513+
514+ if (t->left > (long)desc.Width || t->top > (long)desc.Height) return;
515+ if (t->right < 0 || t->bottom < 0) return;
516+
517+ //bool bGPU = false;
518+ //if (t->left<0 || t->top<0) bGPU = true;
519+ //if (t->right>(long)desc.Width || t->bottom>(long)desc.Height) bGPU = true;
520+
521+ /*
522+ if (Width==TgtWidth && Height==TgtHeight) {
523+ if (t->left<0) { Width -= abs(t->left), s->left += abs(t->left), t->left=0; }
524+ if (t->top<0) { Height -= abs(t->top), s->top += abs(t->top), t->top=0; }
525+ TgtWidth=Width;
526+ TgtHeight=Height;
527+ }*/
528+
492529
493530
494531 // Do some failure tests ------------------------------------------------------
@@ -502,7 +539,6 @@
502539
503540 // Special ------------------------------
504541 //
505-
506542 if (src->desc.Format == D3DFMT_R32F) {
507543 LogErr("PrintScatter");
508544 GPUCopyRect(src, s, t);
@@ -515,6 +551,8 @@
515551 return;
516552 }
517553
554+
555+
518556 if (FX) {
519557
520558 // Special Handler for colorkeyed blitting =====================================================================================
@@ -524,7 +562,10 @@
524562
525563 if (Purpose&D3D9P_BACKBUF) {
526564 if (src->pTex==NULL) src->ConvertToRenderTargetTexture();
527- if (src->pTex) if (GPUCopyRect(src, s, t)==S_OK) goto exit_ok;
565+ if (src->pTex) if (GPUCopyRect(src, s, t)==S_OK) {
566+ LogOk("GPU ColorKey Blitting 0x%X (%s) -> 0x%X (%s) (%u,%u)", src, src->name, this, name, Width, Height);
567+ goto exit_ok;
568+ }
528569 LogWrn("Invalid Source Surface in ColorKeyed Blit");
529570 }
530571 else {
@@ -559,13 +600,15 @@
559600 mViewPort.Y = 0;
560601 mViewPort.Width = desc.Width;
561602 mViewPort.Height = desc.Height;
562- mViewPort.MinZ = -10.0f;
563- mViewPort.MaxZ = 10.0f;
603+ mViewPort.MinZ = 0.0f;
604+ mViewPort.MaxZ = 1.0f;
564605
565606 HR(pRTS->BeginScene(pTgtSurf, &mViewPort));
566607 GPUCopyRect(src, s, t);
567608 HR(pRTS->EndScene(D3DX_FILTER_NONE));
568609
610+ LogOk("GPU ColorKey_2 Blitting 0x%X (%s) -> 0x%X (%s) (%u,%u)", src, src->name, this, name, Width, Height);
611+
569612 if (pTgtSurf) pTgtSurf->Release();
570613 goto exit_ok;
571614 }
@@ -576,8 +619,11 @@
576619 // Use GPU to blit textures =====================================================================================
577620 //
578621 if (Purpose&D3D9P_BACKBUF) {
579- if (src->pTex && src->desc.Pool==D3DPOOL_DEFAULT && desc.Format!=src->desc.Format) {
580- if (GPUCopyRect(src,s,t)==S_OK) goto exit_ok;
622+ if ((src->pTex && src->desc.Pool==D3DPOOL_DEFAULT && desc.Format!=src->desc.Format)) {
623+ if (GPUCopyRect(src,s,t)==S_OK) {
624+ LogOk("GPU ColorKey_3 Blitting 0x%X (%s) -> 0x%X (%s) (%u,%u)", src, src->name, this, name, Width, Height);
625+ goto exit_ok;
626+ }
581627 }
582628 }
583629 }
@@ -627,16 +673,23 @@
627673 else pSrc = src->pSurf;
628674
629675 if (pDevice->UpdateSurface(pSrc,s,pTgt,&p)==S_OK) {
676+ LogOk("UpdateSurface 0x%X (%s) -> 0x%X (%s) (%u,%u)", src, src->name, this, name, Width, Height);
630677 if (pTex) pTgt->Release();
631678 if (src->pTex) pSrc->Release();
632679 goto exit_ok;
633680 }
634681 else {
682+ // This code section is required by 2DPanel MFDs when a 4x AA is enabled.
683+ //
635684 if (Purpose&D3D9P_BACKBUF) {
636685 src->ConvertToDynamicTexture();
637- if (GPUCopyRect(src,s,t)==S_OK) goto exit_ok;
686+ if (GPUCopyRect(src,s,t)==S_OK) {
687+ LogOk("GPU ColorKey_4 Blitting 0x%X (%s) -> 0x%X (%s) (%u,%u)", src, src->name, this, name, Width, Height);
688+ goto exit_ok;
689+ }
638690 }
639691 }
692+
640693 LogErr("UpdateSurface Failed");
641694 if (pTex) pTgt->Release();
642695 if (src->pTex) pSrc->Release();
@@ -668,6 +721,7 @@
668721 else pSrc = src->pSurf;
669722
670723 if (pDevice->StretchRect(pSrc, s, pTgt, t, D3DTEXF_POINT)==S_OK) {
724+ LogOk("StretchRect 0x%X (%s) -> 0x%X (%s) (%u,%u)", src, src->name, this, name, Width, Height);
671725 if (pTex) pTgt->Release();
672726 if (src->pTex) pSrc->Release();
673727 goto exit_ok;
@@ -693,7 +747,8 @@
693747 HDC hSrc = src->GetDC();
694748 HDC hTgt = GetDC();
695749 if (hSrc && hTgt) {
696- StretchBlt(hTgt, t->left, t->top, TgtWidth, TgtHeight, hSrc, s->left, s->top, Width, Height, SRCCOPY);
750+ StretchBlt(hTgt, t->left, t->top, TgtWidth, TgtHeight, hSrc, s->left, s->top, Width, Height, SRCCOPY);
751+ LogOk("GDI BLIT 0x%X (%s) -> 0x%X (%s) (%u,%u)", src, src->name, this, name, Width, Height);
697752 ReleaseDC(hTgt);
698753 src->ReleaseDC(hSrc);
699754 goto exit_ok;
@@ -715,7 +770,7 @@
715770 }
716771
717772 if (Type==D3D9S_PLAIN && desc.Pool==D3DPOOL_SYSTEMMEM && src->desc.Pool==D3DPOOL_DEFAULT) {
718- src->ConvertToGDI();
773+ src->ConvertToGDI();
719774 if (bRestart) { bRestart=false; goto restart_blit; }
720775 }
721776
@@ -724,13 +779,12 @@
724779 if (bRestart) { bRestart=false; goto restart_blit; }
725780 }
726781
727-
728782 error_report:
729783
730784 _SETLOG(5);
731785 LogErr("D3D9ClientSurface::CopyRect() Failed");
732- LogMsg("Source Rect (%u,%u,%u,%u) (w=%u,h=%u) HANDLE=0x%X (%s)",s->left,s->top,s->right,s->bottom, abs(s->left-s->right), abs(s->top-s->bottom), src, src->name);
733- LogMsg("Target Rect (%u,%u,%u,%u) (w=%u,h=%u) HANDLE=0x%X (%s)",t->left,t->top,t->right,t->bottom, abs(t->left-t->right), abs(t->top-t->bottom), this, name);
786+ LogMsg("Source Rect (%d,%d,%d,%d) (w=%u,h=%u) HANDLE=0x%X (%s)",s->left,s->top,s->right,s->bottom, abs(s->left-s->right), abs(s->top-s->bottom), src, src->name);
787+ LogMsg("Target Rect (%d,%d,%d,%d) (w=%u,h=%u) HANDLE=0x%X (%s)",t->left,t->top,t->right,t->bottom, abs(t->left-t->right), abs(t->top-t->bottom), this, name);
734788 LogSpecs("Target");
735789 src->LogSpecs("Source");
736790 _POPLOG;
@@ -744,6 +798,8 @@
744798 //
745799 bool D3D9ClientSurface::Fill(LPRECT rect, DWORD c)
746800 {
801+ _TRACER;
802+
747803 LPDIRECT3DSURFACE9 pTgt = pSurf;
748804 DWORD color = 0;
749805 LPRECT r;
@@ -758,7 +814,7 @@
758814
759815 bCopy = true;
760816 HDC hDC = GetDC();
761- if (hDC) {
817+ if (hDC) {
762818 color = RGB((c>>16)&0xFF, (c>>8)&0xFF, c&0xFF);
763819 HBRUSH hBrush = CreateSolidBrush((COLORREF)color);
764820 HGDIOBJ hOld = SelectObject(hDC, hBrush);
@@ -768,6 +824,7 @@
768824 ReleaseDC(hDC);
769825 bCopy = false;
770826 if (pTex) pTgt->Release();
827+ LogOk("GDI Fill 0x%X (%s) (%u,%u)", this, name, (r->right-r->left), (r->bottom-r->top));
771828 return true;
772829 }
773830 else {
@@ -786,6 +843,7 @@
786843 return false;
787844 }
788845 if (pTex) pTgt->Release();
846+ LogOk("ColorFill 0x%X (%s) (%u,%u)", this, name, (r->right-r->left), (r->bottom-r->top));
789847
790848 }
791849 return true;
@@ -803,20 +861,27 @@
803861 LogErr("DC is already open"); LogSpecs("Surface");
804862 goto exit_failed;
805863 }
864+
865+ //LogSpecs("Surface");
806866
807867 bDCOpen = true;
808868 HDC hDC = NULL;
809869
810-
811870 if (Purpose&D3D9P_BACKBUF) {
812- //LogErr("Acquiring DC for BackBuffer");
813871 if (pSurf->GetDC(&hDC)==S_OK) return hDC;
814872 goto exit_failed;
815873 }
816874
817875 if (Type==D3D9S_RTGTTEX || pRTS) { // Oh Shit... Acquiring a DC for rendering target surface
876+
877+ if (gc->Cfg()->RejectRTDC) {
878+ bDCOpen = false;
879+ return NULL;
880+ }
881+
882+ if (bDispWrn) LogWrn("Highly inefficient oapiGetDC() call for render target surface 0x%X (%s) (%dx%d)",this,name,desc.Width,desc.Height);
883+
818884 Purpose|=D3D9P_TGTGDI;
819- //LogWrn("Doing inefficient GDI drawing into a surface 0x%X (%u,%u)",this,desc.Width,desc.Height);
820885 LPDIRECT3DSURFACE9 pRTgt=NULL;
821886 HR(pTex->GetSurfaceLevel(0, &pRTgt));
822887 HR(pDevice->CreateOffscreenPlainSurface(desc.Width, desc.Height, desc.Format, D3DPOOL_SYSTEMMEM, &pTemp, NULL));
@@ -827,7 +892,9 @@
827892 }
828893
829894 if (Type==D3D9S_DUAL) { LogErr("Dual Texture in GetDC()"); LogSpecs("Surface"); goto exit_failed; }
830- if (Type==D3D9S_PLAIN && Creation==D3D9C_SURFACE && desc.Pool==D3DPOOL_DEFAULT && bNoGDI==false && desc.Height==desc.Width) ConvertToGDI();
895+ //if (Type==D3D9S_PLAIN && Creation==D3D9C_SURFACE && desc.Pool==D3DPOOL_DEFAULT && bNoGDI==false && desc.Height==desc.Width) ConvertToGDI();
896+ if (Type==D3D9S_PLAIN && Creation==D3D9C_SURFACE && desc.Pool==D3DPOOL_DEFAULT && bNoGDI==false) ConvertToGDI(); // THIS IS VITAL
897+ //if (Type==D3D9S_PLAIN && Creation==D3D9C_SURFACE && desc.Pool==D3DPOOL_DEFAULT && bNoGDI==false) ConvertToDynamicTexture();
831898
832899 if (pSurf) if (pSurf->GetDC(&hDC)==S_OK) return hDC;
833900 if (pTex) if (pTex->GetSurfaceLevel(0, &src)==S_OK) if (src->GetDC(&hDC)==S_OK) { return hDC; }
@@ -843,9 +910,36 @@
843910
844911 // -----------------------------------------------------------------------------------------------
845912 //
913+HDC D3D9ClientSurface::GetDCHard()
914+{
915+ IDirect3DSurface9 *src=NULL;
916+
917+ if (bDCOpen) {
918+ LogErr("DC is already open"); LogSpecs("Surface");
919+ goto exit_failed;
920+ }
921+
922+ bDCOpen = true;
923+ HDC hDC = NULL;
924+
925+ if (pSurf) if (pSurf->GetDC(&hDC)==S_OK) return hDC;
926+ if (pTex) if (pTex->GetSurfaceLevel(0, &src)==S_OK) if (src->GetDC(&hDC)==S_OK) { return hDC; }
927+
928+exit_failed:
929+
930+ LogErr("D3D9ClientSurface: GetDCHard() Failed");
931+ LogSpecs("Surface");
932+
933+ bDCOpen=false;
934+ return NULL;
935+}
936+
937+
938+// -----------------------------------------------------------------------------------------------
939+//
846940 void D3D9ClientSurface::ReleaseDC(HDC hDC)
847941 {
848- _TRACE;
942+
849943 LPDIRECT3DSURFACE9 src;
850944
851945 if (bDCOpen==false) {
@@ -855,7 +949,11 @@
855949 }
856950 else bDCOpen = false;
857951
858-
952+ if (Type==D3D9S_RTGTTEX && bDispWrn) {
953+ LogWrn("...Highly inefficient GDI drawing completed.");
954+ if (gc->Cfg()->DebugLvl < 3) bDispWrn=false;
955+ }
956+
859957 if (Purpose&D3D9P_BACKBUF) {
860958 //LogErr("Releasing Backbuffer DC");
861959 HR(pSurf->ReleaseDC(hDC));
@@ -982,6 +1080,7 @@
9821080 //
9831081 void D3D9ClientSurface::SetColorKey(DWORD ck)
9841082 {
1083+ if (ck==0) ck=0xFF000000;
9851084 ColorKey = ck;
9861085 ClrKey = D3DXCOLOR(ColorKey);
9871086 }
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Surface.h
--- a/Orbitersdk/D3D9Client/D3D9Surface.h Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Surface.h Fri Jun 10 00:00:00 2011 +0200
@@ -73,6 +73,7 @@
7373 bool IsTexture() const { return ((Type==D3D9S_TEXTURE) || (Type==D3D9S_DYNAMIC)); }
7474 bool IsPlainSurface() const { return (Type==D3D9S_PLAIN); }
7575 bool IsRenderTarget() const { return (Type==D3D9S_TARGET); }
76+ bool IsPowerOfTwo() const;
7677
7778 LPDIRECT3DTEXTURE9 GetTexture();
7879 LPDIRECT3DDEVICE9 GetDevice() { return pDevice; }
@@ -87,7 +88,8 @@
8788 void ConvertToDynamicTexture();
8889 void ConvertToRenderTargetTexture();
8990
90- HDC GetDC();
91+ HDC GetDC();
92+ HDC GetDCHard();
9193 void ReleaseDC(HDC);
9294
9395 void MakeBackBuffer(LPDIRECT3DSURFACE9);
@@ -119,6 +121,7 @@
119121 bool bDCOpen; //DC is Open. This is TRUE between GetDC() and ReleaseDC() calls.
120122 bool bCopy;
121123 bool bNoGDI;
124+ bool bDispWrn;
122125 DWORD Refs;
123126 DWORD Type;
124127 int Initial;
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Util.cpp
--- a/Orbitersdk/D3D9Client/D3D9Util.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Util.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -238,15 +238,15 @@
238238 {
239239 // Calculate quaternion
240240 angle *= 0.5f;
241- D3DVALUE w = cosf(angle), sina = sinf(angle);
242- D3DVALUE x = sina * axis.x;
243- D3DVALUE y = sina * axis.y;
244- D3DVALUE z = sina * axis.z;
241+ float w = cosf(angle), sina = sinf(angle);
242+ float x = sina * axis.x;
243+ float y = sina * axis.y;
244+ float z = sina * axis.z;
245245
246246 // Rotation matrix
247- D3DVALUE xx = x*x, yy = y*y, zz = z*z;
248- D3DVALUE xy = x*y, xz = x*z, yz = y*z;
249- D3DVALUE wx = w*x, wy = w*y, wz = w*z;
247+ float xx = x*x, yy = y*y, zz = z*z;
248+ float xy = x*y, xz = x*z, yz = y*z;
249+ float wx = w*x, wy = w*y, wz = w*z;
250250
251251 rot->_11 = 1 - 2 * (yy+zz);
252252 rot->_12 = 2 * (xy+wz);
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/D3D9Util.h
--- a/Orbitersdk/D3D9Client/D3D9Util.h Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/D3D9Util.h Fri Jun 10 00:00:00 2011 +0200
@@ -12,54 +12,44 @@
1212 #include <d3dx9.h>
1313
1414
15-#define D3DVALUE float
16-
1715 extern char dbgline_jn[1024];
1816
17+/*
1918 #if defined(DEBUG) | defined(_DEBUG)
20- #ifndef _TRACE
21- #define _TRACE \
22- { \
23- LogMsg("%s Line:%d %s",__FILE__,__LINE__,__FUNCTION__); \
24- }
25- #endif
26-
27-#else
28- #ifndef _TRACE
29- #define _TRACE
30- #endif
31-#endif
32-
33-#if defined(DEBUG) | defined(_DEBUG)
34- #ifndef _TRACER
35- #define _TRACER { QueryPerformanceCounter((LARGE_INTEGER*)&qpcRef); LogMsg("[TRACE] %s Line:%d %s",__FILE__,__LINE__,__FUNCTION__); }
36- #endif
19+#ifndef _TRACE
20+#define _TRACE { LogMsg("%s Line:%d %s",__FILE__,__LINE__,__FUNCTION__); }
21+#endif
3722
38-#else
39- #ifndef _TRACER
40- #define _TRACER QueryPerformanceCounter((LARGE_INTEGER*)&qpcRef);
41- #endif
42-#endif
23+#ifndef _TRACER
24+#define _TRACER { QueryPerformanceCounter((LARGE_INTEGER*)&qpcRef); LogMsg("[TRACE] %s Line:%d %s",__FILE__,__LINE__,__FUNCTION__); }
25+#endif
4326
44-#if defined(DEBUG) | defined(_DEBUG)
45- #ifndef HR
46- #define HR(x) \
47- { \
48- HRESULT hr = x; \
49- if(FAILED(hr)) \
50- { \
51- sprintf_s(dbgline_jn,1024,"%s Line:%d Error:%d %s",__FILE__,__LINE__,hr,(#x)); \
52- LogErr("%s",dbgline_jn); \
53- MessageBoxA(NULL, dbgline_jn, "D3DX9 Error:",MB_OK); \
54- } \
55- }
56- #endif
27+#ifndef HR
28+#define HR(x) \
29+{ \
30+ HRESULT hr = x; \
31+ if(FAILED(hr)) \
32+ { \
33+ sprintf_s(dbgline_jn,1024,"%s Line:%d Error:%d %s",__FILE__,__LINE__,hr,(#x)); \
34+ LogErr("%s",dbgline_jn); \
35+ MessageBoxA(NULL, dbgline_jn, "D3DX9 Error:",MB_OK); \
36+ } \
37+}
38+#endif
39+*/
5740
58-#else
59- #ifndef HR
60- #define HR(x) x;
61- #endif
62-#endif
41+#ifndef _TRACE
42+#define _TRACE
43+#endif
44+
45+#ifndef _TRACER
46+#define _TRACER QueryPerformanceCounter((LARGE_INTEGER*)&qpcRef);
47+#endif
48+
49+#ifndef HR
50+#define HR(x) x;
51+#endif
52+
6353
6454 #define SURFACE(x) ((class D3D9ClientSurface *)x)
6555
@@ -220,30 +210,30 @@
220210 // Vertex formats
221211 // ------------------------------------------------------------------------------------
222212
223-struct VECTOR2D { D3DVALUE x, y; };
213+struct VECTOR2D { float x, y; };
224214
225-struct VERTEX_XYZ { D3DVALUE x, y, z; }; // transformed vertex
226-struct VERTEX_XYZH { D3DVALUE x, y, z, h; }; // untransformed vertex
227-struct VERTEX_XYZC { D3DVALUE x, y, z; D3DCOLOR col; }; // untransformed vertex with single colour component
228-struct VERTEX_XYZHC { D3DVALUE x, y, z, h; D3DCOLOR col; }; // transformed vertex with single colour component
215+struct VERTEX_XYZ { float x, y, z; }; // transformed vertex
216+struct VERTEX_XYZH { float x, y, z, h; }; // untransformed vertex
217+struct VERTEX_XYZC { float x, y, z; D3DCOLOR col; }; // untransformed vertex with single colour component
218+struct VERTEX_XYZHC { float x, y, z, h; D3DCOLOR col; }; // transformed vertex with single colour component
229219
230220
231221
232222 // untransformed lit vertex with texture coordinates
233223 struct VERTEX_XYZ_TEX {
234- D3DVALUE x, y, z;
235- D3DVALUE tu, tv;
224+ float x, y, z;
225+ float tu, tv;
236226 };
237227 #define FVF_XYZ_TEX ( D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0) )
238228
239229 // untransformed unlit vertex with two sets of texture coordinates
240230 struct VERTEX_2TEX {
241- D3DVALUE x, y, z, nx, ny, nz;
242- D3DVALUE tu0, tv0, tu1, tv1;
231+ float x, y, z, nx, ny, nz;
232+ float tu0, tv0, tu1, tv1;
243233 inline VERTEX_2TEX() {}
244234 //VERTEX_2TEX ()
245235 //{ x = y = z = nx = ny = nz = tu0 = tv0 = tu1 = tv1 = 0.0f; }
246- inline VERTEX_2TEX (D3DVECTOR p, D3DVECTOR n, D3DVALUE u0, D3DVALUE v0, D3DVALUE u1, D3DVALUE v1)
236+ inline VERTEX_2TEX (D3DVECTOR p, D3DVECTOR n, float u0, float v0, float u1, float v1)
247237 { x = p.x, y = p.y, z = p.z, nx = n.x, ny = n.y, nz = n.z;
248238 tu0 = u0, tv0 = v0, tu1 = u1, tv1 = v1; }
249239 };
@@ -251,17 +241,17 @@
251241
252242 // transformed lit vertex with 1 colour definition and one set of texture coordinates
253243 struct VERTEX_TL1TEX {
254- D3DVALUE x, y, z, rhw;
244+ float x, y, z, rhw;
255245 D3DCOLOR col;
256- D3DVALUE tu, tv;
246+ float tu, tv;
257247 };
258248 #define FVF_TL1TEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0) )
259249
260250 // transformed lit vertex with two sets of texture coordinates
261251 struct VERTEX_TL2TEX {
262- D3DVALUE x, y, z, rhw;
252+ float x, y, z, rhw;
263253 D3DCOLOR diff, spec;
264- D3DVALUE tu0, tv0, tu1, tv1;
254+ float tu0, tv0, tu1, tv1;
265255 };
266256 #define FVF_TL2TEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX2 | D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE2(1) )
267257
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/GDIPad.cpp
--- a/Orbitersdk/D3D9Client/GDIPad.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/GDIPad.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -15,6 +15,8 @@
1515
1616 GDIPad::GDIPad (SURFHANDLE s, HDC hdc): Sketchpad (s)
1717 {
18+ LogOk("Creating GDI SketchPad...");
19+
1820 hDC = hdc;
1921 hFont0 = NULL;
2022 cfont = NULL;
@@ -38,6 +40,8 @@
3840 if (hFont0) SelectObject (hDC, hFont0);
3941 if (cpen) SelectObject (hDC, GetStockObject (NULL_PEN));
4042 if (cbrush) SelectObject (hDC, GetStockObject (NULL_BRUSH));
43+
44+ LogOk("...GDI SketchPad Released");
4145 }
4246
4347 Font *GDIPad::SetFont (Font *font) const
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/HazeMgr.cpp
--- a/Orbitersdk/D3D9Client/HazeMgr.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/HazeMgr.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -210,7 +210,7 @@
210210 WORD HazeManager::Idx[HORIZON_NSEG*2+2];
211211 struct HazeManager::HVERTEX HazeManager::Vtx[HORIZON_NSEG*2];
212212 DWORD HazeManager::nIdx = HORIZON_NSEG*2+2;
213-D3DVALUE HazeManager::CosP[HORIZON_NSEG];
214-D3DVALUE HazeManager::SinP[HORIZON_NSEG];
213+float HazeManager::CosP[HORIZON_NSEG];
214+float HazeManager::SinP[HORIZON_NSEG];
215215
216216 LPD3D9CLIENTSURFACE HazeManager::horizon = 0;
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/HazeMgr.h
--- a/Orbitersdk/D3D9Client/HazeMgr.h Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/HazeMgr.h Fri Jun 10 00:00:00 2011 +0200
@@ -45,9 +45,9 @@
4545 static WORD Idx[HORIZON_NSEG*2+2];
4646 static DWORD nIdx;
4747 static struct HVERTEX {
48- D3DVALUE x,y,z;
48+ float x,y,z;
4949 DWORD dcol;
50- D3DVALUE tu, tv; } Vtx[HORIZON_NSEG*2];
50+ float tu, tv; } Vtx[HORIZON_NSEG*2];
5151 static float CosP[HORIZON_NSEG], SinP[HORIZON_NSEG];
5252 static LPD3D9CLIENTSURFACE horizon;
5353 };
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/Mesh.cpp
--- a/Orbitersdk/D3D9Client/Mesh.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/Mesh.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -711,7 +711,7 @@
711711 if (vP.y-(r*hf) > (h*vP.z)) return;
712712 if (vP.x-(r*wf) > (w*vP.z)) return;
713713
714- D3DMATERIAL9 *mat, *old_mat=NULL;
714+ D3DMATERIAL9 *mat, *old_mat = NULL;
715715 LPD3D9CLIENTSURFACE old_tex = NULL;
716716 LPD3D9CLIENTSURFACE Diffuse = NULL;
717717
@@ -728,11 +728,11 @@
728728 const D3D9Light *pLights = gc->GetScene()->GetLights();
729729
730730 if (pLights && nLights>0) {
731- HR(FX->SetValue(eLights, pLights, 12*sizeof(D3D9Light)));
732- HR(FX->SetInt(eLightCount, nLights));
731+ FX->SetValue(eLights, pLights, 12*sizeof(D3D9Light));
732+ FX->SetInt(eLightCount, nLights);
733733 }
734734 else {
735- HR(FX->SetInt(eLightCount, 0));
735+ FX->SetInt(eLightCount, 0);
736736 }
737737
738738 SetupFog(NULL, NULL);
@@ -1236,12 +1236,15 @@
12361236 UINT numPasses = 0;
12371237
12381238 if (alpha==1.0f) {
1239- HR(FX->SetTechnique(eSimple));
1239+ if (pTex->IsPowerOfTwo()) FX->SetTechnique(eSimple); // Opaque
1240+ else FX->SetTechnique(ePanelTechB); // Opaque
12401241 }
12411242 else {
1242- HR(FX->SetTechnique(ePanelTech));
1243+ HR(FX->SetTechnique(ePanelTech)); // Transparent
12431244 }
1244- HR(FX->SetFloat(eMix, scale));
1245+
1246+ //HR(FX->SetFloat(eMix, scale));
1247+
12451248 HR(FX->SetMatrix(eW, pW));
12461249 HR(FX->SetMatrix(eVP, pVP));
12471250 HR(FX->SetTexture(eTex0, pTex->GetTexture()));
diff -r eb02c6eeadfa -r 1bbf27697af0 Orbitersdk/D3D9Client/VVessel.cpp
--- a/Orbitersdk/D3D9Client/VVessel.cpp Mon Oct 24 14:41:06 2011 +0200
+++ b/Orbitersdk/D3D9Client/VVessel.cpp Fri Jun 10 00:00:00 2011 +0200
@@ -803,7 +803,7 @@
803803 //D3DXMatrixAffineTransformation(&T, 1.0f, &rf, &qr, NULL);
804804
805805 D3DMAT_RotationFromAxis (ax, (float)ds*rot->angle, &T);
806- D3DVALUE dx = D3DVAL(rot->ref.x), dy = D3DVAL(rot->ref.y), dz = D3DVAL(rot->ref.z);
806+ float dx = D3DVAL(rot->ref.x), dy = D3DVAL(rot->ref.y), dz = D3DVAL(rot->ref.z);
807807 T._41 = dx - T._11*dx - T._21*dy - T._31*dz;
808808 T._42 = dy - T._12*dx - T._22*dy - T._32*dz;
809809 T._43 = dz - T._13*dx - T._23*dy - T._33*dz;
Show on old repository browser