Goodluck!
------------------
------------------
My library has surfaces for primary and back buffer. When I change the mode I first release both the primary and back buffers, switch the mode, then finally create new primary and back buffer surfaces.
If I ignore the surfaces, and just switch the mode, not releasing and recreating the primary and back buffer, the program runs fine. I stripped the program down to the point where it does nothing but change the mode, so I am certain that the problem has to do with it... Namely the surfaces I believe.
Here is the code for changing the mode:
code:ARESULT AccessDisplay::SetDisplayMode(int nWidth, int nHeight, int nBPP) { if (m_pDDSPrimary != NULL) { m_pDDSPrimary->Release(); m_pDDSPrimary = NULL; } if (m_pDDSBuffer != NULL) { m_pDDSBuffer->Release(); m_pDDSBuffer = NULL; } if (m_pDD->SetDisplayMode(nWidth, nHeight, nBPP, 0, 0) != DD_OK) return AERROR; DDSURFACEDESC2 ddsd; ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; ddsd.dwBackBufferCount = 1; if (m_pDD->CreateSurface(&ddsd, &m_pDDSPrimary, NULL) != DD_OK) return AERROR; DDSCAPS2 ddscaps; ZeroMemory(&ddscaps, sizeof(ddscaps)); ddscaps.dwCaps = DDSCAPS_BACKBUFFER; if (m_pDDSPrimary->GetAttachedSurface(&ddscaps, &m_pDDSBuffer) != DD_OK) return AERROR; DDBLTFX ddbltfx; ZeroMemory(&ddbltfx, sizeof(ddbltfx)); ddbltfx.dwSize = sizeof(ddbltfx); ddbltfx.dwFillColor = 0; if (m_pDDSPrimary->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx) != DD_OK) return AERROR; if (m_pDDSBuffer->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx) != DD_OK) return AERROR; return AOK;}
Does anyone have any ideas as to what could be causing this?
[This message has been edited by Aeetes (edited December 06, 1999).]
------------------
Where's my Golden Fleece?