Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Betas et WIPs » OrageGL : Librairie graphique (31 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Orage Ecrit le: Dimanche 15 février 2004 à 10:29 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


http://oragestudio.free.fr/images/autre/orageGL.gif

Voilà,
ça fait quelque temps que je bosse sur ce projet, et voilà une petite bêta (la première). Il est possible que vous trouviez des bugs(mailez moi alors svp :))... C'est une bibliothèque graphique qui propose quelques fonctions d'affichage de sprites, de trairement des pixels, etc...

J'en profite pour remercier Geogeo qui a eu la patience et la gentillesse de m'expliquer comment modifier le handler de l'écran :)

Voilà :)

Fonctions :

Oppérations Pixels
void PxlOn(int x, int y, void *plan);
void PxlOff(int x, int y, void *plan);
void PxlChange(int x, int y, void *plan);

Oppérations Lignes
void Horizontal(int y, void *plan);
void Vertical(int x, void *plan);

Touches
void GL_INIT_ROWREAD(int par);
Utilisez cette fonction pour pouvoir utiliser les fonctons "_rowread" (quand vous utilisez des niveaux de gris), en la plaçant au début de votre programme (avant GrayOn()) avec pour argument TRUE, et à la fin (avant GrayOff()), avec FALSE comme argument.

int GL_ESCpressed(void);
int GL_LEFTpressed(void);
int GL_RIGHTpressed(void);
int GL_UPpressed(void);
int GL_DOWNpressed(void);

Sprites
8 bits
void GL_Sprite8_XOR(int x, int y, unsigned char sprite[], void *plan);
void GL_Sprite8_OR(int x, int y, unsigned char sprite[], void *plan);
void GL_Sprite8_AND(int x, int y, unsigned char sprite[], void *plan);
void GL_xSprite8_XOR(int x, int y, unsigned char sprite[], int vtaille, void *plan);
void GL_xSprite8_OR(int x, int y, unsigned char sprite[], int vtaille, void *plan);
void GL_xSprite8_AND(int x, int y, unsigned char sprite[], int vtaille, void *plan);
void GL_SpriteH8_XOR(int x, int y, unsigned char sprite[], void *plan);
void GL_SpriteH8_OR(int x, int y, unsigned char sprite[], void *plan);
void GL_SpriteH8_AND(int x, int y, unsigned char sprite[], void *plan);
void GL_xSpriteH8_XOR(int x, int y, unsigned char sprite[], int vtaille, void *plan);
void GL_xSpriteH8_OR(int x, int y, unsigned char sprite[], int vtaille, void *plan);
void GL_xSpriteH8_AND(int x, int y, unsigned char sprite[], int vtaille, void *plan);

16 bits
void GL_Sprite16_XOR(int x, int y, unsigned int sprite[], void *plan);
void GL_Sprite16_OR(int x, int y, unsigned int sprite[], void *plan);
void GL_Sprite16_AND(int x, int y, unsigned int sprite[], void *plan);
void GL_xSprite16_XOR(int x, int y, unsigned int sprite[], int vtaille, void *plan);
void GL_xSprite16_OR(int x, int y, unsigned int sprite[], int vtaille, void *plan);
void GL_xSprite16_AND(int x, int y, unsigned int sprite[], int vtaille, void *plan);
void GL_SpriteH16_XOR(int x, int y, unsigned int sprite[], void *plan);
void GL_SpriteH16_OR(int x, int y, unsigned int sprite[], void *plan);
void GL_SpriteH16_AND(int x, int y, unsigned int sprite[], void *plan);
void GL_xSpriteH16_XOR(int x, int y, unsigned int sprite[], int vtaille, void *plan);
void GL_xSpriteH16_OR(int x, int y, unsigned int sprite[], int vtaille, void *plan);
void GL_xSpriteH16_AND(int x, int y, unsigned int sprite[], int vtaille, void *plan);

