Page 1 sur 1
Buffer !! Besoin d’éclaircissement [Résolu]
Publié : mar. 31/juil./2007 23:06
par Mytic
Bon… comme les commandes internes de dessin son pas aussi rapide que l’ont souhaite, je n’ai trouvé autre solution que d’utiliser le dessin directe sur buffer !
Mais franchement je n’y connais rien dessus
Alors si quelqu’un voudrait bien m’expliquer son fonctionnement et me donner des exemples simplifiés de son utilisation, ça serait vraiment sympa de sa part.
Car dans l’exemple qu’on a avec l’aide de PureBasic , c’est très sombre surtout les *Line.Pixel ,(y’a pas de déclarations ?!!!!)

Publié : mar. 31/juil./2007 23:14
par Ollivier
code
Publié : mar. 31/juil./2007 23:20
par Anonyme
Ollivier a écrit :code
Bon… comme les commandes internes de dessin son pas aussi rapide que l’ont souhaite, je n’ai trouvé autre solution que d’utiliser le dessin directe sur buffer ! Mais franchement je n’y connais rien dessus
Alors si quelqu’un voudrait bien m’expliquer son fonctionnement et me donner des exemples simplifiés de son utilisation, ça serait vraiment sympa de sa part.
Car dans l’exemple qu’on a avec l’aide de PureBasic , c’est très sombre surtout les *Line.Pixel ,(y’a pas de déclarations ?!!!!)
est ce que tu sais utilisé les pointeurs ? si c'est le cas, regarde l'exemple fourni avec pb (plasma.pb) sinon cherche le post pixel effect qui doit être en post it.
sinon, je peut essayé de t'expliqué demain

Publié : mer. 01/août/2007 2:59
par Mytic
Merci <Cpl.Bator> ça serait vraiment aimable de ta part
Publié : mer. 01/août/2007 8:35
par Anonyme
ok, pour faire simple , après chaque appel de Startdrawing(screenoutput())
il faut récupérer l'adresse de l'écran avec DrawingBuffer()
ex:
Code : Tout sélectionner
StartDrawing(ScreenOutput())
DB = DrawingBuffer()
DBP = DrawingBufferPixelFormat()
DrawingBufferPixelFormat() te renvois le format de codage, c'est important si ton écran est en 32,16,24,8 bits... , la mémoire ne sera pas de la même taille.
Code : Tout sélectionner
Select DBP
Case #PB_PixelFormat_8Bits : PF=1
Case #PB_PixelFormat_15Bits : PF=2
Case #PB_PixelFormat_16Bits : PF=2
Case #PB_PixelFormat_24Bits_RGB : PF=3
Case #PB_PixelFormat_24Bits_BGR : PF=3
Case #PB_PixelFormat_32Bits_RGB : PF=4
Case #PB_PixelFormat_32Bits_BGR : PF=4
EndSelect
Pour un écran en 32 bits , un pixel prend 4 octets , en 8 bits un octet ( ou un byte )
Ensuite comme nous disposont de l'adresse, du format, nous pouvons écrire sur l'écran via l'adresse avec pokel() :
PokeL(DB + (X * PF) + TAILLE_ECRAN_EN_X * ( Y * PF ) , Color )
ou
PokeL(DB + (x * PF) +DrawingBufferPitch()* ( Y ) , color )
X & Y represente les coordonées du pixel à afficher.
PF , c'est le format du pixel
TailleEcranenX , ben la variable parle d'elle même

color, remplace par rgb(r,g,b)
avec ca , tu devrais t'en sortir.

Publié : mer. 01/août/2007 8:37
par Polux
bien joué CPl

pas mieux

Publié : mer. 01/août/2007 8:57
par comtois
Je remplacerais TAILLE_ECRAN_EN_X par DrawingBufferPitch().
Selon la configuration de l'écran tu peux avoir TAILLE_ECRAN_EN_X différent de DrawingBufferPitch().
Publié : mer. 01/août/2007 9:44
par Backup
Cpl.Bator a écrit :
PokeL(DB + (X * PF) + TAILLE_ECRAN_EN_X * ( Y * PF ) , Color )
X & Y represente les coordonées du pixel à afficher.
PF , c'est le format du pixel
TailleEcranenX , ben la variable parle d'elle même

