I just have a short theory question about multitexturing.
If I use multitexturing in OpenGL is it fully hardware supported then? Or is there a way to do it totally wrong.
Will every additional multitexture affect the drawing speed or only when it cannot be done in one pass?
I have cube and a texture is fitted exactly on one face, than I draw a detail texture which I tile on the face. When I increase the detail-tiling (am I making mayself clear?) the framerate will drop.
How come when it’s same texture all over again?
I always thought that the framerate does not depend on how often but how many unique textures you use.
Thanks for any info on this.
OpenGL will currently not “transparently” drop down to software multi-pass for multi-texturing; it will only expose as many multi-texture units as are “implemented” by hardware.
I put “implemented” in quotes, because just because it’s there, doesn’t mean that it’s free to use. You may have to send more texture coordinates per vertex, or generate more TexGen coordinates, etc. Also, some cards do multiple textures by looping internally, so you’ll get a slowdown per texture you add (or per two, or whatever).
Last, every texture you read costs internal memory bandwidth on the card. If you stay over a small area (say, within an 8x8 square) then there’s usually some internal texture block caches that will help you out; if you range all over the texture, there will be more data to read. If you have a large texture and tile it a lot, then the entire texture will be read many times, which is what’s slowing you down.
This is why MIP mapping can be such a performance gain, by the way; especially in the cheaper modes (GL_LINEAR_MIPMAP_NEAREST).
OK, that is good to know. Thank you for the information.
Just in case you come back, I have another little question.
I just read that on nvidia GPU’s the automatic mipmap-generation is only HW-accelerated when used with
glCopyTex[Sub]2DImage and the following formats: GL_RGB5, GL_RGB8, GL_RGBA8.
After adding on of those numbers (5,8) behind my GL_RGB/GL_RGBA the only thing I got was a white screen. So what do those formats meen anyway?