Back to Mame

Examples

3rdparty/bgfx/docs/examples.rst

latest37.8 KB
Original Source

Examples

Most of the examples require shader/texture/mesh data to be loaded. When running examples your current directory should be examples/runtime.

::

<bgfx_path>/examples/runtime $ ../../.build/<config>/bin/example-00-helloworldDebug

00-helloworld <https://github.com/bkaradzic/bgfx/blob/master/examples/00-helloworld>__

Initialization and debug text.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/00-helloworld/screenshot.png :alt: example-00-helloworld

01-cubes <https://github.com/bkaradzic/bgfx/blob/master/examples/01-cubes/cubes.cpp>__

Rendering simple static mesh.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/01-cubes/screenshot.png :alt: example-01-cubes

02-metaballs <https://github.com/bkaradzic/bgfx/blob/master/examples/02-metaballs>__

Rendering with transient buffers and embedding shaders.

.. raw:: html

<div class="emscripten">
  <progress value="0" max="100" id="progress" hidden=1></progress>
</div>

<div class="spinner" id='spinner'></div>
<div class="emscripten" id="status">Downloading...</div>
<div class="emscripten_border">
  <canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
</div>

<script type='text/javascript'>
  var statusElement   = document.getElementById('status');
  var progressElement = document.getElementById('progress');
  var spinnerElement  = document.getElementById('spinner');

  var Module = {
    preRun: [],
    postRun: [],
    print: (function() {
      var element = document.getElementById('output');
      if (element) element.value = ''; // clear browser cache
      return function(text) {
        if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
        // These replacements are necessary if you render to raw HTML
        //text = text.replace(/&/g, "&amp;");
        //text = text.replace(/</g, "&lt;");
        //text = text.replace(/>/g, "&gt;");
        //text = text.replace('\n', '

', 'g'); console.log(text); if (element) { element.value += text + "\n"; element.scrollTop = element.scrollHeight; // focus on bottom } }; })(), printErr: function(text) { if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' '); if (0) { // XXX disabled for safety typeof dump == 'function') { dump(text + '\n'); // fast, straight to the real console } else { console.error(text); } }, canvas: (function() { var canvas = document.getElementById('canvas');

      // As a default initial behavior, pop up an alert when webgl context is lost. To make your
      // application robust, you may want to override this behavior before shipping!
      // See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
      canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);

      return canvas;
    })(),
    setStatus: function(text) {
      if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
      if (text === Module.setStatus.text) return;
      var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
      var now = Date.now();
      if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
      if (m) {
        text = m[1];
        progressElement.value = parseInt(m[2])*100;
        progressElement.max = parseInt(m[4])*100;
        progressElement.hidden = false;
        spinnerElement.hidden = false;
      } else {
        progressElement.value = null;
        progressElement.max = null;
        progressElement.hidden = true;
        if (!text) spinnerElement.style.display = 'none';
      }
      statusElement.innerHTML = text;
    },
    totalDependencies: 0,
    monitorRunDependencies: function(left) {
      this.totalDependencies = Math.max(this.totalDependencies, left);
      Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
    }
  };
  Module.setStatus('Downloading...');
  window.onerror = function(event) {
    // TODO: do not warn on ok events like simulating an infinite loop or exitStatus
    Module.setStatus('Exception thrown, see JavaScript console');
    spinnerElement.style.display = 'none';
    Module.setStatus = function(text) {
      if (text) Module.printErr('[post-exception status] ' + text);
    };
  };
</script>
<script async type="text/javascript" src="example-02-metaballsRelease.bc.js"></script>

03-raymarch <https://github.com/bkaradzic/bgfx/blob/master/examples/03-raymarch>__

Updating shader uniforms.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/03-raymarch/screenshot.png :alt: example-03-raymarch

04-mesh <https://github.com/bkaradzic/bgfx/blob/master/examples/04-mesh>__

