《Windows游戏编程大师技巧》中关于DirectDraw和创建DirectDraw知识笔记

 

1.DirectDraw 这可能是Directx中最重要的技术,因为它是2D图形赖以实现的渠道,也是Direct3D构建于其上的帧缓冲层。

2.DirectDraw是由很多借口组成的。共有5个接口


     I. IUnknown 所有COM对象都必须从这个基本借口派生,DirectDraw也不例外。IUnknown只包含Addref(),Release()和 QueryInterface() 三个函数,这些函数在其他接口中会被复写。


     II.  IDirectDraw 这是开始使用DirectDraw时必须创建的主接口对象。


     III. IDirectDrawSurface 这表示你用DirectDraw创建、控制和现实的实际显示表面。


     IIII. IDirectDrawPalette 支持以使用256或者更少的颜色在视频模式下处理调色板。


     V. IDirectDrawClipper 用于剪切DirectDraw光栅和位图操作到一些可见显示表面的子集。

 

《Windows游戏编程大师技巧》中关于DirectDraw和创建DirectDraw知识笔记_第1张图片

 

3.创建一个DirectDraw

 

     I. 创建主DirectDraw对象并使用 QueryInterface() 来得到一个IDirectDraw7接口,或者直接使用DirectDrawCreateEx()创建一个DirectDraw7接口。


     II. 使用IDirectDrawSurface7接口至少创建一个主显示表面用以绘图。


     III. 用IDirectDrawPalette接口创建一个色板,用RGB三元组初试化并配置到相关显示表面中。


     IIII. 如果DirectDraw应用程序要使用窗口,或者要减少位图以免溢出DirectDraw显示表面的可见边界,你至少需要创建一个裁剪器并将其尺寸设置为可见窗口的范围。


     V. 在主显示表面上绘图。

 

4创建DirectDraw对象的三种方法

 

    I. 利用 QueryInterface() 对版本经行升级

   

   LPDIRECTDRAW lpdd = NULL;
   LPDIRECTDRAW lpdd7 =NULL;
 
   if(FAILED(DirectDrawCreate(NULL,&lpdd,NULL)))
   {
         //error
    }
 
    if(FAILED(lpdd->QueryInterface(IID_IDirectDraw7,(LPVOID *)&lpdd7)))
    {
        //error
    }

 

    ps:接口标示符格式
          IID_IDirectCD
          其中字符C表示组件:Draw代表DirectDraw,Sound代表DirectSound,Input代表DirectInput,以此类推。字符D是一个从2~N的数字,代指你需要接口。

 

    II.调用底层的COM创建IDirectDraw7

 

  if(FAILED(CoInitialize(NULL)))
  {
	//error
  }
  if(FAILED(CoCreateInstance(&CLSID_DirectDraw,NULL,CLSCTX_All,&IID_IDirectDraw7,&lpdd7)))
  {
	//error
  }
  if(FAILED(IDirectDraw7_Initialize(lpdd7,NULL)))
  {
	//error
  }
  CoUninitialize();


    III.使用 DirectDrawCreateEx() 函数创建 IDirectDraw7

 

    LPDIRECTDRAW lpdd;
    DirectDrawCreateEx(NULL,(void *)&lpdd,IID_IDirectDraw7,NULL);




   

你可能感兴趣的:(C++,windows,学习,game,游戏编程)