DirectDraw:如果surface大于backbuffer,则剪切失败

时间:2010-07-02 07:09:23

标签: c++ game-engine clipping directdraw

我正在为移动设备编写游戏引擎,我正在尝试支持多种分辨率。游戏世界可能比屏幕大得多,所以我使用剪切器在世界上创建一个视口。

我的设备分辨率为240x320。当我将视口设置为240x320而我的世界设置为240x320时,一切都很好。我可以毫无问题地在屏幕外滑动世界。但是,当我的视口是220x320且我的世界是240x320时,当表面移动到左侧屏幕之外时,blitting会因DDERR_INVALIDPARAMS而失败:

(09:02:06) - INFO - ERROR! DirectDraw: One or more of the passed parameters are incorrect. (DDERR_INVALIDPARAMS)
(09:02:06) - INFO - ERROR! Couldn't copy to screen. (RECT: -1, 0, 239, 320) (line 125 in file .\src\SurfaceDirectDraw.cpp)
(09:02:06) - INFO - Dimensions: (0, 0, 240, 320)
(09:02:06) - INFO - ERROR! DirectDraw: One or more of the passed parameters are incorrect. (DDERR_INVALIDPARAMS)
(09:02:06) - INFO - ERROR! Couldn't copy to screen. (RECT: -2, 0, 238, 320) (line 125 in file .\src\SurfaceDirectDraw.cpp)
(09:02:06) - INFO - Dimensions: (0, 0, 240, 320)
(09:02:06) - INFO - ERROR! DirectDraw: One or more of the passed parameters are incorrect. (DDERR_INVALIDPARAMS)
(09:02:06) - INFO - ERROR! Couldn't copy to screen. (RECT: -3, 0, 237, 320) (line 125 in file .\src\SurfaceDirectDraw.cpp)
(09:02:06) - INFO - Dimensions: (0, 0, 240, 320)

在右侧屏幕外移动表面工作正常,表面被正确剪裁。

当表面大于后缓冲器时,如何在背后缓冲器上剪切曲面?

提前致谢

1 个答案:

答案 0 :(得分:0)

我真的不知道我是否正确(DirectDraw多年未使用),但我猜它是关于负剪辑矩形。所以也许你应该将你的0/0设置为最左/上位置,这样你就不会得到负数。