There is posts around where i explain bugs, and even give fix for them sometimes. Last week i downloaded the last version of tonegod, just to find that a bug i commented, explained in details why it's a bug and how to fix it is still there, untouched. Create a table, add a row, try to remove it and, bam, crash. Why ? Because of a call to the method "remove" on a stock list (java.util.List) with an int as parameter, where you should have an Integer (so you'll ask to the list "remove this element", not "remove the nth element"). It just can't work, it never worked and will never work. And it's still there.
I downloaded the last jme build (even if it says 3.0.1 ... wasn't it 3.1 ?) and ... the rendering bug is still there. Try to do some offscreen rendering (create a viewport, a framebuffer, attach a geometry etc) in the simpleInit method and you'll get terrible results. Partial fix for this ? Manually add "renderManager.render(0, false)" at the very beginning of the method, fix most problems (not all of them, they seem all gone after 1 or 2 frame, so you have to re-render your scene then).
And most problems aren't bug, they are missing features. I mentioned the portal culling, the character control (except if you find cool to fly with you go down a steep, bump on every stairs, stick to the wall in air if you walk in its direction), the impossibility to update a part of buffer of a mesh (you have to resend the buffer you want to update, the impossibility to do any secure network without doing manually the chain certificate verification + message encryption/decryption + key management ...
And when it's not a bug, not a missing feature, it's something wrongly done.
Why the hell can't i give AssetLoader/Locator to the asset manager ? I can only give it classes of locators and loaders. So, no way to customize the creation of it with some parameters (like "locate things from THIS database" for a locator).
And why can't I get a Locator from its class (just like you do for assetmanagers and controls) ?
I do have a file that contains both textual datas and a png image (encoded with base64). It's like a font, but for multiple styles and in one single file, so it's easy to import etc.
To load the file, i need to load the image. A PNG. So, what should i do ?
1) re-write the png loading. Sounds dumb, right ?
2) extends the assetmanager, take a scalpel and with a lot of usages of Java' reflexivity, add missing features and fix it.
3) throw away the entire assetmanager and rewrite my own.
4) make my font loader both a locator and a loader. And as it's not possible directly, thank to this "gimme a class, i'll create an instance myself" bullshit, use global (static) variable. I load the font until i need to load the image. Then i store the decoded byte array of the image in a ByteArrayInputStream, in a static variable. Then, i request the assetmanager for the image named "a_dumb_placeholder_with_some_randomness_ending_with.png". No locator will be able to locate it, except the font loader, which then will give the bytearrayinputstream in the openStream method.
Yes, it's 4. And it's ulgy as hell, but, still, works.
As i said it already : i have no problem in doing code, even a lot of it. I do have problems, however, doing only code and never a game. I have no problem doing my own sport choose factory, if then i can walk 100km with it. I do have problem if, in the end, i can't do that walk.
I never had this problem with Qt (and I think it's reasonable to call it "framework").
If i remember well, it was errors in the core of the library, resulting in a crash of the jvm.
So your engine is only made of two external library and your works consists solely in duke taping them together ? I hope not.
not even directly related to rendering - audio tracks, particle effects, skeletal animation, scenegraph, tons and tons and tons of advanced math, networking, input
audio : made by openal. Duke tape.
Particle effects ... made by you, and it's so not done right that I had to scalpel it with reflexivity to add basic stuff like ... particle influencer ?
Just a short pause here : you make an engine with the idea in mind of reusability, open source etc. Why, the heck are you using the keyword private ? And it's not for security, because in a lot of places you have method with public and the comment "internal use only". So, why "private" ? It just makes it harder to fix bugs. Put that in protected, and voilà.
skeletal animation and scene graph : i didn't play with the skeletal animation, but how the scenegraph is not directly related to rendering ? I was even told to not use it server side, as it didn't make sense without the rendering part.
Avanced math. A guy posted an improved version of the quaternion multiplication (btw : there is a big error in the quaternion. I don't remember exaclty, i could find it, someting like a non "Local" method which does Local stuff). Something like 15 multiplications instead of 60, with more precise results. Answer : no no, it's a core feature, it may cause problem. The comment in quaternion even said that you didn't made it. No problem here, it's a good thing to reuse working stuff but ... duke tape (not that terrible actually, doesn't come with a brand, it's called quaternion at least).
input. Wow, input. You mean that no keyboard detection input ? For a very long time i say that game shouldn't use key symbols (a, b, c, etc) but key positions. Yes, think about it a moment : when you press Z (or W, on a QWERTY keyboard) you are actually trying to press "this key under my finger extended". Same apply for left, right, jump etc. You are not writing a roman, you are using a gamepad in disguise. So you should either use the direct positions of keys or do a reverse keymap on them (what people does in their mind when they decide key assignement).
For the rest, you use an input system designed for "sleeping" programs (no insult here : paint, word, editor in general are sleeping program : the program does nothing (or nothing in essence) and only react to input. So the pipeline of calling a method when an input happens is good) when games are active programs (the game has its own life, does thing even if you don't do anything, It has its own "time arrow". The result of this is that most "input callback" just put some boolean to true, because the time arrow initiated by the user action would interfere with the time arrow already existing in the program).
You also have no abstraction between the hardware and the logic. For example, it would make sense to have a trigger when "main action" is performed, this being the touch of a touch pad or the left clic or the mouse ... or the action of an AI (subroutine) or an order from the server. It would decouple (not sure of the translation, once again) the hardware and the logic.
Even the emitter/listener system is a heavy and cumbersome system, compared to the signal slot existing in Qt (and with existing version in Java).
Or a system based on reflexivity : if a declare a method called "handle" and taking a "MouseMove" object, then the emission of a MouseMove toward me will call it. Same for network : the server would just have to declare methods and the message dispatching will be made automatically. Plus, you can extend it and add other "handle" method and extend then the procotol in the easiest way possible. The server will then not "send" message to client, but call "handle" on them (and, behind, it will be translated in a sending of the message and the call, if possible, of the "handle" associated method client side). And the client will call "handle" on its connection to the server the exact same way.
Yep, i did write a library like that, using java.nio, and it works as expected.