Saturday, October 30, 2010

Aquarium v2.05

  - Update: More fish!

A simple update that adds a couple more fish to the list, enjoy!  Expecting to add a few more next week.

Thursday, October 28, 2010

Asteroid Belt v1.15

  - Update: More planets!

So, when originally creating this wallpaper, the idea was that the solar system on display wasn't ours, it was just a random solar system somewhere out there.  The problem is, the layout ended up being fairly similar to our system and I got a lot of comments about that.  So, I'm going ahead and taking that the rest of the way by incorporating Saturn, Uranus, and Neptune way out there.  Neptune will complete one orbit every twelve hours of real-time, with Uranus and Saturn being a notch faster as you go inward.

I'm also incorporating the HowTo screen in this update -- Asteroid Belt is the highest-user-count wallpaper that I've added this to, we'll see how much trouble or confusion it causes.

Bamboo Forest v1.1

  - New Feature: Time of Day colors

At this point I've gotten quite comfortable with getting something to sync up to the real-time day, and a few folks have requested it, so here it is again -- Bamboo Forest now supports having fog and light color shift based on the time of day.  You can individually control the color settings for morning, daytime, evening, and night.

Wednesday, October 27, 2010

Jungle Waterfall v1.05

  - New Feature: Sky Color pref
  - New Feature: Time of Day colors

I got several requests for a time of day preference on this one, so tackled that with this update.  It adjusts the fog and sky color based on the hour of the day, so you get a nighttime feel at night and a daytime feel during the day.  As I ended up needing to adjust the sky color anyway, I also made it possible to customize that if you'd like to.

Tuesday, October 26, 2010

NA Flags v1.2

  - New Feature: Guam flag
  - New Feature: DC flag
  - New Feature: "How To" popup

This is a fairly routine update to add a bit more flag art, and in the process I rolled in the "How To" popup I created for Snowfall.  This will hopefully reduce the confusion about how to make use of live wallpapers a notch, allow the 'open' button to do something useful, and it'll automatically disable once you use the wallpaper for the first time.

Monday, October 25, 2010

Snowfall Live Wallpaper v1.0

(YouTube Video)
(Android Market Link)

We've had a ton of requests for a winter-themed wallpaper, and as I personally hail from the great white north I'm not about to say no.  The result is Snowfall, a beautiful winter scene of snow covered pine trees, with snowflakes falling from above.

The particle system took a while, as performance with a ton of independently moving pieces was hurting at first.  Eventually I got it down to three instances of an effect with only 32 particles (if you set snowfall to the highest setting), though it looks like a whole lot more than that.  This kept performance up and worked out very well in practice.

Trees and the daytime sky were all made by Allyson Vaughn, who did very well at tolerating some back and forth feedback.  The nighttime sky ended up being based on the same moon that Halloween used, which I feel a bit guilty about, but it's really a great image, so what you do you?  Basically everything in the foreground animates, and we're once again using the visibility system to avoid rendering off-screen items.  The framerate's quite good on my Incredible, and works well on the Evo as well (as you can see from the YouTube video!).

There are a couple new things happening here.  Firstly, I'm taking another stab at making use of the 'Open' button on the Marketplace page.  This is basically a rework of the 'HowTo' activity I had set up for Aquarium and Silhouette for a while, though it has more depth now.  Basically, running the activity will still explain how to use a wallpaper, but now it will also provide a shortcut directly to the Live Wallpaper Chooser.  Additionally, the first time the user successfully runs the wallpaper, the HowTo activity will disappear -- that way it won't annoyingly clutter your app listing.

The other new thing is that up until December 15th we'll be giving 50% of the revenue from Snowfall to charity -- specifically Child's Play.  This is one of those things I've always wanted to do, and I can't think of a more appropriate product to do it with.  I'm excited to have this on the market and can't wait to see what people think.  :)

Saturday, October 23, 2010

Halloween v1.15

  - Bug Fix: Flashing background when bats are disabled
  - Bug Fix: Log prints when ghosts appear
  - New Feature:  ???

