<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.games.devel.sweng">
    <title>gmane.games.devel.sweng</title>
    <link>http://blog.gmane.org/gmane.games.devel.sweng</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/11016"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/11013"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/11009"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/11005"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10986"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10964"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10961"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10955"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10950"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10906"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10899"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10898"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10892"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10875"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10867"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10858"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10820"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10762"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10705"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.games.devel.sweng/10665"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/11016">
    <title>The entry competence level for graphics programmers</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/11016</link>
    <description>&lt;pre&gt;Hello ladies and gents,

I graduated 5 years ago with the intention of becoming a game developer, my
career got sidetracked and although this sidetrack led to an ultimately
comfortable existence and a lot of life lessons learned, I'm now at the
point where my career as a Flash / Flex developer is stagnating. It may also
be coming to a forced end as more and more of my employer's clients move
away from Flash each month. I've been keeping up with the times, and doing a
lot of graphics programming on the side using nVidia's CG shader programming
language and OpenGL.

I'm looking for a little insight into what skill level you expect entry
level, and reasonably competent graphics programmers (i.e. qualifying as
something above 'junior' in their job title, even if that's just the
omission of the word) to be at, and the difference between the two. By skill
level, I mean knowledge base, for example implementing certain shader
routines (e.g. normal mapping) and grasp of mathematics. Before I enter the
job search proper, I want to make absolutely sure that my skills are in fact
up to par as I understand that graphics programming positions in particular
are highly competitive. For example, I know that one area I lack skill in is
using shader functions built for DirectX 10 and above - by virtue of me
still using an XP machine (GPU is DX10 capable though, reeeally need to
upgrade), and I suspect that not being knowledgeable about,
say, tessellation using the GPU would swiftly kill any application I would
make for a graphics programmer role that paid more than free lunches.

On the other hand, this may not be the case, which is why I'm sending this
out to you better informed guys for a little feedback.

- Tommy
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Tommy Brett</dc:creator>
    <dc:date>2011-09-20T14:32:55</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/11013">
    <title>AUTO: Kieran D'Archambaud is out of the office. (returning 27/06/2011)</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/11013</link>
    <description>&lt;pre&gt;
I am out of the office until 27/06/2011.

I will respond to your message when I return.

For anything that needs urgent attention, please email Karl Chandler or
Wayne Hackney.


Note: This is an automated response to your message  "[Sweng-Gamedev]
Question about large worlds and foating pointprecision." sent on
22/06/2011 04:12:16.

This is the only notification you will receive while this person is away.


**********************************************************************
This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify postmaster&amp;lt; at &amp;gt;scee.net
This footnote also confirms that this email message has been checked for all known viruses.
Sony Computer Entertainment Europe Limited
Registered Office: 10 Great Marlborough Street, London W1F 7LP, United Kingdom
Registered in England: 3277793
**********************************************************************

_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

&lt;/pre&gt;</description>
    <dc:creator>Kieran_DArchambaud&lt; at &gt;scee.net</dc:creator>
    <dc:date>2011-06-22T09:01:26</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/11009">
    <title>Question about large worlds and foating pointprecision.</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/11009</link>
    <description>&lt;pre&gt;Here's a doubt i've been having for a while. When developing games based on
large worlds (like Elder Scrolls, GTA, etc), i can imagine that physics and
rendering become more jittery the further away the camera moves from the
origin (due to floating point precision loss). Is this really a problem? If
so, how is this solved? I can imagine that increasing floating point
precision to doubles helps a enormously, but i'm not sure if that's enough
and if it's worth the extra processing/bandwidth cost.
  Transforming the world to local coordinates (so the camera is always at
the origin) also seems to me like a solution, but sounds like a lot more
work and messy code.
So, how is this solved in most cases?

cheers!

Juan
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Juan Linietsky</dc:creator>
    <dc:date>2011-06-22T03:12:16</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/11005">
    <title>Creating enclosing convex meshes for AABBcalculation</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/11005</link>
    <description>&lt;pre&gt;
Hello,  I am aspiring game developer. I am using AABB trees for all sorts of stuff in a scene graph. The problem is that we need to quickly calculate a new AABB when an object moves.   Therefore I am working on an algorithm for generating vastly simplified convex meshes for fast(ish) AABB calculation for objects that can have an arbitrary orientation. The basic idea is to sort of fit a geodesic sphere over an object to produce a low-poly convex blob that contains the significant maximum extent information from any arbitrary orientation. The geodesic sphere is just a tool for discovering the maximum extent within a solid angle that radiates outward from an origin from within a mesh model. A geodesic sphere has the property that it is constructed from tetrahedrons. Therefore discovery of the maximum extent within each solid angle can occur with a barycentric coordinate evaluation. I am abusing the term solid angle here to mean the volume within a sphere which is a tetrahedron that has one vertex on the sphere origin and three vertices on the surface of the sphere.  Once we have the maximum extent point field the question is: how do we approach building a new triangle mesh? We have the adjacency knowledge because each triangle face of the sphere is a bucket that either contains the vertices (1-N) that share the maximum distance from the origin. So if we split the sphere into 2 hemispheres we can use a hybrid 2D algorithm for constructing a plane from a point cloud. We should also have a step that further reduces the set of vertices in the point cloud by removing the entries for faces on the sphere that are now essentially concave.  Note that we start with a sphere that totally encloses the object and now we have a sphere that has random faces pushed in to meet with the maximum extent for that solid angle.  Note that the final result will not be spherical because we are not introducing new points and there may be a singular feature of the original mesh that juts out at an extreme angle.  It seems like we can use a path finding algorithm on the graph where each face that contains maximal points is a node on the graph multiplied by the number of maximal points and now we need to walk the graph in a clockwise (winding order) direction until we form a loop and then subdivide if need be and then start again keeping track of edges so that we don't create the same edge twice (vertex 0 to vertex 5 is not the same edge as vertex 5 to vertex 0 for our purposes so that we can use the same two points for two adjacent polygons.  Hopefully this question will be seen as an interesting puzzle and not as a why don't you post this elsewhere kind of submission.  I am also curious how the pro's calculate AABB's on the fly in the cheapest (in processing) and tightest (in fit) manner. Do the pro's use low poly versions of meshes for bounding box calculations?
- Thanks in advance- Brian Livingston       _______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>BRIAN LIVINGSTON</dc:creator>
    <dc:date>2011-06-07T00:52:29</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10986">
    <title>Question about development of prototyping tools.</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10986</link>
    <description>&lt;pre&gt;I'm not sure if this is a common quesiton in the list, but I think tool
