Clear up the Vista / OpenGL Aero UI?

Started by
13 comments, last by gold 17 years, 8 months ago
Quote:Original post by Yann L
...
That's why I'm a little worried about the direction GL3 is taking. Some ideas are very good, the new object model for example. But I'm a little afraid that Khronos is too keen on breaking what is in fact an excellent design philosophy, in order to "catch up" with D3Ds marketshare in the games sector. I'm afraid that GL3 might infact mimic D3Ds direction too much for marketing reasons alone.
...


The current trend is that OpenGL 3.0 will be like the "Pure" OpenGL2.0 proposal from 3DLabs, with the Lean & Mean profile, with a compatibility layer on top for older apps to still work.
I really like that idea, since that wouldn't break compatibility, make drivers simpler (and so less bug prone), and allow those who need very high performance at compatibility cost (game devs) to have it.

-* So many things to do, so little time to spend. *-
Advertisement
3DLabs design was quite different and had various fresh ideas that would have gave more power to the programmer. It wasn't strickly aimed at making GL drivers simpler. It was quite the opposite. Very complicated.

In the early days, D3D was garbage compared to GL. No one said SGI's design was braindead but of course, as time passes, people forget the past or just weren't there to begin with.
Sig: http://glhlib.sourceforge.net
an open source GLU replacement library. Much more modern than GLU.
float matrix[16], inverse_matrix[16];
glhLoadIdentityf2(matrix);
glhTranslatef2(matrix, 0.0, 0.0, 5.0);
glhRotateAboutXf2(matrix, angleInRadians);
glhScalef2(matrix, 1.0, 1.0, -1.0);
glhQuickInvertMatrixf2(matrix, inverse_matrix);
glUniformMatrix4fv(uniformLocation1, 1, FALSE, matrix);
glUniformMatrix4fv(uniformLocation2, 1, FALSE, inverse_matrix);
Excuse me, but I didn't read everyone's posts just yet, I still have this question burning in my mind. Will they be replacing the indices (for say, textures) with actual pointers? (Or something that doesnt require translation by software as the indices did?) That I had always thought would be a great idea and I saw it in the list for the OpenGL LM.

However, I'm quite reluctant to give up the bind-unbind system because I was under the impression that that was part of why OpenGL draw calls are quicker than d3d ones. Since you can render, and when you call the render function, OpenGL doesn't move around any texture objects, or any shaders, or any vertex buffers, its all been set in place beforehand, which was a big advantage imho(but I don't actually know anything, so its really just an opinion).

cheers
-Dan
When General Patton died after World War 2 he went to the gates of Heaven to talk to St. Peter. The first thing he asked is if there were any Marines in heaven. St. Peter told him no, Marines are too rowdy for heaven. He then asked why Patton wanted to know. Patton told him he was sick of the Marines overshadowing the Army because they did more with less and were all hard-core sons of bitches. St. Peter reassured him there were no Marines so Patton went into Heaven. As he was checking out his new home he rounded a corner and saw someone in Marine Dress Blues. He ran back to St. Peter and yelled "You lied to me! There are Marines in heaven!" St. Peter said "Who him? That's just God. He wishes he were a Marine."
Quote:Original post by Ademan555
However, I'm quite reluctant to give up the bind-unbind system because I was under the impression that that was part of why OpenGL draw calls are quicker than d3d ones. Since you can render, and when you call the render function, OpenGL doesn't move around any texture objects, or any shaders, or any vertex buffers, its all been set in place beforehand, which was a big advantage imho(but I don't actually know anything, so its really just an opinion).


No, the reason OGL's draw calls were/are quicker than D3D's was down to the user-kernel switch which had to take place when you issued the draw commands for D3D, which is a MAJOR killer on time. This is now gone in D3D10 (huzzah!) effectively removing OGL's advantage in that department.

From my understanding of the new object model and how things will work instead of doing bind-set-bind-set-etc-etc-draw you'll now produce a vertex object which contains the bind points for the various attributes and when you go to draw you basically pass this in and tell it to draw things. This is a good thing as it removes CPU overhead of multiple bind-set pairs at draw time as well as the overhead the drivers have when setting up data (for example as i recall NV do a fair amount of validation work on a glVertexPointer() call, this work could be moved to one single place thus removing this overhead from draw to setup).
(nb: this could be wrong and it could change, but thats the impression I've got atm)

As for the design being brain dead, when it was concieved and for some time afterwards OGL's design wasn't, infact it pretty closely mirrored hardware from my understanding, it's only since the shader revolution that things have started to get icky and it's getting further from the hardware. Of course with backwards compatiblity being a major OGL feature it's hard to 'fix' this problem without breaking things. The compatibility layer over the top of the fast layer seems like the best idea, gives new projects the speed while not breaking the old ones.
I'd like to comment on the "braindead" SGI designs...

The names model was designed at a time when the CPU overhead of a hash table lookup was insignificant relative to the cost of display list execution. Simply sending data across the wire from the host to the graphics adaptor was expensive! The lookup wasn't even close to a bottleneck. Meanwhile, names provided some valuable properties:

1) Push model - object creation does not require a round trip; the new object model as currently proposed requires a round trip per object. Does this matter in practice? It sure did in 1992. Nowadays the majority of implementations are direct renderers, but thin clients threaten to bring back the client-server model.

2) Robustness - an opaque pointer is an invitation for the application to corrupt the driver heap. Again, does it matter? Maybe, and some implementations will likely continue to use names for robustness.

Bear in mind that each step taken through the evolution of the API was considered the best course of action at the time. The binding model was introduced in EXT_texture_object to maintain the OpenGL 1.0 texture APIs. Every extension thereafter followed the precedent, for better or worse - but these were ARB designs, not SGIs, so not all of the mistakes can all be blamed on the original design.

Hindsight is 20-20, and given fourteen years of hindsight I feel comfortable changing the model based on what we've learned. Certain DX benefitted from these lessons, but MS had a simpler task, as they serve a narrow market segment and have never prioritized backward compatibility.

Are we making the right decisions in the new design? Time will tell. High latency connections are uncommon but they still exist, and robustness is always a concern. We walk in the footsteps of giants, and these are pretty big shoes to fill.

This topic is closed to new replies.

Advertisement