gfx2-iconI’m extremely excited to announce the public release of our next-generation graphics engine, a.k.a. Graphics 2.0.

Our goal is to enable you to produce cinematic-quality graphics in your mobile apps. Building on the foundation of the legacy engine, Graphics 2.0 offers a whole new level of expressiveness.

In Corona’s new engine, we designed everything so that graphics interoperate seamlessly. Normally, it takes a considerable effort to learn different graphics systems (e.g. Adobe Illustrator, Photoshop, and After Effects) and then figure out how to make them interoperate, but in Graphics 2.0, we’ve unified an unprecedented amount of graphical elements into an elegant, simple model.

What’s New

Our new engine is a dynamic, shader-based pipeline, revamped to take advantage of OpenGL-ES 2.0. We’ve merged the core functionality of our legacy engine with a myriad of new features:

  • Dynamically-sized rectangular masks via containers
  • Custom (non-intersecting) polygons
  • Custom image fills on all shapes (not just quads)
  • Multi-texturing support via composite paints
  • Images for anti-aliased strokes and lines
  • Over 70 visual effects (filters, generators, and composites)
  • Multi-pass shaders via node-based shader graphs
  • Pattern tiling via texture repeat modes
  • Texture transform properties (position, rotation, scale)
  • Quadrilateral perspective distortion for 2.5D effects
  • Rendering to texture using snapshots
  • Canvas-style drawing using snapshots
  • Custom blend modes and Porter-Duff presets
  • Blend equation control: add, substract, and reverseSubtract
  • Alignment via anchors for responsive interfaces
  • Automatic batch detection

Please check out the Graphics 2.0 Tutorial Roundup to see some of the amazing things you can do.

In addition, we’ve added several other improvements like text rendering performance on Android. You can see the full list of improvements in our release notes.

Premium Graphics Features

Most of these new features are considered premium graphics features.

If you’re in the Starter or Basic tier, you can experiment with these APIs in a special demo mode of the Corona Simulator, but you won’t be able to preview the new features on devices.

If you want to preview premium graphics features on devices or publish apps using them, you’ll need a Pro or Enterprise subscription.

A few new features come standard for all tiers:

  • creating custom polygons
  • using containers
  • specifying texture repeat modes
  • aligning objects via anchor points

In addition, the graphics features that we ported from our legacy engine are standard for all tiers.

Future vs. Legacy Support

Moving forward, all our future daily builds will be based on this release, including new features and improvements. This will also include support for future devices and platforms like Windows Phone 8.

If you’re working on or planning out a new app, we strongly recommend that you transition to the new engine.

For those of you who have existing projects, or are nearly done with one, you have two options:

  1. Migrate your project (more details below).
  2. Continue to use the previous public release; in this case, we’ve posted legacy documentation for your convenience.

