Page 1 sur 2
...............
Publié : ven. 27/août/2004 18:44
par Backup
...............
Publié : ven. 27/août/2004 19:38
par Dr. Dri
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à
Publié : ven. 27/août/2004 19:47
par Dr. Dri
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
Code : Tout sélectionner
If StartDrawing(output) ;y'a pas que l'écran où on plot
dessiner
StopDrawing()
Endif
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...
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
Dri
Publié : ven. 27/août/2004 19:49
par Backup
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 !!!

Publié : ven. 27/août/2004 19:56
par Backup
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

Publié : ven. 27/août/2004 23:01
par Dr. Dri
moi tout ce qu'il me faudrait c'est deux fonctions suplémentaires...
DrawingOutput()
DrawingBufferSize()
Avec ca y'aurai plus de probleme ^^
Dri
Publié : ven. 27/août/2004 23:09
par Backup
Resultat = StartDrawing(OutputID)
c'est pas pareil ?
comprend pas tes commandes souhaitée

Publié : ven. 27/août/2004 23:51
par Paneric
et avec des pointeurs, ce ne serait pas plus rapide ?
Les instructions peek et poke sont très lente.
Paneric
Publié : sam. 28/août/2004 16:34
par Dr. Dri
nan moi je voudrais connaitre l'output de la surface de dessin en cours^^
comme je me suis pas documenté là dessus... je le remet juste à plus tard ^^
Dri
Publié : sam. 28/août/2004 17:23
par Backup
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
#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
Publié : dim. 29/août/2004 8:55
par Dr. Dri
Le type à la guitarre a écrit :si tu fait
apres un
tu a l'adresse de debut de ta memoire ecran en cours ..

t'inquiete pas pour moi ^^
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
Publié : dim. 29/août/2004 10:40
par Backup
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
nan moi je voudrais connaitre l'output de la surface de dessin en cours^^
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é ???

Publié : dim. 29/août/2004 13:55
par Dr. Dri
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...
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
voila en gros pourquoi j'aimerai ce genre de fonction...
Dri

Publié : dim. 29/août/2004 14:44
par Backup
si j'ai bien compris
la doc dit !!
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()
donc dans le cas d'un precedent "ScreenOutput()" tu as bien l'adresse de base de la RAM Video ! ?
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

Publié : dim. 29/août/2004 17:09
par Dr. Dri
oué maios j'ai bô récupérer l'adresse où je dois dessiner
il faut aussi ke je lance un startdrawing dans mon image
pour récuperer SON drawingbuffer, et là y'a conflit avec le startdrawing de l'écran
c'est là tout le prob ^^
Dri