ConfusedWhen a pen, brush or font is created as global or class wide there is no need to release it, the client will release it for you. Some cases there are no proper callback for a release to occur. Release will crash if you try to release graphics stuff after the graphics engine it-self been shutdown.
Don't use "Altantis::" when accessing variables.
skp->Text(x, 1, label, strlen(label));// Original Atlantis.cpp
void Atlantis::RedrawPanel_MFDButton (SURFHANDLE surf, int mfd)
{
HDC hDC = oapiGetDC (surf);
// D. Beachy: BUGFIX: if MFD powered off, cover separator lines and do not paint buttons
if (oapiGetMFDMode(mfd) == MFD_NONE) {
RECT r = { 0,0,255,13 };
FillRect(hDC, &r, (HBRUSH)GetStockObject(BLACK_BRUSH));
} else { // MFD powered on
HFONT pFont = (HFONT)SelectObject (hDC, g_Param.font[0]);
SetTextColor (hDC, RGB(0,255,216));
SetTextAlign (hDC, TA_CENTER);
SetBkMode (hDC, TRANSPARENT);
const char *label;
int x = 24;
for (int bt = 0; bt < 5; bt++) {
if (label = oapiMFDButtonLabel (mfd, bt)) {
TextOut (hDC, x, 1, label, strlen(label));
x += 42;
} else break;
}
TextOut (hDC, 234, 1, "PG", 2);
SelectObject (hDC, pFont);
}
oapiReleaseDC (surf, hDC);
}
void Atlantis::RedrawPanel_PANELRCSstatus(SURFHANDLE surf, int part)
{
char cbuf[20];
//oapi::Font* font1 = oapiCreateFont(50, true, "*Seven Segment");
oapi::Sketchpad* skp = oapiGetSketchpad(surf);
skp->SetFont(Atlantis:: font1);
skp->SetTextColor(0x0000FF);
skp->SetTextAlign(oapi::Sketchpad::LEFT);
sprintf(cbuf, "%2.0f", RCSQTY);
skp->Text(0, 100, cbuf, strlen(cbuf));
skp->Text(210, 100, cbuf, strlen(cbuf));
skp->Text(105, 100, cbuf, strlen(cbuf));
oapiReleaseSketchpad(skp);
}
void Atlantis::clbkPostCreation ()
{
oapi::Font* font1 = oapiCreateFont(50, true, "*Seven Segment");
oapi::Font* font2 = oapiCreateFont(40, true, "*Seven Segment");
oapi::Font* font3 = oapiCreateFont(-11, true, "Arial");
Here you assign the fonts to a local variables/pointers those doesn't exists beyond the clbkPostCreation();void Atlantis::clbkPostCreation () { oapi::Font* font1 = oapiCreateFont(50, true, "*Seven Segment"); oapi::Font* font2 = oapiCreateFont(40, true, "*Seven Segment"); oapi::Font* font3 = oapiCreateFont(-11, true, "Arial");
void Atlantis::clbkPostCreation ()
{
font1 = oapiCreateFont(50, true, "*Seven Segment");
font2 = oapiCreateFont(40, true, "*Seven Segment");
font3 = oapiCreateFont(-11, true, "Arial");
...
}
000000.000: D3D9: [Scene Initialized]
000000.000: Finished initialising panels
000032.877: D3D9: [Session Closed. Scene deleted.]
000032.877: D3D9: [Destroy Render Window Called]
D3D9: ERROR: [Failed to Reset DirectX Device] (Likely blocked by undeleted resources)
000032.877: **** Closing simulation session
000000.000: D3D9: [Scene Initialized]
000000.000: Finished initialising panels
000003.195: D3D9: [Session Closed. Scene deleted.]
000003.195: D3D9: [Destroy Render Window Called]
D3D9: ERROR: [Failed to Reset DirectX Device] (Likely blocked by undeleted resources)
000003.195: **** Closing simulation session
Like I said before this can be mostly ignored. The client is supposed to release all user resources that the user have forgotten to release. It could be a problem on a client side or maybe some add-on has forgotten to release a HDCThanks. I think i got her to work no ctd the log entry is this:
000000.000: D3D9: [Scene Initialized] 000000.000: Finished initialising panels 000003.195: D3D9: [Session Closed. Scene deleted.] 000003.195: D3D9: [Destroy Render Window Called] D3D9: ERROR: [Failed to Reset DirectX Device] (Likely blocked by undeleted resources) 000003.195: **** Closing simulation session
void Atlantis::clbkPostCreation ()
{
font1 = oapiCreateFont(50, true, "*Seven Segment");
font2 = oapiCreateFont(40, true, "*Seven Segment");
//font3 = oapiCreateFont(-11, true, "Arial");
font3 = oapiCreateFont(70, true, "Arial");
font4 = oapiCreateFont(25, true, "*Seven Segment");
I'm getting this in both logs at exit: [ERROR] Release(0xCF71440) Ref. count not zeroD3D9Client 4.23 is out.
There is a new beta uploaded. Since, it's almost a year from a previous "stable" release. Might be good idea to check that no major bugs CTD's exists to prevent running the client. So, that a new "stable" release could be made.
I have added some sanity checks in resource allocation/release to spot possible problems. For add-on developers it's recommended to check the Orbiter.log for errors.
- Terrain "vibration" should be fixed.