diff --git a/build.gradle b/build.gradle index 51c48388f2..55b014e860 100644 --- a/build.gradle +++ b/build.gradle @@ -50,6 +50,10 @@ println "${deployment.type.name()} BUILD" enum Artifacts { CORE("lwjgl", true, "LWJGL", "The LWJGL core library."), + BGFX( + "lwjgl-bgfx", false, "LWJGL - bgfx bindings", + "A cross-platform, graphics API agnostic rendering library. It provides a high performance, low level abstraction for common platform graphics APIs like OpenGL, Direct3D and Apple Metal." + ), EGL( "lwjgl-egl", false, "LWJGL - EGL bindings", "An interface between Khronos rendering APIs such as OpenGL ES or OpenVG and the underlying native platform window system." diff --git a/build.xml b/build.xml index 02279db14a..1e362c8210 100644 --- a/build.xml +++ b/build.xml @@ -159,6 +159,7 @@ + @@ -253,6 +254,7 @@ + @@ -264,6 +266,7 @@ + @@ -389,11 +392,13 @@ + + @@ -472,6 +477,7 @@ + @@ -807,6 +813,13 @@ + + + + + + + diff --git a/config/build-assets.xml b/config/build-assets.xml index 4229e79a91..82b1018540 100644 --- a/config/build-assets.xml +++ b/config/build-assets.xml @@ -63,4 +63,4 @@ This script is included in /build.xml and depends on /build-definitions.xml - \ No newline at end of file + diff --git a/config/build-bindings.xml b/config/build-bindings.xml index 7be035739c..83e44385a8 100644 --- a/config/build-bindings.xml +++ b/config/build-bindings.xml @@ -12,6 +12,7 @@ This script is included in /config/build-definitions.xml. + diff --git a/doc/3rdparty/bgfx_license.txt b/doc/3rdparty/bgfx_license.txt new file mode 100644 index 0000000000..6877280556 --- /dev/null +++ b/doc/3rdparty/bgfx_license.txt @@ -0,0 +1,26 @@ +Copyright 2010-2016 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. + +https://github.com/bkaradzic/bgfx/blob/master/LICENSE diff --git a/modules/core/src/main/java/org/lwjgl/bgfx/BGFXUtil.java b/modules/core/src/main/java/org/lwjgl/bgfx/BGFXUtil.java new file mode 100644 index 0000000000..9b012969b0 --- /dev/null +++ b/modules/core/src/main/java/org/lwjgl/bgfx/BGFXUtil.java @@ -0,0 +1,116 @@ +/* + * Copyright LWJGL. All rights reserved. + * License terms: https://www.lwjgl.org/license + */ +package org.lwjgl.bgfx; + +import static org.lwjgl.bgfx.BGFX.*; + +/** bgfx utilities. */ +public final class BGFXUtil { + + private BGFXUtil() { + } + + public static long BGFX_STATE_ALPHA_REF(long _ref) { + return (_ref << BGFX_STATE_ALPHA_REF_SHIFT) & BGFX_STATE_ALPHA_REF_MASK; + } + + public static long BGFX_STATE_POINT_SIZE(long _size) { + return (_size << BGFX_STATE_POINT_SIZE_SHIFT) & BGFX_STATE_POINT_SIZE_MASK; + } + + public static long BGFX_STATE_BLEND_FUNC_SEPARATE(long _srcRGB, long _dstRGB, long _srcA, long _dstA) { + return ((_srcRGB | (_dstRGB << 4))) | ((_srcA | (_dstA << 4)) << 8); + } + + public static long BGFX_STATE_BLEND_EQUATION_SEPARATE(long _rgb, long _a) { + return _rgb | (_a << 3); + } + + public static long BGFX_STATE_BLEND_FUNC(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC_SEPARATE(_src, _dst, _src, _dst); + } + + public static long BGFX_STATE_BLEND_EQUATION(long _equation) { + return BGFX_STATE_BLEND_EQUATION_SEPARATE(_equation, _equation); + } + + public static long BGFX_STATE_BLEND_ADD(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE); + } + + public static long BGFX_STATE_BLEND_ALPHA(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA); + } + + public static long BGFX_STATE_BLEND_DARKEN(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) + | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_MIN); + } + + public static long BGFX_STATE_BLEND_LIGHTEN(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) + | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_MAX); + } + + public static long BGFX_STATE_BLEND_MULTIPLY(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_ZERO); + } + + public static long BGFX_STATE_BLEND_NORMAL(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_INV_SRC_ALPHA); + } + + public static long BGFX_STATE_BLEND_SCREEN(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_INV_SRC_COLOR); + } + + public static long BGFX_STATE_BLEND_LINEAR_BURN(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_DST_COLOR, BGFX_STATE_BLEND_INV_DST_COLOR) + | BGFX_STATE_BLEND_EQUATION(BGFX_STATE_BLEND_EQUATION_SUB); + } + + public static long BGFX_STATE_BLEND_FUNC_RT_x(long _src, long _dst) { + return (_src >> BGFX_STATE_BLEND_SHIFT) | ((_dst >> BGFX_STATE_BLEND_SHIFT) << 4); + } + + public static long BGFX_STATE_BLEND_FUNC_RT_xE(long _src, long _dst, long _equation) { + return BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) | ((_equation >> BGFX_STATE_BLEND_EQUATION_SHIFT) << 8); + } + + public static long BGFX_STATE_BLEND_FUNC_RT_1(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) << 0; + } + + public static long BGFX_STATE_BLEND_FUNC_RT_2(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) << 11; + } + + public static long BGFX_STATE_BLEND_FUNC_RT_3(long _src, long _dst) { + return BGFX_STATE_BLEND_FUNC_RT_x(_src, _dst) << 22; + } + + public static long BGFX_STATE_BLEND_FUNC_RT_1E(long _src, long _dst, long _equation) { + return BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation) << 0; + } + public static long BGFX_STATE_BLEND_FUNC_RT_2E(long _src, long _dst, long _equation) { + return BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation) << 11; + } + public static long BGFX_STATE_BLEND_FUNC_RT_3E(long _src, long _dst, long _equation) { + return BGFX_STATE_BLEND_FUNC_RT_xE(_src, _dst, _equation) << 22; + } + + public static int BGFX_STENCIL_FUNC_REF(int _ref) { + return (_ref << BGFX_STENCIL_FUNC_REF_SHIFT) & BGFX_STENCIL_FUNC_REF_MASK; + } + + public static int BGFX_STENCIL_FUNC_RMASK(int _mask) { + return (_mask << BGFX_STENCIL_FUNC_RMASK_SHIFT) & BGFX_STENCIL_FUNC_RMASK_MASK; + } + + public static int BGFX_TEXTURE_BORDER_COLOR(int _index) { + return (_index << BGFX_TEXTURE_BORDER_COLOR_SHIFT) & BGFX_TEXTURE_BORDER_COLOR_MASK; + } + +} diff --git a/modules/core/src/main/java/org/lwjgl/system/Configuration.java b/modules/core/src/main/java/org/lwjgl/system/Configuration.java index 94f6fe9ac2..5d28d339d9 100644 --- a/modules/core/src/main/java/org/lwjgl/system/Configuration.java +++ b/modules/core/src/main/java/org/lwjgl/system/Configuration.java @@ -212,6 +212,11 @@ public class Configuration { */ public static final Configuration DEBUG_FUNCTIONS = new Configuration<>("org.lwjgl.util.DebugFunctions", StateInit.BOOLEAN); + // -- BGFX + + /** Similar to {@link #LIBRARY_NAME} for the BGFX library (org.lwjgl.bgfx.libname). */ + public static final Configuration BGFX_LIBRARY_NAME = new Configuration<>("org.lwjgl.bgfx.libname", StateInit.STRING); + // -- EGL /** diff --git a/modules/core/src/test/java/org/lwjgl/demo/bgfx/HelloBGFX.java b/modules/core/src/test/java/org/lwjgl/demo/bgfx/HelloBGFX.java new file mode 100644 index 0000000000..06213dd11e --- /dev/null +++ b/modules/core/src/test/java/org/lwjgl/demo/bgfx/HelloBGFX.java @@ -0,0 +1,126 @@ +/* + * Copyright LWJGL. All rights reserved. + * License terms: https://www.lwjgl.org/license + */ +package org.lwjgl.demo.bgfx; + +import org.lwjgl.bgfx.BGFXPlatformData; +import org.lwjgl.glfw.GLFWNativeCocoa; +import org.lwjgl.glfw.GLFWNativeWin32; +import org.lwjgl.glfw.GLFWNativeX11; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.Platform; + +import java.nio.ByteBuffer; + +import static org.lwjgl.bgfx.BGFX.*; +import static org.lwjgl.glfw.GLFW.*; +import static org.lwjgl.system.MemoryUtil.*; + +/** + * bgfx demo: 25-C99 + * + *

This demo is a Java port of + * https://github.com/bkaradzic/bgfx/tree/master/examples/25-c99.

+ */ +public final class HelloBGFX { + + private HelloBGFX() {} + + @SuppressWarnings("UnnecessaryLocalVariable") + public static void main(String[] args) { + + int renderer = BGFX_RENDERER_TYPE_COUNT; + int pciId = BGFX_PCI_ID_NONE; + int width = 1280; + int height = 720; + int debug = BGFX_DEBUG_TEXT; + int reset = BGFX_RESET_VSYNC; + + if ( !glfwInit() ) { + throw new RuntimeException("Error initializing GLFW"); + } + + // the client (renderer) API is managed by bgfx + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + + long window = glfwCreateWindow(width, height, "25-C99", 0, 0); + + if ( window == 0 ) { + throw new RuntimeException("Error creating GLFW window"); + } + + try ( MemoryStack stack = MemoryStack.stackPush() ) { + BGFXPlatformData platformData = BGFXPlatformData.callocStack(stack); + + switch ( Platform.get() ) { + case LINUX: + platformData.ndt(GLFWNativeX11.glfwGetX11Display()); + platformData.nwh(GLFWNativeX11.glfwGetX11Window(window)); + break; + case MACOSX: + platformData.ndt(NULL); + platformData.nwh(GLFWNativeCocoa.glfwGetCocoaWindow(window)); + break; + case WINDOWS: + platformData.ndt(NULL); + platformData.nwh(GLFWNativeWin32.glfwGetWin32Window(window)); + break; + } + + platformData.context(NULL); + platformData.backBuffer(NULL); + platformData.backBufferDS(NULL); + + bgfx_set_platform_data(platformData); + } + + if ( !bgfx_init(renderer, pciId, 0, null, null) ) { + throw new RuntimeException("Error initializing bgfx renderer"); + } + + bgfx_reset(width, height, reset); + + bgfx_set_debug(debug); + + bgfx_set_view_clear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0); + + ByteBuffer logo = Logo.createLogo(); + + while ( !glfwWindowShouldClose(window) ) { + + glfwPollEvents(); + + bgfx_set_view_rect(0, 0, 0, width, height); + + bgfx_touch(0); + + bgfx_dbg_text_clear(0, false); + + bgfx_dbg_text_image(Math.max(width / 2 / 8, 20) - 20, + Math.max(height / 2 / 16, 6) - 6, + 40, + 12, + logo, + 160); + + bgfx_dbg_text_printf(0, + 1, + 0x4f, + "bgfx/examples/25-c99"); + + bgfx_dbg_text_printf(0, + 2, + 0x6f, + "Description: Initialization and debug text with C99 API."); + + bgfx_frame(false); + } + + bgfx_shutdown(); + + glfwDestroyWindow(window); + glfwTerminate(); + } + +} diff --git a/modules/core/src/test/java/org/lwjgl/demo/bgfx/Logo.java b/modules/core/src/test/java/org/lwjgl/demo/bgfx/Logo.java new file mode 100644 index 0000000000..0dd72bc302 --- /dev/null +++ b/modules/core/src/test/java/org/lwjgl/demo/bgfx/Logo.java @@ -0,0 +1,285 @@ +/* + * Copyright LWJGL. All rights reserved. + * License terms: https://www.lwjgl.org/license + */ +package org.lwjgl.demo.bgfx; + +import org.lwjgl.BufferUtils; + +import java.nio.ByteBuffer; + +/** + * Logo used by bgfx examples. + * + *

Java port of + * https://github.com/bkaradzic/bgfx/blob/master/examples/00-helloworld/logo.h.

+ */ +final class Logo { + + static ByteBuffer createLogo() { + + ByteBuffer logo = BufferUtils.createByteBuffer(rawData.length); + + for (int b : rawData) { + logo.put((byte) b); + } + + logo.flip(); + + return logo; + } + + private static final int[] rawData = { + 0xdc, 0x03, 0xdc, 0x03, 0xdc, 0x03, 0xdc, 0x03, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // ........ . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xdc, 0x08, // . . . . . . ... + 0xdc, 0x03, 0xdc, 0x07, 0xdc, 0x07, 0xdc, 0x08, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // ........ . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0xde, 0x03, 0xb0, 0x3b, 0xb1, 0x3b, 0xb2, 0x3b, 0xdb, 0x3b, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // ...;.;.;.; . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xdc, 0x03, 0xb1, 0x3b, 0xb2, 0x3b, // . . . . ....;.; + 0xdb, 0x3b, 0xdf, 0x03, 0xdf, 0x3b, 0xb2, 0x3f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // .;...;.? . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0xb1, 0x3b, 0xb1, 0x3b, 0xb2, 0x3b, 0xb2, 0x3f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // ..;.;.;.? . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xb1, 0x3b, 0xb1, 0x3b, 0xb2, 0x3b, // . . . . ..;.;.; + 0xb2, 0x3f, 0x20, 0x0f, 0x20, 0x0f, 0xdf, 0x03, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // .? . ... . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0xb1, 0x3b, 0xb1, 0x3b, 0xb1, 0x3b, 0xb1, 0x3f, 0xdc, 0x0b, 0xdc, 0x03, 0xdc, 0x03, // ..;.;.;.?...... + 0xdc, 0x03, 0xdc, 0x03, 0x20, 0x0f, 0x20, 0x0f, 0xdc, 0x08, 0xdc, 0x03, 0xdc, 0x03, 0xdc, 0x03, // .... . ......... + 0xdc, 0x03, 0xdc, 0x03, 0xdc, 0x03, 0xdc, 0x08, 0x20, 0x0f, 0xb1, 0x3b, 0xb1, 0x3b, 0xb1, 0x3b, // ........ ..;.;.; + 0xb1, 0x3f, 0xb1, 0x3f, 0xb2, 0x0b, 0x20, 0x0f, 0x20, 0x0f, 0xdc, 0x03, 0xdc, 0x03, 0xdc, 0x03, // .?.?.. . ....... + 0x20, 0x0f, 0x20, 0x0f, 0xdc, 0x03, 0xdc, 0x03, 0xdc, 0x03, 0x20, 0x0f, 0x20, 0x01, 0x20, 0x0f, // . ....... . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0xb2, 0x3b, 0xb1, 0x3b, 0xb0, 0x3b, 0xb0, 0x3f, 0x20, 0x0f, 0xde, 0x03, 0xb0, 0x3f, // ..;.;.;.? ....? + 0xb1, 0x3f, 0xb2, 0x3f, 0xdd, 0x03, 0xde, 0x03, 0xdb, 0x03, 0xdb, 0x03, 0xb2, 0x3f, 0x20, 0x0f, // .?.?.........? . + 0x20, 0x0f, 0xb0, 0x3f, 0xb1, 0x3f, 0xb2, 0x3f, 0xde, 0x38, 0xb2, 0x3b, 0xb1, 0x3b, 0xb0, 0x3b, // ..?.?.?.8.;.;.; + 0xb0, 0x3f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xb0, 0x3b, 0xb1, 0x3b, 0xb2, 0x3b, 0xb2, 0x3f, // .? . . ..;.;.;.? + 0xdd, 0x03, 0xde, 0x03, 0xb0, 0x3f, 0xb1, 0x3f, 0xb2, 0x3f, 0xdd, 0x03, 0x20, 0x01, 0x20, 0x0f, // .....?.?.?.. . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0xb2, 0x3b, 0xb1, 0x3b, 0xb0, 0x3b, 0xb0, 0x3f, 0x20, 0x0f, 0x20, 0x0f, 0xdb, 0x03, // ..;.;.;.? . ... + 0xb0, 0x3f, 0xb1, 0x3f, 0xdd, 0x03, 0xb1, 0x3b, 0xb0, 0x3b, 0xdb, 0x03, 0xb1, 0x3f, 0x20, 0x0f, // .?.?...;.;...? . + 0x20, 0x0f, 0x20, 0x3f, 0xb0, 0x3f, 0xb1, 0x3f, 0xb0, 0x3b, 0xb2, 0x3b, 0xb1, 0x3b, 0xb0, 0x3b, // . ?.?.?.;.;.;.; + 0xb0, 0x3f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xdc, 0x08, 0xdc, 0x3b, 0xb1, 0x3b, 0xb1, 0x3f, // .? . . ....;.;.? + 0xb1, 0x3b, 0xb0, 0x3b, 0xb2, 0x3b, 0xb0, 0x3f, 0xdc, 0x03, 0x20, 0x0f, 0x20, 0x01, 0x20, 0x0f, // .;.;.;.?.. . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0xb2, 0x3b, 0xb1, 0x3b, 0xb0, 0x3b, 0xb0, 0x3f, 0xdc, 0x0b, 0xdc, 0x07, 0xdb, 0x03, // ..;.;.;.?...... + 0xdb, 0x03, 0xdc, 0x38, 0x20, 0x0f, 0xdf, 0x03, 0xb1, 0x3b, 0xb0, 0x3b, 0xb0, 0x3f, 0xdc, 0x03, // ...8 ....;.;.?.. + 0xdc, 0x07, 0xb0, 0x3f, 0xb1, 0x3f, 0xb2, 0x3f, 0xdd, 0x3b, 0xb2, 0x3b, 0xb1, 0x3b, 0xdc, 0x78, // ...?.?.?.;.;.;.x + 0xdf, 0x08, 0x20, 0x0f, 0x20, 0x0f, 0xde, 0x08, 0xb2, 0x3b, 0xb1, 0x3b, 0xb0, 0x3b, 0xb0, 0x3f, // .. . ....;.;.;.? + 0x20, 0x0f, 0xdf, 0x03, 0xb1, 0x3b, 0xb2, 0x3b, 0xdb, 0x03, 0xdd, 0x03, 0x20, 0x01, 0x20, 0x0f, // ....;.;.... . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xdc, 0x08, 0xdc, 0x08, 0xdc, 0x08, 0x20, 0x0f, // . . . ....... . + 0x20, 0x0f, 0xb0, 0x3f, 0xb0, 0x3f, 0xb1, 0x3f, 0xdd, 0x3b, 0xdb, 0x0b, 0xdf, 0x03, 0x20, 0x0f, // ..?.?.?.;.... . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xdf, 0x08, 0xdf, 0x03, 0xdf, 0x03, 0xdf, 0x08, // . . . ......... + 0x20, 0x0f, 0x20, 0x0f, 0xdf, 0x08, 0xdf, 0x03, 0xdf, 0x03, 0x20, 0x0f, 0x20, 0x01, 0x20, 0x0f, // . ....... . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0xdb, 0x08, 0xb2, 0x38, 0xb1, 0x38, 0xdc, 0x03, // . . . ....8.8.. + 0xdc, 0x07, 0xb0, 0x3b, 0xb1, 0x3b, 0xdf, 0x3b, 0xdf, 0x08, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // ...;.;.;.. . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, // . . . . . . . . + 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0b, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x2d, 0x08, 0x3d, 0x08, 0x20, 0x0a, 0x43, 0x0b, 0x72, 0x0b, 0x6f, 0x0b, 0x73, 0x0b, 0x73, 0x0b, // -.=. .C.r.o.s.s. + 0x2d, 0x0b, 0x70, 0x0b, 0x6c, 0x0b, 0x61, 0x0b, 0x74, 0x0b, 0x66, 0x0b, 0x6f, 0x0b, 0x72, 0x0b, // -.p.l.a.t.f.o.r. + 0x6d, 0x0b, 0x20, 0x0b, 0x72, 0x0b, 0x65, 0x0b, 0x6e, 0x0b, 0x64, 0x0b, 0x65, 0x0b, 0x72, 0x0b, // m. .r.e.n.d.e.r. + 0x69, 0x0b, 0x6e, 0x0b, 0x67, 0x0b, 0x20, 0x0b, 0x6c, 0x0b, 0x69, 0x0b, 0x62, 0x0b, 0x72, 0x0b, // i.n.g. .l.i.b.r. + 0x61, 0x0b, 0x72, 0x0b, 0x79, 0x0b, 0x20, 0x0f, 0x3d, 0x08, 0x2d, 0x08, 0x20, 0x01, 0x20, 0x0f, // a.r.y. .=.-. . . + 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, // . . . . . . . . + 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, // . . . . . . . . + 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, // . . . . . . . . + 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, // . . . . . . . . + 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x0a, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, 0x20, 0x0f, // . . . . . . . . + }; + +} diff --git a/modules/generator/src/main/kotlin/org/lwjgl/generator/Generator.kt b/modules/generator/src/main/kotlin/org/lwjgl/generator/Generator.kt index 679b1e5c8c..dc25d7665a 100644 --- a/modules/generator/src/main/kotlin/org/lwjgl/generator/Generator.kt +++ b/modules/generator/src/main/kotlin/org/lwjgl/generator/Generator.kt @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicInteger */ enum class Binding(val key: String, val packageName: String) { + BGFX("binding.bgfx", "org.lwjgl.bgfx"), EGL("binding.egl", "org.lwjgl.egl"), GLFW("binding.glfw", "org.lwjgl.glfw"), JAWT("binding.jawt", "org.lwjgl.system.jawt"), diff --git a/modules/templates/src/main/kotlin/org/lwjgl/bgfx/BGFXTypes.kt b/modules/templates/src/main/kotlin/org/lwjgl/bgfx/BGFXTypes.kt new file mode 100644 index 0000000000..c735eeb1a8 --- /dev/null +++ b/modules/templates/src/main/kotlin/org/lwjgl/bgfx/BGFXTypes.kt @@ -0,0 +1,455 @@ +/* + * Copyright LWJGL. All rights reserved. + * License terms: https://www.lwjgl.org/license + */ +package org.lwjgl.bgfx + +import org.lwjgl.generator.* + +val BGFX_PACKAGE = "org.lwjgl.bgfx" + +fun config() { + packageInfo( + BGFX_PACKAGE, + """ + Contains bindings to the bgfx library. + + The bgfx documentation can be found online here. The API reference is available + here. + + The bgfx library is very customizable and can be tailored to specific needs. For this reason, the {@code lwjgl-bgfx} artifact does not include any + prebuilt native libraries. + + To compile your own version, follow the build instructions for Windows, Linux and MacOS. + Please ensure to use the {@code --with-shared-lib} configuration to create a shared library. Just copy the compiled library found in + {@code /.build//bin/} to the classpath of your LWJGL application. + + By default, lwjgl-bgfx searches for bgfx[32].dll (Windows), libbgfx.so (Linux) or libbgfx.dylib (MacOS). This can be customized by defining + {@code org.lwjgl.bgfx.libname}. + """ + ) +} + +val BGFX_BINDING = simpleBinding("bgfx", """Configuration.BGFX_LIBRARY_NAME.get(Platform.mapLibraryNameBundled("bgfx"))""") + +val bgfx_renderer_type_t = "bgfx_renderer_type_t".enumType +val bgfx_access_t = "bgfx_access_t".enumType +val bgfx_attrib_t = "bgfx_attrib_t".enumType +val bgfx_attrib_type_t = "bgfx_attrib_type_t".enumType +val bgfx_texture_format_t = "bgfx_texture_format_t".enumType +val bgfx_uniform_type_t = "bgfx_uniform_type_t".enumType +val bgfx_backbuffer_ratio_t = "bgfx_backbuffer_ratio_t".enumType +val bgfx_occlusion_query_result_t = "bgfx_occlusion_query_result_t".enumType +val bgfx_topology_convert_t = "bgfx_topology_convert_t".enumType +val bgfx_topology_sort_t = "bgfx_topology_sort_t".enumType + +val bgfx_dynamic_index_buffer_handle_t = IntegerType("bgfx_dynamic_index_buffer_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_dynamic_vertex_buffer_handle_t = IntegerType("bgfx_dynamic_vertex_buffer_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_frame_buffer_handle_t = IntegerType("bgfx_frame_buffer_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_index_buffer_handle_t = IntegerType("bgfx_index_buffer_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_indirect_buffer_handle_t = IntegerType("bgfx_indirect_buffer_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_occlusion_query_handle_t = IntegerType("bgfx_occlusion_query_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_program_handle_t = IntegerType("bgfx_program_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_shader_handle_t = IntegerType("bgfx_shader_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_texture_handle_t = IntegerType("bgfx_texture_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_uniform_handle_t = IntegerType("bgfx_uniform_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_vertex_buffer_handle_t = IntegerType("bgfx_vertex_buffer_handle_t", PrimitiveMapping.SHORT, unsigned = true) +val bgfx_vertex_decl_handle_t = IntegerType("bgfx_vertex_decl_handle_t", PrimitiveMapping.SHORT, unsigned = true) + +val bgfx_release_fn_t = "bgfx_release_fn_t".callback( + BGFX_PACKAGE, void, "BGFXReleaseFunctionCallback", + "", + + void_p.IN("_ptr", ""), + nullable..void_p.IN("_userData", "") +) { + documentation = + """ + """ +} + +val bgfx_memory_t = struct_p(BGFX_PACKAGE, "BGFXMemory", nativeName = "bgfx_memory_t") { + documentation = + """ + """ + + uint8_t.p.member("data", "") + uint32_t.member("size", "") +} + +val bgfx_transform_t = struct_p(BGFX_PACKAGE, "BGFXTransform", nativeName = "bgfx_transform_t") { + documentation = + """ + """ + + float_p.member("data", "") + uint16_t.member("num", "") +} + +val bgfx_hmd_eye_t = struct(BGFX_PACKAGE, "BGFXHmdEye", nativeName = "bgfx_hmd_eye_t") { + documentation = + """ + """ + + float.array("rotation", "", 4) + float.array("translation", "", 3) + float.array("fov", "", 4) + float.array("viewOffset", "", 3) + float.array("projection", "", 16) + float.array("pixelsPerTanAngle", "", 2) +}.nativeType + +val bgfx_hmd_t = struct_p(BGFX_PACKAGE, "BGFXHmd", nativeName = "bgfx_hmd_t") { + documentation = + """ + """ + + bgfx_hmd_eye_t.array("eye", "", 2) + uint16_t.member("width", "") + uint16_t.member("height", "") + uint32_t.member("deviceWidth", "") + uint32_t.member("deviceHeight", "") + uint8_t.member("flags", "") +} + +val bgfx_stats_t = struct_p(BGFX_PACKAGE, "BGFXStats", nativeName = "bgfx_stats_t") { + documentation = + """ + """ + + uint64_t.member("cpuTimeBegin", "") + uint64_t.member("cpuTimeEnd", "") + uint64_t.member("cpuTimerFreq", "") + + uint64_t.member("gpuTimeBegin", "") + uint64_t.member("gpuTimeEnd", "") + uint64_t.member("gpuTimerFreq", "") + + int64_t.member("waitRender", "") + int64_t.member("waitSubmit", "") +} + +val bgfx_vertex_decl_t = struct_p(BGFX_PACKAGE, "BGFXVertexDecl", nativeName = "bgfx_vertex_decl_t") { + documentation = + """ + """ + + uint32_t.member("hash", "") + uint16_t.member("stride", "") + uint16_t.array("offset", "", 16) + uint16_t.array("attributes", "", 16) +} + +val bgfx_transient_index_buffer_t = struct_p(BGFX_PACKAGE, "BGFXTransientIndexBuffer", nativeName = "bgfx_transient_index_buffer_t") { + documentation = + """ + """ + + nullable..uint8_t.p.member("data", "") + uint32_t.member("size", "") + bgfx_index_buffer_handle_t.member("handle", "") + uint32_t.member("startIndex", "") +} + +val bgfx_transient_vertex_buffer_t = struct_p(BGFX_PACKAGE, "BGFXTransientVertexBuffer", nativeName = "bgfx_transient_vertex_buffer_t") { + documentation = + """ + """ + + nullable..uint8_t.p.member("data", "") + uint32_t.member("size", "") + uint32_t.member("startVertex", "") + uint16_t.member("stride", "") + bgfx_vertex_buffer_handle_t.member("handle", "") + bgfx_vertex_decl_handle_t.member("decl", "") +} + +val bgfx_instance_data_buffer_t = struct_p(BGFX_PACKAGE, "BGFXInstanceDataBuffer", nativeName = "bgfx_instance_data_buffer_t") { + documentation = + """ + """ + + uint8_t.p.member("data", "") + uint32_t.member("size", "") + uint32_t.member("offset", "") + uint32_t.member("num", "") + uint16_t.member("stride", "") + bgfx_vertex_buffer_handle_t.member("handle", "") +} + +val bgfx_texture_info_t = struct(BGFX_PACKAGE, "BGFXTextureInfo", nativeName = "bgfx_texture_info_t") { + documentation = + """ + """ + + bgfx_texture_format_t.member("format", "") + uint32_t.member("storageSize", "") + uint16_t.member("width", "") + uint16_t.member("height", "") + uint16_t.member("depth", "") + uint16_t.member("numLayers", "") + uint8_t.member("numMips", "") + uint8_t.member("bitsPerPixel", "") + bool.member("cubeMap", "") +}.nativeType + +val bgfx_attachment_t = struct_p(BGFX_PACKAGE, "BGFXAttachment", nativeName = "bgfx_attachment_t") { + documentation = + """ + """ + + bgfx_texture_handle_t.member("handle", "") + uint16_t.member("mip", "") + uint16_t.member("layer", "") +} + +val bgfx_caps_gpu_t = struct(BGFX_PACKAGE, "BGFXCapsGPU", nativeName = "bgfx_caps_gpu_t", mutable = false) { + documentation = + """ + """ + + uint16_t.member("vendorId", "") + uint16_t.member("deviceId", "") +}.nativeType + +val bgfx_caps_limits_t = struct(BGFX_PACKAGE, "BGFXCapsLimits", nativeName = "bgfx_caps_limits_t", mutable = false) { + documentation = + """ + """ + + uint32_t.member("maxDrawCalls", "") + uint32_t.member("maxBlits", "") + uint32_t.member("maxTextureSize", "") + uint32_t.member("maxViews", "") + uint32_t.member("maxFrameBuffers", "") + uint32_t.member("maxFBAttachments", "") + uint32_t.member("maxPrograms", "") + uint32_t.member("maxShaders", "") + uint32_t.member("maxTextures", "") + uint32_t.member("maxTextureSamplers", "") + uint32_t.member("maxVertexDecls", "") + uint32_t.member("maxVertexStreams", "") + uint32_t.member("maxIndexBuffers", "") + uint32_t.member("maxVertexBuffers", "") + uint32_t.member("maxDynamicIndexBuffers", "") + uint32_t.member("maxDynamicVertexBuffers", "") + uint32_t.member("maxUniforms", "") + uint32_t.member("maxOcclusionQueries", "") +}.nativeType + +val BGFX_TEXTURE_FORMATS_COUNT = 76 +val bgfx_caps_t = struct_p(BGFX_PACKAGE, "BGFXCaps", nativeName = "bgfx_caps_t", mutable = false) { + documentation = + """ + """ + + bgfx_renderer_type_t.member("rendererType", "") + + uint64_t.member("supported", "") + + uint16_t.member("vendorId", "") + uint16_t.member("deviceId", "") + bool.member("homogeneousDepth", "") + bool.member("originBottomLeft", "") + + bgfx_caps_gpu_t.array("gpu", "", 4) + bgfx_caps_limits_t.member("limits", "") + + uint16_t.array("formats", "", size = BGFX_TEXTURE_FORMATS_COUNT) +} + +val bgfx_fatal_t = "bgfx_fatal_t".enumType + +val fatal = "fatal".callback( + BGFX_PACKAGE, void, "BGFXFatalCallback", + "", + + voidptr.IN("_this", ""), + bgfx_fatal_t.IN("_code", ""), + NullTerminated..charUTF8_p.IN("_str", "") +) { + documentation = + """ + """ +} + +val trace_vargs = "trace_vargs".callback( + BGFX_PACKAGE, void, "BGFXTraceVarArgsCallback", + "", + + voidptr.IN("_this", ""), + NullTerminated..charUTF8_p.IN("_filePath", ""), + uint16_t.IN("_line", ""), + NullTerminated..charUTF8_p.IN("_format", ""), + va_list.IN("_argList", "") +) { + documentation = + """ + """ +} + +val cache_read_size = "cache_read_size".callback( + BGFX_PACKAGE, uint32_t, "BGFXCacheReadSizeCallback", + "", + + voidptr.IN("_this", ""), + uint64_t.IN("_id", "") +) { + documentation = + """ + """ +} + +val cache_read = "cache_read".callback( + BGFX_PACKAGE, void, "BGFXCacheReadCallback", + "", + + voidptr.IN("_this", ""), + uint64_t.IN("_id", ""), + void_p.IN("_data", ""), + uint32_t.IN("_size", "") +) { + documentation = + """ + """ +} + +val cache_write = "cache_write".callback( + BGFX_PACKAGE, void, "BGFXCacheWriteCallback", + "", + + voidptr.IN("_this", ""), + uint64_t.IN("_id", ""), + void_p.const_p.IN("_data", ""), + uint32_t.IN("_size", "") +) { + documentation = + """ + """ +} + +val screen_shot = "screen_shot".callback( + BGFX_PACKAGE, void, "BGFXScreenShotCallback", + "", + + voidptr.IN("_this", ""), + NullTerminated..charUTF8_p.IN("_filePath", ""), + uint32_t.IN("_width", ""), + uint32_t.IN("_height", ""), + uint32_t.IN("_pitch", ""), + void_p.const_p.IN("_data", ""), + uint32_t.IN("_size", ""), + bool.IN("_yflip", "") +) { + documentation = + """ + """ +} + +val capture_begin = "capture_begin".callback( + BGFX_PACKAGE, void, "BGFXCaptureBeginCallback", + "", + + voidptr.IN("_this", ""), + uint32_t.IN("_width", ""), + uint32_t.IN("_height", ""), + uint32_t.IN("_pitch", ""), + bgfx_texture_format_t.IN("_format", ""), + bool.IN("_yflip", "") +) { + documentation = + """ + """ +} + +val capture_end = "capture_end".callback( + BGFX_PACKAGE, void, "BGFXCaptureEndCallback", + "", + + voidptr.IN("_this", "") +) { + documentation = + """ + """ +} + +val capture_frame = "capture_frame".callback( + BGFX_PACKAGE, void, "BGFXCaptureFrameCallback", + "", + + voidptr.IN("_this", ""), + void_p.const_p.IN("_data", ""), + uint32_t.IN("_size", "") +) { + documentation = + """ + """ +} + +val bgfx_callback_vtbl_t = struct(BGFX_PACKAGE, "BGFXCallbackVtbl", nativeName = "bgfx_callback_vtbl_t") { + documentation = + """ + """ + + fatal.member("fatal", "") + trace_vargs.member("trace_vargs", "") + cache_read_size.member("cache_read_size", "") + cache_read.member("cache_read", "") + cache_write.member("cache_write", "") + screen_shot.member("screen_shot", "") + capture_begin.member("capture_begin", "") + capture_end.member("capture_end", "") + capture_frame.member("capture_frame", "") +}.nativeType + +val bgfx_callback_interface_t = struct_p(BGFX_PACKAGE, "BGFXCallbackInterface", nativeName = "bgfx_callback_interface_t") { + documentation = + """ + """ + + bgfx_callback_vtbl_t.const_p.member("vtbl", "") +} + +val realloc = "realloc".callback( + BGFX_PACKAGE, void_p, "BGFXReallocCallback", + "", + + voidptr.IN("_this", ""), + nullable..void_p.IN("_ptr", ""), + size_t.IN("_size", ""), + size_t.IN("_align", ""), + NullTerminated..charUTF8_p.IN("_file", ""), + uint32_t.IN("_line", "") +) { + documentation = + """ + """ +} + +val bgfx_allocator_vtbl_t = struct(BGFX_PACKAGE, "BGFXAllocatorVtbl", nativeName = "bgfx_allocator_vtbl_t") { + documentation = + """ + """ + + realloc.member("realloc", "") +}.nativeType + +val bgfx_allocator_interface_t = struct_p(BGFX_PACKAGE, "BGFXAllocatorInterface", nativeName = "bgfx_allocator_interface_t") { + documentation = + """ + """ + + bgfx_allocator_vtbl_t.const_p.member("vtbl", "") +} + +val bgfx_platform_data_t = struct_p(BGFX_PACKAGE, "BGFXPlatformData", nativeName = "bgfx_platform_data_t") { + documentation = + """ + """ + + nullable..voidptr.member("ndt", "") + nullable..voidptr.member("nwh", "") + nullable..voidptr.member("context", "") + nullable..voidptr.member("backBuffer", "") + nullable..voidptr.member("backBufferDS", "") +} \ No newline at end of file diff --git a/modules/templates/src/main/kotlin/org/lwjgl/bgfx/templates/BGFX.kt b/modules/templates/src/main/kotlin/org/lwjgl/bgfx/templates/BGFX.kt new file mode 100644 index 0000000000..b8ed83577b --- /dev/null +++ b/modules/templates/src/main/kotlin/org/lwjgl/bgfx/templates/BGFX.kt @@ -0,0 +1,2043 @@ +/* + * Copyright LWJGL. All rights reserved. + * License terms: https://www.lwjgl.org/license + */ +package org.lwjgl.bgfx.templates + +import org.lwjgl.bgfx.* +import org.lwjgl.generator.* + +val BGFX = "BGFX".nativeClass(packageName = BGFX_PACKAGE, prefixMethod = "bgfx_", binding = BGFX_BINDING) { + documentation = + """ + Native bindings to the bgfx library. + """ + + IntConstant( + "API version", + + "BGFX_API_VERSION".."22" + ) + + LongConstant( + "State", + + "BGFX_STATE_RGB_WRITE".."0x0000000000000001L", + "BGFX_STATE_ALPHA_WRITE".."0x0000000000000002L", + "BGFX_STATE_DEPTH_WRITE".."0x0000000000000004L", + + "BGFX_STATE_DEPTH_TEST_LESS".."0x0000000000000010L", + "BGFX_STATE_DEPTH_TEST_LEQUAL".."0x0000000000000020L", + "BGFX_STATE_DEPTH_TEST_EQUAL".."0x0000000000000030L", + "BGFX_STATE_DEPTH_TEST_GEQUAL".."0x0000000000000040L", + "BGFX_STATE_DEPTH_TEST_GREATER".."0x0000000000000050L", + "BGFX_STATE_DEPTH_TEST_NOTEQUAL".."0x0000000000000060L", + "BGFX_STATE_DEPTH_TEST_NEVER".."0x0000000000000070L", + "BGFX_STATE_DEPTH_TEST_ALWAYS".."0x0000000000000080L", + + "BGFX_STATE_DEPTH_TEST_SHIFT".."4", + "BGFX_STATE_DEPTH_TEST_MASK".."0x00000000000000f0L", + + "BGFX_STATE_BLEND_ZERO".."0x0000000000001000L", + "BGFX_STATE_BLEND_ONE".."0x0000000000002000L", + "BGFX_STATE_BLEND_SRC_COLOR".."0x0000000000003000L", + "BGFX_STATE_BLEND_INV_SRC_COLOR".."0x0000000000004000L", + "BGFX_STATE_BLEND_SRC_ALPHA".."0x0000000000005000L", + "BGFX_STATE_BLEND_INV_SRC_ALPHA".."0x0000000000006000L", + "BGFX_STATE_BLEND_DST_ALPHA".."0x0000000000007000L", + "BGFX_STATE_BLEND_INV_DST_ALPHA".."0x0000000000008000L", + "BGFX_STATE_BLEND_DST_COLOR".."0x0000000000009000L", + "BGFX_STATE_BLEND_INV_DST_COLOR".."0x000000000000a000L", + "BGFX_STATE_BLEND_SRC_ALPHA_SAT".."0x000000000000b000L", + "BGFX_STATE_BLEND_FACTOR".."0x000000000000c000L", + "BGFX_STATE_BLEND_INV_FACTOR".."0x000000000000d000L", + "BGFX_STATE_BLEND_SHIFT".."12", + "BGFX_STATE_BLEND_MASK".."0x000000000ffff000L", + + "BGFX_STATE_BLEND_EQUATION_ADD".."0x0000000000000000L", + "BGFX_STATE_BLEND_EQUATION_SUB".."0x0000000010000000L", + "BGFX_STATE_BLEND_EQUATION_REVSUB".."0x0000000020000000L", + "BGFX_STATE_BLEND_EQUATION_MIN".."0x0000000030000000L", + "BGFX_STATE_BLEND_EQUATION_MAX".."0x0000000040000000L", + "BGFX_STATE_BLEND_EQUATION_SHIFT".."28", + "BGFX_STATE_BLEND_EQUATION_MASK".."0x00000003f0000000L", + + "BGFX_STATE_BLEND_INDEPENDENT".."0x0000000400000000L", + "BGFX_STATE_BLEND_ALPHA_TO_COVERAGE".."0x0000000800000000L", + + "BGFX_STATE_CULL_CW".."0x0000001000000000L", + "BGFX_STATE_CULL_CCW".."0x0000002000000000L", + "BGFX_STATE_CULL_SHIFT".."36", + "BGFX_STATE_CULL_MASK".."0x0000003000000000L", + + "BGFX_STATE_ALPHA_REF_SHIFT".."40", + "BGFX_STATE_ALPHA_REF_MASK".."0x0000ff0000000000L", + + "BGFX_STATE_PT_TRISTRIP".."0x0001000000000000L", + "BGFX_STATE_PT_LINES".."0x0002000000000000L", + "BGFX_STATE_PT_LINESTRIP".."0x0003000000000000L", + "BGFX_STATE_PT_POINTS".."0x0004000000000000L", + "BGFX_STATE_PT_SHIFT".."48", + "BGFX_STATE_PT_MASK".."0x0007000000000000L", + + "BGFX_STATE_POINT_SIZE_SHIFT".."52", + "BGFX_STATE_POINT_SIZE_MASK".."0x00f0000000000000L", + + "BGFX_STATE_MSAA".."0x0100000000000000L", + "BGFX_STATE_LINEAA".."0x0200000000000000L", + "BGFX_STATE_CONSERVATIVE_RASTER".."0x0400000000000000L", + + "BGFX_STATE_RESERVED_SHIFT".."61", + "BGFX_STATE_RESERVED_MASK".."0xe000000000000000L", + + "BGFX_STATE_NONE".."0x0000000000000000L", + "BGFX_STATE_MASK".."0xffffffffffffffffL", + + "BGFX_STATE_DEFAULT".."""(0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_CULL_CW + | BGFX_STATE_MSAA) + """ + ) + + IntConstant( + "Stencil", + + "BGFX_STENCIL_FUNC_REF_SHIFT".."0", + "BGFX_STENCIL_FUNC_REF_MASK".."0x000000ff", + "BGFX_STENCIL_FUNC_RMASK_SHIFT".."8", + "BGFX_STENCIL_FUNC_RMASK_MASK".."0x0000ff00", + + "BGFX_STENCIL_TEST_LESS".."0x00010000", + "BGFX_STENCIL_TEST_LEQUAL".."0x00020000", + "BGFX_STENCIL_TEST_EQUAL".."0x00030000", + "BGFX_STENCIL_TEST_GEQUAL".."0x00040000", + "BGFX_STENCIL_TEST_GREATER".."0x00050000", + "BGFX_STENCIL_TEST_NOTEQUAL".."0x00060000", + "BGFX_STENCIL_TEST_NEVER".."0x00070000", + "BGFX_STENCIL_TEST_ALWAYS".."0x00080000", + "BGFX_STENCIL_TEST_SHIFT".."16", + "BGFX_STENCIL_TEST_MASK".."0x000f0000", + + "BGFX_STENCIL_OP_FAIL_S_ZERO".."0x00000000", + "BGFX_STENCIL_OP_FAIL_S_KEEP".."0x00100000", + "BGFX_STENCIL_OP_FAIL_S_REPLACE".."0x00200000", + "BGFX_STENCIL_OP_FAIL_S_INCR".."0x00300000", + "BGFX_STENCIL_OP_FAIL_S_INCRSAT".."0x00400000", + "BGFX_STENCIL_OP_FAIL_S_DECR".."0x00500000", + "BGFX_STENCIL_OP_FAIL_S_DECRSAT".."0x00600000", + "BGFX_STENCIL_OP_FAIL_S_INVERT".."0x00700000", + "BGFX_STENCIL_OP_FAIL_S_SHIFT".."20", + "BGFX_STENCIL_OP_FAIL_S_MASK".."0x00f00000", + + "BGFX_STENCIL_OP_FAIL_Z_ZERO".."0x00000000", + "BGFX_STENCIL_OP_FAIL_Z_KEEP".."0x01000000", + "BGFX_STENCIL_OP_FAIL_Z_REPLACE".."0x02000000", + "BGFX_STENCIL_OP_FAIL_Z_INCR".."0x03000000", + "BGFX_STENCIL_OP_FAIL_Z_INCRSAT".."0x04000000", + "BGFX_STENCIL_OP_FAIL_Z_DECR".."0x05000000", + "BGFX_STENCIL_OP_FAIL_Z_DECRSAT".."0x06000000", + "BGFX_STENCIL_OP_FAIL_Z_INVERT".."0x07000000", + "BGFX_STENCIL_OP_FAIL_Z_SHIFT".."24", + "BGFX_STENCIL_OP_FAIL_Z_MASK".."0x0f000000", + + "BGFX_STENCIL_OP_PASS_Z_ZERO".."0x00000000", + "BGFX_STENCIL_OP_PASS_Z_KEEP".."0x10000000", + "BGFX_STENCIL_OP_PASS_Z_REPLACE".."0x20000000", + "BGFX_STENCIL_OP_PASS_Z_INCR".."0x30000000", + "BGFX_STENCIL_OP_PASS_Z_INCRSAT".."0x40000000", + "BGFX_STENCIL_OP_PASS_Z_DECR".."0x50000000", + "BGFX_STENCIL_OP_PASS_Z_DECRSAT".."0x60000000", + "BGFX_STENCIL_OP_PASS_Z_INVERT".."0x70000000", + "BGFX_STENCIL_OP_PASS_Z_SHIFT".."28", + "BGFX_STENCIL_OP_PASS_Z_MASK".."0xf0000000", + + "BGFX_STENCIL_NONE".."0x00000000", + "BGFX_STENCIL_MASK".."0xffffffff", + "BGFX_STENCIL_DEFAULT".."0x00000000" + ) + + ShortConstant( + "Clear", + + "BGFX_CLEAR_NONE".."0x0000", + "BGFX_CLEAR_COLOR".."0x0001", + "BGFX_CLEAR_DEPTH".."0x0002", + "BGFX_CLEAR_STENCIL".."0x0004", + "BGFX_CLEAR_DISCARD_COLOR_0".."0x0008", + "BGFX_CLEAR_DISCARD_COLOR_1".."0x0010", + "BGFX_CLEAR_DISCARD_COLOR_2".."0x0020", + "BGFX_CLEAR_DISCARD_COLOR_3".."0x0040", + "BGFX_CLEAR_DISCARD_COLOR_4".."0x0080", + "BGFX_CLEAR_DISCARD_COLOR_5".."0x0100", + "BGFX_CLEAR_DISCARD_COLOR_6".."0x0200", + "BGFX_CLEAR_DISCARD_COLOR_7".."0x0400", + "BGFX_CLEAR_DISCARD_DEPTH".."0x0800", + "BGFX_CLEAR_DISCARD_STENCIL".."0x1000", + + "BGFX_CLEAR_DISCARD_COLOR_MASK".."""(0 + | BGFX_CLEAR_DISCARD_COLOR_0 + | BGFX_CLEAR_DISCARD_COLOR_1 + | BGFX_CLEAR_DISCARD_COLOR_2 + | BGFX_CLEAR_DISCARD_COLOR_3 + | BGFX_CLEAR_DISCARD_COLOR_4 + | BGFX_CLEAR_DISCARD_COLOR_5 + | BGFX_CLEAR_DISCARD_COLOR_6 + | BGFX_CLEAR_DISCARD_COLOR_7) + """, + + "BGFX_CLEAR_DISCARD_MASK".."""(0 + | BGFX_CLEAR_DISCARD_COLOR_MASK + | BGFX_CLEAR_DISCARD_DEPTH + | BGFX_CLEAR_DISCARD_STENCIL) + """ + ) + + IntConstant( + "Debug", + + "BGFX_DEBUG_NONE".."0x00000000", + "BGFX_DEBUG_WIREFRAME".."0x00000001", + "BGFX_DEBUG_IFH".."0x00000002", + "BGFX_DEBUG_STATS".."0x00000004", + "BGFX_DEBUG_TEXT".."0x00000008" + ) + + ShortConstant( + "Buffer", + + "BGFX_BUFFER_NONE".."0x0000", + + "BGFX_BUFFER_COMPUTE_FORMAT_8x1".."0x0001", + "BGFX_BUFFER_COMPUTE_FORMAT_8x2".."0x0002", + "BGFX_BUFFER_COMPUTE_FORMAT_8x4".."0x0003", + "BGFX_BUFFER_COMPUTE_FORMAT_16x1".."0x0004", + "BGFX_BUFFER_COMPUTE_FORMAT_16x2".."0x0005", + "BGFX_BUFFER_COMPUTE_FORMAT_16x4".."0x0006", + "BGFX_BUFFER_COMPUTE_FORMAT_32x1".."0x0007", + "BGFX_BUFFER_COMPUTE_FORMAT_32x2".."0x0008", + "BGFX_BUFFER_COMPUTE_FORMAT_32x4".."0x0009", + "BGFX_BUFFER_COMPUTE_FORMAT_SHIFT".."0", + "BGFX_BUFFER_COMPUTE_FORMAT_MASK".."0x000f", + + "BGFX_BUFFER_COMPUTE_TYPE_UINT".."0x0010", + "BGFX_BUFFER_COMPUTE_TYPE_INT".."0x0020", + "BGFX_BUFFER_COMPUTE_TYPE_FLOAT".."0x0030", + "BGFX_BUFFER_COMPUTE_TYPE_SHIFT".."4", + "BGFX_BUFFER_COMPUTE_TYPE_MASK".."0x0030", + + "BGFX_BUFFER_COMPUTE_READ".."0x0100", + "BGFX_BUFFER_COMPUTE_WRITE".."0x0200", + "BGFX_BUFFER_DRAW_INDIRECT".."0x0400", + "BGFX_BUFFER_ALLOW_RESIZE".."0x0800", + "BGFX_BUFFER_INDEX32".."0x1000", + + "BGFX_BUFFER_COMPUTE_READ_WRITE".."""(0 + | BGFX_BUFFER_COMPUTE_READ + | BGFX_BUFFER_COMPUTE_WRITE) + """ + ) + + IntConstant( + "Texture", + + "BGFX_TEXTURE_NONE".."0x00000000", + "BGFX_TEXTURE_U_MIRROR".."0x00000001", + "BGFX_TEXTURE_U_CLAMP".."0x00000002", + "BGFX_TEXTURE_U_BORDER".."0x00000003", + "BGFX_TEXTURE_U_SHIFT".."0", + "BGFX_TEXTURE_U_MASK".."0x00000003", + "BGFX_TEXTURE_V_MIRROR".."0x00000004", + "BGFX_TEXTURE_V_CLAMP".."0x00000008", + "BGFX_TEXTURE_V_BORDER".."0x0000000c", + "BGFX_TEXTURE_V_SHIFT".."2", + "BGFX_TEXTURE_V_MASK".."0x0000000c", + "BGFX_TEXTURE_W_MIRROR".."0x00000010", + "BGFX_TEXTURE_W_CLAMP".."0x00000020", + "BGFX_TEXTURE_W_BORDER".."0x00000030", + "BGFX_TEXTURE_W_SHIFT".."4", + "BGFX_TEXTURE_W_MASK".."0x00000030", + "BGFX_TEXTURE_MIN_POINT".."0x00000040", + "BGFX_TEXTURE_MIN_ANISOTROPIC".."0x00000080", + "BGFX_TEXTURE_MIN_SHIFT".."6", + "BGFX_TEXTURE_MIN_MASK".."0x000000c0", + "BGFX_TEXTURE_MAG_POINT".."0x00000100", + "BGFX_TEXTURE_MAG_ANISOTROPIC".."0x00000200", + "BGFX_TEXTURE_MAG_SHIFT".."8", + "BGFX_TEXTURE_MAG_MASK".."0x00000300", + "BGFX_TEXTURE_MIP_POINT".."0x00000400", + "BGFX_TEXTURE_MIP_SHIFT".."10", + "BGFX_TEXTURE_MIP_MASK".."0x00000400", + "BGFX_TEXTURE_MSAA_SAMPLE".."0x00000800", + "BGFX_TEXTURE_RT".."0x00001000", + "BGFX_TEXTURE_RT_MSAA_X2".."0x00002000", + "BGFX_TEXTURE_RT_MSAA_X4".."0x00003000", + "BGFX_TEXTURE_RT_MSAA_X8".."0x00004000", + "BGFX_TEXTURE_RT_MSAA_X16".."0x00005000", + "BGFX_TEXTURE_RT_MSAA_SHIFT".."12", + "BGFX_TEXTURE_RT_MSAA_MASK".."0x00007000", + "BGFX_TEXTURE_RT_WRITE_ONLY".."0x00008000", + "BGFX_TEXTURE_RT_MASK".."0x0000f000", + "BGFX_TEXTURE_COMPARE_LESS".."0x00010000", + "BGFX_TEXTURE_COMPARE_LEQUAL".."0x00020000", + "BGFX_TEXTURE_COMPARE_EQUAL".."0x00030000", + "BGFX_TEXTURE_COMPARE_GEQUAL".."0x00040000", + "BGFX_TEXTURE_COMPARE_GREATER".."0x00050000", + "BGFX_TEXTURE_COMPARE_NOTEQUAL".."0x00060000", + "BGFX_TEXTURE_COMPARE_NEVER".."0x00070000", + "BGFX_TEXTURE_COMPARE_ALWAYS".."0x00080000", + "BGFX_TEXTURE_COMPARE_SHIFT".."16", + "BGFX_TEXTURE_COMPARE_MASK".."0x000f0000", + "BGFX_TEXTURE_COMPUTE_WRITE".."0x00100000", + "BGFX_TEXTURE_SRGB".."0x00200000", + "BGFX_TEXTURE_BLIT_DST".."0x00400000", + "BGFX_TEXTURE_READ_BACK".."0x00800000", + "BGFX_TEXTURE_BORDER_COLOR_SHIFT".."24", + "BGFX_TEXTURE_BORDER_COLOR_MASK".."0x0f000000", + "BGFX_TEXTURE_RESERVED_SHIFT".."28", + "BGFX_TEXTURE_RESERVED_MASK".."0xf0000000", + + "BGFX_TEXTURE_SAMPLER_BITS_MASK".."""(0 + | BGFX_TEXTURE_U_MASK + | BGFX_TEXTURE_V_MASK + | BGFX_TEXTURE_W_MASK + | BGFX_TEXTURE_MIN_MASK + | BGFX_TEXTURE_MAG_MASK + | BGFX_TEXTURE_MIP_MASK + | BGFX_TEXTURE_COMPARE_MASK) + """ + ) + + IntConstant( + "Reset", + + "BGFX_RESET_NONE".."0x00000000", + "BGFX_RESET_FULLSCREEN".."0x00000001", + "BGFX_RESET_FULLSCREEN_SHIFT".."0", + "BGFX_RESET_FULLSCREEN_MASK".."0x00000001", + "BGFX_RESET_MSAA_X2".."0x00000010", + "BGFX_RESET_MSAA_X4".."0x00000020", + "BGFX_RESET_MSAA_X8".."0x00000030", + "BGFX_RESET_MSAA_X16".."0x00000040", + "BGFX_RESET_MSAA_SHIFT".."4", + "BGFX_RESET_MSAA_MASK".."0x00000070", + "BGFX_RESET_VSYNC".."0x00000080", + "BGFX_RESET_MAXANISOTROPY".."0x00000100", + "BGFX_RESET_CAPTURE".."0x00000200", + "BGFX_RESET_HMD".."0x00000400", + "BGFX_RESET_HMD_DEBUG".."0x00000800", + "BGFX_RESET_HMD_RECENTER".."0x00001000", + "BGFX_RESET_FLUSH_AFTER_RENDER".."0x00002000", + "BGFX_RESET_FLIP_AFTER_RENDER".."0x00004000", + "BGFX_RESET_SRGB_BACKBUFFER".."0x00008000", + "BGFX_RESET_HIDPI".."0x00010000", + "BGFX_RESET_DEPTH_CLAMP".."0x00020000", + "BGFX_RESET_SUSPEND".."0x00040000", + + "BGFX_RESET_RESERVED_SHIFT".."31", + "BGFX_RESET_RESERVED_MASK".."0x80000000" + ) + + LongConstant( + "Caps", + + "BGFX_CAPS_TEXTURE_COMPARE_LEQUAL".."0x0000000000000001L", + "BGFX_CAPS_TEXTURE_COMPARE_ALL".."0x0000000000000003L", + "BGFX_CAPS_TEXTURE_3D".."0x0000000000000004L", + "BGFX_CAPS_VERTEX_ATTRIB_HALF".."0x0000000000000008L", + "BGFX_CAPS_VERTEX_ATTRIB_UINT10".."0x0000000000000010L", + "BGFX_CAPS_INSTANCING".."0x0000000000000020L", + "BGFX_CAPS_RENDERER_MULTITHREADED".."0x0000000000000040L", + "BGFX_CAPS_FRAGMENT_DEPTH".."0x0000000000000080L", + "BGFX_CAPS_BLEND_INDEPENDENT".."0x0000000000000100L", + "BGFX_CAPS_COMPUTE".."0x0000000000000200L", + "BGFX_CAPS_FRAGMENT_ORDERING".."0x0000000000000400L", + "BGFX_CAPS_SWAP_CHAIN".."0x0000000000000800L", + "BGFX_CAPS_HMD".."0x0000000000001000L", + "BGFX_CAPS_INDEX32".."0x0000000000002000L", + "BGFX_CAPS_DRAW_INDIRECT".."0x0000000000004000L", + "BGFX_CAPS_HIDPI".."0x0000000000008000L", + "BGFX_CAPS_TEXTURE_BLIT".."0x0000000000010000L", + "BGFX_CAPS_TEXTURE_READ_BACK".."0x0000000000020000L", + "BGFX_CAPS_OCCLUSION_QUERY".."0x0000000000040000L", + "BGFX_CAPS_ALPHA_TO_COVERAGE".."0x0000000000080000L", + "BGFX_CAPS_CONSERVATIVE_RASTER".."0x0000000000100000L", + "BGFX_CAPS_TEXTURE_2D_ARRAY".."0x0000000000200000L", + "BGFX_CAPS_TEXTURE_CUBE_ARRAY".."0x0000000000400000L", + "BGFX_CAPS_GRAPHICS_DEBUGGER".."0x0000000000800000L" + ) + + ShortConstant( + "Format caps", + + "BGFX_CAPS_FORMAT_TEXTURE_NONE".."0x0000", + "BGFX_CAPS_FORMAT_TEXTURE_2D".."0x0001", + "BGFX_CAPS_FORMAT_TEXTURE_2D_SRGB".."0x0002", + "BGFX_CAPS_FORMAT_TEXTURE_2D_EMULATED".."0x0004", + "BGFX_CAPS_FORMAT_TEXTURE_3D".."0x0008", + "BGFX_CAPS_FORMAT_TEXTURE_3D_SRGB".."0x0010", + "BGFX_CAPS_FORMAT_TEXTURE_3D_EMULATED".."0x0020", + "BGFX_CAPS_FORMAT_TEXTURE_CUBE".."0x0040", + "BGFX_CAPS_FORMAT_TEXTURE_CUBE_SRGB".."0x0080", + "BGFX_CAPS_FORMAT_TEXTURE_CUBE_EMULATED".."0x0100", + "BGFX_CAPS_FORMAT_TEXTURE_VERTEX".."0x0200", + "BGFX_CAPS_FORMAT_TEXTURE_IMAGE".."0x0400", + "BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER".."0x0800", + "BGFX_CAPS_FORMAT_TEXTURE_FRAMEBUFFER_MSAA".."0x1000", + "BGFX_CAPS_FORMAT_TEXTURE_MSAA".."0x2000", + "BGFX_CAPS_FORMAT_TEXTURE_MIP_AUTOGEN".."0x4000" + ) + + ByteConstant( + "View", + + "BGFX_VIEW_NONE".."0x00", + "BGFX_VIEW_STEREO".."0x01" + ) + + ByteConstant( + "Submit", + + "BGFX_SUBMIT_EYE_LEFT".."0x01", + "BGFX_SUBMIT_EYE_RIGHT".."0x02", + "BGFX_SUBMIT_EYE_MASK".."0x03", + "BGFX_SUBMIT_EYE_FIRST".."BGFX_SUBMIT_EYE_LEFT", + + "BGFX_SUBMIT_RESERVED_SHIFT".."7", + "BGFX_SUBMIT_RESERVED_MASK".."(byte) 0x80" + ) + + ShortConstant( + "PCI", + + "BGFX_PCI_ID_NONE".."0x0000", + "BGFX_PCI_ID_SOFTWARE_RASTERIZER".."0x0001", + "BGFX_PCI_ID_AMD".."0x1002", + "BGFX_PCI_ID_INTEL".."(short) 0x8086", + "BGFX_PCI_ID_NVIDIA".."0x10de" + ) + + ByteConstant( + "HMD", + + "BGFX_HMD_NONE".."0x00", + "BGFX_HMD_DEVICE_RESOLUTION".."0x01", + "BGFX_HMD_RENDERING".."0x02" + ) + + ByteConstant( + "Cubemap", + + "BGFX_CUBE_MAP_POSITIVE_X".."0x00", + "BGFX_CUBE_MAP_NEGATIVE_X".."0x01", + "BGFX_CUBE_MAP_POSITIVE_Y".."0x02", + "BGFX_CUBE_MAP_NEGATIVE_Y".."0x03", + "BGFX_CUBE_MAP_POSITIVE_Z".."0x04", + "BGFX_CUBE_MAP_NEGATIVE_Z".."0x05" + ) + + val RendererType = EnumConstant( + "Renderer type. ({@code bgfx_renderer_type_t})", + + "BGFX_RENDERER_TYPE_NULL".enum, + "BGFX_RENDERER_TYPE_DIRECT3D9".enum, + "BGFX_RENDERER_TYPE_DIRECT3D11".enum, + "BGFX_RENDERER_TYPE_DIRECT3D12".enum, + "BGFX_RENDERER_TYPE_METAL".enum, + "BGFX_RENDERER_TYPE_OPENGLES".enum, + "BGFX_RENDERER_TYPE_OPENGL".enum, + "BGFX_RENDERER_TYPE_VULKAN".enum, + "BGFX_RENDERER_TYPE_GNM".enum, + + "BGFX_RENDERER_TYPE_COUNT".enum // TODO: Update "get_supported_renderers" if this changes + ).javaDocLinks + + val Access = EnumConstant( + "bgfx_access_t", + + "BGFX_ACCESS_READ".enum, + "BGFX_ACCESS_WRITE".enum, + "BGFX_ACCESS_READWRITE".enum, + + "BGFX_ACCESS_COUNT".enum + ).javaDocLinks + + val Attrib = EnumConstant( + "bgfx_attrib_t", + + "BGFX_ATTRIB_POSITION".enum, + "BGFX_ATTRIB_NORMAL".enum, + "BGFX_ATTRIB_TANGENT".enum, + "BGFX_ATTRIB_BITANGENT".enum, + "BGFX_ATTRIB_COLOR0".enum, + "BGFX_ATTRIB_COLOR1".enum, + "BGFX_ATTRIB_INDICES".enum, + "BGFX_ATTRIB_WEIGHT".enum, + "BGFX_ATTRIB_TEXCOORD0".enum, + "BGFX_ATTRIB_TEXCOORD1".enum, + "BGFX_ATTRIB_TEXCOORD2".enum, + "BGFX_ATTRIB_TEXCOORD3".enum, + "BGFX_ATTRIB_TEXCOORD4".enum, + "BGFX_ATTRIB_TEXCOORD5".enum, + "BGFX_ATTRIB_TEXCOORD6".enum, + "BGFX_ATTRIB_TEXCOORD7".enum, + + "BGFX_ATTRIB_COUNT".enum + ).javaDocLinks + + val AttribType = EnumConstant( + "bgfx_attrib_type_t", + + "BGFX_ATTRIB_TYPE_UINT8".enum, + "BGFX_ATTRIB_TYPE_UINT10".enum, + "BGFX_ATTRIB_TYPE_INT16".enum, + "BGFX_ATTRIB_TYPE_HALF".enum, + "BGFX_ATTRIB_TYPE_FLOAT".enum, + + "BGFX_ATTRIB_TYPE_COUNT".enum + ).javaDocLinks + + val TextureFormat = EnumConstant( + "bgfx_texture_format_t", + + "BGFX_TEXTURE_FORMAT_BC1".enum, + "BGFX_TEXTURE_FORMAT_BC2".enum, + "BGFX_TEXTURE_FORMAT_BC3".enum, + "BGFX_TEXTURE_FORMAT_BC4".enum, + "BGFX_TEXTURE_FORMAT_BC5".enum, + "BGFX_TEXTURE_FORMAT_BC6H".enum, + "BGFX_TEXTURE_FORMAT_BC7".enum, + "BGFX_TEXTURE_FORMAT_ETC1".enum, + "BGFX_TEXTURE_FORMAT_ETC2".enum, + "BGFX_TEXTURE_FORMAT_ETC2A".enum, + "BGFX_TEXTURE_FORMAT_ETC2A1".enum, + "BGFX_TEXTURE_FORMAT_PTC12".enum, + "BGFX_TEXTURE_FORMAT_PTC14".enum, + "BGFX_TEXTURE_FORMAT_PTC12A".enum, + "BGFX_TEXTURE_FORMAT_PTC14A".enum, + "BGFX_TEXTURE_FORMAT_PTC22".enum, + "BGFX_TEXTURE_FORMAT_PTC24".enum, + + "BGFX_TEXTURE_FORMAT_UNKNOWN".enum, + + "BGFX_TEXTURE_FORMAT_R1".enum, + "BGFX_TEXTURE_FORMAT_A8".enum, + "BGFX_TEXTURE_FORMAT_R8".enum, + "BGFX_TEXTURE_FORMAT_R8I".enum, + "BGFX_TEXTURE_FORMAT_R8U".enum, + "BGFX_TEXTURE_FORMAT_R8S".enum, + "BGFX_TEXTURE_FORMAT_R16".enum, + "BGFX_TEXTURE_FORMAT_R16I".enum, + "BGFX_TEXTURE_FORMAT_R16U".enum, + "BGFX_TEXTURE_FORMAT_R16F".enum, + "BGFX_TEXTURE_FORMAT_R16S".enum, + "BGFX_TEXTURE_FORMAT_R32I".enum, + "BGFX_TEXTURE_FORMAT_R32U".enum, + "BGFX_TEXTURE_FORMAT_R32F".enum, + "BGFX_TEXTURE_FORMAT_RG8".enum, + "BGFX_TEXTURE_FORMAT_RG8I".enum, + "BGFX_TEXTURE_FORMAT_RG8U".enum, + "BGFX_TEXTURE_FORMAT_RG8S".enum, + "BGFX_TEXTURE_FORMAT_RG16".enum, + "BGFX_TEXTURE_FORMAT_RG16I".enum, + "BGFX_TEXTURE_FORMAT_RG16U".enum, + "BGFX_TEXTURE_FORMAT_RG16F".enum, + "BGFX_TEXTURE_FORMAT_RG16S".enum, + "BGFX_TEXTURE_FORMAT_RG32I".enum, + "BGFX_TEXTURE_FORMAT_RG32U".enum, + "BGFX_TEXTURE_FORMAT_RG32F".enum, + "BGFX_TEXTURE_FORMAT_RGB8".enum, + "BGFX_TEXTURE_FORMAT_RGB8I".enum, + "BGFX_TEXTURE_FORMAT_RGB8U".enum, + "BGFX_TEXTURE_FORMAT_RGB8S".enum, + "BGFX_TEXTURE_FORMAT_RGB9E5F".enum, + "BGFX_TEXTURE_FORMAT_BGRA8".enum, + "BGFX_TEXTURE_FORMAT_RGBA8".enum, + "BGFX_TEXTURE_FORMAT_RGBA8I".enum, + "BGFX_TEXTURE_FORMAT_RGBA8U".enum, + "BGFX_TEXTURE_FORMAT_RGBA8S".enum, + "BGFX_TEXTURE_FORMAT_RGBA16".enum, + "BGFX_TEXTURE_FORMAT_RGBA16I".enum, + "BGFX_TEXTURE_FORMAT_RGBA16U".enum, + "BGFX_TEXTURE_FORMAT_RGBA16F".enum, + "BGFX_TEXTURE_FORMAT_RGBA16S".enum, + "BGFX_TEXTURE_FORMAT_RGBA32I".enum, + "BGFX_TEXTURE_FORMAT_RGBA32U".enum, + "BGFX_TEXTURE_FORMAT_RGBA32F".enum, + "BGFX_TEXTURE_FORMAT_R5G6B5".enum, + "BGFX_TEXTURE_FORMAT_RGBA4".enum, + "BGFX_TEXTURE_FORMAT_RGB5A1".enum, + "BGFX_TEXTURE_FORMAT_RGB10A2".enum, + "BGFX_TEXTURE_FORMAT_R11G11B10F".enum, + + "BGFX_TEXTURE_FORMAT_UNKNOWN_DEPTH".enum, + + "BGFX_TEXTURE_FORMAT_D16".enum, + "BGFX_TEXTURE_FORMAT_D24".enum, + "BGFX_TEXTURE_FORMAT_D24S8".enum, + "BGFX_TEXTURE_FORMAT_D32".enum, + "BGFX_TEXTURE_FORMAT_D16F".enum, + "BGFX_TEXTURE_FORMAT_D24F".enum, + "BGFX_TEXTURE_FORMAT_D32F".enum, + "BGFX_TEXTURE_FORMAT_D0S8".enum, + + "BGFX_TEXTURE_FORMAT_COUNT".enum // TODO: Update bgfx_caps_t.formats size if this changes + ).javaDocLinks + + val UniformType = EnumConstant( + "bgfx_uniform_type_t", + + "BGFX_UNIFORM_TYPE_INT1".enum, + "BGFX_UNIFORM_TYPE_END".enum, + + "BGFX_UNIFORM_TYPE_VEC4".enum, + "BGFX_UNIFORM_TYPE_MAT3".enum, + "BGFX_UNIFORM_TYPE_MAT4".enum, + + "BGFX_UNIFORM_TYPE_COUNT".enum + ).javaDocLinks + + val BackbufferRatio = EnumConstant( + "bgfx_backbuffer_ratio_t", + + "BGFX_BACKBUFFER_RATIO_EQUAL".enum, + "BGFX_BACKBUFFER_RATIO_HALF".enum, + "BGFX_BACKBUFFER_RATIO_QUARTER".enum, + "BGFX_BACKBUFFER_RATIO_EIGHTH".enum, + "BGFX_BACKBUFFER_RATIO_SIXTEENTH".enum, + "BGFX_BACKBUFFER_RATIO_DOUBLE".enum, + + "BGFX_BACKBUFFER_RATIO_COUNT".enum + ).javaDocLinks + + /*val OcclusionQueryResult =*/ EnumConstant( + "bgfx_occlusion_query_result_t", + + "BGFX_OCCLUSION_QUERY_RESULT_INVISIBLE".enum, + "BGFX_OCCLUSION_QUERY_RESULT_VISIBLE".enum, + "BGFX_OCCLUSION_QUERY_RESULT_NORESULT".enum, + + "BGFX_OCCLUSION_QUERY_RESULT_COUNT".enum + ).javaDocLinks + + val TopologyConvert = EnumConstant( + "bgfx_topology_convert_t", + + "BGFX_TOPOLOGY_CONVERT_TRI_LIST_FLIP_WINDING".enum, + "BGFX_TOPOLOGY_CONVERT_TRI_LIST_TO_LINE_LIST".enum, + "BGFX_TOPOLOGY_CONVERT_TRI_STRIP_TO_TRI_LIST".enum, + "BGFX_TOPOLOGY_CONVERT_LINE_STRIP_TO_LINE_LIST".enum, + + "BGFX_TOPOLOGY_CONVERT_COUNT".enum + ).javaDocLinks + + val TopologySort = EnumConstant( + "bgfx_topology_sort_t", + + "BGFX_TOPOLOGY_SORT_DIRECTION_FRONT_TO_BACK_MIN".enum, + "BGFX_TOPOLOGY_SORT_DIRECTION_FRONT_TO_BACK_AVG".enum, + "BGFX_TOPOLOGY_SORT_DIRECTION_FRONT_TO_BACK_MAX".enum, + "BGFX_TOPOLOGY_SORT_DIRECTION_BACK_TO_FRONT_MIN".enum, + "BGFX_TOPOLOGY_SORT_DIRECTION_BACK_TO_FRONT_AVG".enum, + "BGFX_TOPOLOGY_SORT_DIRECTION_BACK_TO_FRONT_MAX".enum, + "BGFX_TOPOLOGY_SORT_DISTANCE_FRONT_TO_BACK_MIN".enum, + "BGFX_TOPOLOGY_SORT_DISTANCE_FRONT_TO_BACK_AVG".enum, + "BGFX_TOPOLOGY_SORT_DISTANCE_FRONT_TO_BACK_MAX".enum, + "BGFX_TOPOLOGY_SORT_DISTANCE_BACK_TO_FRONT_MIN".enum, + "BGFX_TOPOLOGY_SORT_DISTANCE_BACK_TO_FRONT_AVG".enum, + "BGFX_TOPOLOGY_SORT_DISTANCE_BACK_TO_FRONT_MAX".enum, + + "BGFX_TOPOLOGY_SORT_COUNT".enum + ).javaDocLinks + + /*val Fatal =*/ EnumConstant( + "bgfx_fatal_t", + + "BGFX_FATAL_DEBUG_CHECK".enum, + "BGFX_FATAL_MINIMUM_REQUIRED_SPECS".enum, + "BGFX_FATAL_INVALID_SHADER".enum, + "BGFX_FATAL_UNABLE_TO_INITIALIZE".enum, + "BGFX_FATAL_UNABLE_TO_CREATE_TEXTURE".enum, + "BGFX_FATAL_DEVICE_LOST".enum, + + "BGFX_FATAL_COUNT".enum + ).javaDocLinks + + void( + "vertex_decl_begin", + """ + """, + + bgfx_vertex_decl_t.IN("_decl", ""), + bgfx_renderer_type_t.IN("_renderer", "") + ) + + void( + "vertex_decl_add", + """ + """, + + bgfx_vertex_decl_t.IN("_decl", ""), + bgfx_attrib_t.IN("_attrib", "", Attrib), + MapToInt..uint8_t.IN("_num", ""), + bgfx_attrib_type_t.IN("_type", "", AttribType), + bool.IN("_normalized", ""), + bool.IN("_asInt", "") + ) + + void( + "vertex_decl_skip", + """ + """, + + bgfx_vertex_decl_t.IN("_decl", ""), + MapToInt..uint8_t.IN("_num", "") + ) + + void( + "vertex_decl_end", + """ + """, + + bgfx_vertex_decl_t.IN("_decl", "") + ) + + void( + "vertex_pack", + """ + """, + + Check(4)..float.const_p.IN("_input", ""), + bool.IN("_inputNormalized", ""), + bgfx_attrib_t.IN("_attr", "", Attrib), + const..bgfx_vertex_decl_t.IN("_decl", ""), + void_p.IN("_data", ""), + uint32_t.IN("_index", "") + ) + + void( + "vertex_unpack", + """ + """, + + Check(4)..float.p.OUT("_output", ""), + bgfx_attrib_t.IN("_attr", "", Attrib), + const..bgfx_vertex_decl_t.IN("_decl", ""), + const..void_p.IN("_data", ""), + uint32_t.IN("_index", "") + ) + + void( + "vertex_convert", + """ + """, + + const..bgfx_vertex_decl_t.IN("_destDecl", ""), + void_p.IN("_destData", ""), + const..bgfx_vertex_decl_t.IN("_srcDecl", ""), + const..void_p.IN("_srcData", ""), + uint32_t.IN("_num", "") + ) + + uint16_t( + "weld_vertices", + """ + """, + + uint16_t.p.OUT("_output", ""), + const..bgfx_vertex_decl_t.IN("_decl", ""), + const..void_p.IN("_data", ""), + MapToInt..uint16_t.IN("_num", ""), + float.IN("_epsilon", "") + ) + + uint32_t( + "topology_convert", + """ + """, + + bgfx_topology_convert_t.IN("_conversion", "", TopologyConvert), + void_p.IN("_dst", ""), + uint32_t.IN("_dstSize", ""), + const..void_p.IN("_indices", ""), + uint32_t.IN("_numIndices", ""), + bool.IN("_index32", "") + ) + + void( + "topology_sort_tri_list", + """ + """, + + bgfx_topology_sort_t.IN("_sort", "", TopologySort), + void_p.IN("_dst", ""), + uint32_t.IN("_dstSize", ""), + Check(3)..float.const_p.IN("_dir", ""), + Check(3)..float.const_p.IN("_pos", ""), + const..void_p.IN("_vertices", ""), + uint32_t.IN("_stride", ""), + const..void_p.IN("_indices", ""), + uint32_t.IN("_numIndices", ""), + bool.IN("_index32", "") + ) + + void( + "image_swizzle_bgra8", + """ + """, + + uint32_t.IN("_width", ""), + uint32_t.IN("_height", ""), + uint32_t.IN("_pitch", ""), + const..void_p.IN("_src", ""), + void_p.IN("_dst", "") + ) + + void( + "image_rgba8_downsample_2x2", + """ + """, + + uint32_t.IN("_width", ""), + uint32_t.IN("_height", ""), + uint32_t.IN("_pitch", ""), + const..void_p.IN("_src", ""), + void_p.IN("_dst", "") + ) + + uint8_t( + "get_supported_renderers", + """ + """, + + Check(9)..bgfx_renderer_type_t.p.IN("_enum", "", RendererType) + ) + + (const..charUTF8.p)( + "get_renderer_name", + """ + """, + + bgfx_renderer_type_t.IN("_type", "", RendererType) + ) + + bool( + "init", + """ + """, + + bgfx_renderer_type_t.IN("_type", "", RendererType), + MapToInt..uint16_t.IN("_vendorId", ""), + MapToInt..uint16_t.IN("_deviceId", ""), + nullable..bgfx_callback_interface_t.IN("_callback", ""), + nullable..bgfx_allocator_interface_t.IN("_allocator", "") + ) + + void( + "shutdown", + """ + """ + ) + + void( + "reset", + """ + """, + + uint32_t.IN("_width", ""), + uint32_t.IN("_height", ""), + uint32_t.IN("_flags", "") + ) + + uint32_t( + "frame", + """ + """, + + bool.IN("_capture", "") + ) + + bgfx_renderer_type_t( + "get_renderer_type", + """ + """ + ) + + (const..bgfx_caps_t)( + "get_caps", + """ + """ + ) + + (const..bgfx_hmd_t)( + "get_hmd", + """ + """ + ) + + (const..bgfx_stats_t)( + "get_stats", + """ + """ + ) + + (const..bgfx_memory_t)( + "alloc", + """ + """, + + uint32_t.IN("_size", "") + ) + + (const..bgfx_memory_t)( + "copy", + """ + """, + + const..void_p.IN("_data", ""), + uint32_t.IN("_size", "") + ) + + (const..bgfx_memory_t)( + "make_ref", + """ + """, + + const..void_p.IN("_data", ""), + uint32_t.IN("_size", "") + ) + + (const..bgfx_memory_t)( + "make_ref_release", + """ + """, + + const..void_p.IN("_data", ""), + uint32_t.IN("_size", ""), + bgfx_release_fn_t.IN("_releaseFn", ""), + nullable..void_p.IN("_userData", "") + ) + + void( + "set_debug", + """ + """, + + uint32_t.IN("_debug", "") + ) + + void( + "dbg_text_clear", + """ + """, + + MapToInt..uint8_t.IN("_attr", ""), + bool.IN("_small", "") + ) + + void( + "dbg_text_printf", + """ + """, + + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint8_t.IN("_attr", ""), + const..charUTF8.p.IN("_format", "") + ) + + void( + "dbg_text_vprintf", + """ + """, + + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint8_t.IN("_attr", ""), + const..charUTF8.p.IN("_format", ""), + va_list.IN("_argList", "") + ) + + void( + "dbg_text_image", + """ + """, + + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + const..void_p.IN("_data", ""), + MapToInt..uint16_t.IN("_pitch", "") + ) + + bgfx_index_buffer_handle_t( + "create_index_buffer", + """ + """, + + const..bgfx_memory_t.IN("_mem", ""), + MapToInt..uint16_t.IN("_flags", "") + ) + + void( + "destroy_index_buffer", + """ + """, + + bgfx_index_buffer_handle_t.IN("_handle", "") + ) + + bgfx_vertex_buffer_handle_t( + "create_vertex_buffer", + """ + """, + + const..bgfx_memory_t.IN("_mem", ""), + const..bgfx_vertex_decl_t.IN("_decl", ""), + MapToInt..uint16_t.IN("_flags", "") + ) + + void( + "destroy_vertex_buffer", + """ + """, + + bgfx_vertex_buffer_handle_t.IN("_handle", "") + ) + + bgfx_dynamic_index_buffer_handle_t( + "create_dynamic_index_buffer", + """ + """, + + uint32_t.IN("_num", ""), + MapToInt..uint16_t.IN("_flags", "") + ) + + bgfx_dynamic_index_buffer_handle_t( + "create_dynamic_index_buffer_mem", + """ + """, + + const..bgfx_memory_t.IN("_mem", ""), + MapToInt..uint16_t.IN("_flags", "") + ) + + void( + "update_dynamic_index_buffer", + """ + """, + + bgfx_dynamic_index_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_startIndex", ""), + const..bgfx_memory_t.IN("_mem", "") + ) + + void( + "destroy_dynamic_index_buffer", + """ + """, + + bgfx_dynamic_index_buffer_handle_t.IN("_handle", "") + ) + + bgfx_dynamic_vertex_buffer_handle_t( + "create_dynamic_vertex_buffer", + """ + """, + + uint32_t.IN("_num", ""), + const..bgfx_vertex_decl_t.IN("_decl", ""), + MapToInt..uint16_t.IN("_flags", "") + ) + + bgfx_dynamic_vertex_buffer_handle_t( + "create_dynamic_vertex_buffer_mem", + """ + """, + + const..bgfx_memory_t.IN("_mem", ""), + const..bgfx_vertex_decl_t.IN("_decl", ""), + MapToInt..uint16_t.IN("_flags", "") + ) + + void( + "update_dynamic_vertex_buffer", + """ + """, + + bgfx_dynamic_vertex_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_startVertex", ""), + const..bgfx_memory_t.IN("_mem", "") + ) + + void( + "destroy_dynamic_vertex_buffer", + """ + """, + + bgfx_dynamic_vertex_buffer_handle_t.IN("_handle", "") + ) + + bool( + "check_avail_transient_index_buffer", + """ + """, + + uint32_t.IN("_num", "") + ) + + bool( + "check_avail_transient_vertex_buffer", + """ + """, + + uint32_t.IN("_num", ""), + const..bgfx_vertex_decl_t.IN("_decl", "") + ) + + bool( + "check_avail_instance_data_buffer", + """ + """, + + uint32_t.IN("_num", ""), + MapToInt..uint16_t.IN("_stride", "") + ) + + bool( + "check_avail_transient_buffers", + """ + """, + + uint32_t.IN("_numVertices", ""), + const..bgfx_vertex_decl_t.IN("_decl", ""), + uint32_t.IN("_numIndices", "") + ) + + void( + "alloc_transient_index_buffer", + """ + """, + + bgfx_transient_index_buffer_t.OUT("_tib", ""), + uint32_t.IN("_num", "") + ) + + void( + "alloc_transient_vertex_buffer", + """ + """, + + bgfx_transient_vertex_buffer_t.OUT("_tvb", ""), + uint32_t.IN("_num", ""), + const..bgfx_vertex_decl_t.IN("_decl", "") + ) + + bool( + "alloc_transient_buffers", + """ + """, + + bgfx_transient_vertex_buffer_t.OUT("_tvb", ""), + const..bgfx_vertex_decl_t.IN("_decl", ""), + uint32_t.IN("_numVertices", ""), + bgfx_transient_index_buffer_t.OUT("_tib", ""), + uint32_t.IN("_numIndices", "") + ) + + (const..bgfx_instance_data_buffer_t)( + "alloc_instance_data_buffer", + """ + """, + + uint32_t.IN("_num", ""), + MapToInt..uint16_t.IN("_stride", "") + ) + + bgfx_indirect_buffer_handle_t( + "create_indirect_buffer", + """ + """, + + uint32_t.IN("_num", "") + ) + + void( + "destroy_indirect_buffer", + """ + """, + + bgfx_indirect_buffer_handle_t.IN("_handle", "") + ) + + bgfx_shader_handle_t( + "create_shader", + """ + """, + + const..bgfx_memory_t.IN("_mem", "") + ) + + uint16_t( + "get_shader_uniforms", + """ + """, + + bgfx_shader_handle_t.IN("_handle", ""), + bgfx_uniform_handle_t.p.OUT("_uniforms", ""), + AutoSize("_uniforms")..uint16_t.IN("_max", "") + ) + + void( + "destroy_shader", + """ + """, + + bgfx_shader_handle_t.IN("_handle", "") + ) + + bgfx_program_handle_t( + "create_program", + """ + """, + + bgfx_shader_handle_t.IN("_vsh", ""), + bgfx_shader_handle_t.IN("_fsh", ""), + bool.IN("_destroyShaders", "") + ) + + bgfx_program_handle_t( + "create_compute_program", + """ + """, + + bgfx_shader_handle_t.IN("_csh", ""), + bool.IN("_destroyShaders", "") + ) + + void( + "destroy_program", + """ + """, + + bgfx_program_handle_t.IN("_handle", "") + ) + + void( + "calc_texture_size", + """ + """, + + bgfx_texture_info_t.OUT("_info", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + MapToInt..uint16_t.IN("_depth", ""), + bool.IN("_cubeMap", ""), + bool.IN("_hasMips", ""), + MapToInt..uint16_t.IN("_numLayers", ""), + bgfx_texture_format_t.IN("_format", "", TextureFormat) + ) + + bgfx_texture_handle_t( + "create_texture", + """ + """, + + const..bgfx_memory_t.IN("_mem", ""), + uint32_t.IN("_flags", ""), + MapToInt..uint8_t.IN("_skip", ""), + nullable..bgfx_texture_info_t.p.IN("_info", "") + ) + + bgfx_texture_handle_t( + "create_texture_2d", + """ + """, + + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + bool.IN("_hasMips", ""), + MapToInt..uint16_t.IN("_numLayers", ""), + bgfx_texture_format_t.IN("_format", "", TextureFormat), + uint32_t.IN("_flags", ""), + const..bgfx_memory_t.IN("_mem", "") + ) + + bgfx_texture_handle_t( + "create_texture_2d_scaled", + """ + """, + + bgfx_backbuffer_ratio_t.IN("_ratio", "", BackbufferRatio), + bool.IN("_hasMips", ""), + MapToInt..uint16_t.IN("_numLayers", ""), + bgfx_texture_format_t.IN("_format", "", TextureFormat), + uint32_t.IN("_flags", "") + ) + + bgfx_texture_handle_t( + "create_texture_3d", + """ + """, + + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + MapToInt..uint16_t.IN("_depth", ""), + bool.IN("_hasMips", ""), + bgfx_texture_format_t.IN("_format", "", TextureFormat), + uint32_t.IN("_flags", ""), + const..bgfx_memory_t.IN("_mem", "") + ) + + bgfx_texture_handle_t( + "create_texture_cube", + """ + """, + + MapToInt..uint16_t.IN("_size", ""), + bool.IN("_hasMips", ""), + MapToInt..uint16_t.IN("_numLayers", ""), + bgfx_texture_format_t.IN("_format", "", TextureFormat), + uint32_t.IN("_flags", ""), + const..bgfx_memory_t.IN("_mem", "") + ) + + void( + "update_texture_2d", + """ + """, + + bgfx_texture_handle_t.IN("_handle", ""), + MapToInt..uint16_t.IN("_layer", ""), + MapToInt..uint8_t.IN("_mip", ""), + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + const..bgfx_memory_t.IN("_mem", ""), + MapToInt..uint16_t.IN("_pitch", "") + ) + + void( + "update_texture_3d", + """ + """, + + bgfx_texture_handle_t.IN("_handle", ""), + MapToInt..uint8_t.IN("_mip", ""), + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint16_t.IN("_z", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + MapToInt..uint16_t.IN("_depth", ""), + const..bgfx_memory_t.IN("_mem", "") + ) + + void( + "update_texture_cube", + """ + """, + + bgfx_texture_handle_t.IN("_handle", ""), + MapToInt..uint16_t.IN("_layer", ""), + MapToInt..uint8_t.IN("_side", ""), + MapToInt..uint8_t.IN("_mip", ""), + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + const..bgfx_memory_t.IN("_mem", ""), + MapToInt..uint16_t.IN("_pitch", "") + ) + + uint32_t( + "read_texture", + """ + """, + + bgfx_texture_handle_t.IN("_handle", ""), + void_p.IN("_data", "") + ) + + uint32_t( + "read_frame_buffer", + """ + """, + + bgfx_frame_buffer_handle_t.IN("_handle", ""), + MapToInt..uint8_t.IN("_attachment", ""), + void_p.IN("_data", "") + ) + + void( + "destroy_texture", + """ + """, + + bgfx_texture_handle_t.IN("_handle", "") + ) + + bgfx_frame_buffer_handle_t( + "create_frame_buffer", + """ + """, + + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + bgfx_texture_format_t.IN("_format", "", TextureFormat), + uint32_t.IN("_textureFlags", "") + ) + + bgfx_frame_buffer_handle_t( + "create_frame_buffer_scaled", + """ + """, + + bgfx_backbuffer_ratio_t.IN("_ratio", "", BackbufferRatio), + bgfx_texture_format_t.IN("_format", "", TextureFormat), + uint32_t.IN("_textureFlags", "") + ) + + bgfx_frame_buffer_handle_t( + "create_frame_buffer_from_handles", + """ + """, + + MapToInt..uint8_t.IN("_num", ""), + Check("_num")..const..bgfx_texture_handle_t.p.IN("_handles", ""), + bool.IN("_destroyTextures", "") + ) + + bgfx_frame_buffer_handle_t( + "create_frame_buffer_from_attachment", + """ + """, + + MapToInt..uint8_t.IN("_num", ""), + const..bgfx_attachment_t.IN("_attachment", ""), + bool.IN("_destroyTextures", "") + ) + + bgfx_frame_buffer_handle_t( + "create_frame_buffer_from_nwh", + """ + """, + + void_p.IN("_nwh", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + bgfx_texture_format_t.IN("_depthFormat", "", TextureFormat) + ) + + void( + "destroy_frame_buffer", + """ + """, + + bgfx_frame_buffer_handle_t.IN("_handle", "") + ) + + bgfx_uniform_handle_t( + "create_uniform", + """ + """, + + const..charUTF8.p.IN("_name", ""), + bgfx_uniform_type_t.IN("_type", "", UniformType), + MapToInt..uint16_t.IN("_num", "") + ) + + void( + "destroy_uniform", + """ + """, + + bgfx_uniform_handle_t.IN("_handle", "") + ) + + bgfx_occlusion_query_handle_t( + "create_occlusion_query", + """ + """ + ) + + bgfx_occlusion_query_result_t( + "get_result", + """ + """, + + bgfx_occlusion_query_handle_t.IN("_handle", "") + ) + + void( + "destroy_occlusion_query", + """ + """, + + bgfx_occlusion_query_handle_t.IN("_handle", "") + ) + + void( + "set_palette_color", + """ + """, + + MapToInt..uint8_t.IN("_index", ""), + Check(4)..const..float.p.IN("_rgba", "") + ) + + void( + "set_view_name", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + const..charUTF8.p.IN("_name", "") + ) + + void( + "set_view_rect", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", "") + ) + + void( + "set_view_rect_auto", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + bgfx_backbuffer_ratio_t.IN("_ratio", "", BackbufferRatio) + ) + + void( + "set_view_scissor", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", "") + ) + + void( + "set_view_clear", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + MapToInt..uint16_t.IN("_flags", ""), + uint32_t.IN("_rgba", ""), + float.IN("_depth", ""), + MapToInt..uint8_t.IN("_stencil", "") + ) + + void( + "set_view_clear_mrt", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + MapToInt..uint16_t.IN("_flags", ""), + float.IN("_depth", ""), + MapToInt..uint8_t.IN("_stencil", ""), + uint8_t.IN("_0", ""), + uint8_t.IN("_1", ""), + uint8_t.IN("_2", ""), + uint8_t.IN("_3", ""), + uint8_t.IN("_4", ""), + uint8_t.IN("_5", ""), + uint8_t.IN("_6", ""), + uint8_t.IN("_7", "") + ) + + void( + "set_view_seq", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bool.IN("_enabled", "") + ) + + void( + "set_view_frame_buffer", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_frame_buffer_handle_t.IN("_handle", "") + ) + + void( + "set_view_transform", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + nullable..const..float_p.IN("_view", ""), + nullable..const..float_p.IN("_proj", "") + ) + + void( + "set_view_transform_stereo", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + nullable..const..float_p.IN("_view", ""), + nullable..const..float_p.IN("_projL", ""), + MapToInt..uint8_t.IN("_flags", ""), + nullable..const..float_p.IN("_projR", "") + ) + + void( + "set_view_remap", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + MapToInt..uint8_t.IN("_num", ""), + const..void_p.IN("_remap", "") + ) + + void( + "reset_view", + """ + """, + + MapToInt..uint8_t.IN("_id", "") + ) + + void( + "set_marker", + """ + """, + + const..charUTF8.p.IN("_marker", "") + ) + + void( + "set_state", + """ + """, + + uint64_t.IN("_state", ""), + uint32_t.IN("_rgba", "") + ) + + void( + "set_condition", + """ + """, + + bgfx_occlusion_query_handle_t.IN("_handle", ""), + bool.IN("_visible", "") + ) + + void( + "set_stencil", + """ + """, + + uint32_t.IN("_fstencil", ""), + uint32_t.IN("_bstencil", "") + ) + + uint16_t( + "set_scissor", + """ + """, + + MapToInt..uint16_t.IN("_x", ""), + MapToInt..uint16_t.IN("_y", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", "") + ) + + void( + "set_scissor_cached", + """ + """, + + MapToInt..uint16_t.IN("_cache", "") + ) + + uint32_t( + "set_transform", + """ + """, + + const..float_p.IN("_mtx", ""), + MapToInt..uint16_t.IN("_num", "") + ) + + uint32_t( + "alloc_transform", + """ + """, + + bgfx_transform_t.IN("_transform", ""), + MapToInt..uint16_t.IN("_num", "") + ) + + void( + "set_transform_cached", + """ + """, + + uint32_t.IN("_cache", ""), + MapToInt..uint16_t.IN("_num", "") + ) + + void( + "set_uniform", + """ + """, + + bgfx_uniform_handle_t.IN("_handle", ""), + const..void_p.IN("_value", ""), + MapToInt..uint16_t.IN("_num", "") + ) + + void( + "set_index_buffer", + """ + """, + + bgfx_index_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_firstIndex", ""), + uint32_t.IN("_numIndices", "") + ) + + void( + "set_dynamic_index_buffer", + """ + """, + + bgfx_dynamic_index_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_firstIndex", ""), + uint32_t.IN("_numIndices", "") + ) + + void( + "set_transient_index_buffer", + """ + """, + + const..bgfx_transient_index_buffer_t.IN("_tib", ""), + uint32_t.IN("_firstIndex", ""), + uint32_t.IN("_numIndices", "") + ) + + void( + "set_vertex_buffer", + """ + """, + + bgfx_vertex_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_startVertex", ""), + uint32_t.IN("_numVertices", "") + ) + + void( + "set_dynamic_vertex_buffer", + """ + """, + + bgfx_dynamic_vertex_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_startVertex", ""), + uint32_t.IN("_numVertices", "") + ) + + void( + "set_transient_vertex_buffer", + """ + """, + + const..bgfx_transient_vertex_buffer_t.IN("_tvb", ""), + uint32_t.IN("_startVertex", ""), + uint32_t.IN("_numVertices", "") + ) + + void( + "set_instance_data_buffer", + """ + """, + + const..bgfx_instance_data_buffer_t.IN("_idb", ""), + uint32_t.IN("_num", "") + ) + + void( + "set_instance_data_from_vertex_buffer", + """ + """, + + bgfx_vertex_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_startVertex", ""), + uint32_t.IN("_num", "") + ) + + void( + "set_instance_data_from_dynamic_vertex_buffer", + """ + """, + + bgfx_dynamic_vertex_buffer_handle_t.IN("_handle", ""), + uint32_t.IN("_startVertex", ""), + uint32_t.IN("_num", "") + ) + + void( + "set_texture", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_uniform_handle_t.IN("_sampler", ""), + bgfx_texture_handle_t.IN("_handle", ""), + uint32_t.IN("_flags", "") + ) + + void( + "set_texture_from_frame_buffer", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_uniform_handle_t.IN("_sampler", ""), + bgfx_frame_buffer_handle_t.IN("_handle", ""), + MapToInt..uint8_t.IN("_attachment", ""), + uint32_t.IN("_flags", "") + ) + + uint32_t( + "touch", + """ + """, + + MapToInt..uint8_t.IN("_id", "") + ) + + uint32_t( + "submit", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_program_handle_t.IN("_handle", ""), + int32_t.IN("_depth", ""), + bool.IN("_preserveState", "") + ) + + uint32_t( + "submit_occlusion_query", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_program_handle_t.IN("_program", ""), + bgfx_occlusion_query_handle_t.IN("_occlusionQuery", ""), + int32_t.IN("_depth", ""), + bool.IN("_preserveState", "") + ) + + uint32_t( + "submit_indirect", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_program_handle_t.IN("_handle", ""), + bgfx_indirect_buffer_handle_t.IN("_indirectHandle", ""), + MapToInt..uint16_t.IN("_start", ""), + MapToInt..uint16_t.IN("_num", ""), + int32_t.IN("_depth", ""), + bool.IN("_preserveState", "") + ) + + void( + "set_image", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_uniform_handle_t.IN("_sampler", ""), + bgfx_texture_handle_t.IN("_handle", ""), + MapToInt..uint8_t.IN("_mip", ""), + bgfx_access_t.IN("_access", "", Access), + bgfx_texture_format_t.IN("_format", "", TextureFormat) + ) + + void( + "set_image_from_frame_buffer", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_uniform_handle_t.IN("_sampler", ""), + bgfx_frame_buffer_handle_t.IN("_handle", ""), + MapToInt..uint8_t.IN("_attachment", ""), + bgfx_access_t.IN("_access", "", Access), + bgfx_texture_format_t.IN("_format", "", TextureFormat) + ) + + void( + "set_compute_index_buffer", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_index_buffer_handle_t.IN("_handle", ""), + bgfx_access_t.IN("_access", "", Access) + ) + + void( + "set_compute_vertex_buffer", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_vertex_buffer_handle_t.IN("_handle", ""), + bgfx_access_t.IN("_access", "", Access) + ) + + void( + "set_compute_dynamic_index_buffer", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_dynamic_index_buffer_handle_t.IN("_handle", ""), + bgfx_access_t.IN("_access", "", Access) + ) + + void( + "set_compute_dynamic_vertex_buffer", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_dynamic_vertex_buffer_handle_t.IN("_handle", ""), + bgfx_access_t.IN("_access", "", Access) + ) + + void( + "set_compute_indirect_buffer", + """ + """, + + MapToInt..uint8_t.IN("_stage", ""), + bgfx_indirect_buffer_handle_t.IN("_handle", ""), + bgfx_access_t.IN("_access", "", Access) + ) + + uint32_t( + "dispatch", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_program_handle_t.IN("_handle", ""), + MapToInt..uint16_t.IN("_numX", ""), + MapToInt..uint16_t.IN("_numY", ""), + MapToInt..uint16_t.IN("_numZ", ""), + MapToInt..uint8_t.IN("_flags", "") + ) + + uint32_t( + "dispatch_indirect", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_program_handle_t.IN("_handle", ""), + bgfx_indirect_buffer_handle_t.IN("_indirectHandle", ""), + MapToInt..uint16_t.IN("_start", ""), + MapToInt..uint16_t.IN("_num", ""), + MapToInt..uint8_t.IN("_flags", "") + ) + + void( + "discard", + """ + """ + ) + + void( + "blit", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_texture_handle_t.IN("_dst", ""), + MapToInt..uint8_t.IN("_dstMip", ""), + MapToInt..uint16_t.IN("_dstX", ""), + MapToInt..uint16_t.IN("_dstY", ""), + MapToInt..uint16_t.IN("_dstZ", ""), + bgfx_texture_handle_t.IN("_src", ""), + MapToInt..uint8_t.IN("_srcMip", ""), + MapToInt..uint16_t.IN("_srcX", ""), + MapToInt..uint16_t.IN("_srcY", ""), + MapToInt..uint16_t.IN("_srcZ", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + MapToInt..uint16_t.IN("_depth", "") + ) + + void( + "blit_frame_buffer", + """ + """, + + MapToInt..uint8_t.IN("_id", ""), + bgfx_texture_handle_t.IN("_dst", ""), + MapToInt..uint8_t.IN("_dstMip", ""), + MapToInt..uint16_t.IN("_dstX", ""), + MapToInt..uint16_t.IN("_dstY", ""), + MapToInt..uint16_t.IN("_dstZ", ""), + bgfx_frame_buffer_handle_t.IN("_src", ""), + MapToInt..uint8_t.IN("_attachment", ""), + MapToInt..uint8_t.IN("_srcMip", ""), + MapToInt..uint16_t.IN("_srcX", ""), + MapToInt..uint16_t.IN("_srcY", ""), + MapToInt..uint16_t.IN("_srcZ", ""), + MapToInt..uint16_t.IN("_width", ""), + MapToInt..uint16_t.IN("_height", ""), + MapToInt..uint16_t.IN("_depth", "") + ) + + void( + "save_screen_shot", + """ + """, + + const..charUTF8.p.IN("_filePath", "") + ) + + void( + "set_platform_data", + """ + """, + + const..bgfx_platform_data_t.IN("_data", "") + ) + +} \ No newline at end of file