[ANN] Announcement: NUI C++ multi-platform appllication framework, 3D hardware GUI

Started by
6 comments, last by neywen 15 years, 1 month ago
I am happy to announce the release of NUI: http://www.libnui.net NUI is a C++ application framework that runs on the iPhone, MacOSX (universal), Win32 and Linux. Its main distinctive features is its use of 3D hardware to render the UI via OpenGL, GL Es and Direct3D. Its features include: - Low level abstraction: string, files, paths, streams, network, timers, threads, mutexes, etc. - Widget layout engine - Really many widgets: text, grids, boxes, collumn views, tree views, etc. - Integrated widget tree visual introspection/debugging - Web-like CSS engine - Modern rendering and compositing engine - Animations for widgets and their attributes - Attributes to remote control widgets - Audio IO and Audio file loading/saving (including compressed audio files decoding) - Stable and proven lib: many applications have been released since 2001 with NUI at their core. - ... The lib is dual licensed under the GPL and commercial licensing for non free software developers. Check out the website for more information: http://www.libnui.net Thank you very much, Sebastien
Advertisement
I downloaded and executed nuiDemo.exe and it crashed. Then I executed yapuka.exe. (It took over 15 seconds to startup the first time: it was scanning for fonts or something but that was only 1 time). After that, nuiDemo also executed correctly. Here's the crash report from the first time I ran nuiDemo.exe:

