Comment fusionner deux ecrans Intuition
15 sujets de 1 à 15 (sur un total de 17)
- 1
- 2
-
Hello tous le monde codeur ou non !!,
Je voudrais savoir si on peux fusionner deux écrans intuition. Je m’expliquer..
J’ai deux écrans ouvert de 8 couleurs (3 bitplans) et je désirerai récupérer les BitPlans de chacun pour ouvrir un écran en 64 couleurs (6 Bitplans)..
Avec les trois premiers bitplans venant d’un écran et les trois suivants de l’autre..
Un dualplayfield en quelques sorte.. C’est pour mon AMOS4..
Je serais intéressé même par une bribe d’aide pour commencer car je n’arrive pas a récupérer les Bitplans de l’un pour les mettre vers l’autre..
RastPor, Viewport.. je ne sais pas par ou commencer..
Merci par avance..
— AMOS un jour … AmOS4 toujours —
Amos un jour, Amos Toujours
-----------------------------------
AmOS4 - Library Amos sous C (Os3-Os4)j’en sais rien mais je suis à fond avec toi !
Si l’on se contente de l’OCS/ECS/AGA, il suffit de regarder les structures RastPort (include/graphics/rastport.h) et BitMap (include/graphics/gfx.h)
RastPort -> BitMap l’accès aux 8 plans possibles se fait par le tableau Planes[].
Maintenant il faut traduire tout ça en assembleur…
Non pas en assembleur, en C…
Hélas je suis un débutant en C et je ne sais pas comment copier les adresse de pointeur entre mon nouvel écran et mes deux anciens pour faire ma bidouille
copier Old1->Planes[0] vers new->Planes[0] etc… ?
Utiliser AllocBitmap ou InitBitmap ?
Faire modif. juste après Alloc/initBitmap() sur le pointeur reçu et avant d’ouvrir l’écran ?
On avance petit a petit…
Pour information de codage, il faut que je puisse faire cela sous OS3.x mais l’AmOS4 sera prévu pour OS4..
Amos un jour, Amos Toujours
-----------------------------------
AmOS4 - Library Amos sous C (Os3-Os4)non non tu alloue pas ta bitmap
tu fais juste une « fausse » bitmap
struct bitmap mybm;
dont tu remplis les champs comme ceux de l’existant Screen1->bitmap
sauf les champs planes que tu pioche dans les bitmaps des ecrans & et 2
genre
bm.Planes[0]=Screen1->bitmap.Planes[0];bm.Planes[1]=Screen2->bitmap.Planes[0];
etc..
bm.Planes[6]=NULL;
bm.Planes[7]=NULL;puis dans struct newscreen mynewscreen;
mynewscreen.custombitmap=&mybm;
OpenNewScreen()
Enfin un truc dans le genre, pas le temps d ecrire mieux le truc …
Alain
Bonsoir
faut bien voir que moi non plus j ai jamais ecris un truc comme ca
mais bon je me rappelle du temps ou je faisais de l ASM et du hard Amiga
et je vois pas pourquoi on pourrais pas le faire
Le moeux c est de poster ton listing : Je verrai peut etre ton erreurAlain
Voici le code rapide de test…
……….
DUAL_BITMAP=(struct BitMap *) AllocMem(sizeof(struct BitMap), MEMF_CHIP);
REC_DUAL.MinX = 0;
REC_DUAL.MaxX = 640;
REC_DUAL.MinY = 0;
REC_DUAL.MaxY = 480;DUAL_BITMAP->BytesPerRow=Physic[1]->BytesPerRow;
DUAL_BITMAP->Rows=Physic[1]->Rows;
DUAL_BITMAP->Depth=Physic[1]->Depth;
// DUAL_BITMAP->Flags=Physic[1]->Flags;
// DUAL_BITMAP->pad=Physic[1]->pad;DUAL_BITMAP->Planes[0]=Physic[1]->Planes[0];
DUAL_BITMAP->Planes[1]=NULL;//Physic[1]->Planes[1];
DUAL_BITMAP->Planes[2]=NULL;//Physic[1]->Planes[2];
DUAL_BITMAP->Planes[3]=NULL;//Physic[0]->Planes[0];
DUAL_BITMAP->Planes[4]=NULL;//Physic[0]->Planes[1];
DUAL_BITMAP->Planes[5]=NULL;modeid = BESTMODEID(640,480,640,480,NbBitplane);
// ======================================
// Ouverture de l’écran selin les paramètre prévus
// ======================================
DUAL_SCR = OpenScreenTags( NULL,
SA_Left,0,
SA_Top, 0,
SA_Title,(ULONG) »Screen »,
SA_Width,640, //XScr,
SA_Height,480, //YScr,
SA_Depth,6, //NbBitplane,
SA_DetailPen,1,
SA_BlockPen,0,
SA_DClip,&REC_DUAL,
SA_Font,&ta,
SA_Behind,FALSE,
SA_Quiet,FALSE, //TRUE,
SA_BitMap,DUAL_BITMAP,
SA_Type,CUSTOMBITMAP,
SA_DisplayID,modeid,
TAG_DONE);
……………
Je suis preneur de toutes idées…Amos un jour, Amos Toujours
-----------------------------------
AmOS4 - Library Amos sous C (Os3-Os4)Mets aussi un MEMF_CLEAR car si tu modifie pas toutes les variables de ton custom bitmap .. ça risque de chier les valeurs ..
DUAL_BITMAP=(struct BitMap *) AllocMem(sizeof(struct BitMap), MEMF_CHIP|MEMF_CLEAR);Le reste semble bon … enfin à ce que je connaisse de l’intuition (ce qui est très limité)
Enfin, tout dépend aussi si le bitmap généré pour tes écrans est *standard* ou pas … selon les modes graphiques, il ne s’agit pas d’un *bitmap* mais d’un *superbitmap* et là niveau structure … j’ai pas d’informations …
@+
Je ne suis pas sur de comprendre la question.
Les champs de struct BitMap contiennent évidemment des valeurs valides, pour la compatiblité avec les logiciels existant.
Sauf Planes[8] qui n’a pas de sens avec un affichage >8bit et non planar. Et la mémoire video est de toute façon constamment réorganisée donc l’adresse change…Ce thread n’a aucun sens…
C’est comme demander comment jouer du 5.1 sur un système mono.Ou alors je n’ai strictement rien compris et cet « AMOS4 » est uniquement prévu pour l’AGA.
Hénès, quand tu crées un écran Intuition, la librairie va allocationner en mémoire tout ce qui est nécessaire pour que cet écran soit utilisable. non ?
A ce moment là, les zones mémoires (bitmap en planar ou chunky) seront définis et ne changeront pas jusqu’à ce que tu fermes l’écran en question. non ?
A moins que en RTG ce soit quelque chose qui change constamment et pas en AGA ?
Pourrais-tu nous éclairer sur le sujet ?N’oublie pas que quelque chose qui peut te paraître évident à toi qui connait beaucoup (niveau fonctionnement interne) l’AmigaOS, peut ne pas être évident pour d’autres 😉
Merci.
@+
15 sujets de 1 à 15 (sur un total de 17)
- 1
- 2
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Comment fusionner deux ecrans Intuition