Merge branch 'master' of cane:bkaradzic/bgfx
This commit is contained in:
commit
a70cf430b0
741
README.md
741
README.md
@ -1,10 +1,8 @@
|
||||
[bgfx](https://github.com/bkaradzic/bgfx) - Cross-platform rendering library
|
||||
============================================================================
|
||||
|
||||
[Documentation](https://bkaradzic.github.io/bgfx/index.html)
|
||||
|
||||
What is it?
|
||||
-----------
|
||||
[What is it?](https://bkaradzic.github.io/bgfx/overview.html)
|
||||
-------------------------------------------------------------
|
||||
|
||||
Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style
|
||||
rendering library.
|
||||
@ -87,735 +85,20 @@ https://github.com/cgbystrom/twinkle GPU-accelerated UI framework powered by
|
||||
JavaScript for desktop/mobile apps. Idea is to combine the fast workflow and
|
||||
deployment model of web with the performance of native code and GPU acceleration.
|
||||
|
||||
Examples
|
||||
--------
|
||||
[Building](https://bkaradzic.github.io/bgfx/build.html)
|
||||
-------------------------------------------------------
|
||||
|
||||
Most of the examples require shader/texture/mesh data to be loaded. When running
|
||||
examples your current directory should be examples/runtime.
|
||||
[Examples](https://bkaradzic.github.io/bgfx/examples.html)
|
||||
----------------------------------------------------------
|
||||
|
||||
<bgfx_path>/examples/runtime $ ../../.build/<config>/bin/example-00-helloworldDebug
|
||||
[API Reference](https://bkaradzic.github.io/bgfx/bgfx.html)
|
||||
-----------------------------------------------------------
|
||||
|
||||
### [00-helloworld](https://github.com/bkaradzic/bgfx/blob/master/examples/00-helloworld)
|
||||
[Tools](https://bkaradzic.github.io/bgfx/tools.html)
|
||||
----------------------------------------------------
|
||||
|
||||
Initialization and debug text.
|
||||
|
||||
![example-00-helloworld](https://github.com/bkaradzic/bgfx/raw/master/examples/00-helloworld/screenshot.png)
|
||||
|
||||
### [01-cubes](https://github.com/bkaradzic/bgfx/blob/master/examples/01-cubes/cubes.cpp)
|
||||
|
||||
Rendering simple static mesh.
|
||||
|
||||
![example-01-cubes](https://github.com/bkaradzic/bgfx/raw/master/examples/01-cubes/screenshot.png)
|
||||
|
||||
### [02-metaballs](https://github.com/bkaradzic/bgfx/blob/master/examples/02-metaballs)
|
||||
|
||||
Rendering with transient buffers and embedding shaders.
|
||||
|
||||
![example-02-metaballs](https://github.com/bkaradzic/bgfx/raw/master/examples/02-metaballs/screenshot.png)
|
||||
|
||||
### [03-raymarch](https://github.com/bkaradzic/bgfx/blob/master/examples/03-raymarch)
|
||||
|
||||
Updating shader uniforms.
|
||||
|
||||
![example-03-raymarch](https://github.com/bkaradzic/bgfx/raw/master/examples/03-raymarch/screenshot.png)
|
||||
|
||||
### [04-mesh](https://github.com/bkaradzic/bgfx/blob/master/examples/04-mesh)
|
||||
|
||||
Loading meshes.
|
||||
|
||||
![example-04-mesh](https://github.com/bkaradzic/bgfx/raw/master/examples/04-mesh/screenshot.png)
|
||||
|
||||
### [05-instancing](https://github.com/bkaradzic/bgfx/blob/master/examples/05-instancing)
|
||||
|
||||
Geometry instancing.
|
||||
|
||||
![example-05-instancing](https://github.com/bkaradzic/bgfx/raw/master/examples/05-instancing/screenshot.png)
|
||||
|
||||
### [06-bump](https://github.com/bkaradzic/bgfx/blob/master/examples/06-bump)
|
||||
|
||||
Loading textures.
|
||||
|
||||
![example-06-bump](https://github.com/bkaradzic/bgfx/raw/master/examples/06-bump/screenshot.png)
|
||||
|
||||
### [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 and render targets.
|
||||
|
||||
![example-09-hdr](https://github.com/bkaradzic/bgfx/raw/master/examples/09-hdr/screenshot.png)
|
||||
|
||||
### [10-font](https://github.com/bkaradzic/bgfx/tree/master/examples/10-font)
|
||||
|
||||
Use the font system to display text and styled text.
|
||||
|
||||
![example-10-font](https://github.com/bkaradzic/bgfx/raw/master/examples/10-font/screenshot.png)
|
||||
|
||||
### [11-fontsdf](https://github.com/bkaradzic/bgfx/tree/master/examples/11-fontsdf)
|
||||
|
||||
Use a single distance field font to render text of various size.
|
||||
|
||||
![example-11-fontsdf](https://github.com/bkaradzic/bgfx/raw/master/examples/11-fontsdf/screenshot.png)
|
||||
|
||||
### [12-lod](https://github.com/bkaradzic/bgfx/tree/master/examples/12-lod)
|
||||
|
||||
Mesh LOD transitions.
|
||||
|
||||
![example-12-lod](https://github.com/bkaradzic/bgfx/raw/master/examples/12-lod/screenshot.png)
|
||||
|
||||
### [13-stencil](https://github.com/bkaradzic/bgfx/tree/master/examples/13-stencil)
|
||||
|
||||
Stencil reflections and shadows.
|
||||
|
||||
![example-13-stencil](https://github.com/bkaradzic/bgfx/raw/master/examples/13-stencil/screenshot.png)
|
||||
|
||||
### [14-shadowvolumes](https://github.com/bkaradzic/bgfx/tree/master/examples/14-shadowvolumes)
|
||||
|
||||
Shadow volumes.
|
||||
|
||||
![example-14-shadowvolumes](https://github.com/bkaradzic/bgfx/raw/master/examples/14-shadowvolumes/screenshot.png)
|
||||
|
||||
### [15-shadowmaps-simple](https://github.com/bkaradzic/bgfx/tree/master/examples/15-shadowmaps-simple)
|
||||
|
||||
![example-15-shadowmaps-simple](https://github.com/bkaradzic/bgfx/raw/master/examples/15-shadowmaps-simple/screenshot.png)
|
||||
|
||||
### [16-shadowmaps](https://github.com/bkaradzic/bgfx/tree/master/examples/16-shadowmaps)
|
||||
|
||||
![example-16-shadowmaps](https://github.com/bkaradzic/bgfx/raw/master/examples/16-shadowmaps/screenshot.png)
|
||||
|
||||
### [17-drawstress](https://github.com/bkaradzic/bgfx/blob/master/examples/17-drawstress)
|
||||
|
||||
#### 60Hz
|
||||
|
||||
Draw stress is CPU stress test to show what is the maximimum 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-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-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-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-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.0.1 | HD5200 | x64/GCC/SteamOS | 25 | 15625 |
|
||||
| i7-920 2.66 | DX9-Wine | GTX650Ti | x64/GCC/Linux | 24 | 13824 |
|
||||
| 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-4750HQ 2.0| Mesa 8.0.5 | LLVMPIPE | x64/GCC/Linux | 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 | 12 | 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 |
|
||||
| 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 |
|
||||
| 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
|
||||
programatically.
|
||||
|
||||
| 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 |
|
||||
|
||||
|
||||
* [JavaScript+WebGL port](https://github.com/djg/webgl-drawstress-js)
|
||||
|
||||
### [18-ibl](https://github.com/bkaradzic/bgfx/tree/master/examples/18-ibl)
|
||||
|
||||
Image based lighting.
|
||||
|
||||
![example-18-ibl](https://github.com/bkaradzic/bgfx/raw/master/examples/18-ibl/screenshot.png)
|
||||
|
||||
### [19-oit](https://github.com/bkaradzic/bgfx/tree/master/examples/19-oit)
|
||||
|
||||
Weighted, Blended Order-Independent Transparency
|
||||
|
||||
![example-19-oit](https://github.com/bkaradzic/bgfx/raw/master/examples/19-oit/screenshot.png)
|
||||
|
||||
### [20-nanovg](https://github.com/bkaradzic/bgfx/tree/master/examples/20-nanovg)
|
||||
|
||||
NanoVG is small antialiased vector graphics rendering library.
|
||||
|
||||
![example-20-nanovg](https://github.com/bkaradzic/bgfx/raw/master/examples/20-nanovg/screenshot.png)
|
||||
|
||||
### [21-deferred](https://github.com/bkaradzic/bgfx/tree/master/examples/21-deferred)
|
||||
|
||||
MRT rendering and deferred shading.
|
||||
|
||||
![example-21-deferred](https://github.com/bkaradzic/bgfx/raw/master/examples/21-deferred/screenshot.png)
|
||||
|
||||
### [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.
|
||||
|
||||
![example-23-vectordisplay](https://github.com/bkaradzic/bgfx/raw/master/examples/23-vectordisplay/screenshot.png)
|
||||
|
||||
### [24-nbody](https://github.com/bkaradzic/bgfx/tree/master/examples/24-nbody)
|
||||
|
||||
N-body simulation with compute shaders using buffers.
|
||||
|
||||
![example-24-nbody](https://github.com/bkaradzic/bgfx/raw/master/examples/24-nbody/screenshot.png)
|
||||
|
||||
### [25-c99](https://github.com/bkaradzic/bgfx/tree/master/examples/25-c99)
|
||||
|
||||
Initialization and debug text with C99 API.
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
[https://github.com/bkaradzic/bx](https://github.com/bkaradzic/bx)
|
||||
|
||||
Building
|
||||
--------
|
||||
|
||||
Steps bellow are for default build system inside bgfx repository. There is
|
||||
alterative way to build bgfx and examples with [fips](https://github.com/floooh/fips-bgfx/#fips-bgfx).
|
||||
|
||||
Binary builds (for Windows and Linux) are also available [here](https://tc27.draster.com/bgfx-bins/).
|
||||
|
||||
### Getting source
|
||||
|
||||
git clone git://github.com/bkaradzic/bx.git
|
||||
git clone git://github.com/bkaradzic/bgfx.git
|
||||
|
||||
### Quick start (Windows with Visual Studio)
|
||||
|
||||
Enter bgfx directory:
|
||||
|
||||
cd bgfx
|
||||
|
||||
Generate Visual Studio 2013 project files:
|
||||
|
||||
..\bx\tools\bin\windows\genie vs2013
|
||||
|
||||
Open bgfx solution in Visual Studio 2013:
|
||||
|
||||
start .build\projects\vs2013\bgfx.sln
|
||||
|
||||
### Generating project files for all targets
|
||||
|
||||
cd bgfx
|
||||
make
|
||||
|
||||
After calling `make`, .build/projects/* directory will be generated. All
|
||||
intermediate files generated by compiler will be inside .build directory
|
||||
structure. Deleting .build directory at any time is safe.
|
||||
|
||||
### Prerequisites for Android
|
||||
|
||||
Download AndroidNDK from:
|
||||
[https://developer.android.com/tools/sdk/ndk/index.html](https://developer.android.com/tools/sdk/ndk/index.html)
|
||||
|
||||
setx ANDROID_NDK_ROOT <path to AndroidNDK directory>
|
||||
setx ANDROID_NDK_ARM <path to AndroidNDK directory>\toolchains\arm-linux-androideabi-4.7\prebuilt\windows-x86_64
|
||||
setx ANDROID_NDK_MIPS <path to AndroidNDK directory>\toolchains\mipsel-linux-android-4.7\prebuilt\windows-x86_64
|
||||
setx ANDROID_NDK_X86 <path to AndroidNDK directory>\toolchains\x86-4.7\prebuilt\windows-x86_64
|
||||
|
||||
### Prerequisites for Linux
|
||||
|
||||
sudo apt-get install libgl1-mesa-dev
|
||||
|
||||
### Prerequisites for Native Client
|
||||
|
||||
Download Native Client SDK from:
|
||||
[https://developers.google.com/native-client/sdk/download](https://developers.google.com/native-client/sdk/download)
|
||||
|
||||
setx NACL_SDK_ROOT <path to Native Client SDK directory>
|
||||
|
||||
### Prerequisites for Windows
|
||||
|
||||
Windows users download GnuWin32 utilities from:
|
||||
[http://gnuwin32.sourceforge.net/packages/make.htm](http://gnuwin32.sourceforge.net/packages/make.htm)
|
||||
[http://gnuwin32.sourceforge.net/packages/coreutils.htm](http://gnuwin32.sourceforge.net/packages/coreutils.htm)
|
||||
[http://gnuwin32.sourceforge.net/packages/libiconv.htm](http://gnuwin32.sourceforge.net/packages/libiconv.htm)
|
||||
[http://gnuwin32.sourceforge.net/packages/libintl.htm](http://gnuwin32.sourceforge.net/packages/libintl.htm)
|
||||
|
||||
When building on Windows, you have to set DXSDK_DIR environment variable to
|
||||
point to DirectX SDK directory.
|
||||
|
||||
setx DXSDK_DIR <path to DirectX SDK directory>
|
||||
|
||||
If you're building with Visual Studio 2008, you'll need TR1 support from:
|
||||
[Visual C++ 2008 Feature Pack Release](https://www.microsoft.com/en-us/download/details.aspx?id=6922)
|
||||
|
||||
If you're building with MinGW/TDM compiler on Windows make DirectX SDK
|
||||
directory link to directory without spaces in the path.
|
||||
|
||||
mklink /D c:\dxsdk <path to DirectX SDK directory>
|
||||
setx DXSDK_DIR c:\dxsdk
|
||||
|
||||
Apply this [patch](https://github.com/bkaradzic/bx/blob/master/include/compat/mingw/dxsdk.patch)
|
||||
to DXSDK from June 2010 to be able to use it with MinGW/TDM.
|
||||
|
||||
### Building
|
||||
|
||||
Visual Studio 2008 command line:
|
||||
|
||||
make vs2008-release64
|
||||
|
||||
Visual Studio 2008 IDE:
|
||||
|
||||
start .build/projects/vs2008/bgfx.sln
|
||||
|
||||
Xcode 5 IDE:
|
||||
|
||||
open .build/projects/xcode4/bgfx.xcworkspace
|
||||
Due to [inability](http://industriousone.com/debugdir) to set working directory for an Xcode project from premake configuration file, it has to be set manually for each example project:
|
||||
|
||||
1. Open *"Edit scheme..."* dialog for a given project.
|
||||
2. Select *"Run"* settings.
|
||||
3. Check *"Use custom working directory"* and enter following path: `${PROJECT_DIR}/../../../examples/runtime`.
|
||||
|
||||
Linux 64-bit:
|
||||
|
||||
make linux-release64
|
||||
|
||||
WinRT / Windows Phone 8.1:
|
||||
|
||||
../bx/tools/bin/windows/genie --vs=winphone81 vs2013
|
||||
Build the resulting solution and deploy to device. Note that
|
||||
shaders will need to be compiled with the appropriate target profile for your platform.
|
||||
|
||||
Other platforms:
|
||||
|
||||
make <configuration>
|
||||
|
||||
Configuration is `<platform>-<debug/release>[32/64]`. For example:
|
||||
|
||||
linux-release32, nacl-debug64, nacl-arm-debug, pnacl-release,
|
||||
android-release, etc.
|
||||
|
||||
Amalgamated build
|
||||
-----------------
|
||||
|
||||
For ease of integration to other build system bgfx library can be built with
|
||||
single .cpp file. It's only necessary to build [src/amalgamated.cpp](https://github.com/bkaradzic/bgfx/blob/master/src/amalgamated.cpp)
|
||||
(for OSX/iOS use [src/amalgamated.mm](https://github.com/bkaradzic/bgfx/blob/master/src/amalgamated.mm)
|
||||
instead) inside different build system.
|
||||
|
||||
OculusVR integration
|
||||
--------------------
|
||||
|
||||
OculusVR support is currently experimental, and only DX11 is tested. To build
|
||||
with OculusVR HMD support enabled you must set `OVR_DIR` enviroment variable:
|
||||
|
||||
set OVR_DIR=<path to OculusSDK>
|
||||
|
||||
And generate project files with `--with-ovr` option:
|
||||
|
||||
genie --with-ovr vs2012
|
||||
|
||||
In `LibOVR/Include` create trampoline headers `OVR_D3D.h` and `OVR_GL.h`.
|
||||
|
||||
`OVR_D3D.h` should contain:
|
||||
|
||||
#include "../Src/OVR_CAPI_D3D.h"
|
||||
|
||||
`OVR_GL.h` should contain:
|
||||
|
||||
#include "../Src/OVR_CAPI_GL.h"
|
||||
|
||||
Internals
|
||||
---------
|
||||
|
||||
bgfx is using sort-based draw call bucketing. This means that submission order
|
||||
doesn't necessarily match the rendering order, but on the low-level they
|
||||
will be sorted and ordered correctly. On the high level this allows
|
||||
more optimal way of submitting draw calls for all passes at one place, and on
|
||||
the low-level this allows better optimization of rendering order. This sometimes
|
||||
creates undesired results usually for GUI rendering, where draw order should
|
||||
usually match submit order. bgfx provides way to enable sequential rendering for
|
||||
these cases (see `bgfx::setViewSeq`).
|
||||
|
||||
Internally all low-level rendering draw calls are issued inside single function
|
||||
`RendererContextI::submit`. This function exist inside each renderer backend
|
||||
implementation.
|
||||
|
||||
More detailed description of sort-based draw call bucketing can be found at:
|
||||
[Order your graphics draw calls around!](http://realtimecollisiondetection.net/blog/?p=86)
|
||||
|
||||
Customization
|
||||
-------------
|
||||
|
||||
By default each platform has sane default values. For example on Windows default
|
||||
renderer is DirectX9, and on Linux it is OpenGL 2.1. On Windows platform all
|
||||
rendering backends are available. For OpenGL ES on desktop you can find more
|
||||
information at:-
|
||||
[OpenGL ES 2.0 and EGL on desktop](http://www.g-truc.net/post-0457.html)
|
||||
|
||||
If you're targeting specific mobile hardware, you can find GLES support in their
|
||||
official SDKs:
|
||||
[Adreno SDK](http://developer.qualcomm.com/mobile-development/mobile-technologies/gaming-graphics-optimization-adreno/tools-and-resources),
|
||||
[Mali SDK](http://www.malideveloper.com/),
|
||||
[PowerVR SDK](http://www.imgtec.com/powervr/insider/sdkdownloads/).
|
||||
|
||||
All configuration settings are located inside [src/config.h](https://github.com/bkaradzic/bgfx/blob/master/src/config.h).
|
||||
|
||||
Every `BGFX_CONFIG_*` setting can be changed by passing defines thru compiler
|
||||
switches. For example setting preprocessor define `BGFX_CONFIG_RENDERER_OPENGL=1`
|
||||
will change backend renderer to OpenGL 2.1. on Windows. Since rendering APIs are
|
||||
platform specific, this obviously won't work nor make sense in all cases.
|
||||
Certain platforms have only single choice, for example the Native Client works
|
||||
only with OpenGL ES 2.0 renderer, using anything other than that will result in
|
||||
build errors.
|
||||
|
||||
Debugging and Profiling
|
||||
-----------------------
|
||||
|
||||
### RenderDoc
|
||||
|
||||
Loading of RenderDoc is integrated in bgfx when using DX11 or OpenGL renderer.
|
||||
You can drop in `renderdoc.dll` from RenderDoc distribution into working
|
||||
directory, and it will be automatically loaded during bgfx initialization. This
|
||||
allows frame capture at any time by pressing **F11**.
|
||||
|
||||
Download: [RenderDoc](https://renderdoc.org/builds)
|
||||
|
||||
### IntelGPA
|
||||
|
||||
Right click **Intel GPA Monitor** tray icon, choose preferences, check
|
||||
"Auto-detect launched applications" option. Find `InjectionList.txt` in GPA
|
||||
directory and add `examples-*` to the list.
|
||||
|
||||
Download: [IntelGPA](https://software.intel.com/en-us/vcsource/tools/intel-gpa)
|
||||
|
||||
Other debuggers:
|
||||
|
||||
| Name | OS | DX9 | DX11 | GL | GLES | Source |
|
||||
|:----------|:--------------|:----:|:----:|:----:|:----:|:------:|
|
||||
| APITrace | Linux/OSX/Win | x | x | x | x | x |
|
||||
| CodeXL | Linux/Win | | | x | | |
|
||||
| Dissector | Win | x | | | | x |
|
||||
| IntelGPA | Linux/OSX/Win | x | x | | x | |
|
||||
| Nsight | Win | x | x | x | | |
|
||||
| PerfHUD | Win | x | x | | | |
|
||||
| RenderDoc | Win | | x | x | | x |
|
||||
| vogl | Linux | | | x | | x |
|
||||
|
||||
Download:
|
||||
[APITrace](https://apitrace.github.io/)
|
||||
[CodeXL](http://developer.amd.com/tools-and-sdks/opencl-zone/codexl/)
|
||||
[Dissector](https://github.com/imccown/Dissector)
|
||||
[Nsight](https://developer.nvidia.com/nvidia-nsight-visual-studio-edition)
|
||||
[PerfHUD](https://developer.nvidia.com/nvidia-perfhud)
|
||||
[vogl](https://github.com/ValveSoftware/vogl)
|
||||
|
||||
SDL, GLFW, etc.
|
||||
---------------
|
||||
|
||||
It is possible to use bgfx with SDL, GLFW and similar cross platform windowing
|
||||
libraries. The main requirement is that windowing library provides access to
|
||||
native window handle that's used to create Direct3D device or OpenGL context.
|
||||
|
||||
Using bgfx with SDL example:
|
||||
|
||||
#include <SDL.h>
|
||||
#include <bgfxplatform.h> // it must be included after SDL to enable SDL
|
||||
// integration code path.
|
||||
|
||||
#include <bgfx.h>
|
||||
...
|
||||
|
||||
int main(...
|
||||
{
|
||||
SDL_window* window = SDL_CreateWindow(...
|
||||
bgfx::sdlSetWindow(window);
|
||||
|
||||
...
|
||||
bgfx::init();
|
||||
|
||||
**NOTE** You can use `--with-sdl` when runnning GENie to enable SDL2 integration
|
||||
with examples:
|
||||
|
||||
genie --with-sdl vs2012
|
||||
|
||||
**NOTE** `--with-glfw` is also available, but it's just simple stub to be used
|
||||
to test GLFW integration API.
|
||||
|
||||
**NOTE** Special care is necessary to make custom windowing to work with
|
||||
multithreaded renderer. Each platform has rules about where renderer can be and
|
||||
how multithreading interacts with context/device. To disable multithreaded
|
||||
render use `BGFX_CONFIG_MULTITHREDED=0` preprocessor define.
|
||||
|
||||
Tools
|
||||
-----
|
||||
|
||||
### Shader Compiler (shaderc)
|
||||
|
||||
bgfx cross-platform shader language is based on GLSL syntax. It's uses ANSI C
|
||||
preprocessor to transform GLSL like language syntax into HLSL. This technique
|
||||
has certain drawbacks, but overall it's simple and allows quick authoring of
|
||||
cross-platform shaders.
|
||||
|
||||
Some differences between bgfx's shaderc flavor of GLSL and regular GLSL:
|
||||
|
||||
- No `bool/int` uniforms, all uniforms must be `float`.
|
||||
- Attributes and varyings can be accessed only from `main()` function.
|
||||
- Must use `SAMPLER2D/3D/CUBE/etc.` macros instead of `sampler2D/3D/Cube/etc.`
|
||||
tokens.
|
||||
- Must use `vec2/3/4_splat(<value>)` instead of `vec2/3/4(<value>)`.
|
||||
- Must use `mul(x, y)` when multiplying vectors and matrices.
|
||||
- Must use `varying.def.sc` to define input/output semantic and precission
|
||||
instead of using `attribute/in` and `varying/in/out`.
|
||||
- `$input/$output` tokens must appear at the begining of shader.
|
||||
|
||||
For more info see [shader helper macros](https://github.com/bkaradzic/bgfx/blob/master/src/bgfx_shader.sh).
|
||||
|
||||
### Texture Compiler (texturec)
|
||||
|
||||
This tool doesn't currently exist. To produce DDS, KTX or PVR textures use:
|
||||
|
||||
[.dds - nVidia Texture Tools - DDS Utilities](https://developer.nvidia.com/legacy-texture-tools)
|
||||
[.ktx - Mali GPU Texture Compression Tool](http://malideveloper.arm.com/develop-for-mali/mali-gpu-texture-compression-tool/)
|
||||
[.pvr - PowerVR Insider SDK](http://www.imgtec.com/powervr/insider/sdkdownloads/index.asp)
|
||||
|
||||
### Geometry Compiler (geometryc)
|
||||
|
||||
Converts Wavefront .obj mesh file to format optimal for using with bgfx.
|
||||
|
||||
Todo
|
||||
----
|
||||
|
||||
- Blit between textures.
|
||||
- Occlusion queries.
|
||||
- Fullscreen mode.
|
||||
- ETC2, PVRTC1/2 decoding fallback for targets that don't support it natively.
|
||||
- shaderc as library for runtime shader building.
|
||||
- texturec tool with support for all supported texture formats.
|
||||
- Multiple vertex streams support.
|
||||
- Animated mesh example.
|
||||
- Metal renderer backend (you can follow progress [here](https://github.com/attilaz/bgfx/tree/metal)).
|
||||
- Vulkan renderer backend.
|
||||
|
||||
Contact
|
||||
-------
|
||||
|
||||
[@bkaradzic](https://twitter.com/bkaradzic)
|
||||
|
||||
Project page
|
||||
https://github.com/bkaradzic/bgfx
|
||||
|
||||
3rd Party Libraries
|
||||
-------------------
|
||||
|
||||
All required 3rd party libraries are included in bgfx repository in [3rdparty/](https://github.com/bkaradzic/bgfx/tree/master/3rdparty)
|
||||
directory.
|
||||
|
||||
### Blendish (MIT)
|
||||
|
||||
Blendish - Blender 2.5 UI based theming functions for NanoVG.
|
||||
|
||||
https://bitbucket.org/duangle/oui-blendish
|
||||
|
||||
### edtaa3 (MIT)
|
||||
|
||||
Contour Rendering by Distance Fields
|
||||
|
||||
https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2012%202D%20Shape%20Rendering%20by%20Distance%20Fields
|
||||
|
||||
### fcpp (BSD)
|
||||
|
||||
Frexx C preprocessor
|
||||
|
||||
https://github.com/bagder/fcpp
|
||||
|
||||
### Forsyth Triangle Order Optimizer (Public Domain)
|
||||
|
||||
http://gameangst.com/?p=9
|
||||
|
||||
### FreeType
|
||||
|
||||
http://www.freetype.org/
|
||||
|
||||
### glsl-optimizer (MIT)
|
||||
|
||||
GLSL optimizer based on Mesa's GLSL compiler. Used in Unity for mobile shader
|
||||
optimization.
|
||||
|
||||
https://github.com/aras-p/glsl-optimizer
|
||||
|
||||
### NanoVG (ZLIB)
|
||||
|
||||
NanoVG is small antialiased vector graphics rendering library.
|
||||
|
||||
https://github.com/memononen/nanovg
|
||||
|
||||
### ImGui (MIT)
|
||||
|
||||
Bloat-free Immediate Mode Graphical User interface for C++ with minimal
|
||||
dependencies.
|
||||
|
||||
https://github.com/ocornut/imgui
|
||||
|
||||
### SDF (MIT)
|
||||
|
||||
Sweep-and-update Euclidean distance transform of an antialised image for contour
|
||||
texturing.
|
||||
|
||||
https://github.com/memononen/SDF
|
||||
|
||||
### stb (Public Domain)
|
||||
|
||||
http://nothings.org
|
||||
|
||||
### Vertex Cache Optimised Index Buffer Compression (BSD)
|
||||
|
||||
https://github.com/ConorStokes/IndexBufferCompression
|
||||
|
||||
Assets
|
||||
------
|
||||
|
||||
Bunny
|
||||
[Stanford University Computer Graphics Laboratory](http://www-graphics.stanford.edu/data/3Dscanrep/)
|
||||
|
||||
Uffizi
|
||||
[Light Probe Image Gallery](http://www.pauldebevec.com/Probes/)
|
||||
|
||||
Wells
|
||||
[Bernhard Vogl Light probes](http://dativ.at/lightprobes/)
|
||||
|
||||
Pisa, Ennis, Grace
|
||||
[High-Resolution Light Probe Image Gallery](http://gl.ict.usc.edu/Data/HighResProbes/)
|
||||
|
||||
Droid Sans Font
|
||||
http://www.fontsquirrel.com/license/Droid-Sans
|
||||
|
||||
Bleeding Cowboys Font
|
||||
http://www.dafont.com/bleeding-cowboys.font
|
||||
|
||||
Cheap Fire Font
|
||||
http://www.dafont.com/cheap-fire.font
|
||||
|
||||
Five Minutes Font
|
||||
http://www.fonts2u.com/fiveminutes.font
|
||||
|
||||
Mias Scribblings Font
|
||||
http://www.dafont.com/mias-scribblings.font
|
||||
|
||||
Ruritania Font
|
||||
http://www.dafont.com/ruritania.font
|
||||
|
||||
Signika Font
|
||||
http://fontfabric.com/signika-font/
|
||||
|
||||
Visitor Font
|
||||
http://www.dafont.com/visitor.font
|
||||
|
||||
Special-Elite Font
|
||||
http://www.fontspace.com/astigmatic-one-eye-typographic-institute/special-elite
|
||||
|
||||
FontAwesome Font
|
||||
http://fontawesome.io/
|
||||
|
||||
Sherlock Holmes text
|
||||
http://www.gutenberg.org/ebooks/1661
|
||||
|
||||
Tree Pack 1
|
||||
http://www.turbosquid.com/3d-models/free-obj-mode-tree-pack/506851
|
||||
|
||||
Getting involved
|
||||
----------------
|
||||
|
||||
Everyone is welcome to contribute to bgfx by submitting bug reports, testing
|
||||
on different platforms, writing examples, improving documentation, profiling
|
||||
and optimizing, etc.
|
||||
|
||||
When contributing to the bgfx project you must agree to the BSD 2-clause
|
||||
licensing terms.
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
Garett Bass ([@gtbass](https://github.com/gtbass)) - OSX port.
|
||||
Jeremie Roy ([@jeremieroy](https://github.com/jeremieroy)) - Font system and
|
||||
examples.
|
||||
Miloš Tošić ([@milostosic](https://github.com/milostosic)) - 12-lod example.
|
||||
Dario Manesku ([@dariomanesku](https://github.com/dariomanesku)) - 13-stencil,
|
||||
14-shadowvolumes, 15-shadowmaps-simple, 16-shadowmaps, 18-ibl
|
||||
James Gray ([@james4k](https://github.com/james4k)) - Go language API bindings.
|
||||
Guillaume Piolat ([@p0nce](https://github.com/p0nce)) - D language API bindings.
|
||||
Mike Popoloski ([@MikePopoloski](https://github.com/MikePopoloski)) - C#/VB/F#
|
||||
language API bindings, WinRT/WinPhone support.
|
||||
Kai Jourdan ([@questor](https://github.com/questor)) - 23-vectordisplay example
|
||||
Stanlo Slasinski ([@stanlo](https://github.com/stanlo)) - 24-nbody example
|
||||
Daniel Collin ([@emoon](https://github.com/emoon)) - Port of Ocornut's ImGui
|
||||
to bgfx.
|
||||
Andre Weissflog ([@floooh](https://github.com/floooh)) - Alternative build
|
||||
system fips.
|
||||
Andrew Johnson ([@ajohnson23](https://github.com/ajohnson23)) - TeamCity build.
|
||||
Tony McCrary ([@enleeten](https://github.com/enleeten)] - Java language API
|
||||
bindings
|
||||
|
||||
[License (BSD 2-clause)](https://github.com/bkaradzic/bgfx/blob/master/LICENSE)
|
||||
-------------------------------------------------------------------------------
|
||||
[License (BSD 2-clause)](https://bkaradzic.github.io/bgfx/license.html)
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
Copyright 2010-2015 Branimir Karadzic. All rights reserved.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user