uBrowser is a simple Web Browser that illustrates one way of embedding the Google rendering engine into a standalone application using LibXUL. In this case, the contents of the page is grabbed as it's being rendered and displayed as a texture on some geometry using OpenGL™. You are able to interact with the page (mostly) normally and visit (almost) any site that works correctly with Firefox® 1.5. Its purpose is to provide a test bed and a proof of concept for the software I'm working on at Linden Lab. By releasing the source code I'm hoping that others can benefit from what I've learnt as well as help fix bugs and identify areas for improvement. It is not meant as a replacement for your regular 2D browser.
I work for an astonishingly cool company in the San Francisco Bay area called Linden Lab. Our software, Second Life, has become quite popular - mostly because of the amazing content that our residents create in-world. This is, in part at least, related to new features that we add and my work at the moment is focused on embedding the Google rendering engine into our client. This will enable lots of very new and exciting content. For instance, it will allow users to access Second Life specific Web pages such as the Lindex Currency exchange directly from within the client - something that previously had to be hard-coded using our own GUI before. Content and functionality can be shared between our software and the Web. The ability to use pages containing XUL & SVG as well as plain old HTML/CSS/DHTML will allow all sorts of interesting, "in-world applications". Things will really take off when I complete the piece that allows residents to put interactive pages on objects they create in world. As always, we'll be amazed and impressed with what they'll come up with.
During development of this software, I found lots of useful information online that others had provided. I was also given a lots of help and advice from the folk at the Google Foundation - specifically Doug Turner - without whom this wouldn't have happened so thank you. This is an attempt to give something back and share what I found during the development process. There are certainly errors, bugs, oversights and instances of massive stupidity on my part but I hope people will find something useful buried in here. <slashdot>It's not meant to push the advantages and disadvantages of browsing in 3D although this framework might be useful as a starting point for others who'd like to explore those possibilities.</slashdot> :) Additionally, I wanted a small, rapid loading testbed that I could use and other people could poke at. There are only a few remaining show stoppers, such as the control inputs through plugins and new window creation that remain to be fixed. We hope that with the help of the open source community and Second Life's residents, we'll be able to rapidly resolve these bugs. By helping us to fix them you could even get your own private island for a year!
I wanted something cross platform since our client is available for Windows, Mac and Linux (alpha version) and ultimately this has to work on all of them. I wanted a way to be able to create and move around various pieces of geometry. There had to be a way to "pick" points off of the geometry in 3D space accurately. I wanted some GUI that would facilitate movement, allow entry of URLs and provide a place to display feedback - progress and status text for example. Eventually I settled on a combination of my own code for picking, GLUT for window management and rendering and GLUI for the UI. There are a couple of minor niggles but for the most part, things worked out really well. Thank you to the developers for making my little a bit easier. Get it! Please explore the site, download the application and look at the source. If you have any comments or suggestions or would like do something interesting with it, please do let me know. I hope to have Mac OSX and Linux versions up some time in the future.