programming is a very overlooked issue of software engineering in game
development.
So my question is, since many here have tremendous experience in the game
industry and worked on huge projects, what kind of tools do software
engineers supply to game or level designers so they can, for example,
prototype a game stage before, say, 3D artists start working on a final
version?

In more depth, games like Halo, God of War or Mario Galaxy for example have
really complex scenarios, so complex that a height map or grid map editors
do not suffice for prototyping. I can imagine that before 3D artists can
start working on the final art, a simpler looking prototype must be created.
I also can imagine that creating such prototypes need constant adjusting on
the fly (a cliff may be too high, a room to small to fit the enemies, a
target out of shooting range), so either special tools for editing stages
are created or special plugins for integrating with, say, maya are needed?
Also, is it common that game or level designers know how to work with 3D
apps for stage design? or do engineers have to create special tools for
them? If so what kind of tools?

Cheers!

Juan Linietsky
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Juan Linietsky</dc:creator>
    <dc:date>2011-04-20T05:26:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10964">
    <title>Architecting and programming a graphics engine inC++ &amp; OpenGL</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10964</link>
    <description>&lt;pre&gt;Hi folks,

I've been working as an AS3 programmer / animator for the last 3.5 years,
and have the strongest desire to leave the marketing industry behind and
pursue my original intended career as a games programmer, which I sidelined
due to a very coincidental series of events. To this end, I've been (slowly)
building a graphics engine using C++, OpenGL and nVidia CG which renders
very large chunks of terrain using GPU Clipmaps. The idea is that eventually
it will render planets with atmosphere and real time shadows, or die trying,
and in any case will serve as my main portfolio piece when I eventually
start applying for positions. Because I've been outside of my programming
comfort zone for so long it's been slow going, but now that I've finally got
a firm grasp on shaders and the OpenGL pipeline it's time to look to the
future.

This is where my problem lies; although there are many examples on the 'net
showing me how to animate the most beautiful normal mapped cobbled cube, or
tutorials on specific rendering / culling / lighting algorithms, I've yet to
find a resource beside Michael Abrash's Graphics Programming Black Book
(which sits on my desk, reminding me of what I should have been doing all
along) which goes into the subject of writing a graphics engine. See
although I can write perfectly passable C++, and thanks to my AS3
programming experience which has frequently required that I get my projects
right 'the first time', I'm fairly adept at planning and designing my
classes before I begin... But from a C++ standpoint, I'm somewhat in the
dark. What are the best practices for building a graphics engine in C++?
Exactly how OOP should I go? How should I handle the use of multiple shaders
on chunks of geometry? There's just this giant multitude of questions, and
although I have a knack for over engineering things, I really want to have a
better picture of what I'm aiming for before I start, or I'll end up with
the monstrosity that is my terrain prototype (it runs, but it's so, so
ugly).

Currently my idea for a graphics engine involves something like an engine
class that takes render packets of data, has some sort of ability to sort
them into an order that best facilitates speedy rendering, and changes its
state depending on the information in the packets. E.g. one packet might be
a chunk of terrain, and could include information about what shaders to use,
how to determine its potential visible set, and the type of collision
detection to use (though this deviates a little from the graphics engine
part). There might be an arbitrary number of terrain packets, followed by
some character models or buildings using a different type of culling
algorithm. My worry aside from the obvious problem of the whole idea
possibly being crap, is that it's too general. How could I possibly create
an engine that handles every possible rendering type, shouldn't I perhaps
start with the assertion that I'm building a terrain engine, and base
everything around rendering sphere like chunks of geometry with varying
levels of detail? But on the same token, I don't just want to end up with
another terrain engine prototype as seen on youtube(tm).

So I suppose what I'm looking for are book suggestions, or perhaps
open-sourced graphics engines that I could look at and learn from, or maybe
I should just try and get a position as a junior-something-programmer and
learn by doing (the trouble is there aren't any such positions available
where I live, and relocation would be difficult to justify based upon the
possibly low salary expectations of a junior position, I'd like at least
some leverage). Ideas? Suggestions? Is this even the right place to ask such
broad questions? I'm all ears.

- Tommy
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Tommy Brett</dc:creator>
    <dc:date>2011-03-18T12:52:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10961">
    <title>Grass shadow on consoles</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10961</link>
    <description>&lt;pre&gt;Hi everybody,
    just curious about the possibility to render the grass shadow in
realtime on consoles.
Are you aware of some game that has this feature?
I was wandering if there is some kind of screenspace possibility to exploit,
or do you have other ideas.


Thanks!
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Gabriel Sassone</dc:creator>
    <dc:date>2011-01-19T14:48:26</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10955">
    <title>Aggressive tracking in a newtonian simulation</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10955</link>
    <description>&lt;pre&gt;So I originally posted the following to the bulletphysics.org general 
discussion forum. But perhaps this mailing list is a better venue 
since the subject is related to what I imagine is basic flight sim 
development and steering behavior:





