Delgine 3D Tools & Content DeleD Community Edition
Forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Spark Engine
Goto page 1, 2  Next
 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    DeleD Community Edition Forum Index -> Other Graphical Tools
View previous topic :: View next topic  
Author Message
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Tue Apr 13, 2010 12:44 am    Post subject: Spark Engine Reply with quote

I've been talking about an engine I've been working on every now and then, and I've recently been making some videos showing it off (for a presentation about it), so I thought I'd post about it!

Material & Lighting Systems
http://www.youtube.com/watch?v=vOxVtG8zfaw

Frustum Culling
http://www.youtube.com/watch?v=9wtThxQgiu4

Spark is a scene-graph based graphics engine built ontop of the XNA Framework (so its implemented in C#). Currently, it's just intended for windows, although an Xbox 360 port is something I do one day intend (during development, I do try to keep it 360 friendly).

Technically it's open source, but its still somewhat "unreleased". Since it is a school project, it may undergo a name change and become launched as a new project.

Unlike a lot of "xna engines" out there, I do intend this to be fully featured. It's heavily based on concepts featured in David Eberly's "3D Game Engine Design" book (which jMonkey, the engine I previously used extensively was rooted in) with its scene-graph design. Current features include:

  • Extensible Material & Lighting system
  • Integrated Shader Library (basic + advanced materials)
  • "Smart Renderer" that does the following:
    -Spatial sorting (transparent objects back to front, opaque state sorting)
    -Render State Caching (keeps track of last state used, to reduce redundancy)
  • DXS Support (DeleD and Maya are currently our top two modeling tools, as XNA has default support for .fbx)
  • Integrated Bounding Volume Hierarchy (BVH) in scene graph
  • Scene-graph handles all updates automatically, and keeps track of when data is changed, so it doesn't do redundant updates if data hasn't changed
  • Collision (and picking) testing and response
  • Easy to use and extensible input system
  • Simple skeletal animation system
  • Much more like a shape library, spatial controllers, game screens for UI layering, and so on

There is also the beginnings of a game library (world objects, user-defined collision volumes, entity system, etc) is also in development for a project utilizing the engine. Eventually I'd like to put the "game" in "game engine", and eventually branch out to tools such as a world editor. This would make the engine, game library, and tools essentially be its own little framework.

However, the engine is designed to be easily extensible (especially where shaders & lighting is concerned). For instance, the scene graph is fairly "dumb", there's no spatial partitioning like a quad tree or oct-tree, but users can easily make their own implementation, and extend the scene graph to use it.

This is actually a bit of a problem I've seen with a lot of XNA-related engines out there, and one of the reasons why I started this project.

About 8 months ago I started this project for an Honors Thesis/Senior Design project (the design project used the engine to create a small game last semester, and a little puzzle game this semester). Originally for my thesis, I intended to do primarily shader & effects work, but I found myself doing more and more engine-like tasks for our design project (such as the scene graph). I wanted to have more convenience, like I had with jMonkey, in making scene objects...and now 8 months later I have Spark Engine v.6 heh.

Edit: Shoot just realized I didn't include light mapping in the effects video. A bit ago I implemented light mapping (from DeleD), here's a picture:

Back to top
View user's profile Send private message Visit poster's website AIM Address
trucker2000
DeleD PRO user


Joined: 11 May 2005
Posts: 1839
Location: Sacramento, California

PostPosted: Tue Apr 13, 2010 3:04 am    Post subject: Reply with quote

Now that's really cool. Your choice of music fit perfectly. I especially like the environmental mapping demo. Really cool.
_________________
Some day I will grow up and be a real modeler.
"Never give up! Never surrender!!"
Sys specs:
asus
8 gigs ram
Invidia gtx560 video card
Windows 8 (worst op sys Ever)
Back to top
View user's profile Send private message Visit poster's website
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Tue Apr 13, 2010 5:06 am    Post subject: Reply with quote

trucker2000 wrote:
Now that's really cool. Your choice of music fit perfectly. I especially like the environmental mapping demo. Really cool.


Yeah its APM music I've been listening to recently heh. Can find a slew of them on youtube.

Everyone seems to dig the environmental mapping, which I find ironic given it's literally 10 lines of shader code. It's a material that I have to revisit of course, most things do not 100% reflect, and it'll be nice to combine with a model's existing texture.

More people should be amazed by the normal mapping, more blood and sweat was poured into that than most of the other materials Razz
Back to top
View user's profile Send private message Visit poster's website AIM Address
Paul-Jan
Site Admin


Joined: 08 Aug 2004
Posts: 3066
Location: Lage Zwaluwe

PostPosted: Tue Apr 13, 2010 7:45 am    Post subject: Reply with quote

Awesome video! I'm currently implementing a "basic" 3D engine for the day-job (with some application-specific sugar coating on top), and this was very inspiring. As it turns out, it can be a bit difficult to discuss feature planning and minimal requirements with an audience that is unfamiliar with these 3D graphics concepts (but otherwise very knowledgable), and your video does a great job explaining and showcasing stuff.

Questions:
- mind if I use your video as a showcase for the basic lighting / material concepts? It won't be promoting your engine, but it will help me a great deal in communication Smile.
- although it's somewhat "unreleased", I'd really to browse the source... Smile I'm especially interested in the exposed interface to the user (developer). My own target audience consists of seasoned developers with very little knowledge of graphics, which can be a though combination at times.
Back to top
View user's profile Send private message Visit poster's website
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Tue Apr 13, 2010 3:19 pm    Post subject: Reply with quote

Paul-Jan wrote:
Awesome video! I'm currently implementing a "basic" 3D engine for the day-job (with some application-specific sugar coating on top), and this was very inspiring. As it turns out, it can be a bit difficult to discuss feature planning and minimal requirements with an audience that is unfamiliar with these 3D graphics concepts (but otherwise very knowledgable), and your video does a great job explaining and showcasing stuff.

Questions:
- mind if I use your video as a showcase for the basic lighting / material concepts? It won't be promoting your engine, but it will help me a great deal in communication Smile.
- although it's somewhat "unreleased", I'd really to browse the source... Smile I'm especially interested in the exposed interface to the user (developer). My own target audience consists of seasoned developers with very little knowledge of graphics, which can be a though combination at times.


Heh yeah, I've had some of that experience, but I at the moment have the better end of the stick because I still can pretty much do what I wanted!

The material/lighting video is supposed to be a showcase for a presentation monday, so it's made with people who know nothing about this stuff in mind (but still some info for those who are interested). So sure, you can use the video.

Just note that everything in my engine (because it's XNA based) requires shaders. The engine's shader library was written from scratch, although I tried to match some of the common fixed-function capabilities (like the material combinations primarily, and where appropiate). The lighting model I used too was based on OpenGL's lighting model. Ironic considering I'm now with DirectX but oh well.

As for the API, consider this XNA code snippet:

Code:
private void DrawModel(Model m)
{
    Matrix[] transforms = new Matrix[m.Bones.Count];
    float aspectRatio = graphics.GraphicsDevice.Viewport.Width /
        graphics.GraphicsDevice.Viewport.Height;
    m.CopyAbsoluteBoneTransformsTo(transforms);
    Matrix projection =
        Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
        aspectRatio, 1.0f, 10000.0f);
    Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, 50.0f, Zoom),
        Vector3.Zero, Vector3.Up);

    foreach (ModelMesh mesh in m.Meshes)
    {
        foreach (BasicEffect effect in mesh.Effects)
        {
            effect.EnableDefaultLighting();

            effect.View = view;
            effect.Projection = projection;
            effect.World = gameWorldRotation *
                transforms[mesh.ParentBone.Index] *
                Matrix.CreateTranslation(Position);
        }
        mesh.Draw();
    }
}


