π
<-

[nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

C, C++, ASM...

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby Levak » 07 Jan 2012, 21:33

Face à ces arguments, c'est ptet finalement préférable de faire un setColor(), tout en donnant la possibilité (surcharge) de gérer une couleur par un *color
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby totorigolo » 08 Jan 2012, 03:01

Tout d'abord, je me dois de le dire, et je m'excuse : je ne porte pas la SDL. Pour le moment, j'essaie de terminer la version 0.2 de nRGBlib, puis je me pencherai plus sérieusement vers la SDL, voir si c'est à mon niveau. Cela dit, la SDL ne propose pas tant de choses que ça niveau rendu, étant à l'origine créée dans le but d'avoir une fenêtre de rendu OpenGL sous Windows, il me semble. Elle propose il me semble uniquement l'affichage de rectangles et de lignes, après c'est les add-on qui sont intéréssantes... (cf: http://wiki.libsdl.org/moin.cgi/APIByCategory).

Alors, pour le problème, deux choix s'offrent à moi : la couleur globale en mode crayon ou les fonctions qui prennent la couleur, mais avec peu d'arguments (je penses avoir trouvé un moyen de faire court :): ). Le problème avec mon moyen de faire court : la couleurs est en 16 bits, soit 2 octets. Si on veut permettre de choisir la couleur pour Nspire non-couleur, ça nous donnerais une couleur de 20 bits, soit... 2 octets et demi, donc trois. Ensuite, le type le plus proche est le int -> 4 octets. J'ai vu les bit fields qui servent apparament à optimiser ça, mais je sais pas comment ça marche.

Est-ce que cela vous va ?
.H
Code: Select all
#define RGB(r, g, b, bn) ((bn << 15) | (r << 11) | (g << 5) | b)
#define LINE(x1, y1, x2, y2) ((x1 << 25) | (y1 << 17) | (x2 << 8) | (y2))
#define SQUARE(x, y, c) ((x << 16) | (y << 8) | (c))

typedef unsigned int Color; // 20 bits -> 3 octets -> unsigned int (4 octets)
typedef unsigned long long Line; // 34 bits -> 5 octets -> unsigned long long (8 octets)
typedef unsigned int Square; // 25 bits -> 4 octets -> unsigned int (4 octets)

/// Dessine un pixel en couleur
void setPixel(short x, short y, Color);

/// Dessine une ligne quelconque en couleurs
inline void drawLine(Line *l, Color col);

/// Dessine un carré en couleur
inline void drawSquare(Square *s, Color col);

.C
Code: Select all
// Un p'tit exemple
SetPixel(20, 30, RGB(255, 128, 0, 5));
drawSquare(SQUARE(50, 60, 30), RGB(0, 255, 255, 6));
Color colApple = RGB(255, 0, 0, 5);
drawSquare(SQUARE(50, 60, 30), colApple);

// Style Lua (on rajoute le ", c")
Color c = RGB(255, 0, 0, 5);
drawSquare(SQUARE(0, 0, 5), c);
drawSquare(SQUARE(30, 0, 20), c);
drawSquare(SQUARE(20, 30, 40), c);
c = RGB(0, 255, 0);
drawLine(LINE(5, 6, 25, 26), c);

Le code a été écrit de tête, pas testé.

PS : J'espère n'avoir oublié aucun de vos conseils :;):
nRGBlib, bibliothèque graphique en couleurs pour Ndless 3 !
pdf2png, un convertisseur de pdf en png, conçu pour être utilisé avec mViewer CX !
Image
User avatar
totorigolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 42.3%
 
Posts: 132
Joined: 14 Sep 2011, 20:30
Gender: Male
Calculator(s):
MyCalcs profile
Class: Département Informatique - INSA de Lyon

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby Lionel Debroux » 08 Jan 2012, 09:03

Tout d'abord: je ne veux pas te décourager par mes remarques, c'est bien d'avoir de (relatifs) nouveaux venus qui ont des idées et de la motivation ;)

Si on veut permettre de choisir la couleur pour Nspire non-couleur, ça nous donnerais une couleur de 20 bits, soit... 2 octets et demi, donc trois.

Je ne pense pas qu'il faille essayer de gérer les Clickpad & Touchpad d'un côté, et les CX & CM de l'autre, avec les mêmes fonctions: c'est beaucoup plus lourd :)
Sur TI-68k, je n'ai jamais été un grand fan de la compatibilité on-calc entre 89/89T et 92+/V200, qui pouvait facilement coûter au moins 10 KB sur des programmes comme TI-Chess; et ces modèles n'avaient pourtant pas une différence aussi importante que les bpps de l'écran, qui changent tous les graphismes.

