6 years agoAdd cube GtkGL example master
Andy Spencer [Wed, 18 Sep 2013 08:34:52 +0000 (08:34 +0000)]
Add cube GtkGL example

6 years agoVersion bump for 0.8.1
Andy Spencer [Mon, 11 Feb 2013 06:15:51 +0000 (06:15 +0000)]
Version bump for 0.8.1

6 years agoRemove optional GLUT dependencies
Andy Spencer [Sun, 10 Mar 2013 03:24:25 +0000 (03:24 +0000)]
Remove optional GLUT dependencies

The teapot easter egg kept crashing, and I'm too lazy to fix it.

6 years agoAdd grits_object_destroy functions and fix memory leaks
Andy Spencer [Mon, 11 Feb 2013 06:12:15 +0000 (06:12 +0000)]
Add grits_object_destroy functions and fix memory leaks

6 years agoUpdate depth buffer resolution
Andy Spencer [Mon, 11 Feb 2013 06:05:46 +0000 (06:05 +0000)]
Update depth buffer resolution

6 years agoVersion 0.8 v0.8.x
Andy Spencer [Mon, 28 Jan 2013 01:22:23 +0000 (01:22 +0000)]
Version 0.8

6 years agoAdd compat.h to dist
Andy Spencer [Mon, 28 Jan 2013 03:00:19 +0000 (03:00 +0000)]
Add compat.h to dist

6 years agoAdd motion threshold when clicking objects
Andy Spencer [Wed, 23 Jan 2013 06:46:16 +0000 (06:46 +0000)]
Add motion threshold when clicking objects

This allows a click to go though even if a small amount of mouse motion
is detected. Currently set to 8 motion events, it might be better to use
pixels instead of events.

6 years agoAdd grits_http_abort function
Andy Spencer [Wed, 23 Jan 2013 06:30:53 +0000 (06:30 +0000)]
Add grits_http_abort function

This is similar to soup_session_abort, except that it also prevents any
additional requests from being queued. This prevents long waits if we
cancel during a loop, as was done in the AWeather alerts plugin.

6 years agoFix queue_draw on grits_tiles
Andy Spencer [Wed, 23 Jan 2013 06:29:46 +0000 (06:29 +0000)]
Fix queue_draw on grits_tiles

Any tile other than the top level tile wouldn't queue draw correctly
because it didn't have direct access to the viewer. Just search up until
we find it..

6 years agoAdd support for GTK 3
Andy Spencer [Mon, 3 Dec 2012 00:12:41 +0000 (00:12 +0000)]
Add support for GTK 3

First, most of the code has already been converted to work the same on
the latest copy of GTK 2 and GTK 3. These changes include things like
using GDK_KEY_* and removing all the gdk threading code.

Second, a compatibility file was added to mimic GTK 3 features that will
not be added to GTK 2. This includes things like gtk_box_new.

Third, any other differences are resolved using GTK_CHECK_VERSION.
This was done as a last resort where there are actual differences
between GTK 2 and GTK 3, such as the "expose-event" to "draw" change.

6 years agoUpdate depscan
Andy Spencer [Sun, 20 Jan 2013 07:47:30 +0000 (07:47 +0000)]
Update depscan

6 years agoConvert to GtkAllocation
Andy Spencer [Sun, 20 Jan 2013 06:44:25 +0000 (06:44 +0000)]
Convert to GtkAllocation

6 years agoChange GdkEventExpose to gpointer
Andy Spencer [Sun, 20 Jan 2013 05:05:54 +0000 (05:05 +0000)]
Change GdkEventExpose to gpointer

On GTK 2 this a GdkEvent, but in GTK 3 it's a cairo surface. Since we
don't use the structure anyway we'll just call it a pointer.

6 years agoRemove gdk threads
Andy Spencer [Sun, 20 Jan 2013 05:00:03 +0000 (05:00 +0000)]
Remove gdk threads

6 years agoSwitch to GDK_KEY_*
Andy Spencer [Sun, 20 Jan 2013 04:41:35 +0000 (04:41 +0000)]
Switch to GDK_KEY_*

6 years agoMisc fixes
Andy Spencer [Sun, 20 Jan 2013 04:37:11 +0000 (04:37 +0000)]
Misc fixes

6 years agoAdd split depth buffer for world/overlay
Andy Spencer [Sun, 20 Jan 2013 04:22:38 +0000 (04:22 +0000)]
Add split depth buffer for world/overlay