That's example code to draw a Model, not exactly pretty if you ask me, nor is it very friendly (example would be how the world matrix is created, you're dealing with a property called "bones" even if its not a rigged skeleton and you have all that code to repeat, it would be nice if you just set transform properties on the Model and let it do those calculations).

Meanwhile, in spark:

Code:
Mesh myMesh = new Box("Box", Vector3.Zero, 10, 10, 10);
myMesh.Translation = new Vector3(0, 10, 0);
myMesh.Scale = new Vector3(2,2,2);
myMesh.AddController(new RotateController(Vector3.UnitY, 25));

_rootNode.AttachChild(myMesh);

.....


_rendererer.Draw(_rootNode);


A Mesh is a replacement for "Model" (and Box is a subclass in the shape library). Like Node, it subclasses the root scene element "Spatial" which anything that exists somewhere in the world. Each spatial has properties for local transformations (what I'm setting above), and world transformations (e.g. if myMesh is attached to a node that is moving, myMesh moves with it with its offset of (0, 10, 0))

There's also a nifty feature for adding logic with controllers, the example above, each update frame the RotateController will set myMesh's local rotation about the y-axis with the specified angle (degrees).

_renderer is defined elsewhere (and has a Camera that takes care of View/Projection matrix updates), and that's pretty much the entire draw call - the scene graph handles the rest. Here's a breakdown of the update and draw passes (excuse the formatting, this is cut and paste from documentation):


    Update Pass
  1. Update Controllers
  2. Update World Transform (If flagged)
    a. Combine Local Transform with parent if any
    b. Cache world matrix
  3. Update World Bounding (If flagged)
    a. Merge children world bounds (or transform model bound if mesh)
    b. Propagate world bound to root (updates parent’s world bound)


    Draw Pass
  1. OnDraw
    a. Frustum Cull Check
    b. If inside or intersects, call Draw
  2. Draw
    a. If node, call OnDraw for children
    b. If mesh, add to render queue
    i. If set to skip, call Render immediately
  3. Render (Mesh only)
    a. Apply Mesh’s RenderStates (checked against renderer’s enforced states)
    b. Apply Mesh’s Material
    i. Update Material Definitions (sets shader constants)
    ii. Evoke device draw call


And all the user has to do is called _rootNode.Update(time) and _renderer.Draw(_rootNode).

As for the source...as I said it's still somewhat unreleased, but at the same time it's also on google code (bit of a contradiction), so it's not some big secret:

http://code.google.com/p/spark-engine/

Since I am a stickler for documentation, and I frequently get lost even in my own code (Marcus Brody anyone?) I try to keep up with documentation as much as possible, so even though some areas are still a mess or only partially there, a lot of classes are fully commented. Though, do note the examples project is pretty much my sandbox at the moment.
Back to top
View user's profile Send private message Visit poster's website AIM Address
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Tue Apr 13, 2010 3:31 pm    Post subject: Reply with quote

Also, I'm taking any and all suggestions for a better engine name. For the life of me I couldn't think of a better name than "Spark" since I started this, and the name kinda sounds puny now considering a lot of the performance gains I've made with the engine lately (I've been thinking of maybe "Tesla" to continue the electrical motif).