If you are a Corona SDK Starter or a Basic subscriber, you can access previous Graphics 1.0 Public Releases. But, as mentioned above, we recommend working with Graphics 2.0 (build #2076 or later) going forward.

If you’re a Pro or Enterprise subscriber, you can also continue to access older Graphics 1.0 Daily Builds.

Anything prior to 2013.2000, e.g. 2013.1060, is a legacy (Graphics 1.0) build. Of course, to take full advantage of the new graphical features, improvements, and future platforms like Windows Phone 8, you’ll eventually need to migrate your project(s).

Migrating Existing Projects

With all of these new features, you’ll be able to significantly boost the visuals of your existing projects, as well as take advantage of future improvements.

To help you migrate, we’ve created a “Graphics 1.0 compatibility mode.” It will not account for every conceivable situation, but it provides a significant head start. If you’re lucky, no changes will be needed, but if you encounter issues, please refer to the migration guide which steps through the changes.

No matter which route you choose, it’s not nearly as complex as migrating a native code base from OpenGL-ES 1.0 to OpenGL-ES 2.0!

* * *

When I first announced the Graphics 2.0 Beta, I told you that we envisioned a system that stayed true to the Corona way of doing things. That rings even more true with this release. We’ll continue to push the envelope of our new engine, enabling even more stunning visual effects down the line.

With Corona, you’re not just pushing pixels, you’re painting with light. Download Corona today and see what you can build!

Share this post....Share on Facebook0Share on Google+9Tweet about this on TwitterShare on LinkedIn6
  1. Congratulations! After I finished my current project (I’m working on the German version of the official “Hunger Games Adventures”) I will add mask, filters & shaders to “Freeze!”, this will give the dark touch of the black & white art an even more atmospheric touch.

    Best from Germany & keep on the excellent work,

  2. Walter,

    Congratulations on reaching this milestone. Can you kindly let us know if there will be continued daily builds in the legacy (#1260+) range with fixes to various issues while remaining at G1 level or are we all expected to migrate immediately if we need fixes to open issues with say things like the Widgets? Thanks for your clarification.


  3. Congratulations on the release.

    One concern– object.fill is a premium graphics feature, but graphics.newGradient is deprecated in favor of object.fill. Does this mean that gradients are now a premium-only feature?

  4. Subject: Could Graphics 2.0 replace a Tiled Engine?

    Is anyone able to comment on whether Graphic 2.0 could take the place of a tiled based approach for physics games (e.g. horizontal scroller) for which a level may be many screens wide? So currently one can use the approach of limited set of “tiles” (images) that are created/destroyed by a tile engine as the player moves through the world.

    For example, could you just create as many shapes as you want/where ever you want with Graphics 2.0 and just use the “fill” with pattern approach (i.e. no need for images)? I’m assume you would still have a memory issue with having a large number of such objects (with physics bodies) anyway, and would still probably need a tiled engine type approach?

  5. I would also like to see the the graphics 1.0 dailies branch continue to be updated with non-graphics fixes. My current and previous projects are heavily invested in 1.0 (warts and all) and it would be very difficult for me to upgrade them to 2.0 at this point. In the least there are still some lingering, open issues around Transitions 2.0 and Widgets that would be great to have in the 1.0 build. Perhaps you could continue to support the 1.0 branch by folding in fixes until the end of the year, or until the next public release of 2.0.

  6. I’m a pro subscriber but, I think someone else mentioned this one. The Object.fill is deprecated in favour of graphics.newGradient. Surely that makes it impossible for anyone using 1.0 with a fill to move to the new 2.0.

    Also on a side note it’s always bothered me that simple optimisations somehow end up as a pro feature of packages (Unity3D is the same way in this regard). Shouldn’t automatic batch detection be available to all. It’s a common courtesy to make your drawing run as fact as possible if the developer has put in all that effort to make a great game and thus make Corona look good too in the process!

    • About gradients, can you tell me where you are seeing that? That’s not correct, so we’ll need to fix that.

      First, you can still set gradients via object:setFillColor() which is available to all tiers.

      Second, you can still use graphics.newGradient but all it does is create a Lua table that defines a gradient. Starting in this release, you can also just create the table yourself, so that’s why graphics.newGradient is deprecated.

      Finally, automatic batch detection is something that always happens, regardless of subscription tier.

    • v1.0 mode is to ease transitioning of existing code.

      New graphics features will only be supported in the default 2.0 mode, so if you want to ensure that new graphics features work properly, you’ll want to turn off v1.0 mode.

  7. In graphics 1.0, blends multiply, screen and lineardodge were available (even on Starter version). Which blends will be available with Graphics 2.0 for Starter users?

  8. I think this question warrants being asked again since it appears that it might not have been heard… One more try…


    Congratulations on reaching this milestone. Can you kindly let us know if there will be continued daily builds in the legacy (#1260+) range with fixes to various issues while remaining at G1 level or are we all expected to migrate immediately if we need fixes to open issues with say things like the Widgets? Thanks for your clarification.

    Regards & thanks

  9. Thank you but the SDK API Reference (2013.2076) is a joke :/
    I mean this:

    I can’t find any new features.
    Try to find “newSnapshot” or “newContainer” in display.* library description please. Or try to search these commands with a”Search” button.
    Or choose “object.fill” from this menu:

    This documentation is completely useless to learn Graphics 2.0 features!

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>