Cheers,
Darren
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Darren Grant</dc:creator>
    <dc:date>2010-11-30T09:48:55</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10950">
    <title>[OT] Statistics forums/lists</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10950</link>
    <description>&lt;pre&gt;Hi all,
An off topic question, does anyone know of any good web sites/forums 
that deal with statistics? I'm playing around with Computational Fluid 
Dynamics and need to simulate an aerosol of which the droplet sizes 
conform to a log-normal distribution. My stats skills are sadly lacking 
and I need somewhere to ask some questions, questions that are a bit 
more involved that a reading of Wikipedia will answer.

Thanks for any thoughts,

Andrew
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

&lt;/pre&gt;</description>
    <dc:creator>Andrew Lowe</dc:creator>
    <dc:date>2010-11-16T13:22:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10906">
    <title>Data oriented programming</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10906</link>
    <description>&lt;pre&gt;_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Gabriel Sassone</dc:creator>
    <dc:date>2010-09-29T09:31:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10899">
    <title>Merging Visual Studio Project Files (again)</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10899</link>
    <description>&lt;pre&gt;We've all been there.  Some of us more than others.  Well, after being stuck trying to resolve a merge with over 9000 conflicts, I finally decided to do something about it.

&amp;lt;ShamelessPlug&amp;gt;
Project: Merge is a tool for comparing and merging XML files.  You can find it and more information at http://www.projectmerge.com
&amp;lt;/ShamelessPlug&amp;gt;

There's quite a bit of documentation missing at the moment, so please don't hesitate to ask if you have any problems.

Umm, that's about it really.  I hope at least some of you find it useful.

James
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

&lt;/pre&gt;</description>
    <dc:creator>James Robertson</dc:creator>
    <dc:date>2010-08-11T15:15:55</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10898">
    <title>very basic question - tessellation and fewer vertices than I started</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10898</link>
    <description>&lt;pre&gt;Dear All:

My apologies first of all if my post is too simple for this list.

I am working on the Wine project, specifically on implementing D3DX9.

I have done some work for this bug:
http://bugs.winehq.org/show_bug.cgi?id=22918

implementing D3DXCreateSphere, D3DXCreateCylinder, and D3DXCreateBox.
These can be found on my github site:

http://github.com/misha680/wine

Mainly as a motivation to learn more DirectX 9/OpenGL, but also
hopefully to get it into Wine, I have been doing some work on trying to
reproduct D3DXCreateTeapot (exact vertices and indices) using Newell's
original data:
http://www.sjbaker.org/teapot/teaset.tgz

My current approach mostly lies in figuring out the ordering difference
between the two versions (MS and Newell).

I have succeeded in using ID3DXPatchMesh to tesselate the Newell teapot.
Further, I can rotate and scale the MS teapot to match the Newell (I
have attached tester.cpp - the actual program come, compile -
compilation script for Ubuntu 10.04 using mingw32 4.2.1dfsg-1ubuntu2,
teapot.newell - Newell's original data, and test.bat - program to run
the test).

Further, I have attached a file vertices which simply isolates the
vertices ("points") from Newell's original data.

Now, I find something rather odd, and I thought you might be able to
help me with this.

My tessellation code:
    // create mesh for tesselation
    FLOAT fTessLevel=1.0f;
    DWORD Adaptive=FALSE;
    DWORD NumTriangles,NumVertices;
    if (!
SUCCEEDED(p_mesh-&amp;gt;GetTessSize(fTessLevel,Adaptive,&amp;amp;NumTriangles,&amp;amp;NumVertices)))
        assert(FALSE);
    LPD3DXMESH mesh = NULL;
    if (!
SUCCEEDED(D3DXCreateMeshFVF(NumTriangles,NumVertices,D3DXMESH_MANAGED,D3DFVF_XYZ,d3ddev,&amp;amp;mesh)))
        assert(FALSE);
    
    // tesselate
    assert(Adaptive==FALSE);
    if (!SUCCEEDED(p_mesh-&amp;gt;Tessellate(fTessLevel,mesh)))
        assert(FALSE);
    printf("Generated tesselated mesh at level %f with %d triangles, %d
vertices\n",fTessLevel,NumTriangles,NumVertices);
    p_mesh-&amp;gt;Release();

uses non-adaptive tessellation at level 1.0f. Per
http://msdn.microsoft.com/en-us/library/bb174094%28v=VS.85%29.aspx
fTessLevel [in] 
        FLOAT
        
        Tessellation level. This is the number of vertices introduced
        between existing vertices. The range of this float parameter is
        0 &amp;lt; fTessLevel &amp;lt;= 32.
        
It seems that this would mean at least _one_ extra vertex is inserted
between existing ones.

Now the strange thing. Initially we have 306 vertices, 294 of which are
unique:

misha&amp;lt; at &amp;gt;misha-d630:~/wine/tester$ cat /tmp/vertices | wc
    306     306    4653
misha&amp;lt; at &amp;gt;misha-d630:~/wine/tester$ cat /tmp/vertices | sort -u | wc
    294     294    4479

Oddly though, tessellation results in _128_ vertices:
---
Loaded patch teapot.newell with 32 patches and 306 vertices.
Generated tesselated mesh at level 1.000000 with 64 triangles, 128
vertices
Newell teapot has 64 triangles, 128 vertices
MS teapot has 2256 triangles, 1178 vertices

Newell teapot center is (0.046875,1.725,0)
MS teapot center is (1.28115e-007,-7.50032e-006,3.36478e-009)
MS teapot center needs to be translated by
(0.0468749,1.72501,-3.36478e-009)
MS teapot center is now (0.0468749,1.725,3.36478e-009)

Newell teapot extents are (-3,0,-2) (3.3,3.15,2)
MS teapot extents are (-2.99538,-0.0136373,-2) (3.43425,3.13636,2)
---

I am quite confused as to how an operation that _introduces_ vertices
can actually result in fewer unique vertices than at the start.

(For your reference, I am not a complete newbie at this - and have
implemented a very basic tessellator in OpenGL for the same problem:
http://bugs.winehq.org/attachment.cgi?id=29818
)

Perhaps I am missing something simple?

Thank you, and cc on replies much appreciated :)

Thank you and I eagerly await your thoughtful response.

Misha

32
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
4,17,18,19,8,20,21,22,12,23,24,25,16,26,27,28
19,29,30,31,22,32,33,34,25,35,36,37,28,38,39,40
31,41,42,1,34,43,44,5,37,45,46,9,40,47,48,13
13,14,15,16,49,50,51,52,53,54,55,56,57,58,59,60
16,26,27,28,52,61,62,63,56,64,65,66,60,67,68,69
28,38,39,40,63,70,71,72,66,73,74,75,69,76,77,78
40,47,48,13,72,79,80,49,75,81,82,53,78,83,84,57
57,58,59,60,85,86,87,88,89,90,91,92,93,94,95,96
60,67,68,69,88,97,98,99,92,100,101,102,96,103,104,105
69,76,77,78,99,106,107,108,102,109,110,111,105,112,113,114
78,83,84,57,108,115,116,85,111,117,118,89,114,119,120,93
121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136
124,137,138,121,128,139,140,125,132,141,142,129,136,143,144,133
133,134,135,136,145,146,147,148,149,150,151,152,69,153,154,155
136,143,144,133,148,156,157,145,152,158,159,149,155,160,161,69
162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177
165,178,179,162,169,180,181,166,173,182,183,170,177,184,185,174
174,175,176,177,186,187,188,189,190,191,192,193,194,195,196,197
177,184,185,174,189,198,199,186,193,200,201,190,197,202,203,194
204,204,204,204,207,208,209,210,211,211,211,211,212,213,214,215
204,204,204,204,210,217,218,219,211,211,211,211,215,220,221,222
204,204,204,204,219,224,225,226,211,211,211,211,222,227,228,229
204,204,204,204,226,230,231,207,211,211,211,211,229,232,233,212
212,213,214,215,234,235,236,237,238,239,240,241,242,243,244,245
215,220,221,222,237,246,247,248,241,249,250,251,245,252,253,254
222,227,228,229,248,255,256,257,251,258,259,260,254,261,262,263
229,232,233,212,257,264,265,234,260,266,267,238,263,268,269,242
270,270,270,270,279,280,281,282,275,276,277,278,271,272,273,274
270,270,270,270,282,289,290,291,278,286,287,288,274,283,284,285
270,270,270,270,291,298,299,300,288,295,296,297,285,292,293,294
270,270,270,270,300,305,306,279,297,303,304,275,294,301,302,271
306
1.4,0.0,2.4
1.4,-0.784,2.4
0.784,-1.4,2.4
0.0,-1.4,2.4
1.3375,0.0,2.53125
1.3375,-0.749,2.53125
0.749,-1.3375,2.53125
0.0,-1.3375,2.53125
1.4375,0.0,2.53125
1.4375,-0.805,2.53125
0.805,-1.4375,2.53125
0.0,-1.4375,2.53125
1.5,0.0,2.4
1.5,-0.84,2.4
0.84,-1.5,2.4
0.0,-1.5,2.4
-0.784,-1.4,2.4
-1.4,-0.784,2.4
-1.4,0.0,2.4
-0.749,-1.3375,2.53125
-1.3375,-0.749,2.53125
-1.3375,0.0,2.53125
-0.805,-1.4375,2.53125
-1.4375,-0.805,2.53125
-1.4375,0.0,2.53125
-0.84,-1.5,2.4
-1.5,-0.84,2.4
-1.5,0.0,2.4
-1.4,0.784,2.4
-0.784,1.4,2.4
0.0,1.4,2.4
-1.3375,0.749,2.53125
-0.749,1.3375,2.53125
0.0,1.3375,2.53125
-1.4375,0.805,2.53125
-0.805,1.4375,2.53125
0.0,1.4375,2.53125
-1.5,0.84,2.4
-0.84,1.5,2.4
0.0,1.5,2.4
0.784,1.4,2.4
1.4,0.784,2.4
0.749,1.3375,2.53125
1.3375,0.749,2.53125
0.805,1.4375,2.53125
1.4375,0.805,2.53125
0.84,1.5,2.4
1.5,0.84,2.4
1.75,0.0,1.875
1.75,-0.98,1.875
0.98,-1.75,1.875
0.0,-1.75,1.875
2.0,0.0,1.35
2.0,-1.12,1.35
1.12,-2.0,1.35
0.0,-2.0,1.35
2.0,0.0,0.9
2.0,-1.12,0.9
1.12,-2.0,0.9
0.0,-2.0,0.9
-0.98,-1.75,1.875
-1.75,-0.98,1.875
-1.75,0.0,1.875
-1.12,-2.0,1.35
-2.0,-1.12,1.35
-2.0,0.0,1.35
-1.12,-2.0,0.9
-2.0,-1.12,0.9
-2.0,0.0,0.9
-1.75,0.98,1.875
-0.98,1.75,1.875
0.0,1.75,1.875
-2.0,1.12,1.35
-1.12,2.0,1.35
0.0,2.0,1.35
-2.0,1.12,0.9
-1.12,2.0,0.9
0.0,2.0,0.9
0.98,1.75,1.875
1.75,0.98,1.875
1.12,2.0,1.35
2.0,1.12,1.35
1.12,2.0,0.9
2.0,1.12,0.9
2.0,0.0,0.45
2.0,-1.12,0.45
1.12,-2.0,0.45
0.0,-2.0,0.45
1.5,0.0,0.225
1.5,-0.84,0.225
0.84,-1.5,0.225
0.0,-1.5,0.225
1.5,0.0,0.15
1.5,-0.84,0.15
0.84,-1.5,0.15
0.0,-1.5,0.15
-1.12,-2.0,0.45
-2.0,-1.12,0.45
-2.0,0.0,0.45
-0.84,-1.5,0.225
-1.5,-0.84,0.225
-1.5,0.0,0.225
-0.84,-1.5,0.15
-1.5,-0.84,0.15
-1.5,0.0,0.15
-2.0,1.12,0.45
-1.12,2.0,0.45
0.0,2.0,0.45
-1.5,0.84,0.225
-0.84,1.5,0.225
0.0,1.5,0.225
-1.5,0.84,0.15
-0.84,1.5,0.15
0.0,1.5,0.15
1.12,2.0,0.45
2.0,1.12,0.45
0.84,1.5,0.225
1.5,0.84,0.225
0.84,1.5,0.15
1.5,0.84,0.15
-1.6,0.0,2.025
-1.6,-0.3,2.025
-1.5,-0.3,2.25
-1.5,0.0,2.25
-2.3,0.0,2.025
-2.3,-0.3,2.025
-2.5,-0.3,2.25
-2.5,0.0,2.25
-2.7,0.0,2.025
-2.7,-0.3,2.025
-3.0,-0.3,2.25
-3.0,0.0,2.25
-2.7,0.0,1.8
-2.7,-0.3,1.8
-3.0,-0.3,1.8
-3.0,0.0,1.8
-1.5,0.3,2.25
-1.6,0.3,2.025
-2.5,0.3,2.25
-2.3,0.3,2.025
-3.0,0.3,2.25
-2.7,0.3,2.025
-3.0,0.3,1.8
-2.7,0.3,1.8
-2.7,0.0,1.575
-2.7,-0.3,1.575
-3.0,-0.3,1.35
-3.0,0.0,1.35
-2.5,0.0,1.125
-2.5,-0.3,1.125
-2.65,-0.3,0.9375
-2.65,0.0,0.9375
-2.0,-0.3,0.9
-1.9,-0.3,0.6
-1.9,0.0,0.6
-3.0,0.3,1.35
-2.7,0.3,1.575
-2.65,0.3,0.9375
-2.5,0.3,1.125
-1.9,0.3,0.6
-2.0,0.3,0.9
1.7,0.0,1.425
1.7,-0.66,1.425
1.7,-0.66,0.6
1.7,0.0,0.6
2.6,0.0,1.425
2.6,-0.66,1.425
3.1,-0.66,0.825
3.1,0.0,0.825
2.3,0.0,2.1
2.3,-0.25,2.1
2.4,-0.25,2.025
2.4,0.0,2.025
2.7,0.0,2.4
2.7,-0.25,2.4
3.3,-0.25,2.4
3.3,0.0,2.4
1.7,0.66,0.6
1.7,0.66,1.425
3.1,0.66,0.825
2.6,0.66,1.425
2.4,0.25,2.025
2.3,0.25,2.1
3.3,0.25,2.4
2.7,0.25,2.4
2.8,0.0,2.475
2.8,-0.25,2.475
3.525,-0.25,2.49375
3.525,0.0,2.49375
2.9,0.0,2.475
2.9,-0.15,2.475
3.45,-0.15,2.5125
3.45,0.0,2.5125
2.8,0.0,2.4
2.8,-0.15,2.4
3.2,-0.15,2.4
3.2,0.0,2.4
3.525,0.25,2.49375
2.8,0.25,2.475
3.45,0.15,2.5125
2.9,0.15,2.475
3.2,0.15,2.4
2.8,0.15,2.4
0.0,0.0,3.15
0.0,-0.002,3.15
0.002,0.0,3.15
0.8,0.0,3.15
0.8,-0.45,3.15
0.45,-0.8,3.15
0.0,-0.8,3.15
0.0,0.0,2.85
0.2,0.0,2.7
0.2,-0.112,2.7
0.112,-0.2,2.7
0.0,-0.2,2.7
-0.002,0.0,3.15
-0.45,-0.8,3.15
-0.8,-0.45,3.15
-0.8,0.0,3.15
-0.112,-0.2,2.7
-0.2,-0.112,2.7
-0.2,0.0,2.7
0.0,0.002,3.15
-0.8,0.45,3.15
-0.45,0.8,3.15
0.0,0.8,3.15
-0.2,0.112,2.7
-0.112,0.2,2.7
0.0,0.2,2.7
0.45,0.8,3.15
0.8,0.45,3.15
0.112,0.2,2.7
0.2,0.112,2.7
0.4,0.0,2.55
0.4,-0.224,2.55
0.224,-0.4,2.55
0.0,-0.4,2.55
1.3,0.0,2.55
1.3,-0.728,2.55
0.728,-1.3,2.55
0.0,-1.3,2.55
1.3,0.0,2.4
1.3,-0.728,2.4
0.728,-1.3,2.4
0.0,-1.3,2.4
-0.224,-0.4,2.55
-0.4,-0.224,2.55
-0.4,0.0,2.55
-0.728,-1.3,2.55
-1.3,-0.728,2.55
-1.3,0.0,2.55
-0.728,-1.3,2.4
-1.3,-0.728,2.4
-1.3,0.0,2.4
-0.4,0.224,2.55
-0.224,0.4,2.55
0.0,0.4,2.55
-1.3,0.728,2.55
-0.728,1.3,2.55
0.0,1.3,2.55
-1.3,0.728,2.4
-0.728,1.3,2.4
0.0,1.3,2.4
0.224,0.4,2.55
0.4,0.224,2.55
0.728,1.3,2.55
1.3,0.728,2.55
0.728,1.3,2.4
1.3,0.728,2.4
0.0,0.0,0.0
1.5,0.0,0.15
1.5,0.84,0.15
0.84,1.5,0.15
0.0,1.5,0.15
1.5,0.0,0.075
1.5,0.84,0.075
0.84,1.5,0.075
0.0,1.5,0.075
1.425,0.0,0.0
1.425,0.798,0.0
0.798,1.425,0.0
0.0,1.425,0.0
-0.84,1.5,0.15
-1.5,0.84,0.15
-1.5,0.0,0.15
-0.84,1.5,0.075
-1.5,0.84,0.075
-1.5,0.0,0.075
-0.798,1.425,0.0
-1.425,0.798,0.0
-1.425,0.0,0.0
-1.5,-0.84,0.15
-0.84,-1.5,0.15
0.0,-1.5,0.15
-1.5,-0.84,0.075
-0.84,-1.5,0.075
0.0,-1.5,0.075
-1.425,-0.798,0.0
-0.798,-1.425,0.0
0.0,-1.425,0.0
0.84,-1.5,0.15
1.5,-0.84,0.15
0.84,-1.5,0.075
1.5,-0.84,0.075
0.798,-1.425,0.0
1.425,-0.798,0.0
1.4,0.0,2.4
1.4,-0.784,2.4
0.784,-1.4,2.4
0.0,-1.4,2.4
1.3375,0.0,2.53125
1.3375,-0.749,2.53125
0.749,-1.3375,2.53125
0.0,-1.3375,2.53125
1.4375,0.0,2.53125
1.4375,-0.805,2.53125
0.805,-1.4375,2.53125
0.0,-1.4375,2.53125
1.5,0.0,2.4
1.5,-0.84,2.4
0.84,-1.5,2.4
0.0,-1.5,2.4
-0.784,-1.4,2.4
-1.4,-0.784,2.4
-1.4,0.0,2.4
-0.749,-1.3375,2.53125
-1.3375,-0.749,2.53125
-1.3375,0.0,2.53125
-0.805,-1.4375,2.53125
-1.4375,-0.805,2.53125
-1.4375,0.0,2.53125
-0.84,-1.5,2.4
-1.5,-0.84,2.4
-1.5,0.0,2.4
-1.4,0.784,2.4
-0.784,1.4,2.4
0.0,1.4,2.4
-1.3375,0.749,2.53125
-0.749,1.3375,2.53125
0.0,1.3375,2.53125
-1.4375,0.805,2.53125
-0.805,1.4375,2.53125
0.0,1.4375,2.53125
-1.5,0.84,2.4
-0.84,1.5,2.4
0.0,1.5,2.4
0.784,1.4,2.4
1.4,0.784,2.4
0.749,1.3375,2.53125
1.3375,0.749,2.53125
0.805,1.4375,2.53125
1.4375,0.805,2.53125
0.84,1.5,2.4
1.5,0.84,2.4
1.75,0.0,1.875
1.75,-0.98,1.875
0.98,-1.75,1.875
0.0,-1.75,1.875
2.0,0.0,1.35
2.0,-1.12,1.35
1.12,-2.0,1.35
0.0,-2.0,1.35
2.0,0.0,0.9
2.0,-1.12,0.9
1.12,-2.0,0.9
0.0,-2.0,0.9
-0.98,-1.75,1.875
-1.75,-0.98,1.875
-1.75,0.0,1.875
-1.12,-2.0,1.35
-2.0,-1.12,1.35
-2.0,0.0,1.35
-1.12,-2.0,0.9
-2.0,-1.12,0.9
-2.0,0.0,0.9
-1.75,0.98,1.875
-0.98,1.75,1.875
0.0,1.75,1.875
-2.0,1.12,1.35
-1.12,2.0,1.35
0.0,2.0,1.35
-2.0,1.12,0.9
-1.12,2.0,0.9
0.0,2.0,0.9
0.98,1.75,1.875
1.75,0.98,1.875
1.12,2.0,1.35
2.0,1.12,1.35
1.12,2.0,0.9
2.0,1.12,0.9
2.0,0.0,0.45
2.0,-1.12,0.45
1.12,-2.0,0.45
0.0,-2.0,0.45
1.5,0.0,0.225
1.5,-0.84,0.225
0.84,-1.5,0.225
0.0,-1.5,0.225
1.5,0.0,0.15
1.5,-0.84,0.15
0.84,-1.5,0.15
0.0,-1.5,0.15
-1.12,-2.0,0.45
-2.0,-1.12,0.45
-2.0,0.0,0.45
-0.84,-1.5,0.225
-1.5,-0.84,0.225
-1.5,0.0,0.225
-0.84,-1.5,0.15
-1.5,-0.84,0.15
-1.5,0.0,0.15
-2.0,1.12,0.45
-1.12,2.0,0.45
0.0,2.0,0.45
-1.5,0.84,0.225
-0.84,1.5,0.225
0.0,1.5,0.225
-1.5,0.84,0.15
-0.84,1.5,0.15
0.0,1.5,0.15
1.12,2.0,0.45
2.0,1.12,0.45
0.84,1.5,0.225
1.5,0.84,0.225
0.84,1.5,0.15
1.5,0.84,0.15
-1.6,0.0,2.025
-1.6,-0.3,2.025
-1.5,-0.3,2.25
-1.5,0.0,2.25
-2.3,0.0,2.025
-2.3,-0.3,2.025
-2.5,-0.3,2.25
-2.5,0.0,2.25
-2.7,0.0,2.025
-2.7,-0.3,2.025
-3.0,-0.3,2.25
-3.0,0.0,2.25
-2.7,0.0,1.8
-2.7,-0.3,1.8
-3.0,-0.3,1.8
-3.0,0.0,1.8
-1.5,0.3,2.25
-1.6,0.3,2.025
-2.5,0.3,2.25
-2.3,0.3,2.025
-3.0,0.3,2.25
-2.7,0.3,2.025
-3.0,0.3,1.8
-2.7,0.3,1.8
-2.7,0.0,1.575
-2.7,-0.3,1.575
-3.0,-0.3,1.35
-3.0,0.0,1.35
-2.5,0.0,1.125
-2.5,-0.3,1.125
-2.65,-0.3,0.9375
-2.65,0.0,0.9375
-2.0,-0.3,0.9
-1.9,-0.3,0.6
-1.9,0.0,0.6
-3.0,0.3,1.35
-2.7,0.3,1.575
-2.65,0.3,0.9375
-2.5,0.3,1.125
-1.9,0.3,0.6
-2.0,0.3,0.9
1.7,0.0,1.425
1.7,-0.66,1.425
1.7,-0.66,0.6
1.7,0.0,0.6
2.6,0.0,1.425
2.6,-0.66,1.425
3.1,-0.66,0.825
3.1,0.0,0.825
2.3,0.0,2.1
2.3,-0.25,2.1
2.4,-0.25,2.025
2.4,0.0,2.025
2.7,0.0,2.4
2.7,-0.25,2.4
3.3,-0.25,2.4
3.3,0.0,2.4
1.7,0.66,0.6
1.7,0.66,1.425
3.1,0.66,0.825
2.6,0.66,1.425
2.4,0.25,2.025
2.3,0.25,2.1
3.3,0.25,2.4
2.7,0.25,2.4
2.8,0.0,2.475
2.8,-0.25,2.475
3.525,-0.25,2.49375
3.525,0.0,2.49375
2.9,0.0,2.475
2.9,-0.15,2.475
3.45,-0.15,2.5125
3.45,0.0,2.5125
2.8,0.0,2.4
2.8,-0.15,2.4
3.2,-0.15,2.4
3.2,0.0,2.4
3.525,0.25,2.49375
2.8,0.25,2.475
3.45,0.15,2.5125
2.9,0.15,2.475
3.2,0.15,2.4
2.8,0.15,2.4
0.0,0.0,3.15
0.0,-0.002,3.15
0.002,0.0,3.15
0.8,0.0,3.15
0.8,-0.45,3.15
0.45,-0.8,3.15
0.0,-0.8,3.15
0.0,0.0,2.85
0.2,0.0,2.7
0.2,-0.112,2.7
0.112,-0.2,2.7
0.0,-0.2,2.7
-0.002,0.0,3.15
-0.45,-0.8,3.15
-0.8,-0.45,3.15
-0.8,0.0,3.15
-0.112,-0.2,2.7
-0.2,-0.112,2.7
-0.2,0.0,2.7
0.0,0.002,3.15
-0.8,0.45,3.15
-0.45,0.8,3.15
0.0,0.8,3.15
-0.2,0.112,2.7
-0.112,0.2,2.7
0.0,0.2,2.7
0.45,0.8,3.15
0.8,0.45,3.15
0.112,0.2,2.7
0.2,0.112,2.7
0.4,0.0,2.55
0.4,-0.224,2.55
0.224,-0.4,2.55
0.0,-0.4,2.55
1.3,0.0,2.55
1.3,-0.728,2.55
0.728,-1.3,2.55
0.0,-1.3,2.55
1.3,0.0,2.4
1.3,-0.728,2.4
0.728,-1.3,2.4
0.0,-1.3,2.4
-0.224,-0.4,2.55
-0.4,-0.224,2.55
-0.4,0.0,2.55
-0.728,-1.3,2.55
-1.3,-0.728,2.55
-1.3,0.0,2.55
-0.728,-1.3,2.4
-1.3,-0.728,2.4
-1.3,0.0,2.4
-0.4,0.224,2.55
-0.224,0.4,2.55
0.0,0.4,2.55
-1.3,0.728,2.55
-0.728,1.3,2.55
0.0,1.3,2.55
-1.3,0.728,2.4
-0.728,1.3,2.4
0.0,1.3,2.4
0.224,0.4,2.55
0.4,0.224,2.55
0.728,1.3,2.55
1.3,0.728,2.55
0.728,1.3,2.4
1.3,0.728,2.4
0.0,0.0,0.0
1.5,0.0,0.15
1.5,0.84,0.15
0.84,1.5,0.15
0.0,1.5,0.15
1.5,0.0,0.075
1.5,0.84,0.075
0.84,1.5,0.075
0.0,1.5,0.075
1.425,0.0,0.0
1.425,0.798,0.0
0.798,1.425,0.0
0.0,1.425,0.0
-0.84,1.5,0.15
-1.5,0.84,0.15
-1.5,0.0,0.15
-0.84,1.5,0.075
-1.5,0.84,0.075
-1.5,0.0,0.075
-0.798,1.425,0.0
-1.425,0.798,0.0
-1.425,0.0,0.0
-1.5,-0.84,0.15
-0.84,-1.5,0.15
0.0,-1.5,0.15
-1.5,-0.84,0.075
-0.84,-1.5,0.075
0.0,-1.5,0.075
-1.425,-0.798,0.0
-0.798,-1.425,0.0
0.0,-1.425,0.0
0.84,-1.5,0.15
1.5,-0.84,0.15
0.84,-1.5,0.075
1.5,-0.84,0.075
0.798,-1.425,0.0
1.425,-0.798,0.0
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Misha Koshelev</dc:creator>
    <dc:date>2010-07-24T22:32:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10892">
    <title>State Object / Process Object design</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10892</link>
    <description>&lt;pre&gt;_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Thatcher Ulrich</dc:creator>
    <dc:date>2010-07-12T04:06:00</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10875">
    <title>Breaking matchmaking deadlocks</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10875</link>
    <description>&lt;pre&gt;_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Blair Holloway</dc:creator>
    <dc:date>2010-07-08T02:50:25</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10867">
    <title>The effect of cache on performance</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10867</link>
    <description>&lt;pre&gt;I stumbled across this today and found it an interesting read.
&amp;lt;http://queue.acm.org/detail.cfm?id=1814327&amp;gt;

It relates to our "virtual function calls are bad!"[*] discussion
earlier.

[*] they're not really bad, its cache misses that are bad.
&lt;/pre&gt;</description>
    <dc:creator>Richard</dc:creator>
    <dc:date>2010-07-01T05:12:11</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10858">
    <title>GameFest 2010 content now live</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10858</link>
    <description>&lt;pre&gt;&amp;lt;http://legalizeadulthood.wordpress.com/2010/06/17/gamefest-2010-content-now-live/&amp;gt;
FYI

&lt;/pre&gt;</description>
    <dc:creator>Richard</dc:creator>
    <dc:date>2010-06-17T17:52:51</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10820">
    <title>Decision Graphs (or whatever they're called)</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10820</link>
    <description>&lt;pre&gt;The recent discussion on OO and architecture (hear me out, I'm not
trolling, I swear! :) ) got me thinking about a technique I've been
toying with for a while (well, it's been put to *some* productive use,
but only in a primitive incarnation). That primitive incarnation
turned out good enough that, much to my surprise, it's probably going
to ship soon, and I get the feeling it'd be worth putting in the time
to refine it some for future use.

Apologies in advance if this is something really obvious that
everybody but me's been doing for ages, I only recently came out of my
tools and graphics hole where life is simple...

Anyway, the basic problem I'm solving is implementing absurd designy
high-level logic. For instance, a designer hands you a document that
boils down to a dozen levels of if and switch statements. It's a mess,
but you code it up, and all is well. And then they decide that on
level four they want an entire branch of that logic to be something
else completely, and you've got to go back to your design and add a
virtual call at that branch point (because it was completely
non-obvious that anyone would ever want to screw with the logic
*there*) and override it in level four. Ten levels later and you can't
tell what anything does anymore because code branches off to strange
places all over the place, iteration time goes up and up, and you
start wishing the designers would just hurry up and die (but instead
they change the base design and now half of your override points no
longer make any sense and...).

So what I did to deal with this, is I basically transcribed their
document directly into the game not as code but rather *as data*. The
end result was something like a graph of associative maps, each taking
as a key the result of one level of if/switch statement and returning
either another map for the next level or a leaf node which is either a
function or a list of parameters to some other update function. All
that's then left is to evaluate all of the branch values ahead of
time, stick them in a list, and use that list to traverse the graph in
some sane manner.

My initial experience has been ridiculously promising (given how
ridiculously ad-hoc the implementation is). All of the updates happen
at the leaves, meaning I have a bunch of very simple little
objects/functions to maintain. Fixing "game breaks in condition X, Y,
Z" bugs has been obscenely easy since all I have to do is trace those
conditions through the graph and there's everything that happens. None
of the nightmares of tracing updates through "oh this is virtual and
the level four object is eight levels of inheritance away" or even
just through stuff like:

if( X )
{
  if( Y )
  {
    //pages of code
  }
  else
  {
    //pages of code
  }

  //some good code
  statement_which_offends_when_Y_and_Z();
  //some more good code
}

ever happened. Crazy "hey, let's make level nine be different"
requests also never really added much complexity since simply patching
the base logic graph at level load ended up being *far* more
maintainable than going back and adding hooks specifically for level
nine overrides. Hell, the final scripts are nearly simple enough for a
designer (who couldn't code hello world to save his life) to read. And
it's pretty obvious that the whole thing could be boiled down into a
mess of ugly branchy code, if that were ever needed for performance
(or whatever) reasons, though it also seems that it's awfully close to
something that could be bent to a more stream-processing type
approach... (beyond the obvious compute_traverse_keys( entity[] );
traverse_logic_graphs( traverse_key_list[] ) split).

So, what's that called? "Decision graph" brings up hits on Google, but
that which isn't simply "how we draw flow charts" seems to be mostly
academic, and I'm more interested in getting a good grounding in the
related practical issues (at least at this stage). I assume I've badly
reinvented Lisp or somesuch, and there must be a body of practices
surrounding this already...

Have any of you done serious work with such an architecture? Any "oh
look out for this" type thoughts you can share?

Cheers!
Phill
_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com

&lt;/pre&gt;</description>
    <dc:creator>Phill Djonov</dc:creator>
    <dc:date>2010-06-11T08:09:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10762">
    <title>GameFest 2010 presentations appearing</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10762</link>
    <description>&lt;pre&gt;Direct links to relevant Windows presentations can be found here:
&amp;lt;http://legalizeadulthood.wordpress.com/2010/06/10/gamefest-2010-presentations/&amp;gt;

FYI.
&lt;/pre&gt;</description>
    <dc:creator>Richard</dc:creator>
    <dc:date>2010-06-11T00:13:46</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10705">
    <title>Hooks</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10705</link>
    <description>&lt;pre&gt;_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Richard Fabian</dc:creator>
    <dc:date>2010-06-08T19:33:28</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10665">
    <title>DCI vs Data Oriented</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10665</link>
    <description>&lt;pre&gt;_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Richard Fabian</dc:creator>
    <dc:date>2010-06-04T08:08:23</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.games.devel.sweng/10632">
    <title>Existence Based Polymorphism</title>
    <link>http://comments.gmane.org/gmane.games.devel.sweng/10632</link>
    <description>&lt;pre&gt;_______________________________________________
Sweng-Gamedev mailing list
Sweng-Gamedev&amp;lt; at &amp;gt;lists.midnightryder.com
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
&lt;/pre&gt;</description>
    <dc:creator>Richard Fabian</dc:creator>
    <dc:date>2010-06-02T10:03:19</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.games.devel.sweng">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.games.devel.sweng</link>
  </textinput>
</rdf:RDF>

