JTalton's picture

Golem 3D 100th Commit

Still working away. Committed my 100th commit to my local repository.

Converted the ColorBuffers to VertexAttribBuffers. This allows much finer control over the bits sent to the GPU. I was hoping to have an "int" in the GLSL and it worked on my nVidia Quadro. On the nVidia 8800 GT is was not coming across as an int even though I was binding to "attribute int" in the GLSL. Looking at the documentation it does look like it should come across as a float which is unfortunate. Changing it to a float made the 8800 work great. Modified the shader and used "<<" and "%". Going back to the Quadro the shader would not compile because of the "<<" and "%". I had to remove those and the shader now works on both. I need to find a good way to get specific bits out of the VertexAttrib.

Open File and Save File dialogs are working. Multiple models being open at the same time is supported.

Disabled all code paths except for points which allows me to concentrate on designing and optimizing the editor with a subset of data.
The thread management has been rewritten to allow work items to be dependent on other work items. Each group in the model is processed separately taking advantage of multi-processor systems. In addition the thread management allows idle items that can happen after the rendering pass. This allows an action such as "Move" to happen, then rendering will happen, and after that idle processing goes in and handles the undo stack. This makes the interface respond faster since the undo stack processing is handled during idle. Undo and redo support is working good.

Optimized the measurement and layout of UI controls. They are now only done when something actually changes. I still need to do the same for the rendering by better caching into Vertex Buffers and Display Lists. I have converted most everything to Vertex Buffers. I have some good reuable code for handling vertex buffers and vertex arrays. It would be good to get into a library and put out there for others to use.

I am still tweaking a lot of code. At some point I will need mouse "Grab" support that grabs the mouse input and keeps it even if the mouse moves outside of the window. Of course I need to implement that same thing within the UI framework inside Golem3D. I am also looking forward to the new main loop scheduler that hopefully will make it in a release. It's hard to tell how much CPU Golem3D is using when the current scheduler uses 100% CPU even on a simple window.


Comment viewing options

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

Sounds like lot of progress.

I'm pretty sure the differences between the Quadro and the 8800 card boil down to drivers. OpenGL 3.0 supports integer attributes and there's a possibility that newer drivers expose them to 2.1 contexts if they support EXT_gpu_shader4.

As it happens, I've hit the same GameWindow snags. I can't make any meaningful estimation (having exams at the moment), but I'm working on it. In the meantime, you can use System.Windows.Forms.Cursor to "grab" the cursor and add a call to Thread.Sleep after SwapBuffers when the render time is low enough. (Not very nice workarounds, I agree, but at least they are simple.)

JTalton's picture

The Quadro was supporting the integer attributes but not the % and << operators complaining about EXT_gpu_shader4 not being supported. It was just interesting tracking everything down. The ATI x1600 mobile GPU on my MacBook Pro runs the final GLSL good.

Thanks for the Grab hints. I have a bit to do before I will need it.