1
0
Fork 0
Commit graph

141 commits

Author SHA1 Message Date
curt
3c7bdc31d9 Cosmetic changes for new code moved into simgear to make the naming scheme
better follow simgear conventions.
2003-05-13 03:18:42 +00:00
curt
65c3caa032 Moved fgfs_src/Object/newmat.[ch]xx and fgfs_src/Object/matlib.[ch]xx into
simgear/scene/material/
Adjusted flightgear code to match this change.
2003-05-12 21:34:29 +00:00
curt
677ec873be Clean up various dead, depricated, or otherwise unused code. I don't believe
the ascii scenery file format has actually worked in quite some time, and the
ADA runway light code has been supersceded by a slightly different mechanism.
2003-05-08 03:29:49 +00:00
curt
f347d6d291 Removed support of old Ascii scenery format. The loader had not been
maintianed or upgraded in a *long* time so it didn't support many new
features like the runway lighting.  If anyone was using it for anything,
it should not be a huge amount of work to switch to the binary format.
SimGear includes a reader and writer for the binary format.
2003-05-06 14:20:30 +00:00
david
f2a5f98532 Patch from Jim Wilson:
That's a little too small to resolve differences at 16bpp. Try the
patch below.  It decreases the lifting substantially.  You will see
a slight increase in z-buffer flickering but it isn't bad.  Note
that we removed the "distance" component the other day,  the purpose
of it was to lift the lights higher when viewed at shallow viewing
angles.  The distance component is critical for the street lights that
can be very long distances away.

But with the distances we're working with here it really doesn't
do all that much.  The factor used in this patch is about as shallow
a lift as can be used when looking straight down at the airport.  At
24bpp there's no effect from incorporating a distance component.

The choice is to reintroduce a distance component...one that works (and
only for 16bpp), or alter the factor used in the patch below to strike an
acceptable balance between different viewing angles when in 16bpp mode.
2002-11-04 02:17:13 +00:00
curt
dbf997a2d3 Put taxiway lights in their own scene graph so we can adjust their brightness
(or fog punch through) independently from the ground or runway lighting.
2002-11-01 21:56:48 +00:00
curt
eb0c92f8ff Fix a couple oversights in the runway light lifting formula. 2002-10-30 22:56:22 +00:00
curt
94a36038d2 Remove distance component from runway lifting function. Only use the AGL
component.  This seems to work pretty well and simplifies things a fair bit.
2002-10-30 21:59:05 +00:00
curt
72017fc671 Andy Ross:
The biggest and coolest patch adds mouse sensitivity to the 3D
cockpits, so we can finally work the radios.  This ended up requiring
significant modifications outside of the 3D cockpit code.  Stuff folks
will want to look at:

+ The list of all "3D" cockpits is stored statically in the
   panelnode.cxx file.  This is clumsy, and won't migrate well to a
   multiple-aircraft feature.  Really, there should be a per-model list
   of 3D panels, but I couldn't find a clean place to put this.  The
   only handle you get back after parsing a model is a generic ssg
   node, to which I obviously can't add panel-specific methods.

+ The aircraft model is parsed *very* early in the initialization
   order.  Earlier, in fact, than the static list of allowable command
   bindings is built in fgInitCommands().  This is bad, as it means
   that mouse bindings on the instruments can't work yet.  I moved the
   call to fgInitCommands, but someone should look carefully to see
   that I picked the right place.  There's a lot of initialization
   code, and I got a little lost in there... :)

+ I added yet another "update" hook to the fgRenderFrame routine to
   hook the updates for the 3D panels.  This is only required for
   "mouse press delay", and it's a fairly clumsy mechanism based on
   frame rate instead of real time.  There appears to be delay handling
   already in place in the Input stuff, and there's a discussion going
   on about different mouse behavior right now.  Maybe this is a good
   time to unify these two (now three) approaches?
