Menu

#22 pb affichage en mode overlay fenetré

open
nobody
None
5
2002-11-20
2002-11-20
bout block
No

Bonjour a tous, ceci est ma premičre contribution a ce
projet.

Voila, j'avais un pb avec k-tv 1.2.5.0 et précédentes en
mode fenetré qui n'affichait qu'un ecran noir alors qu'il
fonctionnait en mode fenétré plein ecran en overlay.
(Ma CG est une GeForce4200 Leadtekavec les drivers
40.72)
Alors je me suis permis de degugger votre soft. En voici
la correction dans le fichier ddraw.cpp :

static DWORD Affichage_Overlay_ColorMatch
(LPDIRECTDRAWSURFACE pdds, COLORREF rgb)
{
COLORREF rgbT;
HDC hdc;
DWORD dw = CLR_INVALID;
DDSURFACEDESC ddsd;
HRESULT hres;

//
// Now lock the surface so we can read back the
converted color
//
ddsd.dwSize = sizeof(ddsd);
hres = pdds->Lock(NULL, &ddsd, DDLOCK_WAIT,
NULL);
if (SUCCEEDED(hres))
{
//
// Use GDI SetPixel to color match for us
//
hres = pdds->GetDC(&hdc);
if (SUCCEEDED(hres))
{
rgbT = GetPixel(hdc, 0, 0); // Save current pixel value
SetPixel(hdc, 0, 0, rgb); // Set our value
pdds->ReleaseDC(hdc);

dw = *(DWORD *) ddsd.lpSurface; // Get DWORD
if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
{
dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) -
1; // Mask it to bpp
}
pdds->Unlock(NULL);

//
// Now put the color that was there back.
//
hres = pdds->GetDC(&hdc);
if (SUCCEEDED(hres))
{
SetPixel(hdc, 0, 0, rgbT);
pdds->ReleaseDC(hdc);
}
}
}

return dw;
}

Le pb est lié au fait que le lock rafrachissait l'écran et
ecrasait le pixel avant sa relecture en accčs direct pour
conversion.
Je n'en connais pas la cause mais cette modif corrige le
pb dans mon cas.

A++

Discussion


Log in to post a comment.

MongoDB Logo MongoDB