Well, they're not useless, just not strictly necessary as a basic primitive. If you're trying to simplify things it's a good candidate for cut list.
Well, they're not useless, just not strictly necessary as a basic primitive. If you're trying to simplify things it's a good candidate for cut list.
Maybe (I actually can think in some very good uses of triangle fans, specially when it comes to spherish surfaces). But I'm pretty sure that Microsoft removed them with the excuse that they were slow, because they consider triangle fans to be as slow as individual triangles o_O I guess the excuse they put is the cache, but c'mon, instead of caching the two last vertices, cache the first and the last one...
But seriously, if they really wanted to speed up things, they could have made an index buffer object or something. That would be faster than any kind of triangle grouping you can think on.
Oh, and something I forgotten to mention:
Vertex buffers in immediate mode are the only choice in D3D10. For some weird reason retained mode was removed (I swear there are a lot of useful things that got removed). OK, I understand that bigger power allows you to use more brute force, but c'mon, there's no reason to use it as an excuse to remove stuff that helps speeding up, specially because buses aren't as fast as the CPU and the GPU, and are probably the main bottleneck reason for slow downs... And immediate mode isn't exactly very friendly with that =/Originally Posted by HexCat
What do you mean with an index buffer object? While former Direct3D versions have dedicated index buffer with Direct63D 10 you just create a buffer (with an index buffer binding flag) and use it as index buffer.
What makes you thing that Direct3D 10 supports only immediate mode buffers? The buffers (like all other resources) in Direct3D 10 keep their data until you overwrite it with something else. There are only some rules about hinting the system how often you will change the data. These hints will have an impact on how you need to update the data (direct memory mapping or using a copy instruction).
Well, vertex buffers hold an array of vertices, so an index buffer would hold an array of indices :P Think of it like a huge batch and the GPU uses all the vertices according to the specified indices.Originally Posted by Demirug
Hm, maybe I'm gonna check harder. Direct3D 10 really scares me with so many removed features x_X At least with OpenGL you can use legacy functions if you don't have time to learn newer stuff (e.g. you're in a hurry, or you're porting an engine and you want to test as you implement new features rather than having to port it all before being able to do it).
I guess the fact the docs explicitly say that retained mode was removed?Originally Posted by Demirug
The Direct3D Retained Mode API was completely removed from Windows Vista.Mh, OK, maybe I got confused there. But still, Microsoft removed support from retained mode, so for our matter the issue is the same... (I actually wonder if video cards are optimized for immediate mode, I could get the PGL engine to render faster using glVertex*() directly rather than using arrays, but maybe I was just lame :P)Windows Vista continues to support the same Direct3D and DirectDraw interfaces as Windows XP, back to version 3 of DirectX (with the exception of Direct3D's Retained Mode, which has been removed).
I hope OpenGL 3 still allows doing this.
That “Direct3D Retained Mode” is something complete different. It was some sort of high level engine that was part of the first Direct3D version. It was hardly used and I know only one game that was shipped with this. This has nothing to do with the retained/immediate modes that you now from OpenGL.
Hey man you are complaining about D3D10 being retarded and give only examples which show, that you really don't know what you are talking about!
Adjacency information is needed for the geometry shader, index buffers (in GPU RAM) are of course possible (and the preferred way), retained mode is something different than immediate mode (and afaik D3D6 or 7 already dropped retained mode, only that now also Vista dropped support for those old versions, if i understand that correctly).
Immediate mode in D3D? Was there ever such a thing? And OpenGL will also drop the immediate mode for good reasons (NO it is not supported by hardware and your glVertex*() example is something very different (it doesn't even belong to immediate mode)). Immediate mode can (and certainly will) be provided through helper APIs layered on top, just as it should be.
Stop babbling and ranting about stuff that's clearly your fault due to incompetence!
Jan.
GLIM - Immediate Mode Emulation for GL3
Retained mode was removed because it was terrible. It was an awful way to store vertex data, it had lousy performance compared to decent use of immediate mode, and it didn't keep up with the rest of the API. Plus it sucked up valuable development resources.For some weird reason retained mode was removed
How many surfaces are spheres? Or even "spherish"?I actually can think in some very good uses of triangle fans, specially when it comes to spherish surfaces
Yes, and because of that, the ARB has had to stall OpenGL development so that the API can be rewritten from scratch. And those legacy functions? They were the first things to go.At least with OpenGL you can use legacy functions if you don't have time to learn newer stuff
...Originally Posted by Jan
Maybe it's just that I don't think shaders are the holy thing like many people do :P (I've even seen tutorials teaching about shaders before teaching what a transformation is, for the record). And I already said it was OK, period. It wasn't so obvious to me, specially being out of context like it was explained from where I took that.Originally Posted by Jan
Immediate mode by definition is when you send data directly to the GPU (as we should know), and that's pretty much what does D3D normally, so technically D3D had immediate mode already. If it's explicitly mentioned or not, that's another thing.Originally Posted by Jan
OK, Sik, you caused another flamewar again >_> Now I really want that Internet blacklist so I can get in =/Originally Posted by Jan
Well, several building structures, some complex models, maybe statues (by "spherish" I didn't mean full spheres, it may be just a small slice of a sphere, or even the internal side, or whatever), mechanical parts, etc. There're lots of things that normally get ignored, through yes, often these are artificial things. But they do exist, and in a lot of places.Originally Posted by Korval
Yeah, but even if they prevent you from using new functionality, you still can do something, even if not as advanced as you can do with the new stuff. Being forced to relearn everything only to be able to do something I could do before easily simply is stupid. It may be better, yes, but if I don't have time then let me use the old stuff. I don't mean really old stuff, maybe just stuff from the immediately previous version =/Originally Posted by Korval
Oh, I better autoban myself from this topic, I started causing trouble again... >_> I swear why when I don't think the same as other people, people always get angry on me and start flaming me >_>
So now you're saying D3D10 should have not added this new feature (primitives with adjacency info) just because you don't use it? Way to go.Originally Posted by Sik the hedgehog
Hold on a sec... GPUs were working that way perhaps in 1996. They have moved on quite a bit from the model where all data had to be "pushed" onto them all the time. Wake up!Immediate mode by definition is when you send data directly to the GPU (as we should know), and that's pretty much what does D3D normally, so technically D3D had immediate mode already. If it's explicitly mentioned or not, that's another thing.
The point is: while fans are a nice helper in some (rare) situations, they are not faster than lists or strips. And unlike strips, you can't join several fans together with degenerate triangles. So they are slower in practice.Originally Posted by Korval
And no, there is no "submission of vertices twice" with triangle lists... ever head of index buffers and GPU post-transform cache?
The cache on a GPU hasn't worked like that in years; they basically arrays which cache the last N vertices and use the index data to perform a look up.Originally Posted by Sik the hedgehog
This is why indexed drawing operations are to be prefered, without the index data it's pretty much impossible to sanely use the vertex cache as the GPU has no way of knowing if the vertex data is a repeat it has in the cache or a new set of data.