DirectDraw 对象

  这部分内容包含DirectDraw 对象的信息及如何通过使用 IDirectDraw,IDirectDraw2及IDirectDraw4界面来操作。有以下内容:


什么是DirectDraw对象?

  DirectDraw对象是所有的DirectDraw应用程序的核心也是Direct3D应用程序的全部。 这是你创建的第一个对象,通过它创建以切有关联的对象。典型的如:你通过调用 DirectDrawCreate函数创建一个DirectDraw对象,要返回一个IDirectDraw界面。 如果你要使用一个不同的界面(如IDirectDraw4)来使用其提供的新特性,你可以对其进行查询。 (详见获得IDirectDraw4界面)另外,你可以创建多个DirectDraw对象,其中一个为系统安装的显示设备。

  DirectDraw对象表现显示设备及使用已创建支持的硬件加速。每一个独一无二的 DirectDraw对象都能操作显示设备并创建平面,调色板及剪切对象,这都依靠(或叫做:连接的) 创建他们的对象所决定的。例如:要创建一个平面,你可以调用IDirectDraw4::CreateSurface宏。 或者你为平面申请一个调色板,调用IDirectDraw4::CreatePalette宏。另外, IDirectDraw4界面也使用类似的宏来创建一个剪切对象。你可以一次创建多个DirectDraw对象。 最简单的例子就是在Windows95,Windows NT或更早的系统上使用两个监视器。虽然这些系统不支持双显示器, 但可是可以通过为每个显示设备写DirectDraw 硬件操作层(HAL)来实现。显示设备, Windows及GDI会认出你创建的默认DirectDraw对象。但他们无法辨认另一个, 独立的DirectDraw对象能通过使用第二个显示设备的全局单一描述符 (Globally unique identifier GUID)来创建。这个GUID可以通过DirectDrawEnumerate函数来实现。

  DirectDraw对象管理所有它创建的对象。它控制默认调色板 (如果主平面是8-bits-per-pixel模式),默认色键,及硬件显示模式。 它追踪已使用的资源及未使用的资源。


IDirectDraw4中的新功能

  这部分介绍了IDirectDraw4界面提供的新的特性及它是如何比以前老界面 IDirectDraw2表现得更好(并没有IDirectDraw3界面)。有以下的主题:

  老界面与IDirectDraw4的最大区别在于它是如何与平面工作的及如何通过界面自动提供的平面来操作他们。 所有新界面中与平面有关的宏的参数都与以前版本中该宏的参数有轻微改变。不管怎样,一个IDirectDraw2 界面的宏可能允许一个DDSURFACEDESC结构或返回给一个IDirectDrawSurface3界面, IDirectDraw4宏允许一个DDSURFACEDESC2结构及返回给IDirectDrawSurface4界面来替代。

  另一个改变是IDirectDraw4开创了以子对象的DirectDraw父对象来改变其活动时间 (译者按:在这里用的活动时间原文为Lifetime,暂时译), 详见父对象及子对象的活动时间。

IDirectDraw4的新特性

获得一个IDirectDraw4界面

DirectX创建指定的对象构件模型(COM)通过新界面提供新功能,并向下兼容。 出于这个目标,IDirectDraw4界面替代了IDirectDraw2界面。这个新的界面可以通过 IUnknown::QueryInterface宏来获得,就象以下C++例程:


// Create an IDirectDraw4 interface.  创建一个IDirectDraw4界面。

LPDIRECTDRAW  lpDD; 
LPDIRECTDRAW4 lpDD4; 
 
ddrval = DirectDrawCreate(NULL, &lpDD, NULL); 
if(ddrval != DD_OK) 
    return; 
 
ddrval = lpDD->SetCooperativeLevel(hwnd, 
    DDSCL_NORMAL); 
if(ddrval != DD_OK) 
    return; 
 
ddrval = lpDD->QueryInterface(IID_IDirectDraw4, 
    (LPVOID *)&lpDD4); 
if(ddrval != DD_OK) 
    return; 

  以上的例程创建一个DirectDraw对象,然后调用IUnknown::QueryInterface 宏用被承认的IDirectDraw界面来创建一个IDirectDraw4界面。

  在获得一个IDirectDraw4界面后,你便可以调用其宏来充分发挥其新特性, 改进性能及修改。因为一些宏可能在新界面中有所改变,混合不同界面的宏 (例如:IDirectDraw2与IDirectDraw4)会导致不可预见的结果。


上篇|返回|下篇

Lucker 1999.2.25
E-Mail: fred_cai@kali.com.cn


云风工作室 制作