NoXzema wrote: |
---|
I'm okay with suggesting on API over the other and stating reasons but stating things like, "NEVER use Ogre" isn't even justified. |
I figured I'd have to elaborate. Fair enough.
Is this even real life? People suggest against Dev-C++ because it's so old that it doesn't function properly and the original author can't even be contacted anymore. OGRE is an actively developed engine with several hundred contributors that you completely dismissed Because(tm). Shame on you. Same goes for IrrLicht. |
It doesn't matter how many people use Ogre. Both it's code and performance aren't the best.
Of course what I'm about to say applies to Ogre 1.9 since 2.0 hasn't been released yet.
Its inefficient designs of the renderer itself make it a terrible example of what one should look like. The programmers seem to not like sorting very much, and they love to load irrelevant shit deep in the parts where speed matters the most.
A short look in the render system. My comments are in the
/**/
tags (is that what they're called? lol.):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
/* When have you ever had a single render operation? This is likely going to
be in a tight loop, so you're going to be calling the function hundreds or thousands
of times when you can easily just send everything once? Dafuq? I guess they just like unnecessary overhead. */
void D3D11RenderSystem::_render(const RenderOperation& op)
{
// Exit immediately if there is nothing to render
/* Okay, so you're this far into the renderer and you haven't sorted yet? Wtf?
You're also dereferencing a pointer, loading maybe a hundred or so bytes into the
cache just to access a single 4 byte integer.
R.I.P, cache. */
if (op.vertexData==0 || op.vertexData->vertexCount == 0)
{
return;
}
/* Oh, so the Ogre devs love global state. Pretty much killed all chances of efficient
multithreaded rendering in these two lines. */
HardwareVertexBufferSharedPtr globalInstanceVertexBuffer = getGlobalInstanceVertexBuffer();
VertexDeclaration* globalVertexDeclaration = getGlobalInstanceVertexBufferVertexDeclaration();
/*
Again with the sorting... is it against your religion?
*/
bool hasInstanceData = op.useGlobalInstancingVertexBufferIsAvailable &&
!globalInstanceVertexBuffer.isNull() && globalVertexDeclaration != NULL
|| op.vertexData->vertexBufferBinding->getHasInstanceData();
/*
Ditto.
*/
if (op.useGlobalInstancingVertexBufferIsAvailable)
{
numberOfInstances *= getGlobalNumberOfInstances();
}
/*
Wut. So now you're calling some polymorphic function in the middle
of a render operation. Must love cache misses.
*/
// Call super class
RenderSystem::_render(op);
/* (Cut out the rest to save space) ... */
// Determine rendering operation
D3D11_PRIMITIVE_TOPOLOGY primType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
DWORD primCount = 0;
/*
Sort, sort, sort!
*/
bool useAdjacency = (mGeometryProgramBound && mBoundGeometryProgram && mBoundGeometryProgram->isAdjacencyInfoRequired());
/*
I think that's enough for one post...
*/
}
|
gg cache :(
Not to mention that both Ogre and Irrlicht designed their code on outdated libraries! (OpenGL 1.x and D3D9? WTF! Irrlicht has support for D3D8!)
The reason why a lot of games are CPU bound is because programmers do stupid stuff like that.
You realize that the only thing those APIs do is abstract parts of the OS right? |
How does this contradict
Avilius wrote: |
---|
While developing my own software I quickly realized that SDL and SFML aren't really helpful when you want to do something non-trivial with the OS. |
?
NoXzema wrote: |
---|
...The only thing that DirectX needs is a window which is mostly what those APIs specialize in... and both APIs allow you to use the underlying window handle to do whatever with for any platform it supports if it doesn't support the operation directly. |
The thing is that SFML doesn't allow you to get the helper classes that you'd get with OpenGL. It was designed as an OpenGL library. It defeats the purpose of even using the graphics module because it's more or less useless.
It's similar with SDL, but they barely provide anything to help OpenGL either so it doesn't hurt as much.
A lot of the core API in OpenGL originally started as extensions from vendors. Not sure if you know that. A vendor has little right to say, "Here's an API, add it to OpenGL because I said so." That isn't how it works. If an extension is useful, the purpose of OpenGL allows other vendors to implement those extensions to their fullest extent. From there, it can be adopted as an ARB or Khronos extension and eventually into core if it's sufficient. |
How does this contradict what I've said?
Barely supported on Windows? |
The driver state for modern contexts is pitiful to say the least.
OpenGL isn't supported on consoles? Do you even know why OpenGL ES is a subset? Please dude, you're getting ridiculous. |
OpenGL ES is supported on [some] consoles, but no developers will ever use it because the speed is ridiculous. The only people who use OpenGL ES on consoles are homebrew developers. Pros don't use it.
The PS3 doesn't even support GLSL. Lol.
There may be an implementation, but there is no support.
htirwin wrote: |
---|
It depends on what you want to do, but I would personally recommend giving WebGL a try. It's OpenGL ES with a javascript interface. It's nice because you can have your game hosted on your website, and it doesn't really matter that much which OS or device they have, as long as their browser supports it and their hardware can handle it. There are also a few really nice libraries like three.js which can make things pretty easy for you. |
Sounds neat, but I'm sure the OP already invested some time in C++. Learning javascript is kind of pointless at this state sadly. (He also might not be interested in web programming).
It kind of depends on the use case doesn't it? |
Since he's using Windows 8, I don't see why not.