This is mostly a maintenance release to clean up a few bugs that I'd had reported.  I also reduced the filesize a bit by switching some PNGs over to JPGs.  While I was at it I added a new feature, but it's silly and a secret.

Monday, October 18, 2010

Thunderstorm v1.3

  - New Feature: Drops hitting camera
  - Update: Slider bar for setting bolt interval
  - Update: Slider bar for setting number of clouds

One of the most requested features is water drops hitting the camera, and after some delay it's finally in and working!  It looks pretty good, but regardless I've defaulted it to off -- look towards the bottom of the settings screen for the checkbox!

The slider bar dialog is a new class I put together this morning, which should work well for some of the more numerical settings in the future.  In this case it means I can have a wide range of lightning bolt frequencies without having a big awkward scrolling list.  Much better!

Friday, October 15, 2010

Jungle Waterfall v1.0

(YouTube link)
(Android Market link)

This one's been struggling while I attempted to work out the issues with the G2, but things finally cleared up the last few days, and the end result is really great!  This one's an entire jungle scene, with a waterfall streaming down the middle.  The trees and ferns all move, the fires are fiery, the fog turned out great, and there's mayan ruins scattered around to reinforce the Indiana Jones vibe.  Honestly, I think it turned out to be one of the best looking examples of OpenGL on Android around.

This one started as a roughed out scene in Blender, was passed on to Allyson Vaughn for finishing and texturing, then came back to me for all the scene setup, animation, and particle stuff.  Performance is quite good (despite the fog!) and can be made better if you want to disable the fog pass -- though I really think it looks much better with the fog on.  There's preferences for fog color and you can tweak the density, and you can disable the embers particle that's going on overhead.

The biggest issue with this concept, aside from the general scene complexity, is that it doesn't really lend itself to a deep set of preferences.  As a result this one's paid only I'm afraid, as I try to make sure the donation version gives substantially more than the free one, and I don't think I can differenciate this one enough.  No worries, the next one will have a free version. :)

The biggest technological challenge here was getting the sorting right and working out inexpensive ways to get everything animating.  That all turned out well, luckily, and I'm thrilled to be able to present the end result to folks!

1.0a:  Quick update to fix a gap visible on the far right edge when using a 480x854 screen ratio.

Thursday, October 14, 2010

Halloween v1.1

 - New Feature: Ghosts!
 - New Feature: Wind speed control

Let's face it, the ghosts turned out awesome.  Very appropriate for the feel this wallpaper has, and the behavior's good I think.  You can set how often they show up or turn them off completely.  The ghost models and textures are the work of Allyson Vaughn, who did damn well as usual.

As a bonus, you can speed up or slow down the clouds now.  Huzzah!

Monday, October 11, 2010