Quote:Unhandled exception 0xC0000005 (ACCESS_VIOLATION) caught at address 0x00408939 in the thread 3752.
-> Registers:
EAX = 0x00000088, EBX = 0x01DF2A50, ECX = 0x00000000, EDX = 0x0EAE0001,
ESI = 0x01DFEDF8, EDI = 0x00000000, EBP = 0x0012DED0, ESP = 0x0012DE6C,
EFlags = 0x00010246, CS = 0x001B, SS = 0x0023, DS = 0x0023, ES = 0x23, FS = 0x003B, GS = 0x0000
-> Last error: 0x00000000
-> Call stack (thread 3752):
nuiDemo(?) : 0x00408939(0x01488FF0,0x01DFEDF8,0x01488FF0,0x01DFEDF8,0x01DFDA08,...)
nuiDemo(?) : 0x00450F77(0x42C80000,0x00000000,0x41400000,0x00645AF8,0x00000000,...)
-> Call stack (thread 3268):
ntdll(?) : KiFastSystemCallRet(0x00000002,0x018DFFA4,0x00000000,0xFFFFFFFF,0x00000000) + 0x0 bytes
kernel32(?) : WaitForMultipleObjects(0x00000002,0x018DFFA4,0x00000000,0xFFFFFFFF,0x020A0014) + 0x18 bytes
?(?) : 0x72C9312A(0x00000000,0x00000000,0x020A0014,0x00000000,0x7FFDE000,...)
kernel32(?) : GetModuleFileNameA(0x72C930E8,0x00000000,0x00000000) + 0x1B4 bytes
-> Call stack (thread 3028):
ntdll(?) : KiFastSystemCallRet(0x00000040,0x019DFE78,0x00000000,0xFFFFFFFF,0x00000000) + 0x0 bytes
kernel32(?) : WaitForMultipleObjects(0x00000040,0x019DFE78,0x00000000,0xFFFFFFFF,0x019DFF78) + 0x18 bytes
DSOUND(?) : 0x73E814A2(0x00000040,0xFFFFFFFF,0x00000000,0x019DFE78,0x01453C24,...)
DSOUND(?) : 0x73E8294A(0xFFFFFFFF,0x0000003F,0x01454918,0x019DFF94,0x01453C24,...)
DSOUND(?) : DirectSoundCreate(0x00150778,0x01453C24,0x73E8B993,0x7C91056D,0x73E8B958) + 0x537C bytes
DSOUND(?) : 0x73E8297E(0x01453C24,0x00150778,0x7C91056D,0x01453C24,0x7FFDD000,...)
kernel32(?) : GetModuleFileNameA(0x73E8B94B,0x01453C24,0x00000000) + 0x1B4 bytes
-> Call stack (thread 768):
ntdll(?) : KiFastSystemCallRet(0x00000001,0x01ADFE80,0x00000000,0x000001F4,0x00000000) + 0x0 bytes
kernel32(?) : WaitForMultipleObjects(0x00000001,0x01ADFE80,0x00000000,0x000001F4,0x01ADFF80) + 0x18 bytes
DSOUND(?) : 0x73E814A2(0x00000001,0x000001F4,0x00000000,0x01ADFE80,0x01451EFC,...)
DSOUND(?) : 0x73E8294A(0x000001F4,0x00000000,0x00000000,0x00000000,0x01451EFC,...)
DSOUND(?) : 0x73E82A13(0x01451EFC,0x0069004D,0x00720063,0x01451EFC,0x7FFDC000,...)
kernel32(?) : GetModuleFileNameA(0x73E8B94B,0x01451EFC,0x00000000) + 0x1B4 bytes
-> Call stack (thread 3356):
ntdll(?) : KiFastSystemCallRet(0x00000040,0x01BDFE78,0x00000000,0xFFFFFFFF,0x00000000) + 0x0 bytes
kernel32(?) : WaitForMultipleObjects(0x00000040,0x01BDFE78,0x00000000,0xFFFFFFFF,0x01BDFF78) + 0x18 bytes
DSOUND(?) : 0x73E814A2(0x00000040,0xFFFFFFFF,0x00000000,0x01BDFE78,0x01457F2C,...)
DSOUND(?) : 0x73E8294A(0xFFFFFFFF,0x0000003F,0x01457F78,0x01BDFF94,0x01457F2C,...)
DSOUND(?) : DirectSoundCreate(0x00150778,0x01457F2C,0x73E8B993,0x7C91056D,0x73E8B958) + 0x537C bytes
DSOUND(?) : 0x73E8297E(0x01457F2C,0x00150778,0x7C91056D,0x01457F2C,0x7FFDA000,...)
kernel32(?) : GetModuleFileNameA(0x73E8B94B,0x01457F2C,0x00000000,0x00000000,0x00000000) + 0x1B4 bytes
-> Call stack (thread 3048):
ntdll(?) : KiFastSystemCallRet(0x00000002,0x0148DE04,0x00000000,0x000001F4,0x00000000) + 0x0 bytes
kernel32(?) : WaitForMultipleObjects(0x00000002,0x0148DE04,0x00000000,0x000001F4,0x00000BE8) + 0x18 bytes
nuiDemo(?) : 0x00566E3E(0x00000000,0x006E0075,0x00000000,0x00000000,0x00000000,...)
-> Call stack (thread 3688):
ntdll(?) : KiFastSystemCallRet(0x00000002,0x01483E78,0x00000000,0x000001F4,0x00000000) + 0x0 bytes
kernel32(?) : WaitForMultipleObjects(0x00000002,0x01483E78,0x00000000,0x000001F4,0x00000E68) + 0x18 bytes
nuiDemo(?) : 0x00565044(0x15FF0875,0x7C801490,0x8C0FC085,0x000302B4,0x5D40C033,...)
?(?) : 0xFF006AEC(,...)
-> Call stack (thread 2216):
ntdll(?) : KiFastSystemCallRet(0x00000001,0x00000000,0x0217FFEC,0x004E3CEB,0x00000001) + 0x0 bytes
kernel32(?) : Sleep(0x00000001,0x00445833,0x00000001,0x0217FFEC,0x000008A8) + 0xF bytes
nuiDemo(?) : 0x004E3CEB(0x004E3D20,0x01489AD8,0x00000000,0x02230000,0x01480050,...)
-> Call stack (thread 2808):
ntdll(?) : KiFastSystemCallRet(0x00000000,0x00000034,0x00000000,0x00000000,0x7FFD6000) + 0x0 bytes
kernel32(?) : GetModuleFileNameA(0x76B0AEE7,0x00000000,0x00000000,0x00000000,0x00000000) + 0x1B4 bytes
-> Call stack (thread 3508):
ntdll(?) : KiFastSystemCallRet(0x00000428,0x00000064,0x00000000,0x02AF2C18,0x697051D1) + 0x0 bytes
kernel32(?) : WaitForSingleObject(0x00000428,0x00000064,0x01C049C0,0x69664D8C,0x00000000) + 0x12 bytes
?(?) : 0x697051D1(0x00000000,0x00000140,0x000001E0,0x00002126,0x00001701,...)
-> Computer configuration:
OS type: WIN32 NT
OS version: major 5, minor 1, build 2600
Number of processors: 2
Processor type: AuthenticAMD, stepping 2, model 11, instruction family 15
Processor name: AMD Athlon(tm) 64 X2 Dual Core Processor 4600+
Processor features: FPU, MMX, SSE, MMX extensions, 3DNow, 3DNow extensions, RDTSC, CMPXCHG8B, CMOV
More processor features: VME, DE, PSE, MSR, PAE, MCE, APIC, SEP, MTRR, PGE, MCA, PAT, PSE36, FXSR


The 'common file dialog' in yapuka has a very long response time. Everytime I click on 'browse', my floppy disk station is checked, which takes about 1 second. When I click on 'A:' while my floppy station is empty, I get the "There is no disk in the drive. Please insert a disk into drive A:" Windows-error. I have to press 'Cancel' 5 times to get rid of it.

nuiDemo looks very nice. It has very nice widgets. I really think that this library can be very useful.

However, I would be happier if your license would also be licensed under the LGPL. Many of my applications are licensed under a non-restrictive free license like the zlib/MIT license, so I can't use your library. I don't want to start a flamewar against the GPL, but you can't really say the GPL is a 'free' license. Forcing a potential user to license his whole project under your license will give him less freedom than a proprietary/commercial license.
Hi!

