How hard can it be to make java3d into ...

… an useful pluggable architecture ?

Here is my idea. The entire engine would be divided into plugable modules. Each module could be replace in real time by freezing the engine replacing the module and then unfreazing the engine back again. But before that cached data was disposed off and have to be requested again to be read by the new module. That module would then have to be initialized into a state similar in functinality to the one the older module was in.

I don’t know very much of OpenGL but i belive that it is a average complex api that does much more than drawing polygons. Maybe it could be used to accelerate other parts of the engine besides the rendering part.

Another useful part are software renders and software modules that do what accelerated modules would do but in software. More stable, less dependent on the computer drivers and configuration.

Then there are the advantages of debugging in a app organized in modules. Its like with television sets. If you dont know what block has the fault simply replace modules and see what works.

Anyone dares to sujest how this module subdivison would be done and what would be the protocols for each to communicate with each other ? That is in what format and what info would have to be transfered between different modules ? And how would the programmer define the meaning of “similar state functionality” when replacing modules ?

…sounds complicated! ::slight_smile: :stuck_out_tongue:
Can you give practical examples of “should be” modules and what they are good for?

Why not classic & easy-to-use libraries?

[quote]…sounds complicated! ::slight_smile: :stuck_out_tongue:
Can you give practical examples of “should be” modules and what they are good for?
[/quote]
Modules right. By module i mean a piece of a pluggable architecture, but not just that, something that has a state and a set of specific cached data and is integrated in a system. That piece can be unplugged and replaced in real-time without affecting the engine current system status and functionality. Cached data is flushed and the fata is requested again for the new module to restore the engine status.

One of the biggest pratical advantages of this is debugging and error recovery. If something goes wrong or an error is detected in real-time the engine runs a recovery method and replace the module that caused the fault by another and recaches all data to get the engine running again in the same state.
Another is flexibility. You want to use the last techs like shaders just add an improved module or download it at the internet even without stoping your game and voila you can run your old games with shaders, shadows. However this wont change the game itself it would only improve effects that already exist or add new visual effects.

A lot of people in these foruns could tell you why. ;D

Supose you want to use OpenGL instead of DirectX you need to download the java3d sdk pre-compiled for OpenGL. You cant work with both systems without installing two JVMs. You want to use a software rendering with java3d for compatibility with the macs ? There isnt one and you cant do one because the code inside java3d is protected.
Another reason ? Because the code is protected you have to wait and be dependent of Sun politics and the team that is developing the technology to have access to the new features like pixel/vertex shaders. Hardly an acceptible solution for people that are targeting a product that uses the last tech and want to develop in a clean architecture like java.