32 bits
void GL_Sprite32_XOR(int x, int y, unsigned long sprite[], void *plan);
void GL_Sprite32_OR(int x, int y, unsigned long sprite[], void *plan);
void GL_Sprite32_AND(int x, int y, unsigned long sprite[], void *plan);
void GL_xSprite32_XOR(int x, int y, unsigned long sprite[], int vtaille, void *plan);
void GL_xSprite32_OR(int x, int y, unsigned long sprite[], int vtaille, void *plan);
void GL_xSprite32_AND(int x, int y, unsigned long sprite[], int vtaille, void *plan);
void GL_SpriteH32_XOR(int x, int y, unsigned long sprite[], void *plan);
void GL_SpriteH32_OR(int x, int y, unsigned long sprite[], void *plan);
void GL_SpriteH32_AND(int x, int y, unsigned long sprite[], void *plan);
void GL_xSpriteH32_XOR(int x, int y, unsigned long sprite[], int vtaille, void *plan);
void GL_xSpriteH32_OR(int x, int y, unsigned long sprite[], int vtaille, void *plan);
void GL_xSpriteH32_AND(int x, int y, unsigned long sprite[], int vtaille, void *plan);

Ralentissement
void sleep(unsigned int i);

PS : Si quelqu'un est intéressé pour tester la lib et me faire connaitre des bugs ou des idées d'amélioration, ou qui est intéressé pour s'occuper de la documentation... oragesoft@hotmail.com Merci :)
    
./Post n°1   Marquer comme non lu.
geogeo Ecrit le: Dimanche 15 février 2004 à 11:41 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Ouah y en a des fonctions. :o
sleep me semble inutile.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°2   Marquer comme non lu.
IP2X Ecrit le: Dimanche 15 février 2004 à 14:06 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

défoit ça peut servir, si tu veux faire des trucs lent
IP2X

    
./Post n°3   Marquer comme non lu.
Orage Ecrit le: Dimanche 15 février 2004 à 16:06 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Bah ma fonction sleep est sursimple, mais je m'en sers souvent... Je viens de relire mon post, et je m'apperçois que j'ai oublié de mettre un lien vers le zip : http://oragestudio.free.fr/sources/OrageGL.zip
    
./Post n°4   Marquer comme non lu.
Lionel Debroux Ecrit le: Dimanche 15 février 2004 à 19:32 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Je ne voudrais pas être méchant, mais c'est carrément "réinventer la roue"...
C'est la sixième librairie graphique que je connaisse. D'ailleurs, cinq sont faites par des français (la sixième est actuellement maintenue par des français, mais elle n'a pas été commencée par ces personnes-là).

Pour les commentaires:
* int est à proscrire, c'est short qu'il faut utiliser.
* une idée répandue mais assez mauvaise en termes d'efficacité vitesse est de faire une fonction pour dessiner un pixel sur l'écran. Une macro est certes inline, mais elle peut aussi être optimisée par le compilateur.
* je trouve stupide de faire des fonctions pour lire le joypad ou quelques touches spéciales (surtout ces cinq-là). Un utilisateur de ce type de librairies devrait être assez intelligent pour le faire tout seul à partir de _keytest...
* quel est l'intérêt des
void GL_Sprite8_XOR(int x, int y, unsigned char sprite[], void *plan);
et similaires par rapport aux
void GL_xSprite8_XOR(int x, int y, unsigned char sprite[], int vtaille, void *plan);
et similaire ? Pour ce que je peux deviner des paramètres d'après leur nom (qui est d'ailleurs en français et donc incompatible avec une utilisation large), leur intérêt est nul en vitesse et en taille. La taille verticale est habituellement entre 1 et 128, donc faire un moveq dans l'appel est possible. Et il n'y a alors aucune différence avec un moveq à une taille fixe dans la fonction - si ce n'est une diminution de la flexibilité.
* les fonctions sont-elles __stkparm__ ?
Lionel Debroux - membre de TICT.
    
./Post n°5   Marquer comme non lu.
Orage Ecrit le: Dimanche 15 février 2004 à 21:48 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Oui, comme je le disais sur yaronet, j'ai commencé ce projet juste dans le but d'apprendre à utiliser l'écran:( ... Le paramètre vtaille n'est pas la taille du sprite mais le zoom vertical, on peut mettre 1 pour avoir l'équivalent de GL_Sprite, mais c 4x plus lent. Je vais remplacer les int par short pour la prochaine version... Pour les touches, c'était uniquement pour simplifier un peu l'utilisation, mais je l'enlevrais surement.

-Edité le: Dimanche 15 février 2004 à 21:51 par Orage-
    
./Post n°6   Marquer comme non lu.
Lionel Debroux Ecrit le: Mardi 17 février 2004 à 18:11 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Ah, tu aurais dû dire tout de suite que c'était pour apprendre. Je n'aurais pas fait un post comme ça...
OK pour le paramètre taille. J'ai fait une routine pour ExtGraph qui double la taille d'un sprite dont la largeur est multiple de 8 pixels, mais elle ne l'affiche pas.