2002-10-29 19:44:03 +00:00
curt
786e58aa1a Removed some left over debugging output. 2002-10-24 12:12:14 +00:00
curt
d62b1a0a66 Fix a subtle bug in the partial ssg tree deleter which was leaving some
parts of the tree left over at the end which the failsafe was catching, but
this could impose a huge framerate hit if the missed portion of the tree
was large enough (and it very often was.)
2002-10-24 03:38:14 +00:00
curt
66e8d3fe65 Updates to how we structure runway lighting in the scene graph so we can get
the range selector to work on a per runway (or per lighting group) basis.
2002-10-22 20:47:14 +00:00
curt
83314d3f45 Fix a potential crash with William Riley's scenery build. 2002-10-09 14:29:42 +00:00
curt
f54302e9e9 Begin work on improving runway lighting infrastructure. 2002-10-09 03:40:23 +00:00
curt
c162577340 Begin work on rendering runway lights using environment maps. The basics
are now working.  A runway light is defined by a point and a direction.  The
point and direction are combined with the local up vector to create a small
triangle orthogonal to the direction.  The two ficticous corners of the
triangle are given an alpha value of zero, the orignal corner is given an
alpha of one.  The triangle is drawn in glPolygonMode(GL_FRONT, GL_POINT)
mode which means only the corner points are drawn, and since two have alpha=0
only the original point is drawn.  This is a long way to go to draw a point,
but it ensures that the point is only visible within 90 degrees of the light
direction, behind the light it is not visible.  This is still a long way
to get to drawing a point, but we use an environement map, with the direction
vector as the normal to mimic a light that is brightest when viewed head
on and dimmest when viewed perpendicularly or disappears when viewed from
behind.

- warning, there is a bug in how the current runway light direction vector
  is calculated which will adversely effect runway lighting.  The airports
  should be regenerated in order to fix this problem.
2002-10-06 03:53:19 +00:00
david
5eef7d7ad1 Removed tabs. 2002-09-23 15:27:46 +00:00
david
c3a1a9335e Added OBJECT_SHARED, which is identical to OBJECT_STATIC except that
the object is loaded relative to $FG_ROOT rather than to the current
scenery directory.
2002-09-22 11:46:53 +00:00
curt
4dac47f558 * Cleaned up some loose ends with free tiles that are paged out of the cache.
* Finally I think I have the partial ssg tree deletion routine working correctly
  after I managed to break it (and other confusion in the code cause it to
  never be called so I didn't notice the problem.)
* Converted several SG_INFO statements to SG_DEBUG to clean up some
  extraneous console output.
* This *should* conclude my investigation into a massive memory leak. :-)
2002-08-07 02:53:01 +00:00
curt
29d20b1703 Temporarily fix a crash and correctly free memory until I can sort out a
problem with the partial ssg tree freeing code.
2002-08-06 18:52:45 +00:00
curt
9885169964 Working on hunting down a really awful memory leak. This arose out of a
misunderstanding over which section of code would be freeing tiles.  This
patch cleans up several things, but a little more work is still needed.
2002-08-06 18:50:12 +00:00
curt
b3c5a8fb95 Various tweaks, enhancements, and optimizations surrounding tile paging
(specifically freeing tiles when we need to remove them from the tile cache.)
2002-07-29 05:07:38 +00:00
curt
dc40db3b33 Modified the partial ssg tree deletion algorithm so it correctly preserves
subtrees that may be connected into the scene graph multiple times.
(i.e.  our random ground cover objects.)
2002-07-26 22:23:49 +00:00
curt
27158525a9 Restructure the way tile freeing is handled. When a tile is removed from
the tile cache it's ssg elements are disconnected from the main ssg scene
graph, and then the tile is thrown on the end of a delete queue.  The
tilemgr->update() routine runs every frame.  It looks at this queue and if
it is non-empty, it incrementally frees the compents of the first tile
on the queue.  When the tile is completely free it is removed from the queue.

The amount of time to free the memory for even a single tile can be quite
substantial, especially with the increased overhead of dynamic/random
ground objects.  This change allows the system to spread the work of freeing
tile memory out over many frames so you don't get a noticable single frame
hit or stutter.
2002-07-25 23:59:04 +00:00
david
140f58b4ca Patch from Julian Foad:
Use defined constant instead of yet another approximation to pi.
2002-06-28 18:00:49 +00:00
curt
b1674cb506 From: "Jim Wilson" <jimw@kelcomaine.com>
This is a new improved patch for the previous tile manager fixes.

