J'allais poster un truc dans ton autre topic, mais je l'ai effacé par mégarde...
Ce que tu dois faire c'est sallouer au maximum pour chaque texture (ce n'est pas possible en considérant les diverses tailles de mémoire vidéo qui existent, donc tu devras gérer cela dynamiquement) un espace en mémoire vidéo que tu ne mettra a jour que quand celà sera nécéssaire...
Je vois dans ta documentation void oslUncacheImage(OSL_IMAGE *img) ça me parrait excellent comme moyen de déterminer quelle texture mettre a jour... Il suffit que tu mettes un flag "update" dans ta table de correspondance mémoire système <=> mémoire vidéo pour indiquer au processus de rendu de réactualiser l'image en mémoire vidéo, c'est nickel.
Pour ce qui concerne la conversion, il suffit d'optimiser ta routine. Avec des tables 8 => 32 et 4 => 32 pour la conversion ça peut être très rapide... Tu peux posser l'optimisation a bout, en prenant des blocs de 16 bits d'image source (aussi bien en 8 qu'en 4 bits), et en ayant des tables qui te donnent direct le bloc de 64 ou 128 bits correspondant. (Du coup copie presque 2 fois plus rapide en 4 bits) A voir également si tu es obligé d'utiliser des textures RGBA, car en 16 bits tu peux gagner en taille et en vitesse pour la conversion.
la conersion dans le sens inverse, elle, ne se fait a l'aide de tables que si tu as des textures 16 bits maximum, sinon bah faut se débrouiller.

Alors :
1) OpenGL supporte les textures indexées via l'extension EXT_paletted_texture, disponible sur une large majorité de gpu.
2) si tu veux rendre de la 2d en opengl, tu as deux possibilités :
=> glDrawPixels
=> faire une texture et l'appliquer à un rectangle couvrant toute ta fenêtre
En général, la deuxième solution est plus efficace, même si certaines cartes font exception.
GC> un pbuffer est un écran virtuel et un contexte opengl à part entière. Tu ne peux pas accéder à son contenu directement vu qu'il est logé en mémoire vidéo. Les techniques sont donc les mêmes que pour l'écran : glDrawPixels et rendu vers texture. Les deux contextes liés à ces objets peuvent partager leurs objets vidéo (textures, listes, ...).
Il faudrait regarder aussi, il y a peut-être moyen de faire la conversion indexé => rgba dans un pixel shader. [edit: non en fait toutes les cartes supportant les pixel shaders supportent le EXT_paletted_texture qui existe depuis bien avant].
Normalement, de toutes façons, l'utilisation de glDrawPixels et le rendu vers texture te permettent de bénéficier de toute l'accélération matérielle.
Fais gaffe quand même : sous windows, le opengl livré par microsoft est un opengl logiciel. Regarde bien quelle version de OpenGL tu as, et installe la version du fabricant de ta carte si besoin.