Loading meshes.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/04-mesh/screenshot.png :alt: example-04-mesh

05-instancing <https://github.com/bkaradzic/bgfx/blob/master/examples/05-instancing>__

Geometry instancing.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/05-instancing/screenshot.png :alt: example-05-instancing

06-bump <https://github.com/bkaradzic/bgfx/blob/master/examples/06-bump>__

Loading textures.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/06-bump/screenshot.png :alt: example-06-bump

07-callback <https://github.com/bkaradzic/bgfx/blob/master/examples/07-callback>__

Implementing application specific callbacks for taking screen shots, caching OpenGL binary shaders, and video capture.

08-update <https://github.com/bkaradzic/bgfx/blob/master/examples/08-update>__

Updating textures.

09-hdr <https://github.com/bkaradzic/bgfx/tree/master/examples/09-hdr>__

Using multiple views with frame buffers, and view order remapping.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/09-hdr/screenshot.png :alt: example-09-hdr

10-font <https://github.com/bkaradzic/bgfx/tree/master/examples/10-font>__

Use the font system to display text and styled text.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/10-font/screenshot.png :alt: example-10-font

11-fontsdf <https://github.com/bkaradzic/bgfx/tree/master/examples/11-fontsdf>__

Use a single distance field font to render text of various size.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/11-fontsdf/screenshot.png :alt: example-11-fontsdf

12-lod <https://github.com/bkaradzic/bgfx/tree/master/examples/12-lod>__

Mesh LOD transitions.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/12-lod/screenshot.png :alt: example-12-lod

13-stencil <https://github.com/bkaradzic/bgfx/tree/master/examples/13-stencil>__

Stencil reflections and shadows.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/13-stencil/screenshot.png :alt: example-13-stencil

14-shadowvolumes <https://github.com/bkaradzic/bgfx/tree/master/examples/14-shadowvolumes>__

Shadow volumes.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/14-shadowvolumes/screenshot.png :alt: example-14-shadowvolumes

15-shadowmaps-simple <https://github.com/bkaradzic/bgfx/tree/master/examples/15-shadowmaps-simple>__

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/15-shadowmaps-simple/screenshot.png :alt: example-15-shadowmaps-simple

16-shadowmaps <https://github.com/bkaradzic/bgfx/tree/master/examples/16-shadowmaps>__

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/16-shadowmaps/screenshot.png :alt: example-16-shadowmaps

17-drawstress <https://github.com/bkaradzic/bgfx/blob/master/examples/17-drawstress>__

60Hz ^^^^

Draw stress is CPU stress test to show what is the maximum number of draw calls while maintaining 60Hz frame rate. bgfx currently has default limit of 64K draw calls per frame. You can increase this limit by changing BGFX_CONFIG_MAX_DRAW_CALLS.

