new article wip Direct3D 9 on the fly geometry

December 22, 2008

I’m commencing work on a cool article regarding on-the-fly geometry code. In OpenGL it’s really a snap (glBegin(), glEnd(), glVertex(), glNormal(), etc.) but in Direct3D it’s fucking impossible. You cannot do any of it on the fly. You consolidate everything down to a single call, (a few complex ones for vertex buffers) that requires all this pain-in-the-ass setup, and it’s STILL less efficient. I don’t get you fucking people at M$. ARB can do it, so you definitely can.

But anyway… I created a little class called GeometryInterfaceD3D9. It takes OpenGL style on-the-fly commands, then does the work for you. It’s not really fully optimized to the extent you can with D3D, but it works, and emulates OpenGL very well. Just avoid quads at all costs, because while I technically added emulation for them (quad primitives not available in D3D9 wtf?) they are DEADLY SLOW. I could fix this with a bit more preprocessing, but for now it just does multiple calls to RenderPrimitiveUP(), so it is, as I said, ridiculously slow. THIS IS NOT THE FINAL ITERATION, I WILL FIX IT KAY ZOMG.

The reason was that the main Renderer class and children RendererOpenGL and RendererD3D9 were initially designed for these calls. Then I eventually realized that this is not how you do it at all with Direct3D. But I firmly believe that these on-the-fly geometry instructions are the clean way of doing the API. So, I accepted a less efficient implementation on RendererD3D9. Don’t worry about the lack of efficiency there. Just as VertexBuffer and VertexBufferVBO are efficiency optimized for OpenGL, VertexBufferD3D9 will be optimized for Direct3D. And of course, all the specific implementations are invisible to the user of the library, so it is important to add layers that unify the API. So far this is going well.

Anyway. I will add most of this above text to the article page, and also the code. Please check it out when it is complete.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: