2016-08-27 1 views
2

J'ai écrit un "pilote d'écran" X pour un projet de boîte à outils graphique sur lequel je travaille. Ma boîte à outils, en tant que dernière étape, appelle les fonctions Xlib qui dessinent les données pertinentes à l'écran.Dessiner avec une couleur personnalisée sans allocation avec Xlib

Le problème est que, dans ma boîte à outils, les couleurs sont représentées et transmises sous la forme d'entiers longs de 32 bits. Toute la documentation que j'ai lu à propos de Xlib utilise XAllocColor pour définir chaque couleur dans un Colormap. Le problème est, XAllocColor est assez lent par rapport à ma routine graphique et je voudrais éviter d'allouer chaque couleur utilisée (aussi parce que je n'ai pas une liste en avance).

Comment puis-je dessiner quelque chose dans des couleurs arbitraires dans Xlib sans allouer chacun d'entre eux?

+0

Vous ne vous souvenez pas exactement, mais vous pouvez utiliser le mode DirectColor? –

+0

D'après ce que j'ai vu, mais je peux me tromper, DirectColor est une représentation d'une couleur que vous avez toujours à allouer. –

+0

Vous avez raison (ma mémoire a échoué ici - pas de programmation Xlib depuis 20 ans), mais n'est-ce pas un mode 24 bitmaps avec TrueColor? (ou quelque chose comme ça). Je peux me rappeler que vous pouvez gérer le framebuffer pour injecter 24 bits (à condition que l'affichage est capable de). –

Répondre

1

Modifier la propriété XColor.pixel, c'est un type long qui contient généralement la couleur 0xAARRGGBB (mode RVB 32 bits), mais cela dépend du mode couleur que vous utilisez sur votre serveur X.