游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1205|回复: 1

关于DirectDraw的问题,请大虾们指点迷津

[复制链接]

17

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
QQ
发表于 2004-8-31 00:55:00 | 显示全部楼层 |阅读模式
请问高手们:
现在很多例子都是在FullScreen下的。有没有在窗口模式下的??
下面是对于主表面,背面,缓冲面的连接问题。也请高手指点指点小弟呀.
在全屏模式下是不是一般都是先创建主表面然后就是连接后缓冲接口??
代码如下:
LPDIRECTDRAWSURFACE7 lpDDSPrimary;        //主表面
LPDIRECTDRAWSURFACE7 lpDDSBack;        //背面
LPDIRECTDRAWSURFACE7 lpDDSOther;        //缓冲面

DDSURFACEDESC2 ddsd;
DDRAW_INIT_STRUCT(ddsd);
//ddsd.dwFlags = DDSD_CAPS;
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)))
{
        WriteToLog("创建主表面错误");
        return FALSE;
}//end if
//下面将连接后缓冲接口
ddsd.ddsCaps.dwCaps=DDSCAPS_BACKBUFFER;
if(FAILED(lpDDSPrimary->GetAttachedSurface(&ddsd.ddsCaps,&lpDDSBack)))
{
        WriteToLog("连接后缓冲接口错误");
        return FALSE;
}

这段代码没有错误。
      现在我的问题来了。如果是在全屏模式下可以用lpDDSPrimary->GetAttachedSurface(&ddsd.ddsCaps,&lpDDSBack);来连接后缓冲。
那么在窗口模式下是不是就不能连接后缓冲了呢?
我找了很多源码,结果发现里面居然用的是创建后缓冲,然后再Blt后缓冲到主表面去.是不是只能这样呢?为什么不用BltFast呢?还有没有别的方法呢?

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2004-9-1 13:54:00 | 显示全部楼层

Re:关于DirectDraw的问题,请大虾们指点迷津

只有独占模式下才支持双页面操作,窗口模式下不能用换页,也就是不能用你上边写的全屏模式下的绘图方法,你说的应该是将离屏页面的内容Blt到主表面吧 ,如果是这样,就只能用单个主页面的方法来显示.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-17 18:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表