DirectDraw: сбой обрезки, если поверхность больше, чем задний буфер

Я пишу игровой движок для мобильных устройств и пытаюсь поддерживать несколько разрешений. Игровой мир может быть намного больше, чем экран, поэтому я использую клипер, чтобы создать окно просмотра мира.

У моего устройства разрешение 240x320. Когда я устанавливаю окно просмотра на 240x320 и мой мир на 240x320, все в порядке. Я могу без проблем перемещать мир за пределы экрана. Однако, когда мое окно просмотра 220x320, а мой мир 240x320, копирование завершается ошибкой с 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)

Перемещение поверхности за пределы экрана справа работает нормально, поверхность обрезается корректно.

Как я могу обрезать поверхности в моем заднем буфере, если поверхность больше, чем задний буфер?

заранее спасибо


person knight666    schedule 02.07.2010    source источник


Ответы (1)


Я действительно не знаю, правильно ли я (DirectDraw не используется в течение многих лет), но я предполагаю, что речь идет об отрицательном прямоугольнике отсечения. Поэтому, возможно, вам следует установить 0/0 в крайнее левое/верхнее положение, чтобы вы не получали отрицательные числа.

person InsertNickHere    schedule 02.07.2010
comment
Числа становятся отрицательными, потому что поверхность находится слева от заднего буфера. - person knight666; 02.07.2010