Rather than building dependencies between FGlocation or the viewer or fdm with
tilemgr what I ended up doing was linking the pieces together in the Mainloop
in main.cxx.  You'll see what I mean...it's been commented fairly well.  More
than likely we should move that chunk somewhere...just not sure where yet.

The changes seem clean now. As I get more ideas there could be some further
improvement in organizing the update in tilemgr.  You'll note that I left an
override in there for the tilemgr::update() function to preserve earlier
functionality if someone needs it (e.g. usage independent of an fdm or
viewer), not to mention there are a few places in flightgear that call it
directly that have not been changed to the new interface (and may not need to be).

The code has been optimized to avoid duplicate traversals and seems to run
generally quite well.  Note that there can be a short delay reloading tiles
that have been dropped from static views.  We could call the tile scheduler on
a view switch, but it's not a big deal and at the moment I'd like to get this
in so people can try it and comment on it as it is.

Everything has been resycned with CVS tonight and I've included the
description submitted earlier (below).

Best,

Jim

Changes synced with CVS approx 20:30EDT 2002-05-09 (after this evenings updates).

Files:
http://www.spiderbark.com/fgfs/viewer-update-20020516.tar.gz
 or
http://www.spiderbark.com/fgfs/viewer-update-20020516.diffs.gz

Description:
In a nutshell, these patches begin to take what was one value for ground
elevation and calculate ground elevation values seperately for the FDM and the
viewer (eye position).  Several outstanding view related bugs have been fixed.

With the introduction of the new viewer code a lot of that Flight Gear code
broke related to use of a global variable called "scenery.cur_elev".

Therefore the ground_elevation and other associated items (like the current
tile bucket) is maintained per FDM instance and per View.  Each of these has a
"point" or location that can be identified.  See changes to FGLocation class
and main.cxx.

Most of the problems related to the new viewer in terms of sky, ground and
runway lights, and tower views are fixed.

There are four minor problems remaining.  1) The sun/moon spins when you pan
the "lookat" tower view only (view #3).  2) Under stress (esp. magic carpet
full speed with max visibility), there is a memory leak in the tile caching
that was not introduced with these changes.  3) I have not tested these
changes or made corrections to the ADA or External FDM interfaces.  4) The
change view function doesn't call the time/light update (not a problem unless
a tower is very far away).

Details:
FDM/flight.cxx, flight.hxx - FGInterface ties to FGAircraftModel so that it's
 location data can be accessed for runway (ground elevation under aircraft)
 elevation.

FDM/larsim.cxx, larcsim.hxx - gets runway elevation from FGInterface now.
Commented out function that is causing a namespace conflict, hasn't been
called with recent code anyway.

FDM/JSBSim/JSBSim.cxx, YASim/YASim.cxx - gets runway elevation from
FGInterface now.

Scenery/newcache.cxx, newcache.hxx - changed caching scheme to time based
(oldest tiles discard).

Scenery/tileentry.cxx, tileentry.hxx - added place to record time, changed
rendering to reference viewer altitude in order to fix a problem with ground
and runway lights.

Scenery/tilemgr.cxx, tilemgr.hxx - Modified update() to accept values for
multiple locations.   Refresh function added in  order to periodically make
the tiles current for a non-moving view (like a tower).

Main/fg_init.cxx - register event for making tiles current in a non-moving
view (like a tower).

Main/location.hxx - added support for current ground elevation data.

Main/main.cxx - added second tilemgr call for fdm, fixed places where viewer
position data was required for correct sky rendering.

Main/options.cxx - fixed segfault reported by Curtis when using --view-offset
command line parameter.