The top 1 percent gets used for the overlay/hud layers, while the back
99 percent gets used for the world. This allows the HUD to use depth
testing without interacting with the world.

This fixes a bug in the compass rose.

6 years agoLock draw_queue id to prevent race conditions
Andy Spencer [Wed, 2 Jan 2013 10:27:25 +0000 (10:27 +0000)]
Lock draw_queue id to prevent race conditions

On Windows, the main loop runs right after the idle source is added.
This causes the callback queue_draw function to assign a dead ID which
leads to the viewer never refreshing.

6 years agoUpdate mac integration
Andy Spencer [Sun, 30 Dec 2012 06:52:50 +0000 (06:52 +0000)]
Update mac integration

6 years agoSet OpenGL resolution request for retina mbp
Andy Spencer [Wed, 2 Jan 2013 06:03:57 +0000 (06:03 +0000)]
Set OpenGL resolution request for retina mbp

Note: there are still other high resolution issues that cause the
regular gtk widgets to be drawn in low resolution.

6 years agoUpdate OpenGL widget positioning under OSX
Andy Spencer [Wed, 2 Jan 2013 06:03:32 +0000 (06:03 +0000)]
Update OpenGL widget positioning under OSX

6 years agoFix crash on osx due to uninitialized pointer
Andy Spencer [Sun, 30 Dec 2012 06:53:08 +0000 (06:53 +0000)]
Fix crash on osx due to uninitialized pointer

6 years agoFix bug in plugins unload
Andy Spencer [Thu, 27 Dec 2012 10:10:48 +0000 (10:10 +0000)]
Fix bug in plugins unload

6 years agoAdd thread safe grits_viewer_queue_draw function
Andy Spencer [Thu, 27 Dec 2012 09:26:28 +0000 (09:26 +0000)]
Add thread safe grits_viewer_queue_draw function

This should be used by threads when they finish loading something. Any
additional loading which must be done by the main thread will ideally be
done during the next draw.

6 years agoMove threading out of tile update/gc functions
Andy Spencer [Thu, 27 Dec 2012 08:45:40 +0000 (08:45 +0000)]
Move threading out of tile update/gc functions

This prevents all sorts of race conditions when unloading plugins.

I hope.

6 years agoMove low level tile loading to GritsTile
Andy Spencer [Thu, 27 Dec 2012 03:23:01 +0000 (03:23 +0000)]
Move low level tile loading to GritsTile

Move all the OpenGL stuff out of the plugins and into GritsTile, this
prevents needing to explicit idle callbacks in plugins, which is
extremely unstable when unloading a plugin.

Note: The tile code is _not_ thread safe and will be reworked in
subsequent changes. The plan is to use some sort of priority queue and
do all the updating and garbage collecting from the main thread directly
from the location-changed callback. The plugins can still use thread
pools for the actual downloading and loading.

6 years agoMore reference counting updates
Andy Spencer [Wed, 26 Dec 2012 23:39:12 +0000 (23:39 +0000)]
More reference counting updates

The viewer now adds it's own references and doesn't take references from
the caller. In almost all cases the caller needs to keep it's reference
so that it can remove the object when the plugin is unloaded.

6 years agoRemove some unused API cruft
Andy Spencer [Wed, 26 Dec 2012 10:41:15 +0000 (10:41 +0000)]
Remove some unused API cruft

This also prevent errors if an object is removed from the viewer twice.
For example:

  - The viewer is destroyed
  - The opengl dispose function removes all objects
  - The application frees plugins
  - The plugins dispose function attempts to remove
    an already removed the object

6 years agoFix race conditions
Andy Spencer [Wed, 26 Dec 2012 08:53:29 +0000 (08:53 +0000)]
Fix race conditions

6 years agoFix a variety of memory leaks
Andy Spencer [Wed, 26 Dec 2012 08:40:06 +0000 (08:40 +0000)]
Fix a variety of memory leaks

6 years agoSet debug level for test rules
Andy Spencer [Wed, 26 Dec 2012 06:31:26 +0000 (06:31 +0000)]
Set debug level for test rules

6 years agoSwitch elevation plugin to thread pools
Andy Spencer [Wed, 26 Dec 2012 06:24:36 +0000 (06:24 +0000)]
Switch elevation plugin to thread pools

This makes things consistent with the map/sat plugins and will hopefully
improve stability. They all need some work though..

6 years agoAdd X11 library for sync calls
Andy Spencer [Thu, 20 Dec 2012 06:59:51 +0000 (06:59 +0000)]
Add X11 library for sync calls

6 years agoMove tarball folder
Andy Spencer [Sat, 15 Dec 2012 09:22:37 +0000 (09:22 +0000)]
Move tarball folder

6 years agoChange website to
Andy Spencer [Sat, 15 Dec 2012 09:18:12 +0000 (09:18 +0000)]
Change website to

6 years agoRemove a lot of callback from GritsOpenGL
Andy Spencer [Sat, 15 Dec 2012 08:25:36 +0000 (08:25 +0000)]
Remove a lot of callback from GritsOpenGL

Many of the callbacks can be moved the expose function. Since they
mostly run in the main thread anyway it doesn't matter too much.

One distinct advantage of this is that the split_merge and expose
functions are interleaved, the end result of which is a much nicer
looking display.

6 years agoFix crash while initializing OpenGL context
Andy Spencer [Sat, 15 Dec 2012 06:55:33 +0000 (06:55 +0000)]
Fix crash while initializing OpenGL context

GL was crashing with a BadAlloc, this seems to be related to the Intel
graphics drivers when using indirect rendering. Using a direct rendering
context fixes the problem, however we can at least attempt both way if
one or the other fails.

6 years agoUpdate examples
Andy Spencer [Sat, 15 Dec 2012 06:54:18 +0000 (06:54 +0000)]
Update examples

- Fix crash in teapot plugin
- Use direct rendering in gl example

6 years agoQueue mouse events and process them during expose
Andy Spencer [Thu, 13 Dec 2012 17:10:14 +0000 (17:10 +0000)]
Queue mouse events and process them during expose

Previously mouse events would get stacked up and prevent screen
updating. This only saves the most recent event and skips the rest.

It also forces a redraw after running picking which leads to a much
more responsive display.

6 years agoRequest direct connection when setting up OpenGL
Andy Spencer [Thu, 13 Dec 2012 17:08:43 +0000 (17:08 +0000)]
Request direct connection when setting up OpenGL

This fixes an OpenGL error with some graphics driver such as the open
source Intel drivers.

6 years agoRemove deprecated thread functions
Andy Spencer [Thu, 13 Dec 2012 05:42:02 +0000 (05:42 +0000)]
Remove deprecated thread functions

7 years agoFix compile with glut
Andy Spencer [Wed, 23 May 2012 04:38:20 +0000 (04:38 +0000)]
Fix compile with glut

7 years agoFix depth buffer glitches
Andy Spencer [Wed, 23 May 2012 04:37:58 +0000 (04:37 +0000)]
Fix depth buffer glitches

7 years agoStart work on info overlays
Andy Spencer [Sun, 29 Apr 2012 05:53:12 +0000 (05:53 +0000)]
Start work on info overlays

7 years agoChange level storage from GTree to GQueue
Andy Spencer [Sun, 29 Apr 2012 23:31:16 +0000 (23:31 +0000)]
Change level storage from GTree to GQueue

GQueue is really just a GList with a tail pointer, which lets us iterate
in reverse easier. Using lists also let us iterate with loops instead of
funky callbacks all over the place, this may result it slightly more
code, but is much easier understand.

7 years agoUpdate compass plugin
Andy Spencer [Sun, 29 Apr 2012 05:49:11 +0000 (05:49 +0000)]
Update compass plugin

- Draw a 4 point compass with north in red
- Reset rotation when clicking the compass

7 years agoUpdate GritsTest
Andy Spencer [Sun, 29 Apr 2012 04:22:48 +0000 (04:22 +0000)]
Update GritsTest

- Add test for cursors
- Remove extra enter/leave callbacks

7 years agoFix end caps on GritsMarker
Andy Spencer [Sun, 29 Apr 2012 04:22:12 +0000 (04:22 +0000)]
Fix end caps on GritsMarker

7 years agoLimit rotation to -180 .. 180
Andy Spencer [Sun, 29 Apr 2012 04:13:51 +0000 (04:13 +0000)]
Limit rotation to -180 .. 180

7 years agoAdd cursor support to GritsObject
Andy Spencer [Sun, 29 Apr 2012 03:40:20 +0000 (03:40 +0000)]
Add cursor support to GritsObject

7 years agoAdd parameters and return values to GritsObject events
Andy Spencer [Sat, 28 Apr 2012 20:15:32 +0000 (20:15 +0000)]
Add parameters and return values to GritsObject events

This should eventually let us break the chain so that a mouse-click
doesn't cause multiple things to happen.

7 years agoAdd compass rose
Andy Spencer [Fri, 13 Apr 2012 23:49:55 +0000 (23:49 +0000)]
Add compass rose

      pad         compass   viewer
     .---.          /        /
  .- +-------0-----/--------/-----------+ -.
pad  |   '   |    /                     |  |
  '- | - +-------+                      |  |
     |   |   N   |                      |  |
     0 - | W-+-E | -. - - - - - - - - - 0  |
     |   |   S   |  scale               |  |
     |   +-------+ -'                   |  |
     |       '-.-'                      | height
     |         scale                    |  |
     |       |                          |  |
     +-------0--------------------------+ -'
     .                                  .

7 years agoAdd support for picking on orthographic projections
Andy Spencer [Sat, 14 Apr 2012 01:01:29 +0000 (01:01 +0000)]
Add support for picking on orthographic projections

7 years agoMinor cleanup in GritsPoly
Andy Spencer [Fri, 13 Apr 2012 23:48:44 +0000 (23:48 +0000)]
Minor cleanup in GritsPoly

7 years agoAdd depth buffer bits to info example
Andy Spencer [Fri, 13 Apr 2012 23:46:56 +0000 (23:46 +0000)]
Add depth buffer bits to info example

7 years agoSwitch to explicit GL_CLAMP_TO_EDGE
Andy Spencer [Thu, 16 Feb 2012 22:59:40 +0000 (22:59 +0000)]
Switch to explicit GL_CLAMP_TO_EDGE

GL_CLAMP will sample the black edge color whereas GL_CLAMP_TO_EDGE does
not. However, some graphics cards/drivers treat GL_CLAMP like
GL_CLAMP_TO_EDGE. This forces the desired behavior.

7 years agoMove glext.h to gtkgl.h
Andy Spencer [Thu, 16 Feb 2012 23:04:32 +0000 (23:04 +0000)]
Move glext.h to gtkgl.h

7 years agoUse larger texture mask
Andy Spencer [Thu, 16 Feb 2012 22:29:47 +0000 (14:29 -0800)]
Use larger texture mask

This prevents rendering artifacts (black lines) on Mac OS and possibly
Win32 near the edges of masked textures.

7 years agoAdd explicit gmodule dependency
Andy Spencer [Thu, 16 Feb 2012 21:41:24 +0000 (21:41 +0000)]
Add explicit gmodule dependency

Needed for newer versions of glib

7 years agoSupport OpenGL extensions under Win32
Andy Spencer [Thu, 16 Feb 2012 21:34:21 +0000 (21:34 +0000)]
Support OpenGL extensions under Win32

7 years agoCast gluTessCallbacks to void *
Andy Spencer [Thu, 16 Feb 2012 21:34:38 +0000 (21:34 +0000)]
Cast gluTessCallbacks to void *

Maybe this will work?? unlikely..

7 years agoCheck the roam view before unprojecting
Andy Spencer [Thu, 16 Feb 2012 21:24:14 +0000 (21:24 +0000)]
Check the roam view before unprojecting

On win32 (and maybe others) the motion notify callback can occur before
the roam view is properly initialized.

7 years agoVersion bump for 0.7 v0.7.x v0.7
Andy Spencer [Wed, 15 Feb 2012 05:48:32 +0000 (05:48 +0000)]
Version bump for 0.7

7 years agoFix run-time warning when closing NULL dir
Andy Spencer [Tue, 14 Feb 2012 18:17:19 +0000 (18:17 +0000)]
Fix run-time warning when closing NULL dir

7 years agoUse depth test for partial tile drawing
Andy Spencer [Tue, 14 Feb 2012 04:53:33 +0000 (04:53 +0000)]
Use depth test for partial tile drawing

If a child tile exists, draw it first and rely on the depth test to
prevent overwriting it with the parent tile.

7 years agoFix crash when unloading the root tile
Andy Spencer [Tue, 14 Feb 2012 03:39:12 +0000 (03:39 +0000)]
Fix crash when unloading the root tile

7 years agoImprove performance of GritsTile
Andy Spencer [Tue, 14 Feb 2012 03:20:20 +0000 (03:20 +0000)]
Improve performance of GritsTile

