|
Blog at http://www.brainfold.org/blog/.
Visit #python3d on the Freenode network.
 Bills, boards and fonts, oh my |
Posted - 6/26/2007 1:32:23 AM | Ok, some Things have happened even though I haven't updated. Didn't get much done during the Midsummer weekend of course, but before and after, yes.
I decided to scratch FBO support for at least the development snapshot, since I won't be implementing deferred rendering, at least not yet, and I don't have other needs for texture render targets at the moment. I'll probably release the development snapshot Really Soon. Maybe next week.
There's now a RenderTask, which automatically renders a World on each engine tick, and automatic refreshing for Window objects (using a hidden task, of course). As a consequence, I added a new "finish" phase after the "output" phase. In the future, I might also need a "prepare" phase before the "input" phase, but I didn't add one yet since I have no need for it at the moment. I won't be going the way of "oh, this might be useful at some point in the future, maybe, I'll add it" this time. Remember that phases are fully customizable by the developer using Spineless Jelly, so it's only a trivial problem if someone needs a phase which isn't there by default.
I removed the reference from engine core to the task module by adding a tick signal, listened to by the task module, and triggering that instead of directly updating tasks. Scene rendering works better too, and transparent rendering is implemented in theory, but not really tested. Also, a lot of smaller changes as usual.
I actually started on the game project now. Of course I immediately hit a roadblock, since the engine doesn't have billboarding and font rendering in yet, so those two are next on my todo list.
And finally, my web host is doing maintenance on the database server, and as a result, the Spineless Jelly web site is showing a stupid Drupal database error page. I hope they'll make the error page a bit... more sane in Drupal 6.
EDIT 3: The site is finally back!
EDIT 2: They're working on the issue, so the site should be back soon.
EDIT: I also promise at least some kind of a screenshot for the next journal update, fancy or not. 
| |
 First milestone |
Posted - 6/20/2007 7:47:31 AM | In the journal header, you can now see what's left to be done for the first milestone of Spineless Jelly. That is, a development snapshot. I could release one already, but I want the engine to be at least remotely usable first.
I also added a couple of short articles on the web site about architecture and signals.
I wonder if no one is interested in these, or if the lack of comments results from the lack of screenshots. 
| |
 Multipass!!! |
Posted - 6/19/2007 6:09:39 PM | Ok, very basic multipass rendering is now in. It's not yet useful for anything, but it's a start. I also wrote much more documentation and cleaned things up here and there.
Proper shading integration is still waiting to be implemented (and was partly waiting for multipass rendering). I should also rewrite transparent rendering, though I'm not 100% sure how to exactly implement it with the multipass rendering system. We'll see about that.
But finally I can (at least in theory) support shadows, reflections, environment mapping etc. etc... Was about time. I have thrown a lot of work away, and repeated a lot of work with this rewrite, but I can say it's been totally worth it.
| |
 Multipass! |
Posted - 6/18/2007 1:51:42 PM | I've been doing some more work on the scene renderer, and looks like I'll have to tackle multipass rendering next. I want to support it anyway, and at least try to generalize it to handle transparents rendering too.
Can anyone recommend good articles about implementing multipass rendering flexibly and efficiently? Generic ones, or about OpenGL and GLSL specifically.
| |
 Plugins and scene management |
Posted - 6/18/2007 6:37:31 AM | I've written a couple of short overviews about plugins and scene management in Spineless Jelly on the web page. Go read, and please send feedback. 
The development front is progressing forward, slowly but surely. I moved back to vectors and quaternions for representing transformations in the scene graph, and written some comments and docstrings in modules lacking them. I've also cleaned up the OpenGL wrapper a bit. Next is more work on scene management, COLLADA loader and shaders (they need a cleanup too). I should also start writing some unit tests, to avoid having to write all of them just before the release. I know how well that went last time...
| |
 Design of Spineless Jelly |