+-----------------+----------------+--------------+------------------------+-------+----------+ | CPU | Renderer | GPU | Arch/Compiler/OS | Dim | Calls | +=================+================+==============+========================+=======+==========+ | i7-4770K 4.2 | GL2.1 | 2xGTX780 | x64/VS2013/Win 8.1 | 51 | 132651 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4770K 4.2 | DX11 | 2xGTX780 | x64/VS2013/Win 8.1 | 50 | 125000 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4790K 4.0 | GL2.1 | GTX970 | x64/VS2015/Win 10 | 47 | 103823 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4790K 4.0 | DX11 | GTX970 | x64/VS2015/Win 10 | 45 | 91125 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4790K 4.0 | DX9 | GTX970 | x64/VS2013/Win 10 | 40 | 64000 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-3570 3.8 | NV 331.49 | GTX560Ti | x64/GCC/Linux | 40 | 64000+ | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | GL2.1 | GTX650Ti | x64/VS2008/Win 7 | 38 | 54872 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | GL2.1 | GTX650Ti | x86/VS2008/Win 7 | 38 | 54872 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-6700K 4.0 | GL2.1 | Skylake GT2 | x64/GCC/Win 10 | 38 | 54872 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4790K 4.0 | DX11 | R7 240 | x64/VS2015/Win 10 | 36 | 46656 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | NV 331.113 | GTX650Ti | x64/GCC/Linux | 34 | 39304 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-6700K 4.0 | DX11 | Skylake GT2 | x64/GCC/Win 10 | 34 | 39304 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4790K 4.0 | DX9 | R7 240 | x64/VS2015/Win 10 | 32 | 32768 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | DX9 | GTX650Ti | x64/GCC/Win 7 | 32 | 32768 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | DX9 | GTX650Ti | x64/VS2008/Win 7 | 32 | 32768 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | DX9 | GTX650Ti | x86/GCC/Win 7 | 30 | 27000 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | DX9 | GTX650Ti | x86/VS2008/Win 7 | 30 | 27000 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-6200U 2.3 | DX11 | Intel 520 | x64/GCC/Win 10 | 30 | 27000 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-4250U 1.3 | GL2.1 | HD5000 | x64/Clang/OSX 10.9 | 28 | 21852 | +-----------------+----------------+--------------+------------------------+-------+----------+ | Q8200 2.33 | NV 319.32 | GTX260 | x64/GCC/Linux | 27 | 19683 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-6700K 4.0 | GL2.1 | Skylake GT2 | x64/GCC/Linux | 27 | 19683 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-2600K 3.4 | DX9 | AMD6800 | x64/VS2012/Win 7 | 27 | 19683 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-2600K 3.4 | GL2.1 | AMD6800 | x64/VS2012/Win 7 | 26 | 17576 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4770R 3.2 | Mesa 10.5.9 | HD5200 | x64/GCC/Linux | 26 | 17576 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-6200U 2.3 | GL | Intel 520 | x64/GCC/Win 10 | 26 | 17576 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | DX9-Wine | GTX650Ti | x64/GCC/Linux | 24 | 13824 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-6200U 2.3 | Mesa 10.5.9 | Intel 520 | x64/GCC/Linux | 23 | 12167 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4750HQ 2.0 | Mesa 10.0.1 | HD5200 | x64/GCC/Linux | 22 | 10648 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4750HQ 2.0 | Mesa 10.1.3 | HD5200 | x64/GCC/Linux | 21 | 9261 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | ES2-ANGLE | GTX650Ti | x86/VS2008/Win 7 | 21 | 9261 | +-----------------+----------------+--------------+------------------------+-------+----------+ | Q8200 2.33 | Gallium 0.4 | AMD5770 | x64/GCC/Linux | 21 | 9261 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-4250U 1.3 | ES2 | HD5000 | JIT/Clang/PNaCl 31 | 21 | 9261 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-4250U 1.3 | ES2 | HD5000 | x86/GCC/NaCl 31 | 20 | 8000 | +-----------------+----------------+--------------+------------------------+-------+----------+ | Q8200 2.33 | Gallium 0.4 | GTX260 | x64/GCC/Linux | 19 | 6859 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-2450M 2.5 | Mesa 10.2.0 | HD3000 | x64/GCC/Linux | 19 | 6859 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | ES2-PowerVR | GTX650Ti | x86/VS2008/Win 7 | 18 | 5832 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | FF27-GL | GTX650Ti | JIT/Clang/W7-asm.js | 17 | 4913 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-6700K 4.0 | DX9 | Skylake GT2 | x64/GCC/Win 10 | 16 | 4096 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-4750HQ 2.0 | Mesa 8.0.5 | LLVMPIPE | x64/GCC/Linux | 16 | 4096 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-6200U 2.3 | DX9 | Intel 520 | x64/GCC/Win 10 | 16 | 4096 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | ES2-Qualcomm | GTX650Ti | x86/VS2008/Win 7 | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | ES2 | GTX650Ti | x64/GCC/NaCl 31 | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | ES2 | GTX650Ti | JIT/Clang/PNaCl 31 | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | Q8200 2.33 | NV 319.32 | GTX260 | x64/GCC/NaCl 31 | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | Q8200 2.33 | NV 319.32 | GTX260 | x64/GCC/PNaCl 31 | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | '12 Nexus 7 | ES2 | Tegra3 | ARM/GCC/Android | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-4250U 1.3 | ES2-FF27 | HD5000 | JIT/Clang/OSX-asm.js | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-4250U 1.3 | Chrome33 | HD5000 | JIT/Clang/OSX-asm.js | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | iPad mini 2 | ES2 | PVR G6430 | ARM64/Clang/iOS7 | 15 | 3375 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | Chrome33 | GTX650Ti | JIT/Clang/W7-asm.js | 14 | 2744 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | FF27-ANGLE | GTX650Ti | JIT/Clang/W7-asm.js | 14 | 2744 | +-----------------+----------------+--------------+------------------------+-------+----------+ | '13 Nexus 10 | ES2 | Mali T604 | ARM/GCC/Android | 13 | 2197 | +-----------------+----------------+--------------+------------------------+-------+----------+ | iPhone 5 | ES2 | PVR SGX543 | ARM/Clang/iOS7 | 13 | 2197 | +-----------------+----------------+--------------+------------------------+-------+----------+ | '13 Nexus 7 | ES2 | S4 Pro | ARM/GCC/Android | 12 | 1728 | +-----------------+----------------+--------------+------------------------+-------+----------+ | iPad 2 | ES2 | PVR SGX543 | ARM/Clang/iOS6 | 12 | 1728 | +-----------------+----------------+--------------+------------------------+-------+----------+ | AMD A4-5000 | Gallium 0.4 | HD8330/Kabini| x64/GCC/Linux | 12 | 1728 | +-----------------+----------------+--------------+------------------------+-------+----------+ | Xperia Z | ES2 | Adreno320 | ARM/GCC/Android | 11 | 1331 | +-----------------+----------------+--------------+------------------------+-------+----------+ | iPod 4 | ES2 | PVR SGX535 | ARM/Clang/iOS6 | 7 | 343 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i7-920 2.66 | ES2-Mali | GTX650Ti | x86/VS2008/Windows7 | 6 | 216 | +-----------------+----------------+--------------+------------------------+-------+----------+ | Creator CI20 | ES2 | PVR SGX540 | MIPS/GCC/Debian8 | 7 | 343 | +-----------------+----------------+--------------+------------------------+-------+----------+ | i5-6200U 2.3 | ES2 | SwiftShader | x64/GCC/Linux | 6 | 216 | +-----------------+----------------+--------------+------------------------+-------+----------+ | RaspberryPi | ES2 | VC IV | ARM/GCC/Raspbian | 6 | 216 | +-----------------+----------------+--------------+------------------------+-------+----------+

To test browsers in 60Hz mode following changes were made:

  • Firefox 27 about:config adjustments: webgl.prefer-native-gl true (on Windows), and layout.frame_rate 500.
  • Chrome 33 command line option: --disable-gpu-vsync.

30Hz (test for browsers) ^^^^^^^^^^^^^^^^^^^^^^^^

By default browsers are using vsync, and don't have option to turn it off programmatically.

+----------------+------------+------------+--------------------------+-------+----------+ | CPU | Renderer | GPU | Arch/Compiler/OS | Dim | Calls | +================+============+============+==========================+=======+==========+ | i7-920 2.66 | GL2.1 | GTX650Ti | x64/VS2008/Win7 | 38 | 64000+ | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | GL2.1 | HD5000 | x64/Clang/OSX 10.9 | 36 | 46656 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | Chrome34 | HD5000 | JIT/Clang/OSX-PNaCl 31 | 28 | 21952 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | Chrome33 | HD5000 | JIT/Clang/OSX-PNaCl 31 | 27 | 19683 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | FF28 | HD5000 | JIT/Clang/OSX-asm.js | 25 | 15625 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | FF36 | HD5000 | JIT/Clang/OSX-asm.js | 25 | 15625 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | Chrome41 | HD5000 | x64/GCC/OSX-NaCl 41 | 24 | 13824 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | FF37 | HD5000 | JIT/Clang/OSX-asm.js | 23 | 12167 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | FF27 | HD5000 | JIT/Clang/OSX-asm.js | 20 | 8000 | +----------------+------------+------------+--------------------------+-------+----------+ | i7-920 2.66 | Chrome33 | GTX650Ti | JIT/Clang/W7-PNaCl 31 | 20 | 8000 | +----------------+------------+------------+--------------------------+-------+----------+ | i7-920 2.66 | Chrome34 | GTX650Ti | JIT/Clang/W7-asm.js | 18 | 5832 | +----------------+------------+------------+--------------------------+-------+----------+ | i7-920 2.66 | Chrome33 | GTX650Ti | JIT/Clang/W7-asm.js | 18 | 5832 | +----------------+------------+------------+--------------------------+-------+----------+ | i7-920 2.66 | FF28 | GTX650Ti | JIT/Clang/W7-asm.js | 18 | 5832 | +----------------+------------+------------+--------------------------+-------+----------+ | i7-920 2.66 | FF27 | GTX650Ti | JIT/Clang/W7-asm.js | 18 | 5832 | +----------------+------------+------------+--------------------------+-------+----------+ | i5-4250U 1.3 | Safari7 | HD5000 | JIT/Clang/OSX-asm.js | 15 | 3375 | +----------------+------------+------------+--------------------------+-------+----------+

18-ibl <https://github.com/bkaradzic/bgfx/tree/master/examples/18-ibl>__

Image-based lighting.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/18-ibl/screenshot.png :alt: example-18-ibl

19-oit <https://github.com/bkaradzic/bgfx/tree/master/examples/19-oit>__

Weighted, Blended Order-Independent Transparency

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/19-oit/screenshot.png :alt: example-19-oit

20-nanovg <https://github.com/bkaradzic/bgfx/tree/master/examples/20-nanovg>__

NanoVG is small antialiased vector graphics rendering library.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/20-nanovg/screenshot.png :alt: example-20-nanovg

21-deferred <https://github.com/bkaradzic/bgfx/tree/master/examples/21-deferred>__

MRT rendering and deferred shading.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/21-deferred/screenshot.png :alt: example-21-deferred

22-windows <https://github.com/bkaradzic/bgfx/tree/master/examples/22-windows>__

Rendering into multiple windows.

23-vectordisplay <https://github.com/bkaradzic/bgfx/tree/master/examples/23-vectordisplay>__

Rendering lines as oldschool vectors.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/23-vectordisplay/screenshot.png :alt: example-23-vectordisplay

24-nbody <https://github.com/bkaradzic/bgfx/tree/master/examples/24-nbody>__

N-body simulation with compute shaders using buffers.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/24-nbody/screenshot.png :alt: example-24-nbody

25-c99 <https://github.com/bkaradzic/bgfx/tree/master/examples/25-c99>__

Initialization and debug text with C99 API.

26-occlusion <https://github.com/bkaradzic/bgfx/tree/master/examples/26-occlusion>__

Using occlusion query for conditional rendering.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/26-occlusion/screenshot.png :alt: example-26-occlusion

27-terrain <https://github.com/bkaradzic/bgfx/tree/master/examples/27-terrain>__

Terrain painting example.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/27-terrain/screenshot.png :alt: example-27-terrain

28-wireframe <https://github.com/bkaradzic/bgfx/tree/master/examples/28-wireframe>__

Drawing wireframe mesh.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/28-wireframe/screenshot.png :alt: example-28-wireframe