This avoid doing lots of computation in the inner the draw loop by
moving it out to the top-level draw function.

7 years agoRemove background env tile
Andy Spencer [Mon, 13 Feb 2012 23:22:12 +0000 (23:22 +0000)]
Remove background env tile

because it doesn't do anything..

7 years agoFix memory leaks in tile loading
Andy Spencer [Mon, 13 Feb 2012 23:12:20 +0000 (23:12 +0000)]
Fix memory leaks in tile loading

- Splitting a tile could accidentally overwrite a already split tile if
  one (but not all) of the children were garbage collected.

- Garbage collection never actually happened.. because tile always had
  empty children. To fix this a `load' flag was added so that the
  children could be garbage collected as well without having to check
  the data flag which may always be null.

tile->load: set when texture loading has started
tile->data: set when texture loading has finished

7 years agoCast function pointers for gluTessCallback
Andy Spencer [Sun, 12 Feb 2012 07:22:08 +0000 (07:22 +0000)]
Cast function pointers for gluTessCallback

The glu type does not work on Mac OSX, and an un-casted version does not
work in Debian.. Hopefully casting it to GCallback (void-void function)
will work both places..

7 years agoReentrant dispose functions for sat and map
Andy Spencer [Sun, 12 Feb 2012 06:17:28 +0000 (06:17 +0000)]
Reentrant dispose functions for sat and map

7 years agoDelay load the textures for label markers
Andy Spencer [Sat, 11 Feb 2012 17:32:27 +0000 (17:32 +0000)]
Delay load the textures for label markers

This makes the normal constructor thread-safe so they don't need to be
created from a callback, the same should eventually be done for the icon

7 years agoLoad tiles at a lower resolution
Andy Spencer [Sat, 11 Feb 2012 08:14:29 +0000 (08:14 +0000)]
Load tiles at a lower resolution

The updated FOV code causes tiles to get loaded sooner than they used to
bee. While this may be "correct" it creates hard-to-read tiles because
they're so small. It also increases memory usage..

7 years agoCheck for split on all child tiles
Andy Spencer [Sat, 11 Feb 2012 07:03:17 +0000 (07:03 +0000)]
Check for split on all child tiles

When tiles split, all the children will be valid so only [0][0] needs to
be checked. However, a child tile may be garbage collected in which case
there may be a NULL child tile.

7 years agoFix key-press in GritsTest
Andy Spencer [Sat, 11 Feb 2012 06:16:07 +0000 (06:16 +0000)]
Fix key-press in GritsTest

Some key events are > 256 which caused an array index out of bounds.

7 years agoIncrease camera angle to 60 degrees
Andy Spencer [Fri, 10 Feb 2012 18:26:50 +0000 (18:26 +0000)]
Increase camera angle to 60 degrees

Using the 30 degree viewing angle looks reasonable realistic,
but is difficult to use since it requires much more panning.

Derivation of FOV_DIST for a 1600x1200 monitor
with a vertical viewing angle of 60 degrees:

        ---  +.
         |   | '-.     angle
  height |   |    '-./
  (px)   |   |      /'-.
         |   +------|---+ (o) eye
         |   |      \ .-'
         |   |     .-'
         |   |  .-'
        ---  +-'

               FOV_DIST (px)

  height   = 1200 px
  angle    =   60 deg
  fov_dist = cot(angle/2)*(height/2) = ~1039.23

Derivation of angle for window of a given height:

  angle    = atan((height/2)/FOV_DIST)*2

7 years agoUpdate test plugin for level rendering changes
Andy Spencer [Thu, 9 Feb 2012 09:30:25 +0000 (09:30 +0000)]
Update test plugin for level rendering changes

7 years agoAdd ortho flag to GritsMarker
Andy Spencer [Thu, 9 Feb 2012 09:20:58 +0000 (09:20 +0000)]
Add ortho flag to GritsMarker

Setting ortho to true causes the marker to be drawn orthographic and
flat against the screen. This is the default and behavior and is markers
have been drawn in the past.

Clearing the flag causes he marker to be drawn using the viewers
perspective projection but scaled to a fixed size.

7 years agoSupport pixmap icons in GritsMarker
Adam Boggs [Thu, 9 Feb 2012 07:07:38 +0000 (07:07 +0000)]
Support pixmap icons in GritsMarker

This adds a second marker constructor that loads a pixmap from a file
and uses that as the marker.

Rotation angles are also supported so that the marker can be made to
point in a certain direction.

7 years agoCorrect FOV_DIST and MPPX calculations
Andy Spencer [Wed, 8 Feb 2012 07:35:39 +0000 (07:35 +0000)]
Correct FOV_DIST and MPPX calculations

Derivation of FOV_DIST for a 1600x1200 monitor
with a vertical viewing angle of 30 degrees:

        ---  +._
         |   |  '-._     angle
  height |   |      '-._/
  (px)   |   |         ('-._
        ---  +--------------+ (o) eye

               FOV_DIST (px)

  height   = 1200 px
  angle    =   30 deg
  fov_dist = cot(angle)*height = 2078.46

Derivation of angle for window of a given height:

  angle    = atan(height/FOV_DIST)

Derivation of resolution in meters per pixel
at a given distance:

        ---  +._
         |   |  '-._
  length |   |      '-._
  (m)    |   |          '-._
        ---  +--------------+ (o) eye

               dist (m)

  length   = tan(angle) * dist
  mppx     = length / height
           = (tan(atan(height/FOV_DIST)) * dist) / height
           = dist/FOV_DIST

7 years agoAdd grits_viewer_unproject function
Andy Spencer [Mon, 6 Feb 2012 06:32:35 +0000 (06:32 +0000)]
Add grits_viewer_unproject function

This does the opposite of the grits_viewer_project function and can be
used to get the lat-lon-elev point corresponding to a point on the
screen, such as the pointer location. This currently has an undefined
output if the screen coordinates do not map to the location of an object
in the viewer.

This should not be used to determine if an objects has been selected or
clicked on. OpenGL picking should be used for that by connecting to one
of the GritsObject mouse event signals.

7 years agoRewrite expose to preserve the depth buffer
Andy Spencer [Mon, 6 Feb 2012 05:41:44 +0000 (05:41 +0000)]
Rewrite expose to preserve the depth buffer

Sorted objects are now drawn with depth testing enabled. Unsorted
objects are drawn without depth testing. This mostly affects

Objects at other levels such as BACKGROUND, OVERLAY, and HUD should
generally disable sorting so that they are always drawn to the screen.
For those levels, the depth-buffer is set to read-only. This preserves
the depth buffer so  that it can be used later on to get the world-level
depth at a given screen location.

7 years agoAdd rate limit to auto-saving prefs
Andy Spencer [Sat, 4 Feb 2012 07:54:35 +0000 (07:54 +0000)]
Add rate limit to auto-saving prefs

7 years agoFix bugs in GritsTile
Andy Spencer [Sat, 4 Feb 2012 00:28:21 +0000 (00:28 +0000)]
Fix bugs in GritsTile

- Prevent black spots when tiles are hidden by a thread while they are
  being drawn by the main thread.

- Add hack to draw maps in a lighter color

7 years agoImprove rendering of non lat-lon tiles tms
Andy Spencer [Mon, 30 Jan 2012 07:50:27 +0000 (07:50 +0000)]
Improve rendering of non lat-lon tiles

There have been a long standing bugs related to this..
Up until now the solution was to only use tiles that split along
lat-long lines and to also split the geometry (in roam) along the same

Hopefully this allows tiles to be rendered properly.

See examples/tex.c for details of how this rendering works.

7 years agoUse multi-texturing for alpha masking in tex.c
Andy Spencer [Mon, 30 Jan 2012 07:06:08 +0000 (07:06 +0000)]
Use multi-texturing for alpha masking in tex.c

Multi-texturing uses two textures for each fragment. The example uses
GL_TEXTURE0 as the regular texture color and a second texture as the
alpha mask. Since there are two textures they can have separate
filtering an wrapping parameters.

The color texture uses GL_MODULATE which combines it with the existing
color. The alpha mask uses GL_REPLACE which causes it to replace the
linearly filtered alpha mask from the color texture with a hard-edged
alpha mask that is clamped to transparent at the border.

This is similar to how drawing is done in NASA World Wind

7 years agoUse glBlendFuncSeparate for alpha masking in tex.c
Andy Spencer [Mon, 30 Jan 2012 06:39:15 +0000 (06:39 +0000)]
Use glBlendFuncSeparate for alpha masking in tex.c

The draw happens in two steps:

1. Copy the alpha mask to the framebuffer without changing the color
   channels: glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_ONE, GL_ZERO)

   This uses GL_LINEAR filtering and GL_CLAMP_TO_BORDER to create a
   alpha mask with hard edges as opposed to blurred edges.

2. Copy the texture color to the framebuffer using the alpha mask
   stored in the frame buffer as the mask:

   We can turn on GL_LINEAR filtering and GL_CLAMP here because the
   alpha mask is taken from the framebuffer instead of the filtered
   alpha component of the texture.

This creates a nice looking image without having to do any fancy setup.
The previous version also has issues if the texture is not split in the
middle of the polygon.

Unfortunately glBlendFuncSeparate depends on OpenGL 2.0 and requires
twice as many draws.

7 years agoCleanup tex formatting and clear background first
Andy Spencer [Mon, 30 Jan 2012 06:32:10 +0000 (06:32 +0000)]
Cleanup tex formatting and clear background first

Clearing the entire background lets us add in textures with

  glBlendFunc(GL_ONE, GL_ONE);

without having to determine which texture is drawn first

7 years agoSwitch map plugin to tile map service
Andy Spencer [Sat, 21 Jan 2012 04:16:29 +0000 (04:16 +0000)]
Switch map plugin to tile map service

7 years agoAdd support for Mercator projections in tiles
Andy Spencer [Sat, 21 Jan 2012 04:16:25 +0000 (04:16 +0000)]
Add support for Mercator projections in tiles

This split tiles in the correct

7 years agoAdd Tile Map Service downloading
Andy Spencer [Mon, 16 Jan 2012 03:13:00 +0000 (03:13 +0000)]
Add Tile Map Service downloading

This uses map tiles directly from The problem with
this is that those tiles are rendered using a Mercator projections which
is non-linear with respect to latitude. Two things must be done to
properly correct for this:

1. Split tiles at the correct location. With the Mercator projection,
   the midpoint of a tile is the midpoint of the longitude but not the
   midpoint of the latitude.

   Correcting this very important because it prevent tiles from being
   drawn in entirely the wrong place.

2. Morph each tile to lat-lon projection when it is drawn. This could
   possibly be done with a OpenGL fragment shader.

   This noticeable when zoomed out so it's not too bad to just ignore
   the issue.. The web based map servers have similar issues with land
   area at high-up zoom levels.

Eventually we'll want to fetch the XML and render the maps locally..

7 years agoVersion bump for 0.6.3
Andy Spencer [Tue, 10 Jan 2012 08:22:20 +0000 (08:22 +0000)]
Version bump for 0.6.3

7 years agoRemove object when test plugin unloads
Andy Spencer [Tue, 10 Jan 2012 07:21:35 +0000 (07:21 +0000)]
Remove object when test plugin unloads

7 years agoFix clipping plane issues
Andy Spencer [Sun, 8 Jan 2012 23:06:16 +0000 (23:06 +0000)]
Fix clipping plane issues

The clipping plane is flat, so the distance between the camera and the
clipping plane varies based on where screen location. I.e. it is closest
in the center and farther at the corners. Add a offset to elev to
account of this. It would be better to use a sin or to calculate
distances directly, but this is easy and appears to work.

7 years agoFix test rules
Andy Spencer [Sat, 7 Jan 2012 22:36:41 +0000 (22:36 +0000)]
Fix test rules

7 years agoCompute near/far clipping planes
Andy Spencer [Sat, 7 Jan 2012 22:36:05 +0000 (22:36 +0000)]
Compute near/far clipping planes

7 years agoRemove haze over the oceans
Andy Spencer [Tue, 3 Jan 2012 07:35:54 +0000 (07:35 +0000)]
Remove haze over the oceans

The blue haze is nice of there's a white background, but we don't have a
working white background at the moment..

7 years agoAdd GritsLine
Andy Spencer [Tue, 3 Jan 2012 07:32:34 +0000 (07:32 +0000)]
Add GritsLine

GritsLine is similar to GritsPoly, but does not draw a filled polygon.
As such it does not need to do any tessellation.

Currently it draws the points directly instead of using a display list.
This should make it easier to updated the line at runtime without
needing to create a new object.

7 years agoMove polygon parsing into grits-util
Andy Spencer [Tue, 3 Jan 2012 07:31:53 +0000 (07:31 +0000)]
Move polygon parsing into grits-util

This allows it to be used in other places
e.g. for line parsing