color, remplace par rgb(r,g,b)
avec ca , tu devrais t'en sortir.

j'utilisais ça moi c'est pas bon ?
Code : Tout sélectionner
adresse pixel= Drawingbuffer()+drawingbufferpitch()*y+x*codagepixel
??
en tout cas Merci pour la demonstration tres formatrice

Publié : mer. 01/août/2007 14:17
par Mytic
Merci < Cpl.Bator> c’est vraiment sympa de ta part

, enfin !!!!! je vais goûter à la vraie vitesse

Publié : mer. 01/août/2007 14:22
par ATHOW
Mes questions idiotes :
- Ca marche aussi avec un spriteOutput() à la place du screenOutput() ?
- Même si le sprite en question est en mode texture ?
(C'est pas que j'ai la flemme d'essayer, mais j'ai pas PB ici)
Publié : mer. 01/août/2007 14:27
par Mytic
Une autre petite question, pourquoi j’ai un saut qui dépasse le pixel en Y ?
Code : Tout sélectionner
InitSprite()
OpenScreen(640,480,32,"")
StartDrawing(ScreenOutput())
DB = DrawingBuffer()
DBP = DrawingBufferPixelFormat()
Color = RGB(0,255,0)
Select DBP
Case #PB_PixelFormat_8Bits : PF=1
Case #PB_PixelFormat_15Bits : PF=2
Case #PB_PixelFormat_16Bits : PF=2
Case #PB_PixelFormat_24Bits_RGB : PF=3
Case #PB_PixelFormat_24Bits_BGR : PF=3
Case #PB_PixelFormat_32Bits_RGB : PF=4
Case #PB_PixelFormat_32Bits_BGR : PF=4
EndSelect
For y = 0 To 100
For x = 0 To 100
;PokeL(DB + (X * PF) + TAILLE_ECRAN_EN_X * ( Y * PF ) , Color )
PokeL(DB + (X * PF) +DrawingBufferPitch() * ( Y * PF ) , Color )
Next x
Next y
StopDrawing()
FlipBuffers()
Delay(1000)
End
Publié : mer. 01/août/2007 17:11
par Mytic
Voilà j'ai trouvé la solution , il faut tout simplement enlever le PF dans ( Y * PF )
Code : Tout sélectionner
InitSprite()
OpenScreen(640,480,32,"")
StartDrawing(ScreenOutput())
DB = DrawingBuffer()
DBP = DrawingBufferPixelFormat()
Color = RGB(0,255,0)
Select DBP
Case #PB_PixelFormat_8Bits : PF=1
Case #PB_PixelFormat_15Bits : PF=2
Case #PB_PixelFormat_16Bits : PF=2
Case #PB_PixelFormat_24Bits_RGB : PF=3
Case #PB_PixelFormat_24Bits_BGR : PF=3
Case #PB_PixelFormat_32Bits_RGB : PF=4
Case #PB_PixelFormat_32Bits_BGR : PF=4
EndSelect
For y = 0 To 100
For x = 0 To 100
;PokeL(DB + (X * PF) + TAILLE_ECRAN_EN_X * ( Y * PF ) , Color )
PokeL(DB + (X * PF) +DrawingBufferPitch()* ( Y ) , Color )
Next x
Next y
StopDrawing()
FlipBuffers()
Delay(1000)
End
Publié : mer. 01/août/2007 18:14
par Anonyme
PokeL(DB + (X * PF) +DrawingBufferPitch() * ( Y * PF ) , Color )
c'est pas bon, ca fait une ligne sur deux a cause du DrawingBufferPitch()
il faut faire pour ton exemple :
PokeL(DB + (X * PF) + 640 * ( Y * PF ) , Color )
Code : Tout sélectionner
- Ca marche aussi avec un spriteOutput() à la place du screenOutput() ?
- Même si le sprite en question est en mode texture ?
- oui
- je pense que oui

Publié : mer. 01/août/2007 18:29
par Backup
.........