PDA

View Full Version : Palette swap on an OpenGL texture



rpxmaster
03-14-2006, 09:07 PM
Is there a way to do a simple palette swap on an OpenGL texture, and how? All I want to do is take an existing texture and replace colors around. For example turning a red Koopa in mario bros into a green one by replacing all red pixels with green, etc.

Thanks in advance. Sorry for asking such a lame question, but Google doesn't want to help me on this one.

ZbuffeR
03-15-2006, 04:23 AM
You have to change yourself the texture and re-upload it with glTexSubImage

rpxmaster
03-15-2006, 11:15 AM
Thanks for your reply. Although I could attempt the code to your solution, I would rather not if I don't have to. I use more than one image loader, and it would be cumbersome if I had to manipulate the string I pass into glTexImage2D, or use glTexSubImage.

Is there a way to achieve a pseudo-"palette swap" effect using GLSL? I don't really care about the OpenGL texture itself being manipulated, just the output. I am writing a 2D tiling application. Sorry I've been away from the forums for way too long, and I've never dorked with GLSL.

jide
03-15-2006, 12:23 PM
yes you can do that with glsl.

ZbuffeR
03-15-2006, 01:10 PM
I would rather not if I don't have to. I use more than one image loader, and it would be cumbersome if I had to manipulate the string I pass into glTexImage2D, or use glTexSubImage.uh, what string ?
whatever, it is not a good design IMHO to link image loader directly to opengl, what about loaders that whould return the texture data, then other functions that do the actual uploading ?
If you really don't want to change your current design, consider using glGetTexImage* calls after loading texture to re-get it, modify it, then re-upload to a different texture name id with glBindTexture.

BTW palette tricks are no more used since quake2 (player color was hardcoded within skin) and GL_EXT_paletted_texture (http://oss.sgi.com/projects/ogl-sample/registry/EXT/paletted_texture.txt) is really deprecated.

You can emulate it with a GLSL shader, but that means a lot of processing for each frame, and modern hardware. Depends on your usage of course. Can you tell more about it ? Are the color swap infinite, or do you have a fixed sets of color combinations ?

rpxmaster
03-15-2006, 02:12 PM
By string, I meant the GLvoid *pixels param.

The color swap is infinite. I am making a 2d isometric engine similar to old-school Final Fantasy. In my design, if I had a single image representing a human, I would need to be able to set the skin color, hair color, eye color, etc. However, there is only one color that represents hair color, and so on.

I am attempting to duplicate the texture data and modify the colors on the cloned one. So, in my design I need to have multiple instances of similar texture data, the only difference being the colors. In this point in development, I can change the design if I need to.