summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/examples/41-tess/isubd.sh
diff options
context:
space:
mode:
author Julian Sikorski <belegdol+github@gmail.com>2019-10-13 13:50:38 +0200
committer R. Belmont <rb6502@users.noreply.github.com>2019-10-13 07:50:38 -0400
commit0837e7451a84f95c29dbdb9bd6b8b931fee1635d (patch)
tree626bcbd250a7fbebdf5958a288d2f438d4f9fb5a /3rdparty/bgfx/examples/41-tess/isubd.sh
parentc913ccb59d713ce0b91135520719ac5385e54358 (diff)
WIP: sync bgfx, bx and bimg with latest upstream (#5723)
* Sync with bgfx upstream revision b91d0b6 * Sync with bx upstream revision d60912b * Sync with bimg upstream revision bd81f60 * Add astc-codec decoder * Rename VertexDecl to VertexLayout * Rename UniformType enum Int1 to Sampler. * Add NVN stub * Fix unused-const-variable error on macOS * Drop redundant explicit language parameters buildoptions_cpp are only applied to c++ files and buildoptions_objcpp are only applied to objective c++ files. As such, hardcoding -x offers no benefit while preventing overrides (such as one needed by 3rdparty/bgfx/src/renderer_vk.cpp on macOS) from working. * Re-introduce -x c++ in places where C code is compiled as C++ to prevent clang from throwing a warning * Build bgfx as Objective-C++ on macOS It is needed due to included headers * Enable Direct3D12 and Vulkan bgfx rendering backends * Enable building of spirv shaders * Properly escape /c in cmd call * Comment out dx12 bgfx renderer * Honor VERBOSE setting during shaders build * Only invert hlsl shader XYZ_TO_sRGB matrix for opengl * Add spirv shaders * OpenGL ES needs transposed matrix too * Metal needs transposed matrix as well
Diffstat (limited to '3rdparty/bgfx/examples/41-tess/isubd.sh')
-rw-r--r--3rdparty/bgfx/examples/41-tess/isubd.sh127
1 files changed, 127 insertions, 0 deletions
diff --git a/3rdparty/bgfx/examples/41-tess/isubd.sh b/3rdparty/bgfx/examples/41-tess/isubd.sh
new file mode 100644
index 00000000000..d022c2653b5
--- /dev/null
+++ b/3rdparty/bgfx/examples/41-tess/isubd.sh
@@ -0,0 +1,127 @@
+uint findMSB(uint x)
+{
+ uint i;
+ uint mask;
+ uint res = -1;
+
+ for (i = 0; i < 32; i++)
+ {
+ mask = 0x80000000 >> i;
+
+ if ((x & mask) != 0)
+ {
+ res = 31 - i;
+ break;
+ }
+ }
+
+ return res;
+}
+
+uint parentKey(in uint key)
+{
+ return (key >> 1u);
+}
+
+void childrenKeys(in uint key, out uint children[2])
+{
+ children[0] = (key << 1u) | 0u;
+ children[1] = (key << 1u) | 1u;
+}
+
+bool isRootKey(in uint key)
+{
+ return (key == 1u);
+}
+
+bool isLeafKey(in uint key)
+{
+ return findMSB(key) == 31;
+}
+
+bool isChildZeroKey(in uint key)
+{
+ return ((key & 1u) == 0u);
+}
+
+// barycentric interpolation
+vec3 berp(in vec3 v[3], in vec2 u)
+{
+ return v[0] + u.x * (v[1] - v[0]) + u.y * (v[2] - v[0]);
+}
+
+vec4 berp(in vec4 v[3], in vec2 u)
+{
+ return v[0] + u.x * (v[1] - v[0]) + u.y * (v[2] - v[0]);
+}
+
+// get xform from bit value
+mat3 bitToXform(in uint bit)
+{
+ float b = float(bit);
+ float c = 1.0f - b;
+
+ vec3 c1 = vec3(0.0f, c , b );
+ vec3 c2 = vec3(0.5f, b , 0.0f);
+ vec3 c3 = vec3(0.5f, 0.0f, c );
+
+ return mtxFromCols(c1, c2, c3);
+}
+
+// get xform from key
+mat3 keyToXform(in uint key)
+{
+ vec3 c1 = vec3(1.0f, 0.0f, 0.0f);
+ vec3 c2 = vec3(0.0f, 1.0f, 0.0f);
+ vec3 c3 = vec3(0.0f, 0.0f, 1.0f);
+
+ mat3 xf = mtxFromCols(c1, c2, c3);
+
+ while (key > 1u) {
+ xf = mul(xf, bitToXform(key & 1u));
+ key = key >> 1u;
+ }
+
+ return xf;
+}
+
+// get xform from key as well as xform from parent key
+mat3 keyToXform(in uint key, out mat3 xfp)
+{
+ xfp = keyToXform(parentKey(key));
+ return keyToXform(key);
+}
+
+// subdivision routine (vertex position only)
+void subd(in uint key, in vec4 v_in[3], out vec4 v_out[3])
+{
+ mat3 xf = keyToXform(key);
+
+ mat4x3 m = mtxFromRows(v_in[0], v_in[1], v_in[2]);
+
+ mat4x3 v = mul(xf, m);
+
+ v_out[0] = mtxGetRow(v, 0);
+ v_out[1] = mtxGetRow(v, 1);
+ v_out[2] = mtxGetRow(v, 2);
+}
+
+// subdivision routine (vertex position only)
+// also computes parent position
+void subd(in uint key, in vec4 v_in[3], out vec4 v_out[3], out vec4 v_out_p[3])
+{
+ mat3 xfp; mat3 xf = keyToXform(key, xfp);
+
+ mat4x3 m = mtxFromRows(v_in[0], v_in[1], v_in[2]);
+
+ mat4x3 v = mul(xf, m);
+ mat4x3 vp = mul(xfp, m);
+
+ v_out[0] = mtxGetRow(v, 0);
+ v_out[1] = mtxGetRow(v, 1);
+ v_out[2] = mtxGetRow(v, 2);
+
+ v_out_p[0] = mtxGetRow(vp, 0);
+ v_out_p[1] = mtxGetRow(vp, 1);
+ v_out_p[2] = mtxGetRow(vp, 2);
+}