You'd think it would be an easy thing working with it almost daily and being its creator, but I haven't thought of anything snazzy yet so spark kinda stuck!
Back to top
View user's profile Send private message Visit poster's website AIM Address
Paul-Jan
Site Admin


Joined: 08 Aug 2004
Posts: 3066
Location: Lage Zwaluwe

PostPosted: Tue Apr 13, 2010 5:20 pm    Post subject: Reply with quote

Hah, I now see I can scratch "look into XNA again to see if it has improved" from my todolist. Yours looks lots better. Oh, and thanks for letting me show your movie, I'm sure it will help a great deal explaining stuff.

Love the rotation controller. I did take a more classic approach to the scene graph in my engine: meshes and other dynamic objects are explicitly attached to nodes, but aren't themselves "nodes".

If the application builder doesn't like this setup, and wants to transform the "mesh" directly, they can simply abstract this away by using a wrapper object around both the mesh and the node (I actually do this in the target application).

My engine setup is generic, but currently I'm only implementing the DirectX (9, 'cause I'm in Win32 land here) backend.

Thanks for the heads-up on the shaders, I was wondering how tesselated those models were to make those lights look as high-res as they do Very Happy. My engine is still fully fixed function, but I'm soon hitting the point where I have to mix in shader code. Something I've never implemented in an engine before, and I've yet to find a third party engine that handle this stuff to my liking. Oh well...

As a side-node, the OpenGL (and co) attenuation function is totally non-practical for most artists. Yes, I´m saying the choice we (me) made in the DeleD lightmapper is wrong. And yet I´ve implemented a similar setup in my engine as well, but at least this time I've made a note on the todo-list to get rid of it. Smile

Regarding the name, I actually like spark, so perhaps something in the same line but stronger? Names like
- Brilliance (or Brilliance 3D, etc)
- Gleam
- Luster
- Beam
- Blaze

I like Tesla as well, but to me the word Tesla is associated with "very strong but old-fashioned", or even "retro".

But I'm just mind-wandering here, so I'll shutup now.
Back to top
View user's profile Send private message Visit poster's website
AWM Mars
Member


Joined: 06 Jan 2010
Posts: 1195
Location: Wilts England

PostPosted: Tue Apr 13, 2010 6:09 pm    Post subject: Reply with quote

what about:

Radiance

Radiate

Rayzor
_________________
Politeness is priceless when received, cost nothing to own or give, yet some cannot afford.

Checkout:
http://www.awm.mars.yourinside.com/
http://www.bccservices.co.uk
http://www.localtradecheck.co.uk
Back to top
View user's profile Send private message Visit poster's website
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Tue Apr 13, 2010 8:37 pm    Post subject: Reply with quote

Paul-Jan wrote:
Hah, I now see I can scratch "look into XNA again to see if it has improved" from my todolist. Yours looks lots better. Oh, and thanks for letting me show your movie, I'm sure it will help a great deal explaining stuff.

Love the rotation controller. I did take a more classic approach to the scene graph in my engine: meshes and other dynamic objects are explicitly attached to nodes, but aren't themselves "nodes".

If the application builder doesn't like this setup, and wants to transform the "mesh" directly, they can simply abstract this away by using a wrapper object around both the mesh and the node (I actually do this in the target application).

My engine setup is generic, but currently I'm only implementing the DirectX (9, 'cause I'm in Win32 land here) backend.

Thanks for the heads-up on the shaders, I was wondering how tesselated those models were to make those lights look as high-res as they do Very Happy. My engine is still fully fixed function, but I'm soon hitting the point where I have to mix in shader code. Something I've never implemented in an engine before, and I've yet to find a third party engine that handle this stuff to my liking. Oh well...

As a side-node, the OpenGL (and co) attenuation function is totally non-practical for most artists. Yes, I´m saying the choice we (me) made in the DeleD lightmapper is wrong. And yet I´ve implemented a similar setup in my engine as well, but at least this time I've made a note on the todo-list to get rid of it. Smile

Regarding the name, I actually like spark, so perhaps something in the same line but stronger? Names like
- Brilliance (or Brilliance 3D, etc)
- Gleam
- Luster
- Beam
- Blaze

I like Tesla as well, but to me the word Tesla is associated with "very strong but old-fashioned", or even "retro".

But I'm just mind-wandering here, so I'll shutup now.