Ensuite, le type le plus proche est le int -> 4 octets.

uint32_t ;)
Il est des plate-formes, dont les TI-68k tournant AMS et compatibles, où sizeof(int) != 4.


Remarques sur les exemples de code.
* L'utilisation de "unsigned long long" (c'est plus portable et plus court d'écrire uint64_t :D), pour essayer de compresser des valeurs, est à proscrire car elle coûte cher :) En interne, le compilo a recours à des fonctions spéciales de la libc pour manipuler de telles valeurs (à moins que les versions les plus récentes de GCC soient capables d'émettre des shifts inline ?), et en ASM, passer les arguments à une telle fonction serait désagréable.
* j'imagine que c'est un reste de copier-coller, mais si on garde ta façon de compresser les paramètres (???), drawLine et drawSquare doivent prendre une valeur comme premier argument, et non un pointeur :)
* dans les exemples, tu passes des valeurs 8 bits à RGB, alors que ta définition de macro ne peut pas avaler de telles valeurs. Regarde la page précédente ma version qui serait capable de le faire (si je ne me suis pas planté sur les shifts :D).
* les bit fields dans une struct s'utilisent simplement, en fait :)
Et sur l'ISA ARM, les bit fields sont moins inintéressants que sur d'autres ISA car les shifts / rotates sont très développés.
Pour permettre un accès aux composantes séparées, aussi bien qu'un accès à la valeur brute, RGB pourrait être défini de la façon suivante (mais attention à l'endianness !):
Code: Select all
union RGB {
    struct components {
        int r : 5; // peu importe le type de r, g, b: le ": x" définit un bit field.
        int g : 6;
        int b : 5;
    };
    uint16_t raw;
}

Naturellement, avec une telle définition, des écritures aux composantes r, g et b ne pourraient fonctionner que si les valeurs sont entre 0 et 31 (5 bits), ou 0 et 63 (6 bits). Hors de ces plages, je ne sais même pas si le standard C définit le comportement du code (= ça risque fort de faire des conneries) :)
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.3%
 
Posts: 6863
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby Levak » 08 Jan 2012, 13:58

totorigolo wrote:Tout d'abord, je me dois de le dire, et je m'excuse : je ne porte pas la SDL. Pour le moment, j'essaie de terminer la version 0.2 de nRGBlib, puis je me pencherai plus sérieusement vers la SDL, voir si c'est à mon niveau. Cela dit, la SDL ne propose pas tant de choses que ça niveau rendu, étant à l'origine créée dans le but d'avoir une fenêtre de rendu OpenGL sous Windows, il me semble. Elle propose il me semble uniquement l'affichage de rectangles et de lignes, après c'est les add-on qui sont intéréssantes... (cf: http://wiki.libsdl.org/moin.cgi/APIByCategory).

Aaah, pas de problème, j'ai mal lu c'est tout :D

Alors, pour le problème, deux choix s'offrent à moi : la couleur globale en mode crayon ou les fonctions qui prennent la couleur, mais avec peu d'arguments (je penses avoir trouvé un moyen de faire court :): ). Le problème avec mon moyen de faire court : la couleurs est en 16 bits, soit 2 octets. Si on veut permettre de choisir la couleur pour Nspire non-couleur, ça nous donnerais une couleur de 20 bits, soit... 2 octets et demi, donc trois. Ensuite, le type le plus proche est le int -> 4 octets. J'ai vu les bit fields qui servent apparament à optimiser ça, mais je sais pas comment ça marche.