Main/viewer.cxx, viewer.hxx - removed fudging of view position. Fixed numerous
bugs that were causing eye and target values to get mixed up.
2002-05-17 17:25:28 +00:00
curt
47825dcbae Moved "scenery" from being declaried in scenery.cxx to being declared
in globals.hxx.
2002-05-14 05:22:52 +00:00
david
56473dc28d Mac OS X fixes and MSVC warning fixes from Jonathan Polley. 2002-05-10 23:35:06 +00:00
curt
bd9b1c7558 Fixed a recently introduced bug which cause the ground lighting to be
wrongly "lifted" a very, very, very large amount more than it was supposed
to be.  I guess the moral of the story is what goes up, must come down. :-)
2002-04-16 06:33:56 +00:00
david
6e5d22789b Patches from Norm Vine to improve framerate and add a new
#ifdef'ed-out mode for syncing fullscreen with user settings in
Windows.
2002-04-07 15:24:32 +00:00
curt
914b5636e4 Removed some extra debugging output that wasn't supposed to be committed. 2002-03-11 22:55:01 +00:00
curt
3df76f9401 Oops, make sure we are generating an ocean tile if we can't load a terrain
tile.
Fixed a warning in the sound manager.
2002-03-11 22:50:23 +00:00
curt
536e95b63d Further modifications and restructuring of the scenery loading process. 2002-03-04 02:36:06 +00:00
curt
73b92a697d Further restructuring of the scenery loading code. 2002-03-03 23:20:55 +00:00
curt
938d006188 Updates to the scenery loading infrastructure to make it more flexible,
clean up some messiness, and lay more groundwork for runway lighting.
2002-03-03 20:29:31 +00:00
curt
7631c37f73 Setting up some more ground work for lighting. 2002-03-01 18:08:30 +00:00
curt
aa65d0c3db Minor, miscellaneous stuff ... 2002-02-19 04:34:18 +00:00
curt
9c370c2a9a Converted a cout to SG_LOG() 2002-02-12 16:36:25 +00:00
curt
dd8852dabe Better support for an alternate calendar time (i.e. if time/position/etc.
are being driven from an external data source.)

Akso found and fixed a bug in the simgear that caused the time to go goofy
temporarily while scenery was being loaded.
2002-02-11 23:33:20 +00:00
curt
10d63827fb #ifdef out some test code. 2002-01-20 05:58:34 +00:00
curt
dea7284cc7 Restructured the 'freeze' property a bit. We now have
/sim/freeze/master      (implimented)
  /sim/freeze/fuel        (implimented)
  /sim/freeze/position    (not implimented)
  /sim/freeze/time-of-day (not implimented)

/sim/freeze/master is bound to the 'p' key via keyboard.xml, however,
/sim/freeze/fuel is not bound to anything at the moment so you must
change it via the external property interface, or specify an initial
value on the command line.
2002-01-20 03:52:36 +00:00
curt
2b056c8452 This set of changes touches a *lot* of files. The main goal here is to
fix startup sequence problems where we initialize the FDM before we know
the desired starting altitude.

These changes delay fdm initialization until the local tile has been loaded
and we can do a real intersection and find the true ground elevation.

In order to do this, I depend more on the property manager as glue, rather
than the FGInterface.

There are some glitches still when switching to a new airport or reseting
the sim.  I will work on addressing these, but I need to commit the changes
so far to keep in sync with other developers.
2001-10-28 16:16:30 +00:00
curt
535d708ee0 Various MSVC patches. 2001-10-24 21:25:11 +00:00
curt
c0f70c0d54 Initial supporting code for runway lighting (not yet working) 2001-09-19 22:30:41 +00:00
curt
96b88e539f Move FGControls declaration to globals.hxx 2001-07-22 19:51:16 +00:00
curt
2fba4df258 Begin stubbing in some wrapper code in preparation for runway lighting. 2001-07-12 15:03:49 +00:00
curt
82f9528927 Fix a bug with old-style binary scenery compatibilty where no ground lighting
was generated.
2001-07-08 23:38:56 +00:00
curt
0648e5c051 Updated to read new scenery configuration files. 2001-06-22 20:35:39 +00:00
curt
d5a2533411 Fixed a bug in the tile pager / caching / management system that caused
a crash when relocating to a new airport.  Pending work from the old
area is now just completed as normal, rather than trying to empty the various
queues in their various stages when can lead to many problems in a threaded
environment.
2001-05-30 18:21:03 +00:00
curt
7e4a96dc77 Norman Vine contributed more optimized object placement math. 2001-05-23 22:28:38 +00:00
curt
2afcbb4bc8 We can't remove ssg branches in the threaded tile page because if we happen
to have attached an ssg loaded object to this branch, then plib will remove
it and all it's states (and textures) which will call opengl api commands
which will crash the program if run from a separate thread from the main render
thread.
2001-05-20 06:49:06 +00:00
curt
34854ab2af Threaded tile paging:
- model loading deferred to primary thread
- tile removal deferred to paging thread
- other tweaks and rearrangments.

