Horde3D http://www.horde3d.org/forums/ |
|
API changes for Horde 1.0 http://www.horde3d.org/forums/viewtopic.php?f=8&t=231 |
Page 1 of 1 |
Author: | marciano [ 31.01.2008, 01:59 ] |
Post subject: | API changes for Horde 1.0 |
It will probably still take at least two releases until Horde will get to the 1.x level but nevertheless I'm doing step by step some changes to improve the API (this already began for 0.14). I will list a few points from my TODO list so you can give feedback if something should be done in another way.
|
Author: | swiftcoder [ 31.01.2008, 05:04 ] |
Post subject: | Re: API changes for Horde 1.0 |
marciano wrote: Ja, would help make the API a lot friendlier to use. marciano wrote: Almost no other languages have an unsigned type, so this makes sense for all bindings. marciano wrote: I don't really think that the node attachments are necessary at all. The scene-graph/renderer should not be the container for an applications entity data, instead it should be using the entity data. marciano wrote: My $0.2 here is that they should remain fixed after creation, to prevent users from blowing up their own code. However, I would like a little more ability to create all resources programmatically - in particular a simple way to import programatically generated textures and shaders on the fly. |
Author: | DarkAngel [ 31.01.2008, 06:50 ] |
Post subject: | Re: API changes for Horde 1.0 |
marciano wrote:
Swift pointed out that "The scene-graph/renderer should not be the container for an applications entity data", which will usually be the case, but some users may want to attach extra data to the scene-graph nonetheless. I believe the simplest way to allow this is to give the user access to an opaque pointer-sized variable simply called "userData". This would require another set/get function though for use with pointers, e.g. setNodeParamv that takes a 'void*'. |
Author: | Volker [ 31.01.2008, 11:27 ] |
Post subject: | |
The reason why we introduced the attachment thing a few month ago, was that we didn't want to store the whole scene graph again in some other type of data format. In case of e.g. physics data, which may depend on the Mesh Data, I really like to store this data at the scene graph file, which makes the creation of physics nodes for example using Bullet quite easy. Since Horde3D does not use the attachment data and only forwards it to the registered callback I think it should be Ok, if we have this attachment mechanism. Dropping the attachment class itself should not be such a great problem, since e.g. the PhysicsEngine does already know which nodes contain attachments and can ask Horde, if the node's transformation changed. The only thing I really want to see integrated is the callback thing for attachment data. |
Author: | Tuser [ 23.02.2008, 12:10 ] |
Post subject: | API for gcc |
I am trying to use Horde3D with C in Linux. First I though that would just work because of the feature description Simple and intuitive C-style DLL interface for easy integration with virtually any programming language. Beside the fact that was already mentioned - the C++ class in Horde3D.h - there are some other difficulties to use Horde3D from C. I won't describe them now as I don't know if it should be usable from C directly. But I think it should be as there is define DLL extern "C" __declspec( dllimport ) in Horde3D.h. I would be keen on making Horde3D usable from C in Linux directly. But maybe it is already and I just missed something. |
Author: | marciano [ 23.02.2008, 12:34 ] |
Post subject: | |
The main use case for the engine is certainly C++ but of course it would be nice if it could be used from C too. The class has been removed now and functionality replaced by some C-API functions. What other problems (except the namespace of course which can easily be removed) do you see that keep the interface from being used in pure C? EDIT: Ok, of course there are bools which are not supported by C but should be easy to convert to ints. |
Author: | Tuser [ 23.02.2008, 13:38 ] |
Post subject: | |
There are several enum definitions with the same name. E.g. enum List appears several times in different structs. But gcc only allows one definition for enum List. I am not very comfortable with this kind of C++ stuff, but it seams that C++ allows it, because it appears in another context. Edit: Made it understandable and correct. |
Author: | swiftcoder [ 23.02.2008, 23:45 ] |
Post subject: | |
marciano wrote: Ok, of course there are bools which are not supported by C but should be easy to convert to ints.
It would be good to remove these anyway, as some compilers (in particular Metrowork's) seem to have funny ideas about how many bytes a bool is, even in C++. |
Author: | Tuser [ 24.02.2008, 16:22 ] |
Post subject: | |
Tuser wrote: There are several enum definitions with the same name. E.g. enum List appears several times in different structs. But gcc only allows one definition for enum List.
I think there is no simple, compatible solution for that. I was playing around with it, but I think it is unavoidable to use #ifdef. |
Author: | Tuser [ 07.03.2008, 22:04 ] |
Post subject: | |
I started to use Horde3D via C. I would be willing to help with this tralslation, but I am not sure if you want the Horde interface to be like this. As the C++ enums in structure are not usable from C, change Code: struct EngineOptions { to enum List { ... } } Code: enum EngineOptionsList { The functions must be changed as well:... } EngineOptions Code: DLL bool setOption (EngineOptions::List param, float value); would become Code: DLL int setOption (enum EngineOptionsList, float value);
With those changes everything stays unchanged except for some calls, such as EngineOptions::SceneGraph -> EngineOptions.SceneGraph. The solution is straight forward. I was looking for something to allow calls of this kind EngineOptions::SceneGraph, but found nothing. What do you think? |
Author: | marciano [ 10.03.2008, 10:02 ] |
Post subject: | |
Just made a quick test: In Visual Studio C++ EngineOptions.SceneGraph didn't work but EngineOptionsList::SceneGraph is fine although the compiler gives a non-standard warning. About the bool to int conversion. Actually I like bools since they have some additional semantic compared to ints. In general I think it should be ok to have separate bindings for C++ and C. Doing the conversion is trivial and in the future after 1.0 the API should stay more stable and not change so often. |
Author: | swiftcoder [ 10.03.2008, 13:34 ] |
Post subject: | |
marciano wrote: Just made a quick test: In Visual Studio C++ EngineOptions.SceneGraph didn't work but EngineOptionsList::SceneGraph is fine although the compiler gives a non-standard warning. EngineOptions.SceneGraph is not legal C, so it shouldn't work. You should just be able to use the enum label directly in both C and C++ though, i.e. just SceneGraph - which indicates that the label name should probably be EngineOptions_SceneGraph or some such. marciano wrote: In general I think it should be ok to have separate bindings for C++ and C. Doing the conversion is trivial and in the future after 1.0 the API should stay more stable and not change so often.
For an integrated workaround for C, this snippet at the beginning of the headers should fix things nicely: Code: #ifndef __cplusplus
#ifndef bool #define bool unsigned int #endif #endif |
Author: | reiko [ 10.03.2008, 18:35 ] |
Post subject: | |
marciano wrote: For an integrated workaround for C, this snippet at the beginning of the headers should fix things nicely:
Code: #ifndef __cplusplus #ifndef bool #define bool unsigned int #endif #endif Eek! Aside from the point that bool won't be recognised by that #ifndef to start with, redefining language keywords is about as horrible as it gets. Imagine what will happen to the poor programmer who innocently includes a header that does this in their project. The best approach would probably be to define a H3DBOOL type or similar. Edit: Okay, the __cplusplus check would probably avert disaster. But I still think it's a bad idea on principle ![]() |
Author: | Tuser [ 10.03.2008, 20:54 ] |
Post subject: | |
swiftcoder wrote: marciano wrote: Just made a quick test: In Visual Studio C++ EngineOptions.SceneGraph didn't work but EngineOptionsList::SceneGraph is fine although the compiler gives a non-standard warning. EngineOptions.SceneGraph is not legal C, so it shouldn't work. You should just be able to use the enum label directly in both C and C++ though, i.e. just SceneGraph - which indicates that the label name should probably be EngineOptions_SceneGraph or some such. Oh my god. Of course, you are right. I tried different ideas in one header - one used a struct, that's why there is a "." - and somehow mixed two different ways in my post. Sorry, I should not waste the time of others just because I was not enough concentrated on that topic. |
Author: | AcidFaucet [ 18.03.2008, 05:15 ] |
Post subject: | |
A callback for the addition of an application specific draw process, such as debug drawing of physics primitives would be nice in a future version. |
Page 1 of 1 | All times are UTC + 1 hour |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |