The NVIDIA GameWorks™ Graphics samples are a comprehensive set of OpenGL, OpenGL ES and Vulkan samples that programmers of all levels can use to better understand modern 3D graphics techniques and enhance games, simulations and other 3D projects.

The samples are built on a common framework providing developers with samples that run on Windows, Android and Linux. The framework provides base functionality but does NOT abstract the core graphics APIs so developers can see the exact details of the implementation. NVIDIA also provides a set of DirectX samples for developers targeting that API which are available here.


GitHub Full source code to all OpenGL, OpenGL ES and Vulkan samples are available to browse, clone or fork on GitHub:

Docs Browse and read full documentation for the samples here:

New in Release 3.0:

  • Vulkan support on Windows, Android, Linux for desktop x86_64 and Linux for Tegra available NOW!
  • Full source code and assets to the popular Vulkan "Fish!" demo
  • Threaded rendering in Vulkan and OpenGL (using AZDO) with matching versions of the Fish demo
  • Additional Vulkan Samples
  • Single-pass Cubemap Rendering Sample
  • Metaball Rendering Sample
  • MSAA with Deferred Shading Sample
  • OpenGL Command Lists Sample

Vulkan Samples

NEW: Vulkan Threaded Rendering (Fish!) Sample

  • Category: Vulkan, Performance

This sample demonstrates how to render enormous amounts of geometry by generating not only animation data but even command buffers in multiple threads using Vulkan.

Docs


NEW: Vulkan Skinning Sample

  • Category: Vulkan

This sample demonstrates how to render skinned meshes in Vulkan using both one or two bones in a vertex shader. Skinning allows organic shapes (such as humans) to deform nicely around joints as they bend. Without skinning, joints have a rigid appearance that is more similar to a mechanical joint like you would see in a robot.

Docs


NEW: Vulkan Model Rendering Sample

  • Category: Vulkan

This sample demonstrates how to render rigid models using Vulkan, including transforms and materials.

Docs




OpenGL & OpenGL ES Samples

NEW: AZDO Threaded Rendering (Fish!) Sample

  • Category: Performance

This sample demonstrates how to use threading to render huge numbers of objects and geometry efficiently in OpenGL using different approaches including Approaching Zero Driver Overhead (AZDO) techniques.

Docs


Bindless Graphics Sample

  • Category: Performance

This sample demonstrates the large performance increase in OpenGL that is made possible by 'Bindless Graphics'. These extensions allow applications to draw large numbers of objects with only a few setup calls, rather than a few calls per object, thus reducing the driver overhead necessary to render highly populated scenery.

Docs


Blended AA

  • Category: Performance, Visuals

This sample implements a two-pass additive blending anti-aliasing technique using Target-Independent Rasterization (TIR), which should give comparable results to MSAA with a reduced memory footprint.

Docs


Bloom Sample

  • Category: Visuals

This sample demonstrates creating a glow effect by post-processing the main scene. It heavily leverages FBO render targets across multiple steps/passes with custom effects processing shaders. It also integrates shadow mapping to demonstrate self-illumination cutting through the shadow effects.

Docs


Cascaded Shadow Mapping

  • Category: Performance, Visuals

This sample implements the cascaded shadow mapping technique using Viewport Multicast and Fast Geometry Shader.

Docs


NEW: Command Lists Sample

  • Category: Performance

This sample demonstrates the use of the NV_command_list extension. In this sample the NV_command_list is used to render a basic scene. Texturing is performed via ARB_bindless_texture.

Docs


Compute Basic GLSL Sample

  • Category: Compute

This basic sample demonstrates how to interoperate between OpenGL [ES] and a simple OpenGL Compute Shader-based compute kernel.

Docs


Compute Particles Sample

  • Category: Compute

The Compute Particles sample shows how OpenGL Compute Shaders can be used along with OpenGL rendering to create complex animations and effects entirely on the GPU.

Docs


Compute Water Surface Sample

  • Category: Visuals

This sample demonstrates dynamic, interactive water surface animation using compute shaders.

Docs


Conservative Rasterization

  • Category: Visuals

This sample demonstrates the pixel-level effect of enabling the conservative rasterization feature supported in OpenGL. It allows applications to shade every pixel whose area is touched by a fragment, rather than only those touching specific samples.

Docs


NEW: Deferred Shading MSAA Sample

  • Category: Visuals

This sample demonstrates how to render anti-aliased geometry when using a deferred shading pipeline.

Docs


Feedback Particles Sample

  • Category: Performance,Visuals

The Feedback Particles sample shows how normal vertex shaders can be used to animate particles and write the results back into vertex buffer objects via Transform Feedback, for use in subsequent frames. This is another way of implementing GPU-only particle animations. The sample also uses Geometry Shaders to generate custom particles from single points and also to kill the dead ones.

Docs


FXAA Sample

  • Category: Performance,Visuals

This sample presents a high performance and high quality screen-space software approximation to anti-aliasing called FXAA.

Docs


HDR Sample

  • Category: Performance,Visuals

This sample demonstrates High Dynamic Rendering with Auto-Exposure and Tonemapping.

