IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Graphiques
        Comment accéder à la mémoire vidéo ?

rechercher
precedent    sommaire    suivant    telechargermiroir


Comment accéder à la mémoire vidéo ?
auteur : Cpl.Bator

Pour afficher un point il existe la commande Plot(), et la commande Point() pour lire sa valeur.

Ces deux fonctions sont suffisantes pour agir sur des petites surfaces, pour un traitement plus rapide il est nécessaire d'accéder directement à la mémoire vidéo.
Pour cela PureBasic est doté d'une série de commandes :


Finalement pour calculer l'adresse d'un pixel aux coordonnées (x,y) nous utilisons le calcul suivant :

AdressePixel = DrawingBuffer() + ( x * FormatPixel) + DrawingBufferPitch() * y

Avec FormatPixel valant 1, 2, 3 ou 4 selon la réponse de la commande DrawingBufferPixelFormat().

L'exemple qui suit n'est valable qu'en 32 bits. Dans le format 16 bits, il faudrait changer le mode de calcul de la couleur, et utiliser PokeW().

Remplissage en dégradé de l'écran :

InitSprite() 
InitKeyboard() 
OpenScreen(800,600,32,"") 
   
Repeat 
  ClearScreen(0) 
  ExamineKeyboard() 
        
  StartDrawing(ScreenOutput()) 
       
    *BufferVideo  = DrawingBuffer()            ; Adresse du buffer
    FormatPixel   = DrawingBufferPixelFormat() ; Format du pixel 
    LongueurLigne = DrawingBufferPitch()       ; Longueur en octets d'une ligne 
   
    Select FormatPixel 
      Case  #PB_PixelFormat_8Bits         : FormatPixel = 1   
      Case  #PB_PixelFormat_15Bits        : FormatPixel = 2   
      Case  #PB_PixelFormat_16Bits        : FormatPixel = 2   
      Case  #PB_PixelFormat_24Bits_RGB    : FormatPixel = 3   
      Case  #PB_PixelFormat_24Bits_BGR    : FormatPixel = 3   
      Case  #PB_PixelFormat_32Bits_RGB    : FormatPixel = 4   
      Case  #PB_PixelFormat_32Bits_BGR    : FormatPixel = 4   
    EndSelect 
    
    ;Mettre en dehors des boucles les constantes et autres calculs 
    #Rouge = 200 
    #Bleu  = 50     
    #Pas = 600.0/255.0 
    
    For y = 0 To 600-1
      ;Mettre ici ce qui change à chaque ligne
      *AdresseLigne = *BufferVideo + y * LongueurLigne ; Calcul l'adresse de la ligne y
      Vert = (y+1)/#Pas 
      
      ;Mettre le strict minimum dans cette boucle
      For x = 0 To 800-1  
        PokeL( *AdresseLigne, RGB(#Rouge, Vert,#Bleu)) 
        *AdresseLigne + FormatPixel ; Adresse du pixel suivant
      Next  
    Next  

  StopDrawing() 
  FlipBuffers() 
Until KeyboardPushed(#PB_Key_Escape)

rechercher
precedent    sommaire    suivant    telechargermiroir

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.