VBO trouble in Windows Vista.

I have made an application that uses VBO’s to render large volume of data. I use around 160mb total on the GPU. This program crashes on windows vista and OS tells me that the display driver has crashed but has recovered. There are no exceptions thrown by Java, however, and the program continues to run, it just doesn’t render anything.

Same program works fine with smaller data sets such as around 80mb. The weird part is, that this program worked fine with 160mb usage under windows XP. And if I tried to set buffers that were too large for the GPU, it threw exceptions and at least gave me some errors.

What could be happening here? Does Windows Vista use more GPU memory for itself, so my program doesn’t have enough of it? Is there a way to get this working under Vista or will I just have to use larger data sets under XP?

What card are you using? Have you tried it on machines with different hardware/os combinations?

Sounds like it could be evidence of crumby Vista display drivers.

I have GeForce 8600GT 256mb. It is on a laptop.

What would be a good web-site to get alternative drivers for my card? I just used the official ones so far. My games seem to work fast enough, or at least about as fast as they did in XP (Mass Effect in particular).

Developments!

It appears that the problem is not with me using too much memory, but using glDrawElements instead of glDrawArrays. This is so weird, but what the hell is going on? This is obviously not a memory issue, but something to do with glDrawElements vs glDrawArrays. My index array is already in GPU memory anyway, so it can’t be because of indexing, or can it? Is there some sort of overhead with glDrawElements that pushes my card over the line?

would there be any way of using glMultiDrawElements with VBOs? Specifically I would like to contain my index and count arrays on GPU memory.

Index arrays are treated as unsigned data types with opengl. What many indices do your models use? Besides 160MB of data, how many individual vbo’s are you using. Can you explain more about how glDrawElements caused your game to crash. Unless you restructured your geometric data, glDrawArrays() and glDrawElements() shouldn’t produce the same visual results, either.

I use IntBuffres for index arrays. I don’t believe nio buffers offer unsigned version of int, but I don’t believe it matters, since both take up same exact size, and my indecies don’t get larger than 2^(32-1).

Yes I know it makes a lot of drawing difference, but i tried glDrawArrays to see if it would work on same sized vertices and colors buffers, and it did, versus glDrawElements that didn’t. In both cases the index buffer was already in the GPU memory anyway.

The crash came in Vista turning its screen black and then coming back on with a message that video driver has crashed but has been recovered successfully.

Hello. I seem to have solved this problem by using:


for (int i = 0; i < 2; ++i)
        {
            int inc = true_count / 2;           
            gl.glDrawElements( GL.GL_QUADS, inc, GL.GL_UNSIGNED_INT, inc * i * 4);
        }

instead of one glDrawElements call. The FPS is not bad either :D.

Why does this happen though? Is there a limit on how many primitives DrawElements can do at one time?

Also same problem existed for glDrawRangeElements.

There is a MAX_ELEMENTS_INDICES variable (using glGetInteger), that is the max recommended number of indices to use (according to the gl spec). Perhaps vista’s drivers assume a bit more than a recommendation. You could check what it is on your card and see if you were ever going over.