Download presentation
Presentation is loading. Please wait.
Published byAlex Pullman Modified over 10 years ago
1
DirectDraw Technology CML Training Course 2001/07/24 Alex Ma
2
Outline DirectDraw Introduction DirectDraw Functionality –Setup –Surface –Rendering –Blitting –Flipping –Overlay
3
DirectDraw Introduction
4
Whats DirectDraw For Basic of the DirectX graphics Provide several simple methods to manipulate the display system
5
Before DirectDraw Windows Graphics Device Interface (GDI) –Font, pen, brush, basic shapes –Bitmap and more raster functions –Device independent Display Driver Interface (DDI)
6
Before DirectDraw
7
With DirectDraw Hardware Abstraction Layer (HAL) –Corresponds to the display system –Exercises hardware supports Hardware Emulation Layer (HEL) –Software emulation or hardware independent methods for specific functionalities
8
With DirectDraw
9
Direct access to the display hardware device with HAL/HEL supports DirectDraw is not much device- independent as GDI does HEL cant emulate everything
10
DirectDraw Functionality
11
Setup Enumerate DirectDraw devices BOOL WINAPI EnumDDrawDevice(GUID FAR *lpGUID, LPSTR lpDriverDescription,LPSTR lpDriverName, LPVOID lpContext) DirectDrawEnumerate(EnumDDrawDevice, (LPVOID)GetDlgItem(hWnd, IDC_DEVICE)) ;
12
Setup Create DirectDraw object LPDIRECTDRAWpDDraw ; DirectDrawCreate(&pDDraw) ;
13
Setup Set cooperative level pDDraw->SetCooperativeLevel(hWnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_NOWINDOWCHANGES) ;
14
Setup Enumerate video display mode BOOL WINAPI EnumDisplayModes(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext) pDDraw3->EnumDisplayModes(0, NULL, (LPVOID)GetDlgItem(hWnd, IDC_MODES), (LPDDENUMMODESCALLBACK)EnumDisplayModes) ;
15
Setup Set video display mode pDDraw->SetDisplayMode(Width,Height,PixelFormat) ;
16
Surface A memory buffer managed as a rectangle Surface type –Primary (display) –Off-screen –Overlay –Z-buffer and more
17
Surface DirectDraw surface descriptor typedef DDSURFACEDESC { LPVIODlpSurface DWORDdwHeight DWORDdwWidth LONGlPitch DDPIXELFORMATddpfPixelFormat … } ;
18
Surface Create surface LPDIRECTDRAWSURFACEpDDrawSurface ; DDSURFACEDESCddsd ; pDDraw3->CreateSurface(&ddsd, pDDrawSurface) ;
19
Surface Primary surface always exists, so do not assign size or format when calling CreateSurface to get primary surface pointer Use a large surface instead of several small surfaces for better memory management
20
Rendering Direct memory access // Fill the screen with white color WORD *vmem = (WORD *)ddsd.lpSurface for(DWORD y=0; y<ddsd.dwHeight; y++) { for(DWORD x=0; x<ddsd.dwWidth; x++) vmem[x] = 0xffff ; vmem += ddsd.lPitch/sizeof(WORD) ; }
21
Rendering Using GDI pDDrawSurface->GetDC(&hDC) ; // GDI functionality tests TextOut(hDC, 320, 0, msg, strlen(msg)) ; Ellipse(hDC, 300, 125, 400, 250) ; pDDrawSurface->ReleaseDC(hDC) ;
22
Rendering Access control pDDrawSurface->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL) ; // Rendering pDDrawSurface->UnLock(NULL) ;
23
Blitting Bit block transfer (Blit)
24
Blitting Using blitting pDDrawSurface->Blt(&destRect, pDDrawSource, &srcRect, DDBLT_WAIT, NULL) ; pDDrawSurface->BltFast(200, 240, pDDrawSource, NULL, DDBLTFAST_WAIT) ;
25
Blitting BltFast is a little bit fast than Blt when using HEL. If have hardware support, then there is no difference between them
26
Blitting Special effects –Filling –Transparency –Scaling –Mirroring –Rotation Use DDBLTFX structure to control
27
Blitting Example - mirroring DDBLTFXddbltfx ; memset(&ddbltfx, 0, sizeof(DDBLTFX)) ; ddbltfx.dwSize = sizeof(DDBLTFX) ; ddbltfx.dwDDFX = DDBLTFX_MIRRORLEFTRIGHT | DDBLTFX_MIRRORUPDOWN ; pDDrawSurface->Blt(NULL, pDDrawSource, NULL, DDBLT_DDFX, &ddbltfx) ;
28
Flipping Tearing problem
29
Flipping Using flipping pPrimarySurface->GetAttachedSurface(&pBackSurface) ; // Rendering on the back surface pBackSurface->Blt(&destRect, pDDrawSource, &srcRect, DDBLT_WAIT, NULL) ; pPrimarySurface->Flip(DDFLIP_WAIT) ;
30
Overlay Display a surface without changing the image data in the primary surface
31
Overlay Using overlay pDDraw3->CreateSurface(&ddsd, &pOverlaySurface) ; // Rendering pOverlaySurface->UpdateOverlay(&srcRect, pPrimarySurface, &destRect, DDOVER_SHOW) ;
32
Overlay Show/Hide overlay pOverlaySurface->UpdateOverlay(&srcRect, pPrimarySurface, &destRect, DDOVER_SHOW) ; pOverlaySurface->UpdateOverlay(NULL, pPrimarySurface, NULL, DDOVER_HIDE) ;
33
Discuss and Q&A Time
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.