游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12521|回复: 6

D3DSWAPEFFECT_DISCARD 疑惑

[复制链接]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-9-6 11:32:00 | 显示全部楼层 |阅读模式
D3DSWAPEFFECT_COPY,  D3DSWAPEFFECT_DISCARD,D3DSWAPEFFECT_FLIP有什么区别啊,假如我只创建了一个后备缓冲区,分别应用了上述三种交换方法,不知道具体有什么不同,我看SDK没有看太明白,小弟初学,见量. [em7]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-9-6 11:49:00 | 显示全部楼层

Re:D3DSWAPEFFECT_DISCARD 疑惑

上面的问题我是对D3DSWAPEFFECT_DISCARD的丢弃不太明白,反正我下一贞又要重新往后备缓冲区写东西,不管他不就行了吗,反正早晚都是覆盖,不知道这里丢弃是什么意思,难道还有其他作用,另外对其他两个也不是很了解

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-9-6 11:53:00 | 显示全部楼层

Re:D3DSWAPEFFECT_DISCARD 疑惑

还有一个问题, 我们在D3DPRESENT_PARAMETERS结构中填的时候有一个成员是窗口句丙HWND,当我们
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
创建一个设备的时候函数参数中也有一个窗口句丙,我想问下,这两个必须是同一个窗口吗,如果不是又会出现什么情况哪,我现在的想法是这个窗口就是我要输出画面的窗口,不知道具体是不是还有蹊跷,我看了SDK,没有看多明白

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-6 16:47:00 | 显示全部楼层

Re: D3DSWAPEFFECT_DISCARD 疑惑

假如是双缓冲,
COPY: swap时,拷贝后缓冲的内容到前缓冲,后缓冲的内容没有变换。
FLIP: swap时,交换指针,完成翻页。之后后缓冲的内容是前缓冲的内容。
DISCARD: 可能是COPY可能是FLIP,由设备来确定适合当前情况的方式。
叫DISCARD是因为既然不是你自己控制交换方式,显然你也不关心也不需要后缓冲的内容,所以每次交换完,后缓冲的内容就"丢弃"了,即不再管理。

SDK里说到了给不同句柄的情况:
When you create a Direct3D device, you supply two different window parameters: a focus window (hFocusWindow) and a device window (the hDeviceWindow in D3DPRESENT_PARAMETERS). The purpose of each window is:

The focus window alerts Direct3D when an application switches from foreground mode to background mode (via Alt-Tab, a mouse click, or some other method). A single focus window is shared by each device created by an application.
The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during IDirect3DDevice9:resent.

我试了下,改变CreateDevice的窗口句柄时,没有变化;
改变D3DPRESENT_PARAMETERS的,会在你指定的窗口里绘制,即使它不是焦点窗口。
如图:
sf_200796164649.jpg

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-9-6 19:51:00 | 显示全部楼层

Re:D3DSWAPEFFECT_DISCARD 疑惑

谢谢楼上,我明白了

0

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2007-9-16 08:21:00 | 显示全部楼层

Re: D3DSWAPEFFECT_DISCARD 疑惑

当需要实现一些特殊效果的时候可能需要多个缓冲区,然后将缓冲区当中的图形进行处理。这个时候就不能使用自动抛弃的方式进行创建。

5

主题

28

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2011-7-14 02:24:00 | 显示全部楼层

Re: D3DSWAPEFFECT_DISCARD 疑惑

转:
如果dest_window不是空,dest_window客户端区域就是present的Target。如果dest_window空而D3DPRESENT_PARAMETERS的hDeviceWindow不空,则hDeviceWindow就是present的Target。 如果两者都空,CreateDevice的focus_window参数将是present的target。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 15:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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