Posted - 6/14/2007 4:51:11 AM | First, an announcement: if you are interested in working on or contributing to Spineless Jelly, or drawing a logo for the engine, please send mail to spineless@brainfold.org or visit the #spineless channel on the Freenode network. For more details, visit the home page.
I promised to write about the structure and implementation of Spineless Jelly. Since there was a request about describing the high-level design instead of specific systems, here it is. Please note though that this design might change - even quite significantly - before the 0.3 release.
Spineless Jelly?
This rewrite of Spineless is actually quite a bit less framework-like and more library-like than the previous implementation. In other words you, the programmer, have more freedom to do what you like, without the engine trying to impose specific ways of doing things, specific classes to use etc. I feel this is much more Pythonic. One example are the math classes: the renderer will accept any value that can be converted to a 3-item ctypes array as a 3D vector. Of course, this includes a ctypes array, which is the fastest way of passing arrays to the renderer. Another example are the plugins, which I'm going to talk about in a bit.
Initialization
When the engine is initialized and some basic stuff is set up (exception hook, logging), config is searched for plugins to load. Engine config can be modified directly or loaded from a config file, which is just a Python script. In Spineless Jelly, a plugin is a module or package conforming to the interface of that plugin category. Current plugin categories are renderer and windowmanager, with a single implementation each: OpenGL and Pygame, respectively. Future categories will probably include at least audio, network and physics. With a bit of hackery (__path__ and __dict__.update()), the category package is effectively replaced by the plugin package or module. In other words, if you load the opengl plugin for the renderer category, "from renderer import mesh" will actually import renderer.opengl.mesh.
The caveat with this solution is that global variables in plugin packages or modules don't work correctly. Why not? The short version is that functions defined in the plugin package will continue existing in that scope (eg. renderer.opengl), while global variables will be moved to the plugin category scope (eg. renderer). The less-than-perfect but adequate solution is to write getter functions for the global variables. For example, renderer.get_max_lights() instead of renderer.max_lights.
Running
Actually running the engine is based on tasks and phases. Each phase contains a list of tasks, and a tick of the engine consists of updating all the tasks in each phase in order. The phase list can be freely edited, and phases are actually just strings (but they could be any objects). Currently the default phases are, in order: "input", "logic", "output". For example, the Pygame window manager has an EventPollTask which belongs to the "input" phase. Game logic belongs to the "logic" phase, while rendering and audio would go to the "output" phase.
At the moment, tasks are just simple classes with start(), stop() and update() methods, but later more advanced task types might be added. For example remote (networked), delayed or coroutine-based tasks.
That's it
And that's basically it at the moment. Resource management also works, but little has changed and I've described it in a previous post. You can now use multiple loaders for a resource type, such as PygameLoader and PILLoader for Images, but otherwise it's more or less the same.
I'm currently rewriting scene management and rendering, while also working on GLSL integration and COLLADA loading, so I'm not yet going to talk about the new scene management system. It more or less resembles the old system, but with a cleaner design and other changes.
| |
 ...and web site |
Posted - 6/11/2007 4:29:48 AM | Behold the new home page of Spineless Jelly. Yes, it's still quite empty and no, it's not yet as purrty as it should, but it's still new and shiny. 
I also got Trac installed, yay for me! I'll make it public "soon".
And now for some coding for a change. I hope I can release some kind of a development snapshot during the summer, and finally some new screenshots. "Hope" might be actually "hopeless", because you all know hobby projects and schedules (especially in the summer), but yea... I can always hope. *crosses all his fingers and other appendages*
| |
 Trac |
Posted - 6/7/2007 7:34:40 AM | Dear diary,
Trac seems almost impossible to install if you don't have root access to the server. *sigh* Still, I'm not giving up just yet.
| |
 Web web web... and something to show! |
Posted - 6/6/2007 7:47:10 AM | Still no cool screenshots, but you can preview (EDIT: updated the url) the new web site! As you can see, I stuck with Drupal, as I liked it much better than Joomla. style is not final (and broken in places) and there's little content there, but I'm more or less happy with the structure and overall look now.
Opinions, please!
I still need to:
- Tweak the style and colors
- Find someone to draw a proper logo
- Write lots and lots of content
- Install Trac
Anyway, I should probably do some coding too, since I haven't programmed a line since I started working on the web site. Oh well, at least there's progress. 
NOTE: I switched my web host just a day ago, so you might still end up at the old site. If you see a jelly fish, you are in the right place. 
| |
|
| S | M | T | W | T | F | S | | | | | | 1 | 2 | 3 | 4 | 5 | | | 8 | 9 | 10 | | 12 | 13 | | 15 | 16 | 17 | | | | 21 | 22 | 23 | 24 | 25 | | 27 | 28 | 29 | 30 | | | | | | | |
OPTIONS
Track this Journal
ARCHIVES
April, 2009
March, 2009
February, 2009
January, 2009
December, 2008
August, 2008
July, 2008
June, 2008
May, 2008
April, 2008
March, 2008
February, 2008
January, 2008
December, 2007
November, 2007
October, 2007
September, 2007
August, 2007
July, 2007
June, 2007
May, 2007
March, 2007
January, 2007
December, 2006
September, 2006
August, 2006
July, 2006
June, 2006
May, 2006
|