Airport signs
- first stab at some support for adding taxiway and runway signs.  This
  is non-optimal, but I'm under the gun for a demo.
2001-05-19 16:59:43 +00:00
curt
865fb56c5a Tile loading is interleaved now when not threaded. Threaded loader is
throttled to one tile per frame maximum.
2001-05-18 20:31:23 +00:00
curt
31890db125 First stab at adding static objects to scene. 2001-05-16 06:00:02 +00:00
curt
a0d50000ba Modifications to coordinate with recent changes in simgear. 2001-05-15 22:30:39 +00:00
curt
4a609646b6 Modified FlightGear/src/Scenery. The tile loader thread no longer adds
a newly loaded tile to the scene graph.  Instead it puts it in a queue
for the tile manager.  I've used your counter_hack to check the loaded
queue and add any tiles to the scene graph.  I was playing around with
the counter_hack so there might be some commented out code, etc.  I also
changed some SG_DEBUGs to SG_INFOs so I could track the tile loading.
2001-04-16 20:03:52 +00:00
curt
b0b6c34249 Initial stab at a threaded tile loader contributed by Bernie Bright.
He writes:

Here are the final changes to add threads to the tile loading.  All the
thread related code is in the new FGTileLoader class.

./configure.in
./acconfig.h
Added --with-threads option and corresponding ENABLE_THREADS
definition.  The default is no threads.

./src/Scenery/tilemgr
Removed load_queue and associated references.  This has been replaced by
a new class FGTileLoader in FGNewCache.
Made the global variable global_tile_cache a member.
schedule_needed(): removed global_tile_cache.exists() tests since
sched_tile() effectively repeats the test.
initialize_queue(): removed code that loads tiles since this is now
performed by FGTileLoader.
update(): ditto

./src/Scenery/newcache
Added new class FGTileLoader to manage tile queuing and loading.
tile_map typedefs are private.
exists() is a const member function.
fill_in(): deleted
load_tile(): added.

./src/Scenery/FGTileLoader
The new threaded tile loader.  Maintains a queue of tiles waiting to be
loaded and an array of one or more threads to load the tiles.  Currently
only a single thread is created.  The queue is guarded by a mutex to
synchronize access.  A condition variable signals the thread when the
queue is non-empty.

CLO: I made a few tweaks to address a couple issues, hopefully what we
have is solid, but now we kick it out to the general public to see. :-)
2001-04-11 02:47:15 +00:00
curt
606b8d13d9 Added loaded flag to FGTileEntry so that the main thread knows when the
tile has been loaded.  Since this flag can be set by another thread I've
declared it "volatile bool".

