Tools¶
Geometry Compiler (geometryc)¶
Converts Wavefront .obj, or glTF 2.0 mesh files to a format which is optimized for use with bgfx.
Usage:
geometryc -f <in> -o <out>
Supported input file formats:
Format
Description
.obj
Wavefront
.gltf
glTF 2.0
.glb
glTF 2.0
Options:
- -h, --help
Display this help and exit.
- -v, --version
Output version information and exit.
- -f <file path>
Input’s file path.
- -o <file path>
Output’s file path.
- -s, --scale <num>
Scale factor.
- --ccw
Front face is counter-clockwise winding order.
- --flipv
Flip texture coordinate V.
- --obb <num>
Number of steps for calculating oriented bounding box.Defaults to 17.Less steps = less precise OBB.More steps = slower calculation.- --packnormal <num>
Normal packing.0 - unpacked 12 bytes. (default)1 - packed 4 bytes.- --packuv <num>
Texture coordinate packing.0 - unpacked 8 bytes. (default)1 - packed 4 bytes.- --tangent
Calculate tangent vectors. (packing mode is the same as normal)
- --barycentric
Adds barycentric vertex attribute. (Packed in bgfx::Attrib::Color1)
- -c, --compress
Compress indices.
–[l/r]h-up+[y/z] Coordinate system. Defaults to ‘–lh-up+y’ — Left-Handed +Y is up.
Geometry Viewer (geometryv)¶
A geometry viewer.
Shader Compiler (shaderc)¶
Shader Compiler is used to compile bgfx’s cross-platform shader language, which based on GLSL. It uses an ANSI C pre-processor to transform the GLSL-like language into HLSL. This method has certain drawbacks, but overall it’s simple and allows for quick authoring of cross-platform shaders.
Some differences between bgfx’s shaderc flavor of GLSL and vanilla GLSL:
bool/int
uniforms are not allowed; all uniforms must befloat
.Attributes and varyings can only be accessed from
main()
.SAMPLER2D/3D/CUBE/etc.
macros replace thesampler2D/3D/Cube/etc.
tokens.vec2/3/4_splat(<value>)
replaces thevec2/3/4(<value>)
constructor.vec2/3/4
constructors with multiple values are still valid.mtxFromCols/mtxFromRows
must be used for constructing matrices.mul(x, y)
must be used when multiplying vectors with matrices.A
varying.def.sc
file must be used to define input/output semantics and types, instead of usingattribute/in
andvarying/in/out
. This file cannot include comments, and typically only one is necessary.$input/$output
tokens corresponding to inputs and outputs defined invarying.def.sc
must be used at the beginning of shader.
Defines¶
Shader Compiler also has the following default defines (default value is set to 0):
Define symbol
Description
Option
BX_PLATFORM_ANDROID
Android platform
--platform android
BX_PLATFORM_EMSCRIPTEN
Emscripten platform
--platform asm.js
BX_PLATFORM_IOS
iOS platform
--platform ios
BX_PLATFORM_LINUX
Linux platform
--platform linux
BX_PLATFORM_OSX
macOS platform
--platform osx
BX_PLATFORM_PS4
PlayStation 4 platform
--platform orbis
BX_PLATFORM_WINDOWS
Windows platform
--platform windows
BX_PLATFORM_XBOXONE
Not implemented
BGFX_SHADER_LANGUAGE_GLSL
GLSL profile
-p NNN
and-p NNN_es
BGFX_SHADER_LANGUAGE_HLSL
HLSL profile
-p s_N_N
BGFX_SHADER_LANGUAGE_METAL
Metal profile
-p metal
BGFX_SHADER_LANGUAGE_PSSL
PSSL profile
-p pssl
BGFX_SHADER_LANGUAGE_SPIRV
SPIR-V profile
-p spirv
and-p spirvNN-NN
BGFX_SHADER_TYPE_COMPUTE
Compute shader
--type compute
or--type c
BGFX_SHADER_TYPE_FRAGMENT
Fragment shader
--type fragment
or--type f
BGFX_SHADER_TYPE_VERTEX
Vertex shader
--type vertex
or--type v
Predefined Uniforms¶
Type
Name
Description
vec4
u_viewRect
View rectangle.u_viewRect.xy
- xy offset in screen space.u_viewRect.zw
- width/height size in screen space.vec4
u_viewTexel
Screen-to-texel space conversion.u_viewTexel.xy = 1.0/u_viewRect.zw;
mat4
u_view
Transform world-to-view space.
mat4
u_invView
Transform view-to-world space.
mat4
u_proj
Transform view-to-clip space.
mat4
u_invProj
Transform clip-to-view space.
mat4
u_viewProj
Transform world-to-clip space.
mat4
u_invViewProj
Transform clip-to-world space.
mat4[N]
u_model
Transform local-to-world space array.
mat4
u_modelView
Transform local-to-view space.
mat4
u_modelViewProj
Transform local-to-clip space.
float
u_alphaRef
The reference value to which incoming alphavalues are compared.
For more info, see the shader helper macros.
Vertex Shader Attributes¶
$input
tokens for vertex shader can be only following:
Attribute
bgfx::Attrib::Enum
a_position
Position
a_normal
Normal
a_tangent
Tangent
a_bitangent
Bitangent
a_color0
Color0
a_color1
Color1
a_color2
Color2
a_color3
Color3
a_indices
Indices
a_weight
Weight
a_texcoord0
TexCoord0
a_texcoord1
TexCoord1
a_texcoord2
TexCoord2
a_texcoord3
TexCoord3
a_texcoord4
TexCoord4
a_texcoord5
TexCoord5
a_texcoord6
TexCoord6
a_texcoord7
TexCoord7
In varying.def.sc
, instance buffer input must use i_dataN
as identifier where N
is the index
of the attribute in the buffer. Type must be vec4
, and the stride must be multiple of 16.
The semantic must be TEXCOORDN
with a decreasing index starting from TEXCOORD7
.
vec4 i_data0 : TEXCOORD7;
vec4 i_data1 : TEXCOORD6;
vec4 i_data2 : TEXCOORD5;
vec4 i_data3 : TEXCOORD4;
vec4 i_data4 : TEXCOORD3;
Options¶
Options:
- -h, --help
Display this help and exit.
- -v, --version
Output version information and exit.
- -f <file path>
Input’s file path.
- -i <include path>
Include path. (for multiple paths use -i multiple times)
- -o <file path>
Output’s file path.
- --bin2c <array name>
Generate C header file. If array name is not specified base file name will be used as name.
- --depends
Generate makefile style depends file.
- --platform <platform>
Target platform.
- -p, --profile <profile>
Shader model. Defaults to GLSL.
- --preprocess
Only pre-process.
- --define <defines>
Add defines to preprocessor. (semicolon separated)
- --raw
Do not process shader. No preprocessor, and no glsl-optimizer. (GLSL only)
- --type <type>
Shader type. Can be ‘vertex’, ‘fragment, or ‘compute’.
- --varyingdef <file path>
A varying.def.sc’s file path.
- --verbose
Be verbose.
(Vulkan, DirectX and Metal):
- --debug
Debug information.
(DirectX only):
- --disasm
Disassemble a compiled shader.
- -O <level>
Set optimization level. Can be 0–3.
- --Werror
Treat warnings as errors.
Building shaders¶
Shaders can be compiled for all renderers by using the shaderc
tool.
A Makefile to simplify building shaders is provided in the bgfx examples.
D3D shaders can be only compiled on Windows.
Texture Compiler (texturec)¶
Convert PNG, TGA, DDS, KTX, and PVR textures into bgfx-supported texture formats.
Usage:
texturec -f <in> -o <out> [-t <texture format>]
Supported file formats:
Format
In/Out
Description
.bmp
(input)
Windows Bitmap.
.dds
(input, output)
Direct Draw Surface.
.exr
(input, output)
OpenEXR.
.gif
(input)
Graphics Interchange Format.
.jpg
(input)
JPEG Interchange Format.
.hdr
(input, output)
Radiance RGBE.
.ktx
(input, output)
Khronos Texture.
.png
(input, output)
Portable Network Graphics.
.psd
(input)
Photoshop Document.
.pvr
(input)
PowerVR.
.tga
(input)
Truevision TGA.
Options:
- Options:
- -h, --help
Help.
- -v, --version
Version information only.
- -f <file path>
Input file path.
- -o <file path>
Output file path.
- -t <format>
Output format type (BC1/2/3/4/5, ETC1, PVR14, etc.).
- -q <quality>
Encoding quality (default, fastest, highest).
- -m, --mips
Generate mip-maps. –mipskip <N> Skip <N> number of mips.
- -n, --normalmap
Input texture is normal map. (Implies –linear)
- --equirect
Input texture is equirectangular projection of cubemap.
- --strip
Input texture is horizontal or vertical strip of cubemap.
- --sdf
Compute SDF texture.
- --ref <alpha>
Alpha reference value.
- --iqa
Image Quality Assessment
- --pma
Premultiply alpha into RGB channel.
- --linear
Input and output texture is linear color space (gamma correction won’t be applied).
- --max <max size>
Maximum width/height (image will be scaled down and aspect ratio will be preserved)
- --radiance <model>
Radiance cubemap filter. (Lighting model: Phong, PhongBrdf, Blinn, BlinnBrdf, GGX)
- --as <extension>
Save as.
- --formats
List all supported formats.
- --validate
DEBUG Validate that output image produced matches after loading.
Texture Viewer (texturev)¶
A texture viewer.