--- Stefan Dösinger stefandoesinger@gmx.at wrote:
Hello,
You need to turn on backbuffers / backingstore in your xf86config and those two functions were reasonable fast (so long as you don't play mess around with the transfer modes) older driver (can't renember which version)
Does this still work with newer drivers? 8.16.20 for example? It doesn't work for me. (I don't understand this clearly from your sentence.)
It stopped working a few driver versions ago gentoo only goes back as far as 8.14.13 and I don't have a copy of any older drivers kicking around., I've sent a bug report to ATI, I hoped they'ed fixed it as part of their performance improvements in 8.16.20 but apparently not.
I've got a hack to go into wined3d that speeds up locking the backbuffer by not bothering to read it if it's just been cleared, this get's movies using DirectX and backbuffer locking up to a good frame rate with low CPU usage.
That's exactly the problem I have! I expect it to occur too when Empire Earth finally runs. Can you send me your hack? I'd like to try it with D3D7.
I'm just about to put it into wined3d, I can have a look at backporting it to d3d7 but the idea is to get d3d7 using wined3d at some point.
All you have to do is flag the backbuffer when it's cleared as cleared, and then at the end of a drawing function flag the backbuffer as not cleared. Then when you lock the backbuffer check the flag and if it's flagged as cleared just memset the buffer to whatever the clear value is instead of doing a glReadPixels (most of the time you don't need the memset because the buffer is going to be completely rewritten, on my home pc without the hack I get about 10fps max with 100% CPU load, with the hack I get 30fps with about 30% CPU load)
Another question: I've hit a problem where fglrx crashes on glBegin(GL_*) when GL_TEXTURE_2D is enabled. Any experiance / hints?
Hmm.. I haven't had any problems with that yet, so long as I'm actually using GL_TEXTURE_2D and providing texture coordinates, in wined3d I disable any texture states that aren't used:
for (i = 0; i< GL_LIMITS(textures); ++i) { /* Bind the texture to the stage here */ if (GL_SUPPORT(ARB_MULTITEXTURE)) { GLACTIVETEXTURE(i); } glDisable(GL_TEXTURE_1D); switch(This->stateBlock->textureDimensions[i]) { case GL_TEXTURE_2D: glDisable(GL_TEXTURE_3D); glDisable(GL_TEXTURE_CUBE_MAP_ARB); break; case GL_TEXTURE_3D: glDisable(GL_TEXTURE_CUBE_MAP_ARB); glDisable(GL_TEXTURE_2D); break; case GLTEXTURECUBEMAP: glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_3D); break;
Thanks for this hint, it looks like you saved me from doing a time-intensive investigation!
Stefan
___________________________________________________________ To help you stay safe and secure online, we've developed the all new Yahoo! Security Centre. http://uk.security.yahoo.com