Also cleaned up delete vs delete[] usage.  Gcc is happy with delete[],
which is the correct usage.
2001-04-06 18:30:07 +00:00
curt
191bb3956a Updates from Bernie Bright to massage tile loading around to make it
slightly more conducive to future threading.
2001-03-29 01:42:31 +00:00
curt
182fd42b40 SG-ified logstream. 2001-03-24 06:03:11 +00:00
curt
5ea9c04c64 SG_ namespace. 2001-03-24 04:56:46 +00:00
curt
17c96ae69e SG_ namespace 2001-03-24 04:48:44 +00:00
curt
5958389026 FG_ to SG_ namespace changes. 2001-03-23 22:59:18 +00:00
curt
8497f9b1ac FG_ to SG_ name changes. 2001-03-23 22:42:49 +00:00
curt
cff0022a16 Miscellaneous MSVC porting fixes by Christian Mayer. 2001-01-11 05:04:17 +00:00
curt
5fecec2bba More night ground lighting tweaks. 2000-12-06 22:16:12 +00:00
curt
174553feef Tweaked thresholds for staging in ground lighting. 2000-12-05 18:58:05 +00:00
curt
2baba715b4 Adjust ground lighting up significantly higher to avoid zbuffer fighting
on cards with 16 bit (or less) depth buffers.
2000-12-05 14:27:27 +00:00
curt
a775392e31 Bring lights in in stages as it get's darker. 2000-12-04 23:25:05 +00:00
curt
f14e155533 Tweaks to ground lighting infrastructure. 2000-12-04 22:36:18 +00:00
curt
d3c4018baa Started laying out the infrastructure for handling lighting.
Started experimenting with ground lighting.
2000-12-04 05:24:38 +00:00
curt
39632b90b8 Rewrote the tile scheme to use a "map" structure rather than "vector"
structure.  The new approach is simpler, more flexible, and more dynamics.
We can now dynamically size the tile cache up and down.  Also, the range
of tiles to load is now dependent on visibility and is calculated to always
bring in enough tiles.
2000-12-03 20:15:46 +00:00
curt
655ce0e20d MACOS -> macintosh 2000-09-10 00:04:50 +00:00
curt
39ae3864de Cleaned up all the old fragment and material_mgr stuff which originated
from the pre-ssg / render everything ourselves days.  Replaced with a
material library manager that is much better suited for working in the
context of ssg.  This simplified and cleaned up a ton of old junk.
2000-06-23 00:30:04 +00:00
curt
cd1a471f7e Updates, optimizations, and restructures from Norman Vine. 2000-06-15 22:32:26 +00:00
curt
1294aed465 One more pass at a reorg. 2000-02-16 23:01:03 +00:00
curt
485230b443 Code reorganization. 2000-02-15 03:30:01 +00:00
curt
9a207fb4e1 MacOS fixes contributed by Darrell Walisser on 1/26/2000. 2000-02-10 23:37:56 +00:00
curt
715062e85f Fixed (hopefully) a build problem with newer versions of automake
and autoconf.
1999-10-30 02:37:56 +00:00
curt
eb02aba5c8 More tile memory clean ups. 1999-10-27 00:52:25 +00:00
curt
a631bd2e55 Add a key mapping (F3) for taking a screen snap shot.
Keep track of and free index arrays that are fed to ssg.
Ssg branch deletion memory leak work around.
1999-10-26 03:45:33 +00:00
curt
da3271e103 Simplify ssg branch deletion code. Saying we were doing it the
round-a-bout hard way would be an understatement.
1999-10-06 20:59:52 +00:00
curt
5d9577f806 Remove ssg kids in a an attepmpt to fix one memory leak. We think the
remaining leak is ssg's fault.
1999-10-01 20:36:16 +00:00
curt
87e3a7decb Tweaked some log messages. 1999-09-01 18:52:31 +00:00
curt
58a8b0d103 Minor tweaks. 1999-08-14 22:07:35 +00:00
curt
243b73c10b Moving towards increased dependence on ssg. 1999-08-07 18:27:29 +00:00
curt
44400cdff8 Fix a small tile cache bug. 1999-07-31 04:59:28 +00:00
curt
8d58f64257 Fixed a tile caching bug. When I was freeing tiles to make room in the
cache, I was only checking currently visible tiles, rather than checking
all the cache entries.
1999-07-25 01:52:36 +00:00
curt
e5a87cf9fa (Hopefully) fixed bug which caused corrupt entries to be loaded into the
scene graph when a tile shift occured while the tile load queue was not
  empty.
1999-07-04 07:37:30 +00:00
curt
39b3602dce Ssg tweaks.
Better handling of missing tiles.
Added a range selector so we can completely ignore tiles that are beyond
  our visibility range.
Added a routine to prep the ssg nodes before rendering by updating the
  transform and range selector values.
1999-06-30 00:28:20 +00:00
curt
0ae48876a7 More ssg tweaks. 1999-06-29 14:57:00 +00:00
Tim Moore
c90db01dc8 source tree reorganization prior to flightgear 0.7
SimGear and TerraGear appear to have been split off at this time.
2009-09-14 14:26:20 +02:00
Renamed from Simulator/Scenery/tileentry.cxx (Browse further)