| .. _cds2014_cpp: |
| |
| ################################## |
| A Saga of Fire and Water - Codelab |
| ################################## |
| |
| Introduction |
| ------------ |
| |
| .. include:: cpp_summary.inc |
| |
| .. include:: ../nacldev/setup_app.inc |
| |
| Get the Code! |
| ------------- |
| |
| Rather than start from nothing, for this codelab we've provided |
| you with a zip file containing a starting point. |
| |
| Download the codelab:: |
| |
| curl http://nacltools.storage.googleapis.com/cds2014/cds2014_cpp.zip -O |
| |
| Unzip it:: |
| |
| unzip cds2014_cpp.zip |
| |
| Go into the codelab directory:: |
| |
| cd cds2014_cpp |
| |
| Create a new local git repo:: |
| |
| git init |
| |
| Add everything:: |
| |
| git add . |
| |
| Commit it:: |
| |
| git commit -am "initial" |
| |
| While working, you can see what you've changed by running:: |
| |
| git diff |
| |
| |
| Fire is cool, let's burn some stuff... |
| -------------------------------------- |
| |
| Indulging your inner child, lets make some virtual fire! |
| Use the following shockingly intuitive incantation:: |
| |
| make fire |
| |
| You should now see a small popup window, smoldering away. |
| If you click, you can make more fire! |
| I think that's pretty cool, but then I selected |
| the institution of higher learning I attended based |
| on the integral role fire played in its campus life. |
| |
| Water |
| ----- |
| |
| Remarkably, not everyone enjoys the primal illusion of fire. |
| |
| Your task in this codelab is to transform the rising fire |
| effect you see before you into a beautiful, tranquil waterfall. |
| This will require digging into some C++ code. |
| |
| Before you begin, you'll want to copy our fire program to a new name, |
| since you might decide later that you like fire better, I know I do:: |
| |
| cp fire.cc water.cc |
| git add water.cc |
| git commit -am "adding water" |
| |
| For this codelab, you'll only need to change `water.cc`. |
| |
| The task of turning fire into water involves two key challenges: |
| |
| * Alter the red-yellow palette of fire into a blue-green one. |
| * Reverse upward rising flame into downward falling water. |
| * Seed the waterfall from the top instead of the bottom. |
| |
| At this point you'll want to open up `water.cc` in the editor you |
| picked earlier. |
| |
| I see a red door and I want it painted... blue |
| ============================================== |
| |
| While PPAPI's 2D graphics API uses multi-component RGB pixels, |
| our flame effect is actually monochrome. A single intensity |
| value is used in the flame simulation. This is then converted |
| to color based on a multi-color gradient. |
| To alter the color-scheme, locate this palette, and exchange |
| the red component (first) with the blue one (third). |
| |
| Hint: Focus your energies on the CreatePalette function. |
| |
| You can test you changes at any time with:: |
| |
| make water |
| |
| What goes up... |
| =============== |
| |
| Now there's the small matter of gravity. |
| While smoke, and well flame, rises, we want our water to go down. |
| |
| The simulation of fire loops over each pixel, |
| bottom row to top row, |
| diffusing "fire stuff" behind the sweep. |
| You'll want to reverse this. |
| |
| Hint: You'll need to change the y loop direction in the UpdateFlames function. |
| |
| Up high, down low |
| ================= |
| |
| While you can now use the mouse to inject a trickle of water. |
| The small line of blue at the bottom isn't much of a waterfall. |
| Move it to the top to complete the effect. |
| |
| Hint: You'll want to change the area that the UpdateCoals function mutates. |
| |
| |
| What you've learned |
| ------------------- |
| |
| In addition to learning a new appreciation for fire, you've also made water... |
| And while dusting off your C/C++ image manipulation skills, |
| you've discovered how easy it is to modify, build, |
| and run a NaCl application that uses PPAPI. |
| |
| 2D graphics is fun, but now you're ready to check out the wealth of |
| other |
| `PPAPI interfaces available |
| <https://src.chromium.org/viewvc/chrome/trunk/src/ppapi/cpp/>`_. |
| |
| While our in-browser environment is rapidly evolving |
| to become a complete development solution, |
| for the broadest range of development options, check out the |
| `NaCl SDK |
| <https://developer.chrome.com/native-client/cpp-api>`_. |
| |
| Send us comments and feedback on the `native-client-discuss |
| <https://groups.google.com/forum/#!forum/native-client-discuss>`_ mailing list, |
| or ask questions using Stack Overflow's `google-nativeclient |
| <https://stackoverflow.com/questions/tagged/google-nativeclient>`_ tag. |
| |
| |
| I hope this codelab has lit a fire in you to go out there, |
| and bring an awesome C/C++ application to NaCl or PNaCl today! |
| |
| |
| .. include:: ../nacldev/cleanup_app.inc |