2010-07-02 18 views
0

J'écris un moteur de jeu pour les appareils mobiles, et j'essaye de supporter plusieurs résolutions. Le monde du jeu peut être beaucoup plus grand que l'écran, donc j'utilise un clipper pour créer une fenêtre sur le monde.DirectDraw: L'écrêtage échoue si la surface est plus grande que le backbuffer

Mon périphérique a une résolution de 240x320. Quand je mets la viewport à 240x320 et mon monde à 240x320, tout va bien. Je peux faire glisser le monde en dehors de l'écran sans problèmes. Cependant, lorsque ma fenêtre est 220x320 et mon monde est 240x320, blitting échoue avec DDERR_INVALIDPARAMS lorsque la surface se déplace en dehors de l'écran sur la gauche:

(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) 

Déplacer la surface extérieure de l'écran à droite fonctionne très bien, la surface est découpé correctement.

Comment est-ce que je peux découper des surfaces sur mon backbuffer quand la surface est plus grande que le backbuffer?

Merci à l'avance

Répondre

0

je ne sais pas vraiment si im correct (DirectDraw pas utilisé pendant des années), mais je suppose que son sur le rect de coupure négative. Alors peut-être que vous devriez définir votre 0/0 à la position la plus à gauche/supérieure de sorte que vous n'obtenez pas de nombres négatifs.

+0

Les nombres vont dans le négatif parce que la surface est à la gauche du backbuffer. – knight666