J'ai dû encore mal lire, mais je comprends pas pourquoi tu ne transformes pas ta couleur en niveau de gris à l'affichage dans la fonction setPixel() ? Je veux dire, tu utiliserais partout des couleurs, comme pour ce que TI a fait pour le Lua. A part un pseudo temps de conversion pour les Clickpads (qui sont d'ailleurs en peu plus rapide que les CX ça tombe bien :p) je ne vois rien qui puisse t'arrêter dans ton choix.
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
User avatar
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 98.9%
 
Posts: 6414
Images: 22
Joined: 27 Nov 2008, 00:00
Location: 0x1AACC355
Gender: Male
Calculator(s):
MyCalcs profile
Class: BAC+5: Epita (ING3)

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby totorigolo » 08 Jan 2012, 14:15

Je voulais pouvoir donner le choix à l'utilisateur de choisir la couleur pour CX et non-CX, comme ExtendeD me l'avais aussi suggéré. Mais après c'est comme vous voulez, moi je n'ai qu'une CX donc je m'en moque :p:
nRGBlib, bibliothèque graphique en couleurs pour Ndless 3 !
pdf2png, un convertisseur de pdf en png, conçu pour être utilisé avec mViewer CX !
Image
User avatar
totorigolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 42.3%
 
Posts: 132
Joined: 14 Sep 2011, 20:30
Gender: Male
Calculator(s):
MyCalcs profile
Class: Département Informatique - INSA de Lyon

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby Lionel Debroux » 08 Jan 2012, 16:22

La conversion RGB 5:6:5 bits -> grayscale 4 bits est plus difficile que les conversions RGB 5:6:5 <-> 8:8:8, en taille de code et en temps d'exécution :)
Et je ne me souviens pas que l'écran grayscale des Clickpad & Touchpad gère correctement 16 bpp (profondeur que le contrôleur LCD sait gérer), mais peut-être que je me trompe.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.3%
 
Posts: 6863
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby Laurae » 08 Jan 2012, 17:03

Lionel Debroux wrote:Et je ne me souviens pas que l'écran grayscale des Clickpad & Touchpad gère correctement 16 bpp (profondeur que le contrôleur LCD sait gérer), mais peut-être que je me trompe.


Il y a 16 niveaux de gris sur l'écran des sans couleurs :P
User avatar
LauraeAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 78.8%
 
Posts: 1685
Images: 22
Joined: 25 Jun 2010, 00:00
Location: France, La Défense
Gender: Male
Calculator(s):
MyCalcs profile
Class: Professeur, Etudiant, Formateur

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby Lionel Debroux » 08 Jan 2012, 17:10

Par défaut, en effet.
Mais l'énorme daube d'écran dont sont équipées les Clickpad et Touchpad peut pourtant être drivé en 8 bpp, c'est par exemple ce que nDOOM fait... peut-être qu'il peut être drivé en 16 bpp (peut-être au prix d'une plus grande lenteur encore ?) ? :)
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.3%
 
Posts: 6863
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby ExtendeD » 08 Jan 2012, 23:32

Pas bête, a tester. totorigolo tu peux aussi demander à calc84maniac qui s'y connait pas mal sur le fonctionnement des ecrans.
User avatar
ExtendeDPremium
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Level up: 64.1%
 
Posts: 204
Joined: 30 Dec 2004, 00:00
Gender: Male
Calculator(s):
MyCalcs profile
Class: N/A

Re: [nRGBlib] W.I.P - Bibliothèque couleurs pour Ndless 3.1

Unread postby totorigolo » 11 Jan 2012, 13:24

Est-ce que ce code est censé fonctionner en C ? (code pondu tout frais, sans copié-collé ni test donc possible erreur de syntaxe)

Code: Select all
#define newRGB(r, g, b) (Color) (uint16_t) (((r / 8) << 11) | ((g / 4) << 5) | (b / 8))
#define RGB(r, g, b) (Color*) (uint16_t) (((r / 8) << 11) | ((g / 4) << 5) | (b / 8))

void setPixel(short x, short y, Color *c)
{
    /* ... */
    bar = c->raw;
}
void drawBox(short x, short y, Color *c)
{
    /* ... */
    setPixel(x, y, c); // Fonctionne pas ici (voir plus bas)
}

int main()
{
    Color cc = newRGB(123, 125, 174);

    drawBox(0, 40, &cc); // Fonctionne
    drawBox(0, 0, RGB(137, 255, 137)); // Fonctionne pas (voir plus haut)

    return 0;
}


Ça ne marche pas surement à cause du pointeur temporaire, mais existe-t-il un autre moyen ? Ou est-ce que le pointeur est utile ?

PS: Nouveau dépot Mercurial (volontairement pas en première page / présentation) : https://bitbucket.org/totorigolo/nrgblib/overview
nRGBlib, bibliothèque graphique en couleurs pour Ndless 3 !
pdf2png, un convertisseur de pdf en png, conçu pour être utilisé avec mViewer CX !
Image
User avatar
totorigolo
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 42.3%
 
Posts: 132
Joined: 14 Sep 2011, 20:30
Gender: Male
Calculator(s):
MyCalcs profile
Class: Département Informatique - INSA de Lyon

PreviousNext

Return to Native: Ndless, Linux, ...

Who is online

Users browsing this forum: ClaudeBot [spider] and 3 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
750 utilisateurs:
>708 invités
>33 membres
>9 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)