![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DDSCL_EXCLUSIVE
Evgeniy_K © (2004-08-01 19:43:00)Почему система не хочет ставить DDSCL_EXCLUSIVE? При этом раньше работало, а щас нигде не работает, мол FFFFFF. Код уже на много раз прочесал, так и не нашел причину. Остальное все исправно работает.
Evgeniy_K (2004-08-03 19:09:00) [1]Если запускать не из Делфи:
Регистры:
EAX=00000000 CS=0000 EIP=00000000 EFLGS=00000000
EBX=00000000 SS=0000 ESP=00000000 EBP=00000000
ECX=00000000 DS=0000 ESI=00000000 FS=0000
EDX=00000000 ES=0000 EDI=00000000 GS=0000
Байты по адресу CS:EIP:
Содержимое стека:
Потом ошибка #216 at 0040372A
Evgeniy_K (2004-08-03 19:07:00) [2]
SpyError(
DirectDrawCreateEx(nil, GID, IDirectDraw7, nil),
'DirectDrawCreateEx');
if Windowed then begin
ZeroMemory(@ddsd, SizeOf(ddsd));
ddsd.dwSize:= SizeOf(ddsd);
GID.GetDisplayMode(ddsd);
ScreenBitDepth:= ddsd.ddpfPixelFormat.dwRGBBitCount;
SpyError(
GID.SetCooperativeLevel(WindowH, DDSCL_NORMAL), 'SetCooperativeLevel');
ZeroMemory(@ddsd, SizeOf(ddsd));
ddsd.dwSize:= SizeOf(ddsd);
ddsd.dwFlags:= DDSD_CAPS;
ddsd.ddsCaps.dwCaps:= DDSCAPS_PRIMARYSURFACE;
SpyError(
GID.CreateSurface(ddsd, GSurface, nil), 'Create GSurface');
SpyError(
CreateOSPSurface(BackSurface, 800, 600), 'Create BackSurface');
SpyError(
GID.CreateClipper(0, DClipper, nil), 'Set Clipper');
SpyError(
DClipper.SetHWnd(0, WindowH), 'Set SetHWnd');
end
else begin
//CORRECT DDRAW.DLL EXCEPTION!!!
SpyError(
GID.SetCooperativeLevel(WindowH, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN), 'SetCooperativeLevel');
SpyError(
GID.SetDisplayMode (ScreenWidth, ScreenHeight, ScreenBitDepth, 0, 0), 'SetDisplayMode');
ZeroMemory(@ddsd, SizeOf(ddsd));
with ddsd do begin
dwSize:= SizeOf(ddsd);
dwFlags:= DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
dwBackBufferCount:= 1;
ddsCaps.dwCaps:= DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
end;
SpyError(
GID.CreateSurface(ddsd, GSurface, nil), 'Create GSurface (Primary)');
ZeroMemory(@ddscaps, SizeOf(ddscaps));
ddscaps.dwCaps:= DDSCAPS_BACKBUFFER;
SpyError(
GSurface.GetAttachedSurface(ddscaps, BackSurface), 'Attached [BackSurface] Surface to [GSurface]');
end;
Вот, если Windowed, то работает. Иначе на всех машинах экзепшен FFFFFFFF, DDRAW.DLL
NikeOLD (2004-08-03 15:09:00) [3]
> Evgeniy_K (03.08.04 11:12) [6]
Проблема осталась?
Тогда полный код сюда
Evgeniy_K (2004-08-03 11:12:00) [4]Нет фуллскрин стоит. Тут в чем-то другом загвоздка...
parovoZZ (2004-08-02 12:19:00) [5]Ну раз раньше работало, то наверное не в этом дело. Хотя чем чёрт не шутит.
NikeOLD (2004-08-02 11:40:00) [6]DDSCL_EXCLUSIVE
Requests the exclusive level. This flag must be used with the DDSCL_FULLSCREEN flag.
Скоре всего забыл, что этот флаг работает только в полноэкранном режиме.
parovoZZ (2004-08-01 20:27:00) [7]Код в студию
Evgeniy_K (2004-08-01 20:18:00) [8]говорит, мол "обратилося по адресу FFFFFFFF" - по исполнению SetCooperative..
parovoZZ (2004-08-01 20:13:00) [9]А в чём сие проявляется?