29-debugdraw <https://github.com/bkaradzic/bgfx/tree/master/examples/29-debugdraw>__

Debug draw.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/29-debugdraw/screenshot.png :alt: example-29-debugdraw

30-picking <https://github.com/bkaradzic/bgfx/tree/master/examples/30-picking>__

Mouse picking via GPU readback.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/30-picking/screenshot.png :alt: example-30-picking

31-rsm <https://github.com/bkaradzic/bgfx/tree/master/examples/31-rsm>__

Global Illumination with Reflective Shadow Map.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/31-rsm/screenshot.png :alt: example-31-rsm

32-particles <https://github.com/bkaradzic/bgfx/tree/master/examples/32-particles>__

Particles.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/32-particles/screenshot.png :alt: example-32-particles

33-pom <https://github.com/bkaradzic/bgfx/tree/master/examples/33-pom>__

Parallax occlusion mapping.

Reference(s):

  • Exploring bump mapping with WebGL <http://apoorvaj.io/exploring-bump-mapping-with-webgl.html>__

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/33-pom/screenshot.png :alt: example-33-pom

34-mvs <https://github.com/bkaradzic/bgfx/tree/master/examples/34-mvs>__

Multiple vertex streams.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/34-mvs/screenshot.png :alt: example-34-mvs

35-dynamic <https://github.com/bkaradzic/bgfx/tree/master/examples/35-dynamic>__

Dynamic buffers update.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/35-dynamic/screenshot.png :alt: example-35-dynamic

36-sky <https://github.com/bkaradzic/bgfx/tree/master/examples/36-sky>__

Perez dynamic sky model.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/36-sky/screenshot.png :alt: example-36-sky

37-gpudrivenrendering <https://github.com/bkaradzic/bgfx/tree/master/examples/37-gpudrivenrendering>__

GPU-Driven Rendering.

Reference(s):

  • Experiments in GPU-based occlusion culling <https://interplayoflight.wordpress.com/2017/11/15/experiments-in-gpu-based-occlusion-culling/>__,
  • Experiments in GPU-based occlusion culling part 2: MultiDrawIndirect and mesh lodding <https://interplayoflight.wordpress.com/2018/01/15/experiments-in-gpu-based-occlusion-culling-part-2-multidrawindirect-and-mesh-lodding/>__,
  • Porting GPU driven occlusion culling to bgfx <https://interplayoflight.wordpress.com/2018/03/05/porting-gpu-driven-occlusion-culling-to-bgfx/>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/37-gpudrivenrendering/screenshot.png :alt: example-37-gpudrivenrendering

38-bloom <https://github.com/bkaradzic/bgfx/tree/master/examples/38-bloom>__

Bloom.

Reference(s):

  • Next Generation Post Processing in Call of Duty: Advanced Warfare <http://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/38-bloom/screenshot.png :alt: example-38-bloom

39-assao <https://github.com/bkaradzic/bgfx/tree/master/examples/39-assao>__

Adaptive Screen Space Ambient Occlusion.

Reference(s):

  • Adaptive Screen Space Ambient Occlusion <https://software.intel.com/en-us/articles/adaptive-screen-space-ambient-occlusion>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/39-assao/screenshot.png :alt: example-39-assao

40-svt <https://github.com/bkaradzic/bgfx/tree/master/examples/40-svt>__

Sparse Virtual Textures.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/40-svt/screenshot.png :alt: example-40-svt

41-tess <https://github.com/bkaradzic/bgfx/tree/master/examples/41-tess>__

Adaptive GPU Tessellation with Compute Shaders

Reference(s):

  • Adaptive GPU Tessellation with Compute Shaders by Jad Khoury, Jonathan Dupuy, and Christophe Riccio <http://onrendering.com/data/papers/isubd/isubd.pdf>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/41-tess/screenshot.png :alt: example-41-tess

