1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/*--------------------------------------------------------------------------------------------
Funktion: erzeugt das DDraw-Objekt + Primary Surface
--------------------------------------------------------------------------------------------*/
BOOL CDirectDraw::Init(WORD BB_Width,WORD BB_Height,WORD BB_Depth)
{
//DirectDraw7-Objekt erzeugen
if (FAILED(DirectDrawCreateEx(NULL,(VOID**)&Globals.m_lpDD7,IID_IDirectDraw7,NULL)))
{
return FALSE;
}
//Kooperationseben festlegen,FullScreen bzw. Fenstermodus
if(FAILED(Globals.m_lpDD7->SetCooperativeLevel(Globals.m_hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT)))
{
return FALSE;
}
//Bildschirmmodus setzen - nur fullscreen
if(FAILED(Globals.m_lpDD7->SetDisplayMode(BB_Width,BB_Height,BB_Depth,0,0)))
{
return FALSE;
}
//Primäre Oberfläche erzeugen
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(FAILED(Globals.m_lpDD7->CreateSurface(&ddsd,&m_lpFrontBuffer,NULL)))
{
return FALSE;
}
//Backbufferzeiger holen - nur Fullscreen
DDSCAPS2 ddsCaps;
ZeroMemory(&ddsCaps,sizeof(DDSCAPS2));
ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
if(FAILED(m_lpFrontBuffer->GetAttachedSurface(&ddsCaps, &Globals.m_lpBackBuffer)))
{
return FALSE;
}
Globals.m_iWidth = BB_Width;
Globals.m_iHeight = BB_Height;
//Clipper erzeugen
Globals.m_lpDD7->CreateClipper(0,&m_lpClipper,NULL);
m_lpClipper->SetHWnd(0,Globals.m_hWnd);
Globals.m_lpBackBuffer->SetClipper(m_lpClipper);
return TRUE;
}
|