* Galactic core flickers on the EVO and the Desire, why?
    - Purchased an EVO and can't get this to happen!
    - Saw it happen, looks like a driver issue or something :(
* Debug crashy images for custom background selection
    - Nothing to do with image, timing issue.  Fixed!
* Finish Jungle Waterfall
* Halloween ghost
* Upsell screen for Silhouette
* Water drops hitting screen in Thunderstorm
* Sound in thunderstorm -- how problematic is this concept?
* Can the open button be made useful?
* Time of day for Bamboo
* Time of day for Jungle Waterfall

Using Google's ADB driver for other phones

If you've got a few test phones and you're developing under Windows7, you may find that your particular device doesn't work with the standard Google ADB driver.  This is the one that's installed by the SDK in the usb_driver folder.

The easy way to fix this is to add the device's ID into the android_winusb.inf file found in the root of the usb_driver folder.

Here's some I've had use of recently, and know work on Win7 x64.

%SingleAdbInterface%        = USB_Install, USB\VID_22B8&PID_70A9
%CompositeAdbInterface%     = USB_Install, USB\VID_22B8&PID_70A9&MI_01

;Droid X2
%SingleAdbInterface%        = USB_Install, USB\VID_22B8&PID_70C9
%CompositeAdbInterface%     = USB_Install, USB\VID_22B8&PID_70C9&MI_01

;Sony Xperia Play

%SingleAdbInterface%        = USB_Install, USB\Vid_0fce&Pid_215b
%CompositeAdbInterface%     = USB_Install, USB\Vid_0fce&Pid_215b&MI_01

;Samsung Galaxy Tab 10.1
%SingleAdbInterface%        = USB_Install, USB\VID_04E8&PID_685E&MI_02
%CompositeAdbInterface%     = USB_Install, USB\VID_04E8&PID_685E&REV_0400&MI_02

;Verizon HTC Incredible
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C9E
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C9E&MI_01

;T-Mobile HTC G2
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C91
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C91&MI_01

;Sprint HTC EVO
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C8D
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C8D&MI_01

;Motorola Droid 2
%SingleAdbInterface%       = USB_Install, USB\VID_22B8&PID_42A4
%CompositeAdbInterface%      = USB_Install, USB\VID_22B8&PID_42A4&MI_01

; Motorola Droid 3
%SingleAdbInterface%        = USB_Install, USB\VID_22B8&PID_42D7
%CompositeAdbInterface%     = USB_Install, USB\VID_22B8&PID_42D7&MI_01

;Google Nexus S
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_4E22
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_4E22&MI_01

;Samsung Fascinate
%CompositeAdbInterface%     = USB_Install, USB\VID_04E8&PID_6640&MI_00
%SingleBootLoaderInterface% = USB_Install, USB\VID_04E8&PID_6640&MI_04

; Acer Iconia a100
%SingleAdbInterface%        = USB_Install, USB\VID_0502&PID_3348
%CompositeAdbInterface%     = USB_Install, USB\VID_0502&PID_3348&MI_01

The attractive thing about this, to me, is that you get to avoid installing whatever annoying music-sync software comes with the phone, but can still debug with it.

Friday, October 8, 2010

Where things stand with HTC's drivers

I acquired a G2 and have been attempting to work around this problem for the last couple of days, and while I think I may have improved it marginally, I also don't think I fixed it.  They will definitely still lockup without warning during either eglSwapBuffers or eglCreateSurface, and there's just no way for me to detect it's going to happen -- everything appears fine, no errors are reported.  When the lockup occurs, you'll see a long string of this:

WARN/SharedBufferStack(2005): waitForCondition(LockCondition) timed out(identity=9, status=0). CPU may be pegged. trying again.
WARN/SharedBufferStack(71): waitForCondition(LockCondition) timed out (identity=9, status=0). CPU may be pegged. trying again.

The thing to note here is that eglSwapBuffers and eglCreateSurface are never, ever supposed to block.  If they can't succeed, they're supposed to return with an error indicating so.  All error checking for these is meant to be done after the fact -- you call them, check if it worked, try again if it didn't.  This means there's nothing built into OpenGL to help with this, and the error is low level enough that it's well below my code's level of visibility.

Behaviorally, this primarily seems to happen upon losing and recreating the OpenGL context during a portrait/landscape switch, and is uncommon in the sense that it happens maybe one or two percent of the time.  Doesn't sound like a lot, but that's actually pretty high if you're using your phone actively.  It happens about 25% of the time if you call glFinish before swapping the buffers -- pretty good evidence it's a race condition.

While I can avoid glFinish easily enough, I must support both portrait and landscape for these wallpapers, as I'm at the mercy of the home screen there.  An application can simply insist in running one or the other and minimize its exposure, but that's not the case with a live wallpaper.  Odds are HTC just didn't test any of the marketplace ones at all, and only tested Google's default wallpapers, which are written with the NDK and take a different route, though I wouldn't be shocked if they lockup occasionally as well.

Since it doesn't appear I can actually fix the problem, I unfortunately need to admit defeat.  I've added a note about locking up on the G2 to all of our market listings and we will offer a refund to G2 owners upon request.  Sorry folks, until HTC looks at the issue there doesn't appear to be anything I can do.

Aquarium v2.0

  - New Feature: Seahorse!
  - Update: Realer shark!
  - Update: Nicer customize screen buttons!

Finally got the seahorse done after way too much delay.  Sorry about that, folks.  The shark got updated with a more realistic texture as well.

This update also incorporates my attempts at smoothing over some of HTC's driver problems, but it wasn't 100% successful.

Sunday, October 3, 2010

Various Updates & HTC Drivers

So, HTC has rather iffy OpenGL drivers on their phones.  They suffer from a long-standing intermittent bug that locks up your whole phone, frequently requiring a battery-pull to recover.  The bug appears to be a race condition when they swap framebuffer frames, so it's really below my ability to to anything about, and I suspect it's somewhat framerate dependent.

Now, one way you can minimize the problem, one fellow on the mailing list identified, is by using glFinish() to wait until all operations are done before swapping the buffers.  The problem is this slows down rendering substantially across all phones (not just HTC's phones).  The other problem is that starting with the G2, using glFinish() causes the wallpaper rendering to lock up when switching between portrait and landscape.  No other phones do this, just the G2.

All of these will eventually boil down to a whole mess of messages in your logs, all reading something like this:

W/SharedBufferStack(21310): waitForCondition(LockCondition) timed out
(identity=2376, status=0). CPU may be pegged. trying again.
W/SharedBufferStack(21310): waitForCondition(LockCondition) timed out
(identity=2376, status=0). CPU may be pegged. trying again.
W/SharedBufferStack(21310): waitForCondition(LockCondition) timed out
(identity=2376, status=0). CPU may be pegged. trying again.

Whatever they did with the G2, they did improve one thing because this doesn't appear to be pull-your-battery fatal anymore.  It does seem to happen much more easily though, and as it appears to happen much more often when I have glFinish() being called, and as calling glFinish() really hurts the framerate, I'm going to go back to the original status quo and remove it from the wallpapers that I'd added it to.  My hope is that this change of behavior on the G2 at least signals that someone at HTC is attempting to fix the problem, and maybe in a future update they'll fix it for real.

As it is, whatever I do results in failure on some HTC devices, so I may as well make failure rare if I can't fix it.  So, this is the purpose of a handful of updates that are going to go out today -- get everything on an even keel and hopefully minimize whatever failures occur on HTC devices, as I'm fairly confident I can't completely fix it.

Friday, October 1, 2010

Bamboo Forest v1.05

 - New Feature: Custom color picker
 - New Feature: Scene complexity pref
 - Bug Fix: HTC flickering bug

The color picker and flickering issue are the same as Galactic Core in the below post, but unfortunately that couple of fps loss from calling glFinish() hurts a lot on Bamboo Forest, which already has fog axing its framerate down lower than I'd like.

This resulted in some simplification of the scene to get the framerate back up, and the addition of a "Scene Complexity" setting in the preferences.  If you've got a really fast-rendering phone (A Galaxy S, Droid 2, etc) you can turn it all the way up just fine, but if you've got an original Droid you might want to stick with a low complexity.  Pick your prettiness/performance sweet spot!  The default value for this is 'medium'.

Galactic Core v1.55

 - New Feature: Custom color picker
 - Bug Fix: Flickering on HTC devices

The flickering fix really just involves calling glFinish() at the end of each frame.  This is something that, I thought, went the way of the dodo when we got double-buffering, but apparently HTC's hooked enough stuff onto glFinish() that you get flickering and full-phone lockups if you don't call it.  Also, you lose a few frames per second.  Thanks HTC!

The color picker is way cooler, and is based on one posted by pskink on  It's has a few modifications, notably the removal of the progress indicator on the top bar and the background being given a proper hue distribution.  It works well and I'll hopefully replace the existing "list of colors" approach with this wherever it's relevant in the future.

Because this makes it a lot harder to get back to the default color settings than the list approach did, there's also a "Reset to default colors" item that you can tap to, well, reset it to default colors.