Hardcore Intuition Screen Doublebuffer

3 sujets de 1 à 3 (sur un total de 3)

  • krabob

      #9635

      peut être pas le meilleur forum pour poser une question de dev maxi-hardu, mais pourquoi pas ?

      Comme j’ai un A600 non boosté (1Mb) fonctionnel, je m’amuse à voir ce que je peux coder dessus.

      Les vieux tuto ASM pour A500 que j’ai (phoenix dp), qui « hackaient » leurs écrans et leurs interruptions après un gros « forbid() + loadview(null) », fonctionne terriblement pas sur a600, pour d’obscure raison de compatibilité.

      Comme j’ai pas envi de courir après les trucs foireux à la recherche d’une hardcore-startup compatible A500/A600/A1200/A4000 , toute prétendument safe, j’ai commencé a faire quelque chose que je veux faire depuis longtemps, c’est à dire voir à quel point on pouvait utiliser « à fond » le blitter, le copper et avoir un double buffer propre, avec des écrans intuitions « CUSTOMSCREEN » et en gardant le multitâche. Pour le fun.

      J’avais fait pas mal de demo vers 1998/2000 ou je faisais ça: j’ouvrais un écran intuition muni d’un double ou triple buffer avec des fonctions dédié de intuition, qui ne sont apparus que dans la v39 (os 3.0, amiga 1200) et qui font des swap de double buffer trés propre et rapide…

      … je pensais pas que quelque chose puisse gérer ça sur des v36 (os2.x, amiga 600 ) et encore moins sur un A500 (os1.3)

      Puis j’ai chopé les rkm sur mon vieux développeur CD détérré et là surprise: 😮 : non seulement les fonctions de graphics et intuition ont pratiquement pas évolué de l’os1.3 à l’os2.0, mais il y a des examples de code de double buffer !

      Problème: la technique de double buffer compatible A500/A600 consiste à (example anim.c des rkm ):

      – écrire dans le viewport/rasterport du Screen le pointeur vers l’autre struct bitmap

      – faire un Intuition/MakeScreen

      – faire un intuition/RethinkDisplay

      Problème: RethinkDisplay est vraiment très très très lent. 😮

      Je suis donc en train de galérer pour contourner ces fonctions lentes de swap de buffer… Ces fonctions sont très commentés dans les autodocs, et je suis en train d’essayer de simuler RethinkDisplay, sans la lenteur..

      Dans l’état actuel je réussi a swapper plus vite mais ça plante si je draggue l’écran intuition …

      … il y a aussi des fonctions pour forcer des instructions copper list (mrgcop), qui necessite aussi un rethinkdisplay…

      Pouvoir faire des mrgcop() et des swap de bitmaps à la VBL ce serait vraimment la porte ouverte à pas mal de délire graphique X-D !!!

      Quelqu’un aurait une meilleure technique de dblbuffer intuition v1.3 ? Un example que j’aurais pas vu ?

      Bon sang, si ils ont réussi a faire une fonction dblbuffer propre en v39, ça doit être possible en v36 aussi non ? C’est les mêmes structs et plus ou moins les mêmes technique aprés tout !

      Gilloo

        #148278

        RethinkDisplay() est lente parce qu’elle (c’est une fonction) travaille sur tous les écrans intuition affichables. Il ne faut l’appeler que si on superpose plusieurs écrans (attention je parle d’écrans, pas de fenêtres)

        Pour une démo en double buffer on peut se contenter de deux views qui pointent sur deux écrans.

        struct View v1, v2 ;

        struct ViewPort vp1, vp2 ;

        InitView(&v1);

        InitView(&v2);

        InitVPort(&vp1);

        InitVPort(&vp2);

        /* creer des bitmaps… */

        /* lier v1 à vp1, v2 à vp2 */

        l1:

        LoadView(&v1) ;

        /* écrire dans le bitmap pointé par v2 */

        WaitTOF() ; /* si l’écran est entrelacé, il faut 2 WaitTOF() */

        LoadView(&v2) ;

        /* écrire dans le bitmap pointé pat v1 */

        WaitTOF() ; /* si l’écran est entrelacé, il faut 2 WaitTOF() */

        goto l1 ;

        C’est un début, j’ai pas les docs sous les yeux…

        :-D

        krabob

          #148279

          ah ouai pas con, et ultra-court comme code, donc trés interessant 😮 .

          Je connaissais pas InitView / InitVPort, le problème

          c’est que loadview(&v1) ça court circuite tout le mécanisme d’écran draggable intuition, et j’essai de garder ces comportements … mais j’essaiera ça et aussi peut être bêtement 2 Screens avec des ScreenTofront()

          … mais loadview(&v1) doit être super rapide et permettre de forcer plus proprement ses instructions copper, donc … a suivre.

        3 sujets de 1 à 3 (sur un total de 3)

        • Vous devez être connecté pour répondre à ce sujet.

        Forums AmigaOS, MorphOS et AROS Développement Hardcore Intuition Screen Doublebuffer

        Amiga Impact