Quote:I downloaded and executed nuiDemo.exe and it crashed. Then I executed yapuka.exe. (It took over 15 seconds to startup the first time: it was scanning for fonts or something but that was only 1 time). After that, nuiDemo also executed correctly. Here's the crash report from the first time I ran nuiDemo.exe:


Ok, I think we have found the source of the problem and we should have a fix very soon (I'll post here when it's OK to get the new files from the site.

Quote:The 'common file dialog' in yapuka has a very long response time. Everytime I click on 'browse', my floppy disk station is checked, which takes about 1 second. When I click on 'A:' while my floppy station is empty, I get the "There is no disk in the drive. Please insert a disk into drive A:" Windows-error. I have to press 'Cancel' 5 times to get rid of it.


Hehe, my Mac runs windows with bootcamp but it has no floppy so I never had that problem ;-). I'll look for a fix as soon as my old PC boots up again. Thanks for the info!

Quote:nuiDemo looks very nice. It has very nice widgets. I really think that this library can be very useful.


Thanks!

Quote:However, I would be happier if your license would also be licensed under the LGPL. Many of my applications are licensed under a non-restrictive free license like the zlib/MIT license, so I can't use your library. I don't want to start a flamewar against the GPL, but you can't really say the GPL is a 'free' license. Forcing a potential user to license his whole project under your license will give him less freedom than a proprietary/commercial license.


This one is harder to fix. I plan to post the reasoning behind using the GPL for nui on the nui wiki one of these days. To sum it up:
- NUI used to be LGPL but I never provided DLLs on any platform for technical reasons (NUI has quite a share of templates and templated code doesn't make any sense with DLLs and the LGPL). I also never like DLLs for personal reasons (mainly related to the support nightmare they quickly become, been there, done that...).
- LGPL without DLLs is pretty much the same as GPL because there is actually no way to use the lib without linking statically against your code.
- I don't want to give the code of ten years of my life for free without having the slightest chance to get something from the community (hence the GPL which I feel gives better chances to get some fixes and improvements from the people who happily use NUI in their software for free)
- I don't want to close the door to commercial uses of NUI, hence the possibility to get a commercial licence to use it, for a fair fee. (I think the fee is fair because it is indexed on the size of the team and the number of products to release with it).
- I'm not against getting some revenue back for all the years of hard work that have gone into making NUI what it is today (and the years to come! I don't plan to stop working on it anytime soon). So a liberal licence like freebsd, MIT or Mozilla would not work for me either, unless I create two versions of NUI: the lite version would be open-source and the complete one would be commercial but with all the features enabled. This really sounds like an incoming support nightmare for a little team like us.

I'm sure you have many good reasons to dislike the GPL and I respect that but until I find another licence that works fine with all the points above, there is little chance we will change that in the foreseeable future.


Anyway, many thanks for your feedback! I'll post here when we commit the fixes to the svn server.

meeloo
I think you need to be honest with yourself and realise that few if anyone are going to pay money to use this in a commercial environment.

That's not dissing your work, it's just that companies won't pay for unproven stuff whatever it promises.

Realise this and all your licensing problems go away.

We have our own inhouse engine that does all of the above and more, running on more commercially viable platforms such as Wii and Xbox 360. And we give it away to clients when we do work for hire on it with only a paragraph in the contract that keeps us able to use it ourselves without interference.

Number of times other publishers/developers have used this totally free without restriction, release proven, fully featured, with source, cross platform engine? Nil.
------------------------------Great Little War Game
NUI is very far from unproven! Over the last few years more than ten shrink wrap professional products have been released with nui. You may not know about pro audio products but there are very serious companies using those. For example, MachFive is used extensively at skywalker ranch on their high end sound design workstations. On the other end of the spectrum Beatmaker is also built with NUI and it is a huge success on the iPhone since the very beginning of the App Store.

I have no licensing problems, I was merely explaining the reasons for my choices :-).

I'm much rather talk about the technical merits of NUI if you don't mind!

Cheers,

meeloo

[Edited by - meeloo on April 12, 2009 7:43:35 PM]
We have fixed the crash on the first launch of an NUI application on a machine. The binaries for the demos have been updated on the website and the source code is on the svn repository.

Cheers

M.
Something is wrong with this presentation... Like something is missing. Maybe you could write a little game with it and a tutorial so gamedeveloper wannabes feel interested in it. A good price could also help.

my 2c.
[size="2"]I like the Walrus best.
Thank you for sharing your opinion! It helps us a lot.
Game development is not the only purpose of nui. Most of the apps that have been developed 'til now are professional audio applications, in-house editing tools for games, embedded and kiosk applications.
Anyone can download a demo from the website (http://libnui.net/pages/download.php). The demo source code, and a set of tutorials for basics of nui programing are provided in the library archive and in the svn repository.
We also continue to write the development documents on the wiki (http://redmine.libnui.net/wiki/libnui).

Also, we will try to get some time to produce a demo and tutorials for game development.

Best regards,
neywen
nui project.

This topic is closed to new replies.

Advertisement