Awesomium

I noticed a user rurbino checked in some code under awesomium and also included the libraries. To do some better book keeping as well as keep things consistent. We should move this to a third party lib. Moreover, Awesomium 1.5 is now out under a free-to-use pay to license. I’ll probably be trying to fold this into panda in a clean manner in the following days.

Thoughts comments?

Awesomium was integrated following the example of ODE. Default installations of panda wouldn’t use it.
The libraries I committed were under $WINTOOLS, which AFAIK is only used by VR studio.

Oh hello hello. You must the Red I’ve heard so much about from Zac. Yeah I’m thinking about making Awesomium available to the community at large which means getting it rolled into the makepanda system and making part of third-party packages.

Rather than having a dedicated folder. I’m thinking about putting this one under grutil where movieTexture currently is as really this is just a dynamic texture with a mouse and keyboard handler.

I should have checked WINTOOLS I suppose. I thought you were someone from outside of VR :stuck_out_tongue:

PS I might be emailing now that I know you are in VR.

I was love to have Awesomium in the panda3d for every one to use!

Yeah, I’ve noticed the commits too. Great!
For the record, I’ve heard that awesomium 1.5 has recently been released:
khrona.com/2010/01/13/awesom … available/

It would be cool to have awesomium available in the official distribution (although not for 1.7.0, as I’m already about to release it).

hmm for some reason I though awesomium was (L)GPL ish

Its not, in fact its totally unfree:
khrona.com/products/awesomium/licensing/

Ah, I see. Hm, the licensing is a real show-stopper I’m afraid.

pymt appears to be like awsomium and free
pymt.txzone.net/wiki/index.php/Extensions/Webkit

Hi, I know that this is a more icky replacement, but there is a awesomium branch based off of version 1.08 and it is still open source (awesomium went closed-source later after the 1.08 release)

Do you think this version would be compatible with the current work?

I’d bet if it is, we could include such an amazing feature with Panda3d, yes?

http://github.com/pathorn/awesomium

:smiley:

As it happens, I’m trying to get berkeliumworking with panda.

It’s similar to awesomium, except it’s open source, has a simpler interface and works with linux (awesomium for linux isn’t released yet, and if it ever is, it will be closed-license)

That said, it’s newer than awesomium and has had a little less work done on it, most notably I don’t think theres any javascript bindings yet, which is unfortunate.

I’ve never done any work in panda before, and don’t know much c++ so its going a little slow, but I’ve got it compiling, and interrogate appears to work, though I havn’t found the python output yet, so maybe things aren’t quite working yet.

If things go well, I’m planning to use berkelium for all gui elements in my game. Assuming something can be done about the lack of javascript access.

fynn, why don’t you create a thread in the “new features in development” forum. I’m very interested in this and I (and others) may be able to help you. I wanted to use awesomium when it came out until I learned about the LGPL license, then it even went commercial. Berkelium on the other hand is BSD. I hadn’t heard about it until now.

I have a question though, becuase I’ve never used awesomium so I’m not sure how these libraries work. What do you mean exactly by javascript bindings? The berkelium website states that javascript is supported, so I guess that no-bindings means that you can’t call C++ code from inside a javascript script running inside a website displayed by Berkelium, right? In that case, could one use this event?

virtual void Berkelium::WindowDelegate::onConsoleMessage	(	Window * 	win,
WideString 	message,
WideString 	sourceId,
int 	line_no	 
)			 [inline, virtual]

Then in javascript you could use console.log() or throw() to send a string message through this event, the message could include any data, you could uuencode it for example, that should serve as a primitive means of communication with the host program. This is hacky though, but as long as it works…

Now we still need communication the other way around, from the host program to the script, and it seems you can do that with this:

virtual void Berkelium::Window::executeJavascript	(	WideString 	javascript	 ) 	 [pure virtual]		

So whatever “javascript-bidings” means, do you think one could achieve any level of integration through these two things? Am I missing something?

Does this mean we will be able to use html-css for gui in panda apps?

If someone can integrate it, then yes.
You could also use javascript and flash as well
… I’m still gonna be trying to do this, my c++ knowledge is low though and chromium is a pain in the Hum to build… so yeah… :unamused:

Oh, well, integrating berkelium was easy. Here’s box.egg textured with slashdot:

I’ll commit this to the Panda 2.0 branch shortly.

There’s just something I don’t like, it spawns another process (apparently all the chromium embedding libraries do the same). I don’t like this at all, it means if the user terminates the process your application gets crippled. I thought these libraries embedded webkit/webcore directly :frowning: I’ll see if I can add some error handling to berkelium to at least be aware of this termination.

Wow! This is amazing! I eagerly await more information on this, and, about the new processes… berkelium embed’s Chromium, which is google’s modification to webkit/webcore… and they wanted all of the browser’s tab’s (different ‘renderers’) to be seperate from eachother incase one crashed, you have all the other tabs still. so that is the reason for the new-process thing I think…

Anywhom, amazing work, I eagerly await to see how you did it :smiley:

Yeah, I understand how chromium works having worked with the source myself for a time, but it’s overkill if you just want an html renderer. Ideally you would just embed webkit/webcore and everything would run on a process (I thought awesomium and berkelium were this). Imagine that you use berkelium for your gui and an user sees berkelium.exe in the task manager and shuts it down. Right now what happens is that your gui elements turn black. Individual processes should be isolated and the only reason something should fail is due to hardware failure or exhaustion of a resource. Letting your users (or your users’ programs like antivirus) turn parts of your program off in realtime without any way to handle it is a potential problem.

Not to mention that since you are using a full build of chromium your binaries will be huge (30 MB extra) whereas proper webkit embedding would be much, much smaller. You are also using more ram than you should. You don’t need the sandboxing mechanism if you are just drawing some HTML that you yourself produce, the code is controlled, nobody is gonna exploit it.

I would like to see if we can turn berkelium.exe into a dll and have it run in the same process. Anyone up for that? I remember from building chromium that it could be built without sandboxing (single process) -the linux version at the start didn’t have sandboxing so it was mandatory- so it’s mostly a matter of rebuilding and adding the entry point.

I can see how this would be bad, it’d be confusing if your game’s gui dissapeared…
Now on the other side of things, what if someone wanted to make a 3d web browser (sort of what I had in mind), it may need some of that security… question is, is there any way to get the security of the different processes, while still being able to detect if it dies to “restart your gui” per say?

Same comment as above, though I can see where you’re coming from as far as the 30MB comment… that would be a problem, however, in theory they could ship only once with the panda runtime and then they only have to download it once, yeah, or are you saying for c++ panda3d projects?

amen to anyone who gets this working, either way if I can display web pages in panda3d with or without sandboxing, I will praise the person that get’s it all to work :smiley:

I just saw this:
librocket.com/

Could this be an alternative lib (they just switched to MIT license)?

That isn’t an alternative to Berkelium/awesomium (I bet the css/html support is pretty limited). But it is an alternative to CEGUI or PandaGUI. librocket was supposed to be a better GUI system than CEGUI but it was commercial so it’s pretty good news.

Of course, if you were planning to use berkelium/awesomium merely for a gui and you didn’t need to show websites then yes librocket blows them out of the water.

Gogg, could you point me in the direction of the panda 2.0 code? I’d love to play with any code you have so far. :wink: