游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3282|回复: 4

请教 SwapChain问题

[复制链接]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2008-8-30 08:17:00 | 显示全部楼层 |阅读模式
用CreateAdditionalSwapChain建立了几个Swap,每个窗口各自使用其GetBackBuffer,窗口少时显示正常,但窗口多时,就出现显示花屏的现象,此时CPU占用几乎100%,机器反应缓慢,好像显卡驱动不工作了,完全采用软件模拟dx了。
sf_200883081637.png

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2008-8-30 08:18:00 | 显示全部楼层

Re:请教 SwapChain问题

而正常显示却不是这样的

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2008-8-30 08:26:00 | 显示全部楼层

Re:请教 SwapChain问题

另外有时还会出现,显示貌似正常,但纹理上多了一些斑点。若多次改变窗口大小,问题就会愈加严重。
窗口大小改变时,将swapchain先release掉,在重新创建。代码如下:
                D3DPRESENT_PARAMETERS d3dpp;
                memset(&d3dpp, 0, sizeof(d3dpp));
                d3dpp.BackBufferCount = 1;
                d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
                d3dpp.BackBufferWidth = rt.Width();
                d3dpp.BackBufferHeight = rt.Height();
                d3dpp.hDeviceWindow = m_hwnd;
                d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
                d3dpp.Windowed = true;
                d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
               
                hr = p3dDevice->CreateAdditionalSwapChain(&d3dpp, &m_pSwapChain);
                if(m_pSwapChain)
                {
                        hr = m_pSwapChain->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &m_pBack);
                        ASSERT(SUCCEEDED(hr) && m_pBack);
                }

                if(m_pBack)
                {
                        hr = p3dDevice->CreateDepthStencilSurface(d3dpp.BackBufferHeight,d3dpp.BackBufferWidth,
                                D3DFMT_D16, D3DMULTISAMPLE_NONE, 0, false, &m_pStencil, 0);
                        if(m_pStencil == NULL)
                        {
                                ASSERT(hr == D3DERR_OUTOFVIDEOMEMORY);
                        }       
                }

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2008-8-30 08:29:00 | 显示全部楼层

Re:请教 SwapChain问题

当只有几个窗口是,没有问题。
当窗口多了,就是swapchain多了以后,加上频繁改变窗口的大小,就是频繁进行swap释放、创建就出现问题了。


不知大家遇到这种情况没有,是不是MDI的dx实现方法不对,不能采用CreateAdditionalSwapChain方法。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-30 14:36:00 | 显示全部楼层

Re:请教 SwapChain问题

不知道你这个是谁的问题。不过显卡驱动对多个swapchain的支持大多不太好,bug相对比较多。所以最好只用一个swapchain来画多个窗口,当然大小必须是最大窗口的大小,对其他窗口设置viewport只用一部分。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 11:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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