Il reste que c'est la sixième lib graphique...
Lionel Debroux - membre de TICT.
    
./Post n°7   Marquer comme non lu.
Orage Ecrit le: Vendredi 20 février 2004 à 17:05 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Pas de pb :) (nouvelle version (1.1) avec correction de la fonction ROWREAD_INIT, et fichier OrageGL.h contenant que les prototypes)
    
./Post n°8   Marquer comme non lu.
Orage Ecrit le: Dimanche 22 février 2004 à 19:05 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Nouvelle version (1.2) :

+ Fonctions sur les buffers :
void GL_DisplayB(void *buff);
void GL_Display2B(void *bl, void *bd);
void GL_CopyB(void *dst, void *src);
void GL_Copy2B(void *dst1, void *dst2, void *src1, void *src2);
void GL_ClearB(void *ecran);
void GL_Clear2B(void *ecran1, void *ecran2);

+ Fonctions d'écran :
void GL_ClearScreen(void);
void GL_ClearGrayScreen(void);

+ Transitions :
void GL_DamierOff(void);
void GL_DamierOn(void *src);
void GL_DamierLightOff(void);
void GL_DamierDarkOff(void);
void GL_DamierLightOn(void *src);
void GL_DamierDarkOn(void *src);
void GL_GrayDamierOff(void);
void GL_GrayDamierOn(void *srcl, void *srcd);

+ Pour tous les fonctions d'affichage de sprites, possibilité de régler la hauteur

Pour les fonctions de transition, voilà ce que ça donne :

http://oragestudio.free.fr/images/ti/OrageGL/exemple1.gif
http://oragestudio.free.fr/images/ti/OrageGL/exemple2.gif

Télécharger la dernière version : http://oragestudio.free.fr/sources/OrageGL.zip

[edit] J'ai oublié de dire que j'ai réglé le problème de la taille en séparant les fonction dans différents fichiers .c (merci Sasume)
    
./Post n°9   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 23 février 2004 à 18:57 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Tiens, ExtGraph 2.00 Beta 3+ auront des effets de transition un peu similaires (attention, je ne veux pas dire par là que tu es un copieur)...
Lionel Debroux - membre de TICT.
    
./Post n°10   Marquer comme non lu.
Orage Ecrit le: Lundi 23 février 2004 à 21:01 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


arf... Et elle propose quoi comme différentes transitions ?
    
./Post n°11   Marquer comme non lu.
Billy Charvet Ecrit le: Mardi 24 février 2004 à 13:49 Déconnecté(e)    Voir le profil de Billy Charvet Envoyer un email à Billy Charvet Visiter le site WEB de Billy Charvet Envoyer un message privé à Billy Charvet  


Erf, bravo pour la fonction sleep (moi elle va me servir =) )
mais hélas je dois reconnaître que Lionel a raison, une librairie graphique de plus.
C'est pas tellement ça le problème que tous les efforts que tu va y passer pour
faire quelquechose de déjà fait (=>"réinventer la roue")

En revanche, tu pourrais essayer de trouver des fonctions peu communes ou
spécialisées (comme genlib pour le tile-oriented) et là OrageGL prendrait tout
son intérêt... ;)
Je suis tel la fleur du lotus.
Bien que naissant de la boue,
aucune boue n'y adhère.
    
./Post n°12   Marquer comme non lu.
Sasume Ecrit le: Mardi 24 février 2004 à 16:02 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Si je peux me permettre, pour les fonctions tile oriented, j'ai écrit un tilemap engine en ASM, donc très rapide.
Donc je doute qu'orage fasse mieux en C.

P.S. : la fonction sleep est un for vide...
    
./Post n°13   Marquer comme non lu.
Billy Charvet Ecrit le: Mardi 24 février 2004 à 16:16 Déconnecté(e)    Voir le profil de Billy Charvet Envoyer un email à Billy Charvet Visiter le site WEB de Billy Charvet Envoyer un message privé à Billy Charvet  


Je lui ai juste dit de faire un truc spécialisé,
comme un tilemap engine par exemple.

Mais ce n'est qu'un exemple, parcequ'entre Genlib et Extgraph... :s
Je suis tel la fleur du lotus.
Bien que naissant de la boue,
aucune boue n'y adhère.
    