Docs


Instanced Tessellation Sample

  • Category: Performance,Visuals

This sample demonstrates how instancing can be used to efficiently tessellate objects in real-time.

Docs


Instancing Sample

  • Category: Performance

This sample demonstrates how instancing techniques can be used to speed up drawing operations for scenes that consist of many copies of the same object rendered with slight differences.

Docs


NEW: Metaball Sample

  • Category: Visuals

This sample demonstrates how to use compute shaders to generate and render particle-based implicit surfaces.

Docs


Motion Blur ES2 Sample

  • Category: Visuals

This sample shows a method of simulating motion blur of fast-moving objects using multi-pass rendering. In the first pass, the fast-moving geometry is rendered unblurred into a framebuffer object. In the second pass, a special vertex shader stretches the geometry between the previous and current vertex position based on the normal at the vertex and apparent shutter duration (stretch length), and the fragment shader applies supersampling to the first pass results to generate a blurred visual.

Docs


Motion Blur GL4/GLES3 Advanced Sample

  • Category: Visuals

This sample shows a filtering method for simulating motion blur of fast-moving objects. The method used is a 2D full-screen post-process that works on a normal framebuffer augmented with a screen-space velocity buffer; thus, filtering performance is not dependent on scene geometric complexity. The algorithm is based on the paper 'A Reconstruction Filter for Plausible Motion Blur', by McGuire et. al. (SIGGRAPH I3D'12).

Docs


Multi-Draw Indirect Sample

  • Category: Visuals

This sample demonstrates how to use extensions to OpenGL to offload the CPU in generating rendering work when you have a large number of objects in a scene. The extensions and core features used are a subset of the features commonly known as 'AZDO' (For Approaching Zero Driver Overhead).

Docs


Normal-blended Decal

  • Category: Performance, Visuals

The Normal Blended Decal Sample demonstrates how to use the OpenGL PSI(Pixel Shader Interlock) feature to blend normals when drawing screen-space decals. This sample compares the performance of PSI with glMemoryBarrier.

Docs


Optimization Sample

  • Category: Visuals

The Optimization Sample demonstrates several generic performance-improving rendering techniques. These include down-sampled rendering and depth pre-passes. The sample also demonstrates the use of app-level GPU and CPU timers, which allow apps to create focused timings of actual GPU work. This is extremely important, since it is otherwise difficult to actually determine parallel CPU and GPU timings.

Docs


Particle Upsampling Sample

  • Category: Performance,Visuals

The Particle Upsampling sample uses a combination of rendering techniques to simulate a cloud of particles casting shadows on a model and a floor object. The particles are rendered into a lower-resolution offscreen surface, and then up-sampled to the screen to lower the cost of the high depth complexity.

Docs


Path Rendering Samples

  • Category: Visuals

NVIDIA has created several samples that use NVIDIA's Path Rendering extensions to demonstrate rendering stroked and filled 2D line-art, such as you would implement with Skia, SVG, or HTML Canvas, fully leveraging the power and speed of OpenGL hardware.

See the "NVPR" code samples on github and in the full documentation.

Docs


Skinning Sample

  • Category: Visuals

This sample demonstrates how to render skinned meshes using both one or two bones in a vertex shader. Skinning allows organic shapes (such as humans) to deform nicely around joints as they bend. Without skinning, joints have a rigid appearance that is more similar to a mechanical joint like you would see in a robot.

Docs


NEW: Single-pass Cubemap Rendering Sample

  • Category: Visuals

This sample demonstrates various cubemap rendering techniques, including ones that use the Multi-Projection Acceleration feature introduced in Maxwell GM20x.

Docs


Soft Shadows Sample

  • Category: Visuals

This sample shows two methods of simulating soft shadows with complex casters and receivers. The Percentage-Closer Soft Shadows method includes a convincing impression of the shadow edge (penumbra) sharpening as the shadow caster approaches contact with the shadow receiver.

Docs


Terrain Tessellation Sample

  • Category: Performance, Visuals

This sample shows how OpenGL hardware tessellation support can be used to implement a highly-efficient terrain engine that supports high geometric detail.

Docs


Texture Array Terrain Sample

  • Category: Performance, Visuals

This sample demonstrates how to use a Texture Array to render a terrain with visually-complex texturing at high performance. The texture array is similar to a 3D texture, allowing for multiple 'slices' or sub-textures bound to a single texture ID, but arrays are much higher performance due to disallowing trivial filtering across the slices. We get great terrain rendering performance by eliminating the need to perform multiple, blended passes over the geometry, and improved quality by avoiding boundary issues that would occur with 2D atlas texturing.

Docs


Weighted, Blended Order-independent Transparency

  • Category: Performance, Visuals

Weighted Blended OIT Sample demonstrates how plausible OIT (Order Independent Transparency) can be rendered in a single geometry pass without any depth sorting, as described in [McGuire and Bavoil 2013]. The idea is to use additive blending to compute a weighted average of the translucent colors with a weighting function that falls off as the linear depth increases. This sample compares the quality and performance of Weighted Blended OIT with Depth Peeling.

Docs