42-bunnylod <https://github.com/bkaradzic/bgfx/tree/master/examples/42-bunnylod>__

Simple Polygon Reduction

Reference(s):

  • Simple Polygon Reduction <https://web.archive.org/web/20020114194131/http://www.melax.com/polychop/>__.
  • A Simple, Fast,and Effective Polygon Reduction Algorithm <https://web.archive.org/web/20031204035320/http://www.melax.com/polychop/gdmag.pdf>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/42-bunnylod/screenshot.png :alt: example-42-bunnylod

43-denoise <https://github.com/bkaradzic/bgfx/tree/master/examples/43-denoise>__

Denoise

Reference(s):

  • Spatiotemporal Variance-Guided Filtering: Real-Time Reconstruction for Path-Traced Global Illumination. <https://web.archive.org/web/20170720213354/https://research.nvidia.com/sites/default/files/pubs/2017-07_Spatiotemporal-Variance-Guided-Filtering%3A/svgf_preprint.pdf>__.
  • Streaming G-Buffer Compression for Multi-Sample Anti-Aliasing <https://web.archive.org/web/20200807211002/https://software.intel.com/content/www/us/en/develop/articles/streaming-g-buffer-compression-for-multi-sample-anti-aliasing.html>__.
  • Edge-Avoiding À-Trous Wavelet Transform for fast Global Illumination Filtering <https://web.archive.org/web/20130412085423/https://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.100/institut/Papers/atrousGIfilter.pdf>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/43-denoise/screenshot.png :alt: example-43-denoise

44-sss <https://github.com/bkaradzic/bgfx/tree/master/examples/44-sss>__

Screen-Space Shadows

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/44-sss/screenshot.png :alt: example-44-sss

45-bokeh <https://github.com/bkaradzic/bgfx/tree/master/examples/45-bokeh>__

Bokeh Depth of Field

Reference(s):

  • Bokeh depth of field in a single pass <https://web.archive.org/web/20201215123940/https://blog.tuxedolabs.com/2018/05/04/bokeh-depth-of-field-in-single-pass.html>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/45-bokeh/screenshot.png :alt: example-45-bokeh

46-fsr <https://github.com/bkaradzic/bgfx/tree/master/examples/46-fsr>__

AMD FidelityFX Super Resolution - high-quality solution for producing high resolution frames from lower resolution inputs.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/46-fsr/screenshot.png :alt: example-46-fsr

47-pixelformats <https://github.com/bkaradzic/bgfx/tree/master/examples/47-pixelformats>__

Pixel Formats

View and test texture formats

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/47-pixelformats/screenshot.png :alt: example-47-pixelformats

48-drawindirect <https://github.com/bkaradzic/bgfx/tree/master/examples/48-drawindirect>__

Draw Indirect

Simple example of indirect rendering + an implementation of multidraw indirect

Reference(s):

  • OpenGL MultiDrawIndirect with per-instance textures <https://web.archive.org/web/20201109155619/https://litasa.github.io/blog/2017/09/04/OpenGL-MultiDrawIndirect-with-Individual-Textures>__.
  • Indirect Rendering - A way to a million draw calls <https://web.archive.org/web/20210926073337/https://cpp-rendering.io/indirect-rendering>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/48-drawindirect/screenshot.png :alt: example-48-drawindirect

49-hextile <https://github.com/bkaradzic/bgfx/tree/master/examples/49-hextile>__

Realtime Hex-Tiling

Simple example of how to use Hex-tiling in real time, ported from https://github.com/mmikk/hextile-demo

Reference(s):

  • Hex-Tiling demo <https://github.com/mmikk/hextile-demo>__.
  • Paper explaining concepts - <https://github.com/mmikk/mmikk.github.io/blob/master/papers3d/mm_hex_compressed.pdf>__.

.. figure:: https://github.com/bkaradzic/bgfx/raw/master/examples/49-hextile/screenshot.png :alt: example-49-hextile