|
|
发表于 2009-1-21 22:39:00
|
显示全部楼层
Re:新人的DDRAW的问题2!!
无论是什么 基本原理都是一样的
有了接口 可以建立一个带后备表面的主表面 然后给你的位图建立一个辅助表面 将位图的表面内容使用DD的方法Blit到辅助表面上 然后再把辅助表面的内容写到主表面上。。。
给你看一段代码吧 是一本书里的
//下面这段是建立一个有后备缓冲的主表面
DDRAW_INIT_STRUCT(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.dwBackBufferCount = 1;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
if (FAILED(lpdd->CreateSurface(&ddsd, &lpddsprimary, NULL)))
return(0);
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
if (FAILED(lpddsprimary->GetAttachedSurface(&ddsd.ddsCaps, &lpddsback)))
return(0);
以下是建立一个辅助表面
lpddsbackground = DDraw_Create_Surface(640,480,0,-1);
剩下的过程就是把位图使用类似于
UCHAR *dest_ptr = image_buffer; //目标的BUFFER
UCHAR *src_ptr = bitmap.buffer;//源BUFFER
memcpy((void *)image_buffer, (void *)bitmap.buffer, SCREEN_WIDTH*SCREEN_HEIGHT);
复制到那个辅助表面上。。。当然 这个过程还要考虑很多问题 比如步长是否相等之类的
建议你看一下一些相关的书籍 比如 那本 游戏编程大师技巧 讲的是比较详细的
|
|