Yeah XNA is great for getting started quickly (especially with shaders). But it's also not an engine (which is why I built spark!). I'm with DX9 too, as XNA only supports 9. Though XNA 4.0 is starting to make the move to DX10/11 (although it'll be DX9).

As for the scene graph - meshes are not nodes. Both Node and Mesh extend Spatial, but Spatial's parent is of type node. So there is some tight coupling between Node/Spatial. Meshes are defined to be leaf-nodes only, so they should not have children nor have the capacity to have children.

Regardless of type, anything that is a Spatial can be manipulated directly (local translation, scale, transformation etc). XNA's "Model" class sounds a lot like your wrapper, their Model class in some ways is both a node AND the mesh objects (and is made up of smaller ModelMesh objects). In some cases this is easier to handle, because you only have one object basically to deal with...but in other cases you lose flexibility. A branch in the scene graph can be a single model (e.g. a tank model with multiple meshes and nodes for turret and wheel pivots) or it can be an entire scene - it doesn't matter. Its whatever the user makes or deems it to be.

Spatial pretty much implements most of the update and some prelim draw calls (culling mostly), while Node overrides or has methods geared for handling children. And Mesh overrides and has methods for rendering. This is largely a design from Eberly's game engine book that I grew to like with working with jmonkey.

The lizard model is 10,668 triangles, the tank is 5,326 triangles, the character is 22,507. So yeah, most of those models are pretty complex. But that normal mapped hallway footage was literally a few dozen triangles. The lighting is all per-pixel. Unfortunately this requires Shader Model 3.0 for all the lighting. I do intend to have a 2-3 light versions of all the shaders for SM 2.0 at some point. Maybe even dabble in deferred rendering at some point, but at the moment I'm content with forward only.

One of the reasons why XNA was chosen was specifically for the shader support, I really wanted to get my feet wet with them, and having them as first class objects adds some complexity...but it also opens up a whole realm of possibilities too. I'm really happy with how the Material system turned out, for example a non-lighted diffuse texture would be:

Code:
            Material mat = new Material();
            mat.AddDefinition(new BasicWorldDefinition());
            mat.AddDefinition(new BasicTextureDefinition());
            mat.LoadEffect("Shaders\\BasicMaterial");
            mat.SetActiveTechnique("BasicTexture");


Code:
             TextureState ts = new TextureState();
             ts.SetTexture("lizard_diff", 0);
             lizard.SetRenderState(ts);

Nothing is hard-coded in the material itself, rather the glue between data objects (such as TextureState, LightState, and MaterialState) and shader constants lie in the definition files. So if you add in "BasicLightDefinition" and change the techique to "LightedBasicTexture", and add a LightState object to your mesh - the light objects get picked up automatically.

Consequently, say you make your own shader that uses a different lighting model, all you do is make your own light definition to grab the light objects. No need to change anything else.

Another example would be normal mapping. In the basic material shaders, the first texture in a TextureState is the diffuse texture. For the normal map material, the 2nd is the tangent-space normal map, the third the specular map. The texture state doesn't care about how its textures are used, it just cares about storing the data. Re-usability was a key goal for the material system. I didn't want to hardcode my own material, where if someone wants to change something, they basically have to make their own implementation and possibly have to re-write engine objects (or at least extend them). I've had to do that working with some XNA libraries out there.

At some point I hope to extend this out to an actual material scripting, where all of this can be defined in a text file (much like ogre 3d material scripts).

And what do you mean about the openGL light attenuation? Setting the range of lights? (I always wondered about this with DeleD). My light objects don't have a specified range, just the constant/linear/quadratic values for the attenuation equation:

Code:
1 / C + L*D + Q*D*D


where D is the distance from the light source to the vertex position in world space.

And heh, keep thinking of names.


Last edited by Starnick on Tue Apr 13, 2010 9:08 pm; edited 3 times in total
Back to top
View user's profile Send private message Visit poster's website AIM Address
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Tue Apr 13, 2010 8:54 pm    Post subject: Reply with quote

Also a note about RenderStates:

There's Global and Data type states, the global are your traditional (BlendState for alpha blending, CullState for changing the polygon cull mode, FillState for changing if polygons should be wireframe, solid...ZBufferState for changing depth buffer values). Where as we have three data type states (mentioned as TextureState, MaterialState, and LightState). While the renderer applies the global states directly to the device, these three get set to the object's shader during the definition updates (as mentioned above).

Now the cool thing (and this is still a TODO feature, but its something seen in engines that mine is based off of), is you can have a LightState attached to your root node (and only that node).

When you attach it, it propagates a dirty mark (bit flag) down to its children, so when they go and update their world render states the root node's light state would be passed down. This light state can be combined with other light states in the tree by a mesh, and it'll pick up the closest lights up to the maximum.

So even though a lightstate may have dozens of lights (or multiple light states exist for parents of a mesh), the mesh will only pick the 8 (or more, or less if you change the max) closest lights to be sent to the shader.

Same can be done with combining texture states also, although I'd imagine its more useful for lightstates.

As I said this is only a planned feature, at the moment setting of renderstates (and materials) is a rather dumb process heh.
Back to top
View user's profile Send private message Visit poster's website AIM Address
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Wed Apr 14, 2010 12:07 am    Post subject: Reply with quote

Some more comments (this is good, because I'm taking bits of this from my thesis Im writing...good to try out my explanations out on people hehe):

Mesh-Node-Spatial relationship

The three main scene objects have this special hierarchy primarily to make it easy to create a scene graph. For some stuff, it doesn't matter what it is as long as its a spatial, so you don't have to worry about is it a mesh or is it a node as long as you care about the common properties shared by both.

With that said, from Eberly's book (and in jMonkey), the mesh side of things are a bit obfuscated. They dont have a "Mesh" but a "TriMesh" that's only a triangle mesh, and it extends from a "Geometry" class that extends from Spatial directly. This is reasonable to a degree, but it adds some unneeded redundancy.

In Spark, the concept of a mesh is a lot simpler and a bit more elegant. The actual mesh data is abstracted out of mesh in the form of a "MeshData" object. This is the object that contains the vertex and index buffers (indices optional too), and primitive data doesn't have to be triangles either. MeshData fully supports point lists, line lists, triangle lists, and triangle fans (pretty much all the primitive types XNA supports).

Also doing it this way, MeshData can be shared between multiple meshes. The geometric data doesn't change at all regardless of how you transform it (that's the job of the world matrix after all). That's the Mesh object's role.

This also makes it painfully easy to extend the MeshData class too. E.g. by default it supports for each vertex (or index): position/normal/tangent/binormal/color. What about skinning when you have bone weights and bone indices? The animation system I developed simply adds a SkinnedMeshData object with those two extra lists, and creates the appropiate vertex buffer during reconstruction. There's no reason to change the Mesh class!

There is one nasty thing at the moment with MeshData unfortunately, and its with vertex declarations. For the moment, I have all the vertex formats hardcoded that I use, and the MeshData basically goes through all the permutations when it reconstructs the vertex/index buffers. Really really ugly, and it doesn't lend itself to be easily used with custom vertex formats unless if you extend it. It's been an issue that I haven't thought of an adequate solution to yet.
Back to top
View user's profile Send private message Visit poster's website AIM Address
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Wed May 12, 2010 9:34 pm    Post subject: Reply with quote

Man almost an entire month passed by. Just got my thesis finished and approved today, all about Spark Engine and its development (as well as mine)!

Now I'm free to return back to work on all of this Smile
Back to top
View user's profile Send private message Visit poster's website AIM Address
AWM Mars
Member


Joined: 06 Jan 2010
Posts: 1195
Location: Wilts England

PostPosted: Thu May 13, 2010 2:36 am    Post subject: Reply with quote

Please keep us posted.. sounds very interesting.

You may want to consider having a MP4 exporter. Smile
_________________
Politeness is priceless when received, cost nothing to own or give, yet some cannot afford.

Checkout:
http://www.awm.mars.yourinside.com/
http://www.bccservices.co.uk
http://www.localtradecheck.co.uk
Back to top
View user's profile Send private message Visit poster's website
chronozphere
DeleD PRO user


Joined: 20 Jun 2006
Posts: 1010
Location: Netherlands

PostPosted: Thu May 13, 2010 11:36 am    Post subject: Reply with quote

This is looking really cool. Smile I'm also making a game-engine with Pascal at the moment. It should have the following features:

> Windows and Linux support
> OpenGL 2.1 graphics (fully shader driven)
> Forward compatibility with OpenGL 3.2 (to make a migration easier)
> Support for rendertargets, fonts and particlesystems
> Easy-to-use render state management using stacks
> OpenAL 1.1 3D sound (multiple movable sources) and OGG music
> SDL keyboard, mouse and joystick input
> Really simple & to-the-point scene management

Hope to get it working ASAP. It will be supporting my game project for the IGF. Smile

Have to take some time to read through these posts. I may have some questions about your engine. Smile
Back to top
View user's profile Send private message
Starnick
DeleD PRO user


Joined: 28 Jul 2007
Posts: 611

PostPosted: Fri May 14, 2010 4:19 am    Post subject: Reply with quote

chronozphere wrote:
This is looking really cool. Smile I'm also making a game-engine with Pascal at the moment. It should have the following features:

> Windows and Linux support
> OpenGL 2.1 graphics (fully shader driven)
> Forward compatibility with OpenGL 3.2 (to make a migration easier)
> Support for rendertargets, fonts and particlesystems
> Easy-to-use render state management using stacks
> OpenAL 1.1 3D sound (multiple movable sources) and OGG music
> SDL keyboard, mouse and joystick input
> Really simple & to-the-point scene management

Hope to get it working ASAP. It will be supporting my game project for the IGF. Smile

Have to take some time to read through these posts. I may have some questions about your engine. Smile


Nice thing about XNA is it makes things easy for input and sound (especially sound - it's an area I really have not explored all that much).

Through XNA the engine has support for render targets and fonts as well. But a great deal with XNA is, it wraps a lot of DirectX functionality and makes things either easier or nicer for cross-platform support (windows - xbox 360 for example). So it makes my job easier than if I started with just the DirectX API directly (pun intended).

I may one day do that, as I tend to write my own systems to replace the default XNA ones. Really all I use from it is the content pipeline (which I think is actually pretty good - albeit it makes runtime content importing a pain), math library, and access to graphics device/effects. Especially with shaders, it allowed me to start quickly - which is good because I ran out of time to do a lot of stuff I wanted, but got the core feature set done.

Granted, I always intended to go beyond with this development which I'm in the process to renew. At some point clean the engine core up/rebrand it and provide an alpha release. Mostly that would be making it friendly to just download the DLL's to be used in your own project, and how you get started with the engine (which atm is a bit hackish).

This may actually be delayed until XNA 4.0 is released, since quite a bit of the API will break (ironically, they're moving towards more of how I did some things).
Back to top
View user's profile Send private message Visit poster's website AIM Address
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    DeleD Community Edition Forum Index -> Other Graphical Tools All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum