Summary Period: 2002-09-19 to 2003-06-22
[root]/CS/plugins/mesh/thing/persist/standard
Total Lines Of Code:
775 (2003-07-11 20:29)
Author | Changes | Lines of code | Lines per change |
---|---|---|---|
Totals | 40 (100.0%) | 1612 (100.0%) | 40.3 |
sunshine | 10 (25.0%) | 1154 (71.6%) | 115.4 |
jorrit | 26 (65.0%) | 437 (27.1%) | 16.8 |
matzebraun | 1 (2.5%) | 10 (0.6%) | 10.0 |
ate | 1 (2.5%) | 6 (0.4%) | 6.0 |
ab031ns | 1 (2.5%) | 3 (0.2%) | 3.0 |
res2002 | 1 (2.5%) | 2 (0.1%) | 2.0 |
Eric Sunshine removed the unused, obsolete, and deprecated top-level <name>
node from the .csplugin files.
0 lines of code changed in:
- Jorrit made the <moveable/> option no longer required (it is
now deprecated). The thing mesh object plugin will not automatically
detect if it is needed to switch to moveable or not. So setting
this is no longer required.
3 lines of code changed in:
Eric Sunshine performed Phase Three of the elimination of the monolithic
scf.cfg:
-*- Eliminated the SCF information which was hardcoded in the .cpp files
of plugin modules, and which duplicated information in the external
.csplugin files.
-*- Plugin modules no longer maintain and export a monolithic class list.
Now, each factory implemented by the code is exported automatically.
-*- Added a new <implementation> child node to the <class> node in
.csplugin files. The value of this node is the name of the C++ class
which implements the SCF class. For instance, C++ class csVFS
implements crystalspace.kernel.vfs.
-*- Eliminated the following SCF macros which were related to exporting
SCF information from .cpp code and/or registering classes manually:
SCF_EXPORT_CLASS_TABLE
SCF_EXPORT_CLASS
SCF_EXPORT_CLASS_DEP
SCF_EXPORT_CLASS_TABLE_END
SCF_REGISTER_STATIC_CLASS_DEP
-*- Eliminated the following methods from iSCF:
RegisterStaticClass
RegisterClassList
-*- Plugin modules are now initialized/shutdown lazily as classes are
requested from them. The first time a class is requested, the plugin
is initialized. The plugin is shutdown after the last class instance
has been destroyed.
-*- Fixed bug in scf.h where SCF_PRINT_CALL_ADDRESS was not being enabled
for gcc 3.x.
-*- Fixed bug in win32.jam where GenerateExportDefs rule failed to ensure
that directory containing output file existed before creating file.
Also fixed bug where it failed to set up a dependency between the
input and output files.
-*- Still To-Do:
- Remove references to scf.cfg and scfreg from documentation. Also
document new .csplugin resources.
- Add platform-specific function to scan and locate plugins
automatically rather than using the ad-hoc approach inherited from
scanning for .scf files.
- Add platform-specific function to query a plugin's meta-information.
This should be used by SCF to do the raw extraction. Provide and
finalize API for higher-level clients to access meta-information.
- Augment static linking to work with the new facility. (Removal of
the hardcoded SCF information, has now broken static linking. It
worked until this time, even with all of the preceding changes.)
4 lines of code changed in:
Replaced NULL with 0.
9 lines of code changed in:
Eric Sunshine performed Phase One of the elimination of the monolithic
scf.cfg:
-*- Plugin modules are now self-describing. This information can be
queried at run-time without having to actually load the module.
-*- The plugin maintainer now manages the plugin's meta-information in an
external .csplugin file, rather than hard-coding the information into
the plugin's source code. The mechanism by which the meta-information
is bound to the plugin is platform-dependent. Presently, all
platforms simply lay down the meta-information in a plain text file
alongside the plugin itself; with the same basename and extension
.csplugin. This may change in the future. For example, on MacOS/X,
the meta-information will probably be encapsulated within the plugin's
bundle wrapper.
-*- Plugin meta-information is now maintained in XML format. Here is an
example:
<?xml version="1.0"?>
<!-- gl3d.csplugin -->
<plugin>
<name>gl3d</name>
<scf>
<classes>
<class>
<name>crystalspace.graphics3d.opengl</name>
<description>OpenGL 3D graphics driver</description>
<requires>
<class>crystalspace.font.server.</class>
</requires>
</class>
</classes>
</scf>
</plugin>
-*- Since meta-information is now extensible, maintainers can choose to
publish supplementary information about plugins (in addition to the
SCF information already published). For example, image loading
plugins could publish "image indendification" information which would
allow the image loading multiplexor to selectively request image
loading plugins on-demand, rather than requesting all plugins
unconditionally, even if they are not needed. Here is an example of a
possible meta-information table for the PNG loader:
<?xml version="1.0"?>
<!-- cspngimg.csplugin -->
<plugin>
<name>cspngimg</name>
<scf>...</scf>
<imageloader>
<imagetype>
<class>crystalspace.graphic.image.io.png</class>
<identify>
<mimetype>image/png</mimetype>
<extension>png</extension>
<extension>PNG</extension>
<scan length="4" bytes="\0x89PNG"/>
</identify>
</imagetype>
</imageloader>
</plugin>
In this example, the PNG loader meta-information tells the multiplexor
several different ways to identify a PNG image: by checking file
extension, if available; by checking MIME type, if available; by
checking for the magic-string "\0x89PNG" in the raw image data. If
the multiplexor identifies the image as PNG, only then will it
actually request the PNG loader.
-*- Added the --meta-file directive to msvcgen.pl to allow specification
of the meta-information file for a module. The value of this option
is interpolated into template files via the new %metafile% variable.
msvcgen.mak now utilizes this flag with the value of the new
INC.PROJECT makefile variable. Augmented the MSVC6 and MSVC7 plugin
template files (plugin.tpl) to make use of %metafile%.
-*- Changed the file extension for plugins on MacOS/X from .csplugin to
.csbundle to avoid conflict with new meta-information resource which
uses the extension .csplugin.
-*- Still To-Do:
- Augment SCF to utilize the new meta-information resources, and to
understand the new XML format. Presently, these resources are
ignored at run-time.
- Add platform-specific function to scan and locate plugins
automatically, rather than relying upon a monolithic registry such
as scf.cfg.
- Add platform-specific function to query a plugin's meta-information.
- Eliminate the monolithic scf.cfg.
- Augment static linking to work with the new facility.
- Eliminate the hard-coded SCF registration information in each
plugin's source code.
27 lines of code changed in:
Jorrit did various changes related to portal management:
- Moved iPortal definition from imesh/thing/portal.h to
iengine/portal.h. The reason is that portals are now an engine
concept and not only for things. The only portal implementation
is currently still in thing though.
- Added the ability to get the portal vertices from iPortal.
- Added iMeshObject->GetPortalCount() and iMeshObject->GetPortal().
- Also added default implementations of those to csMeshObject
(supporting no portals).
- At two places in the engine (GetNearbyObjects() and PlaceMesh())
this new function is used instead of first querying for
iThingState. This makes those functions a bit faster and is (in
theory) also more general (in the sense of being able to add
portals to any mesh object). However later on most functions
still query for iThingState so this promise of more generality
is not fulfilled yet.
1 lines of code changed in:
- fixed a leak in the engine: csStatLight:: and
csDynLight::AddAffectedLightingInfo() added the passed lighting info
to a hash and IncRef()ed it. However, the hash only adds it once,
while the IncRef() always happens, leading to lots of fake
references. When on destruction the lighting info hash was iterated
over, the lighting info was only DecRef()ed once (because there was
only one copy in the hash.) The lighting info is now only IncRef()ed
when it's not already in the hash.
- improved the thing loader to not produce a heap error in case of
an error. An iPoly3D was DecRef()ed, causing it to delete itself -
which wouldn't work as it was block-allocated. Now the polygon is
properly removed from the thing factory state.
- changed the Thing object to emit a notification as well if
iPolygonMesh is queried.
- changed a refcount issue in csEventQueue. For managing the
iEvents in the queue both smart pointers and manual IncRef()s/
DecRef()s were used, however an iEvent was always IncRef()ed but
not always DecRef()ed, causing leaks under some circumstances.
Removed IncRef()s/DecRef()s and let the smart pointers do their
work.
- added a remark to iEventQueue::Post() documentation on how
the owner ship of a passed iEvent is treated.
2 lines of code changed in:
Eric Sunshine made the following changes:
-*- Modified configure.ac so that it emits a SRCDIR property to
config.mak. This value represents the --srcdir argument given to the
configure script (or "." if --srcdir is omitted). This points at the
directory containing the CS source code (which may differ from the
build directory, which is typically the current working directory).
-*- Modified makefiles and build scripts throughout the project so that
they respect $(SRCDIR). This allows the project to be built in a
directory other than the source directory, thus it is possible to
place the source directory on a readonly filesystem (such as a
CD-ROM), or to share a single NFS-mounted source directory among
different builds, where each build inhabits its own directory. For
example, if CS resides at /home/CS and you wish to build the project
in /home/build:
% cd /home/build
% ../CS/configure
% make -k all
% make install
(Note that the Jam-base build system already supports this build
paradigm.)
-*- Modified configure.ac so that it emits EXTENSIVE_MEMDEBUG to
config.mak since this variable is used by Makefile.in for the
`showconfig' target.
-*- Modified configure.ac so that it emits MONITOR_MAKEFILE_CACHE when the
value is either "yes" or "no", instead of emitting it only when the
value is "yes". This was necessary because CS/mk/cache.mak prints the
value of this variable as part of $(SYSMODIFIER).
3 lines of code changed in:
- Removed the unsupported CS_THING_MOVE_OFTEN flag. Only OCCASIONAL
and NEVER remain.
- Added iPolygon3D->SetMaterial() and GetMaterial().
- Added iThingState->ReplaceMaterial() to scan all polygons and
replace the material with another one (must be the same size!).
The new 'replacematerials' now uses this function.
Additionally added iThingState->ClearReplacedMaterials() to
reset all replaced materials to default (i.e. use from factory).
43 lines of code changed in:
- Removed iThingFactoryState->MergeTemplate() and ReplaceMaterials().
These don't work correctly and are no longer needed.
- Removed broken support for material sets ('materialselect' and
'matset' keywords).
- Added new 'replacematerial' keyword which you can use in a thing
instance to replace the material used in the factory with another one.
Using this feature you can still reuse a factory even if the
materials are different. Note that the materials MUST have the
same size! i.e. if the factory uses a 64x64 material then you can
only replace it with another 64x64 material.
Currently unimplemented!!!
- Fixed a bug with collision detection and HardTransform of a thing
mesh object. This is a new bug introduced with my changes yesterday
and it was visible in the partsys level (when traversing a portal).
9 lines of code changed in:
Thing changes:
- Removed obsolete csThingBBox bounding box in csThing.
- Split bezier curves in seperate mesh object plugin (bezier
plugin).
- Greatly cleaned up the csThingStatic stuff and moved all static
stuff to that.
- Updated API modification document.
- Also updated various other parts in the documentation for these
changes.
- Fixed map2cs to export curves using the new bezier plugin.
- Changed the way thing factories and objects work. A thing factory
and a mesh object no longer are the same object. So first you
have to make a factory and then the object. This also allows
sharing of factories between objects.
- As a consequence of all these changes the lightmap format has
changed again.
- Doing a HardTransform() on a thing mesh object will automatically
cause the factory of that thing to be cloned so that other
things sharing that factory will not be transformed.
Doing a HardTransform() on a thing factory will have an
effect on all instances created from that.
- Used csBlockAllocator<T> for a lot of polygon objects in the
thing mesh plugin. This speeds up loading/unloading and also
improves memory usage.
- Merged csPolyTexLightMap into csPolyTexture. This improved
both speed, memory usage, and source code readability.
- Thing now uses ClipBSphere() instead of ClipBBox(). This is
faster.
190 lines of code changed in:
added the Jamfiles
10 lines of code changed in:
- Updated API mod doc with regards to this new change.
- Syntax service loader no longer supports loading of planes. It now
gives an error saying you must use levtool -planes.
- Removed all texture mapping plane related stuff from
iThingEnvironment.
- Removed the plane loader and saver addon from the thing loader
plugin.
- Removed iPolyTxtPlane interface and fixed thing plugin related to
that. This should already speed up things a tiny bit.
0 lines of code changed in:
- Split iThingState with iThingState and iThingFactoryState.
- Renamed GetPolygonStatic() to GetPolygon().
28 lines of code changed in:
Split iPolygon3D into iPolygon3D and iPolygon3DStatic. The static
part contains all information that is static and could be in
a factory. Several functions (like iThingState->CreatePolygon)
will now return an iPolygon3DStatic instead of an iPolygon3D.
1 lines of code changed in:
- Reworked the notion of curve templates. The iCurveTemplate has
been removed and it's functionality has moved to iCurve itself.
The notion of curve templates has always been a bit curious
as a curve template is just a list of nine vertex indices. So
it didn't make sense to seperate it. As a consequence of this
change the bezier addon loader has been removed. A curve like this
in the past:
<addon>
<plugin>crystalspace.mesh.loader.thing.bezier</plugin>
<params>
<name>b1</name>
<material>mosaic</material>
<v>0</v> <v>1</v> <v>2</v>
<v>3</v> <v>4</v> <v>5</v>
<v>6</v> <v>7</v> <v>8</v>
</params>
</addon>
<meshfact name="tunnel">
<plugin>crystalspace.mesh.loader.factory.thing</plugin>
<params>
<curvecenter x="0" y="0" z="0" />
<curvescale>80</curvescale>
<curvecontrol x="5" y="2" z="0" u="1" v="0" />
...
<curve name="bez">b1</curve>
</params>
</meshfact>
should now become:
<meshfact name="tunnel">
<plugin>crystalspace.mesh.loader.factory.thing</plugin>
<params>
<curvecenter x="0" y="0" z="0" />
<curvescale>80</curvescale>
<curvecontrol x="5" y="2" z="0" u="1" v="0" />
...
<curve name="b1">
<material>mosaic</material>
<v>0</v> <v>1</v> <v>2</v>
<v>3</v> <v>4</v> <v>5</v>
<v>6</v> <v>7</v> <v>8</v>
</curve>
</params>
</meshfact>
62 lines of code changed in:
- Worked a bit further on blocks: now no longer uses gouraud shaded
polygons.
- Completely changed the way polygons can be shaded. Now it is only
possible to use lightmaps. Previously it was also possible to use
gouraud shading but for that it is better to use genmesh (this
support was never very good anyway). The <shading> keyword
has been changed to accept a boolean instead of NONE, FLAT, GOURAUD,
and LIGHTMAP. With this you can enable/disable texture mapping.
Several API calls in iPolygon3D has been modified for this.
Additionally all iPolyTex* interfaces have been removed.
The functions from iPolyTexNone and iPolyTexLightMap have moved
to iPolygon3D.
- Did some further optimizations in the polygon class with regards to
memory usage and also time efficiency. A single polygon now
takes considerably less memory.
- Removed iPolygon3D->GetPolygonID() since this ID was not used
and not useful. Also removed iCurve->GetCurveID().
- Removed cosinus factor API calls from iPolygon3D and moved them
to iThingState instead. Now it is only possible to control this
on a per-thing level. This change also reflects in the thing
loader.
- Remove csPolyPlane and merged all planes into the polygon class.
This saves on object creation and speed (less pointer indirection).
- Removed some fields from csPolyTexture.
- Cache data in csPolyTexture is now allocated on demand. This
makes the structure smaller at the expense of a little more
memory usage for software renderer alone. Only the software renderer
uses this cache data.
- Also removed the camera space plane from the polygon structure.
This camera space plane is now computed as needed (this was
happening anyway).
- Created new API doc appendix for 0.96 to 0.98.
12 lines of code changed in:
- Dynavis now only reports about the first six none-closed
objects instead of all.
- Thing no longer reports that it is using FASTMESH.
- I had to make the epsilon that is used for checking valid uv
coordinates for a polygon a bit bigger. This means that there will
now be more warnings about 'bad UV coordinates for poly ...'.
The reason I had to do this is that with the current epsilon it
was possible that lightmaps were generated that were incompatible
between optimize/debug compiled versions of CS.
0 lines of code changed in:
- Added a new setting to the engine with which you can control the
number of polygons after which CS_THING_FASTMESH is automatically
enabled for things (use DrawPolygonMesh then). The default value
is 500:
- Added Engine.FastMeshThresshold config option.
- Added SetFastMeshThresshold() function to iEngine.
- Added GetFastMeshThresshold() function to iEngine.
- Added <fastmesh> keyword to the <settings> block.
Currently this will only work for things that have no portals and
no curves.
- Set the fastmesh thresshold in flarge to 10. That causes a few
objects to use fastmesh now.
1 lines of code changed in:
Renamed/corrected header defines to CS coding-style.
3 lines of code changed in:
(8 more)
Generated by StatCvs v0.2-dev