./Post n°14   Marquer comme non lu.
Orage Ecrit le: Mardi 24 février 2004 à 19:00 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Billy Charvet>Oui, je suis entièrement d'accord, ça ne sert pas à grand chose une lib plus lente que les autres. Pour la spécialisation, j'avais pensé à proposer des transitions et affichages spéciaux de buffers écran (comme ma fonction damier), mais comme Lionnel me dit que Extgraph le fait également... Sinon, je pensais essayer de me rapprocher de GraphX : L'initialisation GL_On() crérait un buffer qui fairait 4x la taille de l'écran, et la fonction d'affichage serait GL_Display(short x, short y), pour pouvoir faire un "scrolling" très simplement. Qu'en pensez vous ? Sinon que faire qui serait pas trop commun ?
    
./Post n°15   Marquer comme non lu.
Lionel Debroux Ecrit le: Mardi 24 février 2004 à 19:29 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Si c'est pour apprendre, ça n'est pas un problème, qu'il le fasse pour lui. En revanche, c'est un peu bête que ça soit la sixième lib... Je rappelle que cinq sont à peu près inexistantes (quoique pas toutes inconnues, surtout GenLib) dans la communauté internationale.

Se rapprocher de n'importe quelle lib qui nécessite de la mettre en route et de l'arrêter est pour moi une mauvaise idée...

Pour les effets de transition (grayscale uniquement avec boucle d'attente, mais ils sont évidemment pour la plupart utilisables sur un seul plane):
* l'effet de spirale de Dune I en plusieurs versions;
* un effet qui ressemble un peu à celui que tu utilises pour fader le texte "OrageGL 1.2". Je vais inclure le tien, il est facile à faire (lsl.b=asl.b, si j'ai bien vu ton screenshot);
* des dissolve (pas encore écrits, il faut que j'optimise dissolve avec de l'assembleur, quitte à rajouter des nop car il deviendra probablement trop rapide), fadeout + fade in simultanés de Ice Hockey 68k compris.
* l'effet au début de TI-Chess avant le dissolve du logo;
* des grands classiques (fade out/in en partant d'un bord de l'écran).
* fire (fire un peu modifié et/ou fire de Krypton I si ce n'est pas le même).
Lionel Debroux - membre de TICT.
    
./Post n°16   Marquer comme non lu.
Orage Ecrit le: Mardi 24 février 2004 à 19:37 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Pour ma fonction si ça t'interesses :
void GL_GrayDamierOff(void)
{
short i, j, k;
for(j=0 ; j<8 ; j++)
{
for(i=0 ; i<3840 ; i++)
{
*(unsigned char*)(GetPlane(0)+i) = ((*(unsigned char*)(GetPlane(0)+i))<<1);
*(unsigned char*)(GetPlane(1)+i) = ((*(unsigned char*)(GetPlane(1)+i))<<1);
}

for(k=0 ; k<20000 ; k++);
}
return;
}


void GL_GrayDamierOn(void *srcl, void *srcd)
{
short i, j, k;
for(j=0 ; j<8 ; j++)
{
for(i=0 ; i<3840 ; i++)
{
*(unsigned char*)(GetPlane(0)+i) = ((*(unsigned char*)(srcl+i))<<(8-j));
*(unsigned char*)(GetPlane(1)+i) = ((*(unsigned char*)(srcd+i))<<(8-j));
}

for(k=0 ; k<20000 ; k++);
}
return;
}
    
./Post n°17   Marquer comme non lu.
Lionel Debroux Ecrit le: Mardi 24 février 2004 à 19:45 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Merci bien. Je ne m'attendais pas à ce que tu les donnes - remarque, j'aurais pu les prendre tout seul si c'est open-source... Quoi qu'il en soit, je ne vais pas cracher dessus...
Lionel Debroux - membre de TICT.
    
./Post n°18   Marquer comme non lu.
Orage Ecrit le: Vendredi 26 mars 2004 à 20:07 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


J'ai recommencé à la coder en ASM, et j'obtient de bonnes vitesses... (nouvelle version)
    
./Post n°19   Marquer comme non lu.
nEUrOO Ecrit le: Samedi 27 mars 2004 à 10:31 Déconnecté(e)    Voir le profil de nEUrOO Envoyer un email à nEUrOO Envoyer un message privé à nEUrOO  

Cool, extgraph va s'enrichir de fonction inutiles ... a quand les fonction sur la 3d ?
:$
    
  :: Index » Forum Ti68K » Betas et WIPs » OrageGL : Librairie graphique (31 réponse(s))
Pages : 1/2     « [1] 2 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 62.43ms avec 18 requetes