pascx86's picture

Error rendering in VirtualMachine

Hi, thank for your time. I'm drawing a 3D point cloud representing a 2 height map that I'm loading from a bmp file. I've created a simple code " out of my project " to test this :
When I'm running it In a Virtual Machine ( Windows 7 x64 in VMWare, host running Windows 8 x64 ) the point cloud doesn't appears correclty.
In fact there is something like, half of the point cloud!
The exact same code work correclty on my real computer.
I've take a capture of the two result. The I've simply put the one from my real computer over the VM. We can easly see the difference.

Thanks for your help!

Inline Images


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
the Fiddler's picture

Check the return value of GL.GetError(). You might be exceeding some limit in the VM, like memory size or number of elements in a VBO.

What does GL.GetString() return for StringName.Renderer, StringName.Vendor, StringName.Version? It may be that you are not getting hardware acceleration in the VM and are falling back to Microsoft's software renderer. (In this case, try reinstalling the VM tools.)

What is the value of glControl.GraphicsMode in each case? It may be that the VM is using fewer bits in the depth buffer (e.g. 16 vs 24), which might cause weird results in complex scenes.

pascx86's picture

Thank for your answer.
The result for GL.GetString() is :
StringName.Renderer : "Gallium 0.4 on SVGA3D; build: RELEASE; "
StringName.Vendor : "VMware, Inc."
StringName.Version : "2.1 Mesa 7.12-devel (git-8cad948)"

I'm checking the value of GL.GetError() at the end of each call to glControl1_Paint() and there is never any error.
This is the value of glControl1.GraphicsMode when I've created the first point cloud :
{Index: 33, Color: 32 (8888), Depth: 16, Stencil: 0, Samples: 0, Accum: 0 (0000), Buffers: 2, Stereo: False}

Before the first point cloud, the value was null.

( Sorry for my english... )

Thank you again,

the Fiddler's picture

Everything looks correct. It might be worth trying a GraphicsMode with a 24-bit depth buffer (i.e. pass new GraphicsMode(32, 24) to the GLControl constructor), but it's unlikely this would make a difference.

Are you using a vertex buffer (VBO) to render the point cloud? How many points are you trying to render?

It appears as if the rendering is somehow limited to the first 32K or 64K points, which might have something to do with VBO size limits. IIRC, you can check the maximum VBO size using GL.GetInteger(GetPName.MaxElementIndex). Checking the OpenGL spec on VBOs is probably a good idea, too.


Before the first point cloud, the value was null.

This sounds like a bug, actually... Will have to take a look.

pascx86's picture

Oh, ok thank you...
did you mean : GL.GetInteger( GetPName.MaxElementIndices) ? it return zero...
And :
new GLControl( new GraphicsMode( 32,24 ) ) isn't compiling, there is no constructor with 2 int.
but :
new GLControl( new GraphicsMode( new ColorFormat(), 24 ) ) works, and it does'nt change anything.. :(
Thank you for trying ( I'm open to suggestion ) !