blob: 34aa471ff385f8e5afb6b904d674642262b97420 [file] [log] [blame]
<!--
Copyright (c) 2012 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
dt {
font-weight: bold;
}
dd {
margin-bottom: 12pt;
width: 800px;
}
</style>
<link href="http://code.google.com/css/codesite.css" rel="stylesheet"
type="text/css" />
<title>Native Client Examples</title>
</head>
<body>
<h1>Native Client Examples</h1>
<dd><p>This page lists all of the examples available in the most recent Native
Client SDK bundle. Each example is designed to teach a few specific Native
Client programming concepts. You will need to setup the build environment
including a path to 'make' which can be found in the 'tools' directory for
Windows, and the variable NACL_SDK_ROOT which points to one of the pepper
bundles found under the SDK install location. Calling make from the examples
directory will build all the projects, while calling make from and individual
example directory will build only that example.
</p>
</dd>
<h3>Using the Tools</h3>
<dd><p>The following "hello_world" examples, show the basic outline of a Native
Client application. The make files in each of the examples bellow show a
simple way to build a NaCl application using
<a href="http://www.gnu.org/software/make/manual/make.html">GNU Make</a>.
See the link for further information.
</p></dd>
<dl>
<dt><a href="hello_world_newlib/hello_world.html">
Hello World (NEWLIB)</a></dt>
<dd>The Hello World In C example demonstrates the basic structure of all
Native Client applications. This example loads a Native Client module. The
page tracks the status of the module as it load. On a successful load, the
module will post a message containing the string "Hello World" back to
JavaScript which will display it as an alert.
<p>Teaching focus: Basic HTML, JavaScript, and module architecture.</p>
</dd>
<dt><a href="hello_world_glibc/hello_world.html">
Hello World (GLIBC)</a></dt>
<dd>The Hello World (GLIBC) example is identical to the one above, with the
exception that it used the GLIBC toolchain which uses Shared Objects. The use
of Shared Objects means a more complicated manifest file (NMF) which is needed
to allow the application to find the libraries. The NMF is automatically
generated as part of the build process, by scanning the application for
dependencies.
<p>Teaching focus: Basic HTML, JavaScript, Shared Objects, and module
architecture.</p>
</dd>
<dt><a href="hello_world_interactive/hello_world.html">
Interactive Hello World in C++</a></dt>
<dd>The Interactive Hello World C++ example demonstrates the basic structure
of all Native Client applications. This example loads a Native Client module
which uses two way interaction with JavaScript whenever a button is clicked.
The NaCl module will respond with the number 42 or the reversed version of the
string in the text box when the appropriate button is clicked.
<p>Teaching focus: Basic HTML, JavaScript, C++ PPAPI, and module
architecture; Messaging API.</p>
</dd>
<h3>Common APIs</h3>
<dd><p>The following set of examples illustrate various Pepper APIs including
audio, 2D, 3D, input and urls.</p></dd>
<dt><a href="sine_synth/sine_synth.html">Sine Wave Synthesizer</a></dt>
<dd> The Sine Wave Synthesizer example demonstrates playing sound (a sine
wave). Enter the desired frequency and hit play to start, stop to end. The
frequency box will display "Loading, please wait." while the module loads.
<p>Teaching focus: Audio.</p>
</dd>
<dt><a href="input_events/input_events.html">Input Events</a></dt>
<dd> The Input Events example demonstrates how to handle events triggered by
the user. This example allows a user to interact with a square representing a
module instance. Events are displayed on the screen as the user clicks,
scrolls, types, inside or outside of the square.
<p>Teaching focus: Keyboard and mouse input, view change, and focus events.</p>
</dd>
<dt><a href="pi_generator/pi_generator.html">Pi Generator</a></dt>
<dd> The Pi Generator example demonstrates creating a helper thread that
estimate pi using the Monte Carlo method while randomly putting 1,000,000,000
points inside a 2D square that shares two sides with a quarter circle.
<p>Teaching focus: Thread creation, 2D graphics, view change events.</p>
</dd>
<dt><a href="tumbler/tumbler.html">Tumbler</a></dt>
<dd> The Tumbler example demonstrates how to create a 3D cube that you can
rotate with your mouse while pressing the left mouse button. This example
creates a 3D context and draws to it using OpenGL ES. The JavaScript
implements a virtual trackball interface to map mouse movements into 3D
rotations using simple 3D vector math and quaternions.
<p>Teaching focus: 3D graphics</p>
</dd>
<dt><a href="geturl/geturl.html">Get URL</a></dt>
<dd> The Get URL example demonstrates fetching an URL and then displaying
its contents.
<p>Teaching focus: URL loading.</p>
</dd>
<h3>Common Concepts</h3>
<dd><p>The following set of examples illustrate various common concepts such as
showing load progress, using Shared Objects (dynamic libraries),
mulithreading...</p></dd>
<dt><a href="dlopen/dlopen.html">Dynamic Library Open (GLIBC)</a></dt>
<dd> The dlopen example demonstrates how build dynamic libraries and then
open and use them at runtime. When the page loads, type in a question and
hit enter or click the ASK! button. The question and answer will be
displayed in the page under the text entry box.
<p>Teaching focus: Using shared objects.</p>
</dd>
<dt><a href="load_progress/load_progress.html">Load Progress</a></dt>
<dd> The Load Progress example demonstrates how to listen for and handle
events that occur while a NaCl module loads. This example listens for
different load event types and dispatches different events to their
respective handler. This example also checks for valid browser version and
shows how to calculate and display loading progress.
<p>Teaching focus: Progress event handling.</p>
</dd>
<dt><a href="pong/pong.html">Pong</a></dt>
<dd> The Pong example demonstrates how to create a basic 2D video game and
how to store application information in a local persistent file. This game
uses up and down arrow keyboard input events to move the paddle.
<p>Teaching focus: File I/O, 2D graphics, input events.</p>
</dd>
<dt><a href="multithreaded_input_events/mt_input_events.html">Multi-threaded
Input Events</a></dt>
<dd>The Multithreaded Input Events example combines HTML, Javascript,
and C++ (the C++ is compiled to create a .nexe file).
The C++ shows how to handle input events in a multi-threaded application.
The main thread converts input events to non-pepper events and puts them on
a queue. The worker thread pulls them off of the queue, converts them to a
string, and then uses CallOnMainThread so that PostMessage can be send the
result of the worker thread to the browser.
<p>Teaching focus: Multithreaded event handling.</p>
</dd>
<dt><a href="fullscreen_tumbler/fullscreen_tumbler.html">Full-screen
Tumbler</a></dt>
<dd>This is a modified version of the Tumbler example above that supports
full-screen display. It is in every way identical to Tumbler in
functionality, except that it adds the ability to switch to/from
full-screen display by pressing the Enter key.
<p>Teaching focus: Full-screen</p>
</dd>
<dt><a href="mouselock/mouselock.html">Mouse Lock</a></dt>
<dd> The Mouselock example demonstrates how to use the MouseLock API to hide
the mouse cursor. Mouse lock is only available in full-screen mode. You can
lock and unlock the mouse while in full-screen mode by pressing the Enter key.
<p>Teaching focus: Mouse lock, Full-screen</p>
</dd>
<dt><a href="websocket/websocket.html">Websocket</a></dt>
<dd> The Websocket example demonstrates how to use the Websocket API. The
user first connects to the test server: ws://html5rocks.websocket.org/echo by
clicking on the 'Connect'' button. Then hitting Send' will cause the app to
send the message to the server and retrieve the reply.
<p>Teaching focus: Websockets</p>
</dd>
<dt><a href="file_histogram/file_histogram.html">Get URL</a></dt>
<dd> The File Histogram example demonstrates prompting the user for a file,
passing the file contents to NativeClient as a VarArrayBuffer, then drawing a
histogram representing the contents of the file to a 2D square.
<p>Teaching focus: VarArrayBuffer, 2D, File input.</p>
</dd>
</dl>
</body>
</html>