...............
...............
...............
Dernière modification par Backup le ven. 07/oct./2011 12:30, modifié 2 fois.
ca me plait pas de faire ca moi :s
je sais pas comment connaitre la hauteur de l'output avec la lib 2D Drawing
avec le pitch et le pixelformat on récupère facilement la largeur de la surface et aussi l'adresse mémoire de ces pixels... mais un clipping complet n'est pas possible et si on dépasse le y max de la surface on écrit dans de la mémoire qui n'est pas celle de l'output... Et ca c'est risqué...
Dri
PS. pas sûr d'avoir été clair là
je sais pas comment connaitre la hauteur de l'output avec la lib 2D Drawing
avec le pitch et le pixelformat on récupère facilement la largeur de la surface et aussi l'adresse mémoire de ces pixels... mais un clipping complet n'est pas possible et si on dépasse le y max de la surface on écrit dans de la mémoire qui n'est pas celle de l'output... Et ca c'est risqué...
Dri
PS. pas sûr d'avoir été clair là
l'autre topic a été viré, celui qui contenait la procedure... voila ce que j'avai à y dire :
sans même tester je suis sûr de deux choses
ta procédure est dangereuse
ta procédure n'est pas plus rapide
premierement tu ne teste pas si le startdrawing aboutit
deuxiemement pour chaque plot tu vas lancer un startdrawing et ca tu peux etre spûr que ca va ralentir si tu utilise plus d'un plot...
Dri
sans même tester je suis sûr de deux choses
ta procédure est dangereuse
ta procédure n'est pas plus rapide
premierement tu ne teste pas si le startdrawing aboutit
Code : Tout sélectionner
If StartDrawing(output) ;y'a pas que l'écran où on plot
dessiner
StopDrawing()
Endif
Code : Tout sélectionner
Procedure Plot(x, y, c)
*buffer = DrawingBuffer()
If *buffer
;récupérer les informations sur la surface
;convertir - si besoin est - la couleur
;*pointer vers l'adresse pour écrire la couleur
EndIf
EndProcedure
le forum m'avais cree un autre topic avec le mem sujet qui etait plus a jour
dans lequel j'utilisait la resolution de l'ecran exact
(je comprend pas se qui c'est passé !!)
j'ai effacé l'autre topic
bon voici ma conclusion apres moult essai !!
c'est pas la peine de se prendre la tete les pokel sont pas plus rapide que le plot !!
donc on oublie !!!
dans lequel j'utilisait la resolution de l'ecran exact
(je comprend pas se qui c'est passé !!)
j'ai effacé l'autre topic
bon voici ma conclusion apres moult essai !!
c'est pas la peine de se prendre la tete les pokel sont pas plus rapide que le plot !!


donc on oublie !!!

oui Dr DRI tu as raison sur toute la ligne
les startdrawings a chaque boucle c'est parceque j'ai pas reflechi , quand je recherche je suis tres brouillon !!
je programme avec mes doigts pas ma tete !
bon je clos ce topic !! c'etait une reflexion , je pensais avoir trouvé un truc interressant , mais en faite non !! Merci pour ton aide

les startdrawings a chaque boucle c'est parceque j'ai pas reflechi , quand je recherche je suis tres brouillon !!

je programme avec mes doigts pas ma tete !

bon je clos ce topic !! c'etait une reflexion , je pensais avoir trouvé un truc interressant , mais en faite non !! Merci pour ton aide

si tu fait
apres un
tu a l'adresse de debut de ta memoire ecran en cours .. 
je te reposte ce que j'avais fait apres !!
Code : Tout sélectionner
AdresseMemoire = DrawingBuffer(); recup l'adresse video
Code : Tout sélectionner
StartDrawing( ScreenOutput())

je te reposte ce que j'avais fait apres !!
Code : Tout sélectionner
#dobro=1
#Police=1
#Sprite=1
Declare plo(x,y,coul)
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
WindowID = OpenWindow(1, 0, 0, EcranX, EcranY, #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "hello")
Global EcranX,EcranY
WindowID = WindowID(1)
Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
Resultat = InitMouse()
Repeat
ExamineMouse()
event=WindowEvent()
couleur=$FFFF00
; ;avec ma fonction
StartDrawing( ScreenOutput())
For y=0 To EcranY
For x=0 To EcranX
plo(x,y,couleur) ; appel de la procedure
Next x
FlipBuffers(60):; affiche l'ecran
Next y
StopDrawing()
; ; avec plot
; StartDrawing( ScreenOutput())
; For y=0 To EcranY
; For x=0 To EcranX
; event=WindowEvent()
; Plot(x,y,couleur) ; appel de la procedure
; Next x
; FlipBuffers(85):; affiche l'ecran
; Next y
; StopDrawing()
FlipBuffers():; affiche l'ecran
ClearScreen(0, 0, 0) :;efface l'ecran
Until event=#PB_Event_CloseWindow
Procedure plo(x,y,coul)
event=WindowEvent()
AdresseMemoire = DrawingBuffer(); recup l'adresse video
PokeL(AdresseMemoire+(x*4)+EcranX*(y*4),coul)
; on multiplie par 4 car nous somme en 32 bit
;Box(105, 105,2, 2 ,RGB(255,255,255)) ; box de veriffication decalé expres de 1 pixel
EndProcedure
t'inquiete pas pour moi ^^Le type à la guitarre a écrit :si tu faitapres unCode : Tout sélectionner
AdresseMemoire = DrawingBuffer(); recup l'adresse video
tu a l'adresse de debut de ta memoire ecran en cours ..Code : Tout sélectionner
StartDrawing( ScreenOutput())
ca fait partie des trucs ke je connais
j'en ai même eu besoin pour me faire une fonction point en assembleur
sans gestion des erreurs (la gestion se fait dans le reste du programme)
Dri
Dr. Dri a écrit : t'inquiete pas pour moi ^^
ca fait partie des trucs ke je connais
Dri
je ne m'inquiete pas pour le contenu de ton immense culture ,vu que j'ignore ce que tu connais, ou pas ; je te passe par defaut l'info donc je dispose , et que j'ai decouvert tres recement !! et donc je ne doutais pas un instant que tu puisse en faire bonne usage

vu que plus haut tu as ecrit
je pensai sans doute a tort que c'est l'info que tu recherchais , donc , il semble que ce ne soit pas le cas ! , par ce fait , j'aimerai bien savoir en des termes simples (pour mon cerveau) , ce que tu a sous-entendu par tes propos sus-cité ???nan moi je voudrais connaitre l'output de la surface de dessin en cours^^

bah en fait le drawingbuffer c là où on dessine
j'ai jamais fait de test mais il me semble que ce n'est pas la meme valeur que l'output
par exemple si on veut dessiner une image soit meme à l'écran
on se met à dessiner à l'écran (startdrawing())
on récupere les pixels de l'image (startdrawing aussi)
là y'a conflit...
donc si je connaissai l'output voila ce que je pourrais faire...
voila en gros pourquoi j'aimerai ce genre de fonction...
Dri
j'ai jamais fait de test mais il me semble que ce n'est pas la meme valeur que l'output
par exemple si on veut dessiner une image soit meme à l'écran
on se met à dessiner à l'écran (startdrawing())
on récupere les pixels de l'image (startdrawing aussi)
là y'a conflit...
donc si je connaissai l'output voila ce que je pourrais faire...
Code : Tout sélectionner
procedure my_draw_image()
;si on est pas entrain de dessiner
if drawingbuffer()=0
procedurereturn
endif
;je récupere l'output de là où l'utilisateur dessine
output = drawingoutput()
;mais la fonction existe pas ^^
;j'arrete temporairement de dessiner
stopdrawing()
;je récupere l'adresse de la mémoire vidéo de l'image
startdrawing(imageoutput())
image_buffer = drawingbuffer()
stopdrawing()
;je me remet à dessiner grace à l'ouput ke j'ai récupérée
startdrawing(output)
;boucle d'affichage de l'image
;sauf ke j'ai pas la hauteur de la surface de dessin pour
;pas sortir de la zone mémoire
endprocedure
Dri

si j'ai bien compris
la doc dit !!
c'est un peut la difference qu'il y avait entre la memoire "graphique" et la memoire de l'ecran sur atari
ici il semble que ce soit pareil non ?
suivant le type de outpout (ScreenOutput() ou SpriteOutput())
la fonction "DrawingBuffer() " te renvoi soit une adresse de buffer graphique (SpriteOutput())) soit l'adresse de la VRAM (ScreenOutput())
(qui sur pc doit surement etre un buffer aussi a cause du multitache)
par contre existe t'il une adress base de "l'ecran'"<-- la VRAI ram video physique ??
dans le temps 'ere primaire' en stos on parlais de memoire physic (l'adresse de la ram video)
et de memoire logic (l'adresse d'un buffer)
cela avait le merite d'etre tres clair !!
la je sais pas , et je m'interroge , mais je suis pas sur de me repondre
la doc dit !!
donc dans le cas d'un precedent "ScreenOutput()" tu as bien l'adresse de base de la RAM Video ! ?AdresseMemoire = DrawingBuffer()
Description
Retourne l'adresse mémoire du buffer de dessin. Cela peut correspondre directement à la mémoire vidéo si la sortie est ScreenOutput() ou SpriteOutput()

c'est un peut la difference qu'il y avait entre la memoire "graphique" et la memoire de l'ecran sur atari
ici il semble que ce soit pareil non ?
suivant le type de outpout (ScreenOutput() ou SpriteOutput())
la fonction "DrawingBuffer() " te renvoi soit une adresse de buffer graphique (SpriteOutput())) soit l'adresse de la VRAM (ScreenOutput())
(qui sur pc doit surement etre un buffer aussi a cause du multitache)
par contre existe t'il une adress base de "l'ecran'"<-- la VRAI ram video physique ??
dans le temps 'ere primaire' en stos on parlais de memoire physic (l'adresse de la ram video)
et de memoire logic (l'adresse d'un buffer)
cela avait le merite d'etre tres clair !!
la je sais pas , et je m'interroge , mais je suis pas sur de me repondre
