From d6c1f57f02b105d2d6ea1509f9cc25c179dcef9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= <branimirkaradzic@gmail.com> Date: Tue, 11 Aug 2015 22:06:37 -0700 Subject: [PATCH] Updated docs. --- README.md | 758 +----------------------------------------------------- 1 file changed, 2 insertions(+), 756 deletions(-) diff --git a/README.md b/README.md index f8fb4623..bef13546 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ [bgfx](https://github.com/bkaradzic/bgfx) - Cross-platform rendering library ============================================================================ -[Documentation](https://bkaradzic.github.io/bgfx/index.html) - What is it? ----------- @@ -87,757 +85,5 @@ 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 --------- - -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. - - - -### [01-cubes](https://github.com/bkaradzic/bgfx/blob/master/examples/01-cubes/cubes.cpp) - -Rendering simple static mesh. - - - -### [02-metaballs](https://github.com/bkaradzic/bgfx/blob/master/examples/02-metaballs) - -Rendering with transient buffers and embedding shaders. - - - -### [03-raymarch](https://github.com/bkaradzic/bgfx/blob/master/examples/03-raymarch) - -Updating shader uniforms. - - - -### [04-mesh](https://github.com/bkaradzic/bgfx/blob/master/examples/04-mesh) - -Loading meshes. - - - -### [05-instancing](https://github.com/bkaradzic/bgfx/blob/master/examples/05-instancing) - -Geometry instancing. - - - -### [06-bump](https://github.com/bkaradzic/bgfx/blob/master/examples/06-bump) - -Loading textures. - - - -### [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. - - - -### [10-font](https://github.com/bkaradzic/bgfx/tree/master/examples/10-font) - -Use the font system to display text and styled text. - - - -### [11-fontsdf](https://github.com/bkaradzic/bgfx/tree/master/examples/11-fontsdf) - -Use a single distance field font to render text of various size. - - - -### [12-lod](https://github.com/bkaradzic/bgfx/tree/master/examples/12-lod) - -Mesh LOD transitions. - - - -### [13-stencil](https://github.com/bkaradzic/bgfx/tree/master/examples/13-stencil) - -Stencil reflections and shadows. - - - -### [14-shadowvolumes](https://github.com/bkaradzic/bgfx/tree/master/examples/14-shadowvolumes) - -Shadow volumes. - - - -### [15-shadowmaps-simple](https://github.com/bkaradzic/bgfx/tree/master/examples/15-shadowmaps-simple) - - - -### [16-shadowmaps](https://github.com/bkaradzic/bgfx/tree/master/examples/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 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. - - - -### [19-oit](https://github.com/bkaradzic/bgfx/tree/master/examples/19-oit) - -Weighted, Blended Order-Independent Transparency - - - -### [20-nanovg](https://github.com/bkaradzic/bgfx/tree/master/examples/20-nanovg) - -NanoVG is small antialiased vector graphics rendering library. - - - -### [21-deferred](https://github.com/bkaradzic/bgfx/tree/master/examples/21-deferred) - -MRT rendering and deferred shading. - - - -### [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. - - - -### [24-nbody](https://github.com/bkaradzic/bgfx/tree/master/examples/24-nbody) - -N-body simulation with compute shaders using buffers. - - - -### [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) -------------------------------------------------------------------------------- - - Copyright 2010-2015 Branimir Karadzic. All rights reserved. - - https://github.com/bkaradzic/bgfx - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +[Documentation](https://bkaradzic.github.io/bgfx/index.html) +------------------------------------------------------------