diff --git a/.editorconfig b/.editorconfig index 1fd7d0cce..e66406809 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,6 +12,9 @@ trim_trailing_whitespace = true [include/bgfx/c99/*.h] indent_style = space +[scripts/bindings-d.lua] +trim_trailing_whitespace = false + [*.ninja] indent_style = space diff --git a/bindings/d/fakeenum.d b/bindings/d/impl.d similarity index 89% rename from bindings/d/fakeenum.d rename to bindings/d/impl.d index a0a44f37e..59b553a31 100644 --- a/bindings/d/fakeenum.d +++ b/bindings/d/impl.d @@ -3,10 +3,22 @@ + │ AUTO GENERATED! DO NOT EDIT! │ + └==============================┘ +/ -module bgfx.fakeenum; +///Do NOT import this module! Use the symbols with the same names in `bgfx/package.d` instead. +module bgfx.impl; + +import bindbc.bgfx.config; +import bgfx; -//NOTE: Do NOT use this module! Use the enums with the same names in `bgfx/package.d` instead. package: + +mixin(joinFnBinds((){ + FnBind[] ret = [ + {q{const(Memory)*}, q{alloc}, q{uint size}, ext: `C++, "bgfx"`}, + {q{const(Memory)*}, q{copy}, q{const(void)* data, uint size}, ext: `C++, "bgfx"`}, + ]; + return ret; +}())); + extern(C++, "bgfx") package final abstract class Fatal{ enum Enum{ debugCheck,invalidShader,unableToInitialize,unableToCreateTexture,deviceLost,count diff --git a/bindings/d/package.d b/bindings/d/package.d index b26728dd2..961cdcd08 100644 --- a/bindings/d/package.d +++ b/bindings/d/package.d @@ -5,10 +5,9 @@ +/ module bgfx; -import bindbc.bgfx.config; - import bindbc.common.types: c_int64, c_uint64, va_list; -static import bgfx.fakeenum; +import bindbc.bgfx.config; +static import bgfx.impl; enum uint apiVersion = 129; @@ -16,7 +15,7 @@ alias ViewID = ushort; enum invalidHandle(T) = T(ushort.max); -alias ReleaseFn = void function(void* ptr, void* userData); +alias ReleaseFn = extern(C++) void function(void* ptr, void* userData) nothrow; ///Memory release callback. @@ -577,74 +576,74 @@ enum CubeMap: CubeMap_{ } ///Fatal error enum. -enum Fatal: bgfx.fakeenum.Fatal.Enum{ - debugCheck = bgfx.fakeenum.Fatal.Enum.debugCheck, - invalidShader = bgfx.fakeenum.Fatal.Enum.invalidShader, - unableToInitialize = bgfx.fakeenum.Fatal.Enum.unableToInitialize, - unableToInitialise = bgfx.fakeenum.Fatal.Enum.unableToInitialize, - unableToCreateTexture = bgfx.fakeenum.Fatal.Enum.unableToCreateTexture, - deviceLost = bgfx.fakeenum.Fatal.Enum.deviceLost, - count = bgfx.fakeenum.Fatal.Enum.count, +enum Fatal: bgfx.impl.Fatal.Enum{ + debugCheck = bgfx.impl.Fatal.Enum.debugCheck, + invalidShader = bgfx.impl.Fatal.Enum.invalidShader, + unableToInitialize = bgfx.impl.Fatal.Enum.unableToInitialize, + unableToInitialise = bgfx.impl.Fatal.Enum.unableToInitialize, + unableToCreateTexture = bgfx.impl.Fatal.Enum.unableToCreateTexture, + deviceLost = bgfx.impl.Fatal.Enum.deviceLost, + count = bgfx.impl.Fatal.Enum.count, } ///Renderer backend type enum. -enum RendererType: bgfx.fakeenum.RendererType.Enum{ - noop = bgfx.fakeenum.RendererType.Enum.noop, - agc = bgfx.fakeenum.RendererType.Enum.agc, - direct3D11 = bgfx.fakeenum.RendererType.Enum.direct3D11, - direct3D12 = bgfx.fakeenum.RendererType.Enum.direct3D12, - gnm = bgfx.fakeenum.RendererType.Enum.gnm, - metal = bgfx.fakeenum.RendererType.Enum.metal, - nvn = bgfx.fakeenum.RendererType.Enum.nvn, - openGLES = bgfx.fakeenum.RendererType.Enum.openGLES, - openGL = bgfx.fakeenum.RendererType.Enum.openGL, - vulkan = bgfx.fakeenum.RendererType.Enum.vulkan, - count = bgfx.fakeenum.RendererType.Enum.count, +enum RendererType: bgfx.impl.RendererType.Enum{ + noop = bgfx.impl.RendererType.Enum.noop, + agc = bgfx.impl.RendererType.Enum.agc, + direct3D11 = bgfx.impl.RendererType.Enum.direct3D11, + direct3D12 = bgfx.impl.RendererType.Enum.direct3D12, + gnm = bgfx.impl.RendererType.Enum.gnm, + metal = bgfx.impl.RendererType.Enum.metal, + nvn = bgfx.impl.RendererType.Enum.nvn, + openGLES = bgfx.impl.RendererType.Enum.openGLES, + openGL = bgfx.impl.RendererType.Enum.openGL, + vulkan = bgfx.impl.RendererType.Enum.vulkan, + count = bgfx.impl.RendererType.Enum.count, } ///Access mode enum. -enum Access: bgfx.fakeenum.Access.Enum{ - read = bgfx.fakeenum.Access.Enum.read, - write = bgfx.fakeenum.Access.Enum.write, - readWrite = bgfx.fakeenum.Access.Enum.readWrite, - count = bgfx.fakeenum.Access.Enum.count, +enum Access: bgfx.impl.Access.Enum{ + read = bgfx.impl.Access.Enum.read, + write = bgfx.impl.Access.Enum.write, + readWrite = bgfx.impl.Access.Enum.readWrite, + count = bgfx.impl.Access.Enum.count, } ///Vertex attribute enum. -enum Attrib: bgfx.fakeenum.Attrib.Enum{ - position = bgfx.fakeenum.Attrib.Enum.position, - normal = bgfx.fakeenum.Attrib.Enum.normal, - tangent = bgfx.fakeenum.Attrib.Enum.tangent, - bitangent = bgfx.fakeenum.Attrib.Enum.bitangent, - color0 = bgfx.fakeenum.Attrib.Enum.color0, - colour0 = bgfx.fakeenum.Attrib.Enum.color0, - color1 = bgfx.fakeenum.Attrib.Enum.color1, - colour1 = bgfx.fakeenum.Attrib.Enum.color1, - color2 = bgfx.fakeenum.Attrib.Enum.color2, - colour2 = bgfx.fakeenum.Attrib.Enum.color2, - color3 = bgfx.fakeenum.Attrib.Enum.color3, - colour3 = bgfx.fakeenum.Attrib.Enum.color3, - indices = bgfx.fakeenum.Attrib.Enum.indices, - weight = bgfx.fakeenum.Attrib.Enum.weight, - texCoord0 = bgfx.fakeenum.Attrib.Enum.texCoord0, - texCoord1 = bgfx.fakeenum.Attrib.Enum.texCoord1, - texCoord2 = bgfx.fakeenum.Attrib.Enum.texCoord2, - texCoord3 = bgfx.fakeenum.Attrib.Enum.texCoord3, - texCoord4 = bgfx.fakeenum.Attrib.Enum.texCoord4, - texCoord5 = bgfx.fakeenum.Attrib.Enum.texCoord5, - texCoord6 = bgfx.fakeenum.Attrib.Enum.texCoord6, - texCoord7 = bgfx.fakeenum.Attrib.Enum.texCoord7, - count = bgfx.fakeenum.Attrib.Enum.count, +enum Attrib: bgfx.impl.Attrib.Enum{ + position = bgfx.impl.Attrib.Enum.position, + normal = bgfx.impl.Attrib.Enum.normal, + tangent = bgfx.impl.Attrib.Enum.tangent, + bitangent = bgfx.impl.Attrib.Enum.bitangent, + color0 = bgfx.impl.Attrib.Enum.color0, + colour0 = bgfx.impl.Attrib.Enum.color0, + color1 = bgfx.impl.Attrib.Enum.color1, + colour1 = bgfx.impl.Attrib.Enum.color1, + color2 = bgfx.impl.Attrib.Enum.color2, + colour2 = bgfx.impl.Attrib.Enum.color2, + color3 = bgfx.impl.Attrib.Enum.color3, + colour3 = bgfx.impl.Attrib.Enum.color3, + indices = bgfx.impl.Attrib.Enum.indices, + weight = bgfx.impl.Attrib.Enum.weight, + texCoord0 = bgfx.impl.Attrib.Enum.texCoord0, + texCoord1 = bgfx.impl.Attrib.Enum.texCoord1, + texCoord2 = bgfx.impl.Attrib.Enum.texCoord2, + texCoord3 = bgfx.impl.Attrib.Enum.texCoord3, + texCoord4 = bgfx.impl.Attrib.Enum.texCoord4, + texCoord5 = bgfx.impl.Attrib.Enum.texCoord5, + texCoord6 = bgfx.impl.Attrib.Enum.texCoord6, + texCoord7 = bgfx.impl.Attrib.Enum.texCoord7, + count = bgfx.impl.Attrib.Enum.count, } ///Vertex attribute type enum. -enum AttribType: bgfx.fakeenum.AttribType.Enum{ - uint8 = bgfx.fakeenum.AttribType.Enum.uint8, - uint10 = bgfx.fakeenum.AttribType.Enum.uint10, - int16 = bgfx.fakeenum.AttribType.Enum.int16, - half = bgfx.fakeenum.AttribType.Enum.half, - float_ = bgfx.fakeenum.AttribType.Enum.float_, - count = bgfx.fakeenum.AttribType.Enum.count, +enum AttribType: bgfx.impl.AttribType.Enum{ + uint8 = bgfx.impl.AttribType.Enum.uint8, + uint10 = bgfx.impl.AttribType.Enum.uint10, + int16 = bgfx.impl.AttribType.Enum.int16, + half = bgfx.impl.AttribType.Enum.half, + float_ = bgfx.impl.AttribType.Enum.float_, + count = bgfx.impl.AttribType.Enum.count, } /** @@ -661,195 +660,195 @@ Notation: +-------- Components @attention Availability depends on Caps (see: formats). */ -enum TextureFormat: bgfx.fakeenum.TextureFormat.Enum{ - bc1 = bgfx.fakeenum.TextureFormat.Enum.bc1, - bc2 = bgfx.fakeenum.TextureFormat.Enum.bc2, - bc3 = bgfx.fakeenum.TextureFormat.Enum.bc3, - bc4 = bgfx.fakeenum.TextureFormat.Enum.bc4, - bc5 = bgfx.fakeenum.TextureFormat.Enum.bc5, - bc6h = bgfx.fakeenum.TextureFormat.Enum.bc6h, - bc7 = bgfx.fakeenum.TextureFormat.Enum.bc7, - etc1 = bgfx.fakeenum.TextureFormat.Enum.etc1, - etc2 = bgfx.fakeenum.TextureFormat.Enum.etc2, - etc2a = bgfx.fakeenum.TextureFormat.Enum.etc2a, - etc2a1 = bgfx.fakeenum.TextureFormat.Enum.etc2a1, - ptc12 = bgfx.fakeenum.TextureFormat.Enum.ptc12, - ptc14 = bgfx.fakeenum.TextureFormat.Enum.ptc14, - ptc12a = bgfx.fakeenum.TextureFormat.Enum.ptc12a, - ptc14a = bgfx.fakeenum.TextureFormat.Enum.ptc14a, - ptc22 = bgfx.fakeenum.TextureFormat.Enum.ptc22, - ptc24 = bgfx.fakeenum.TextureFormat.Enum.ptc24, - atc = bgfx.fakeenum.TextureFormat.Enum.atc, - atce = bgfx.fakeenum.TextureFormat.Enum.atce, - atci = bgfx.fakeenum.TextureFormat.Enum.atci, - astc4x4 = bgfx.fakeenum.TextureFormat.Enum.astc4x4, - astc5x4 = bgfx.fakeenum.TextureFormat.Enum.astc5x4, - astc5x5 = bgfx.fakeenum.TextureFormat.Enum.astc5x5, - astc6x5 = bgfx.fakeenum.TextureFormat.Enum.astc6x5, - astc6x6 = bgfx.fakeenum.TextureFormat.Enum.astc6x6, - astc8x5 = bgfx.fakeenum.TextureFormat.Enum.astc8x5, - astc8x6 = bgfx.fakeenum.TextureFormat.Enum.astc8x6, - astc8x8 = bgfx.fakeenum.TextureFormat.Enum.astc8x8, - astc10x5 = bgfx.fakeenum.TextureFormat.Enum.astc10x5, - astc10x6 = bgfx.fakeenum.TextureFormat.Enum.astc10x6, - astc10x8 = bgfx.fakeenum.TextureFormat.Enum.astc10x8, - astc10x10 = bgfx.fakeenum.TextureFormat.Enum.astc10x10, - astc12x10 = bgfx.fakeenum.TextureFormat.Enum.astc12x10, - astc12x12 = bgfx.fakeenum.TextureFormat.Enum.astc12x12, - unknown = bgfx.fakeenum.TextureFormat.Enum.unknown, - r1 = bgfx.fakeenum.TextureFormat.Enum.r1, - a8 = bgfx.fakeenum.TextureFormat.Enum.a8, - r8 = bgfx.fakeenum.TextureFormat.Enum.r8, - r8i = bgfx.fakeenum.TextureFormat.Enum.r8i, - r8u = bgfx.fakeenum.TextureFormat.Enum.r8u, - r8s = bgfx.fakeenum.TextureFormat.Enum.r8s, - r16 = bgfx.fakeenum.TextureFormat.Enum.r16, - r16i = bgfx.fakeenum.TextureFormat.Enum.r16i, - r16u = bgfx.fakeenum.TextureFormat.Enum.r16u, - r16f = bgfx.fakeenum.TextureFormat.Enum.r16f, - r16s = bgfx.fakeenum.TextureFormat.Enum.r16s, - r32i = bgfx.fakeenum.TextureFormat.Enum.r32i, - r32u = bgfx.fakeenum.TextureFormat.Enum.r32u, - r32f = bgfx.fakeenum.TextureFormat.Enum.r32f, - rg8 = bgfx.fakeenum.TextureFormat.Enum.rg8, - rg8i = bgfx.fakeenum.TextureFormat.Enum.rg8i, - rg8u = bgfx.fakeenum.TextureFormat.Enum.rg8u, - rg8s = bgfx.fakeenum.TextureFormat.Enum.rg8s, - rg16 = bgfx.fakeenum.TextureFormat.Enum.rg16, - rg16i = bgfx.fakeenum.TextureFormat.Enum.rg16i, - rg16u = bgfx.fakeenum.TextureFormat.Enum.rg16u, - rg16f = bgfx.fakeenum.TextureFormat.Enum.rg16f, - rg16s = bgfx.fakeenum.TextureFormat.Enum.rg16s, - rg32i = bgfx.fakeenum.TextureFormat.Enum.rg32i, - rg32u = bgfx.fakeenum.TextureFormat.Enum.rg32u, - rg32f = bgfx.fakeenum.TextureFormat.Enum.rg32f, - rgb8 = bgfx.fakeenum.TextureFormat.Enum.rgb8, - rgb8i = bgfx.fakeenum.TextureFormat.Enum.rgb8i, - rgb8u = bgfx.fakeenum.TextureFormat.Enum.rgb8u, - rgb8s = bgfx.fakeenum.TextureFormat.Enum.rgb8s, - rgb9e5f = bgfx.fakeenum.TextureFormat.Enum.rgb9e5f, - bgra8 = bgfx.fakeenum.TextureFormat.Enum.bgra8, - rgba8 = bgfx.fakeenum.TextureFormat.Enum.rgba8, - rgba8i = bgfx.fakeenum.TextureFormat.Enum.rgba8i, - rgba8u = bgfx.fakeenum.TextureFormat.Enum.rgba8u, - rgba8s = bgfx.fakeenum.TextureFormat.Enum.rgba8s, - rgba16 = bgfx.fakeenum.TextureFormat.Enum.rgba16, - rgba16i = bgfx.fakeenum.TextureFormat.Enum.rgba16i, - rgba16u = bgfx.fakeenum.TextureFormat.Enum.rgba16u, - rgba16f = bgfx.fakeenum.TextureFormat.Enum.rgba16f, - rgba16s = bgfx.fakeenum.TextureFormat.Enum.rgba16s, - rgba32i = bgfx.fakeenum.TextureFormat.Enum.rgba32i, - rgba32u = bgfx.fakeenum.TextureFormat.Enum.rgba32u, - rgba32f = bgfx.fakeenum.TextureFormat.Enum.rgba32f, - b5g6r5 = bgfx.fakeenum.TextureFormat.Enum.b5g6r5, - r5g6b5 = bgfx.fakeenum.TextureFormat.Enum.r5g6b5, - bgra4 = bgfx.fakeenum.TextureFormat.Enum.bgra4, - rgba4 = bgfx.fakeenum.TextureFormat.Enum.rgba4, - bgr5a1 = bgfx.fakeenum.TextureFormat.Enum.bgr5a1, - rgb5a1 = bgfx.fakeenum.TextureFormat.Enum.rgb5a1, - rgb10a2 = bgfx.fakeenum.TextureFormat.Enum.rgb10a2, - rg11b10f = bgfx.fakeenum.TextureFormat.Enum.rg11b10f, - unknownDepth = bgfx.fakeenum.TextureFormat.Enum.unknownDepth, - d16 = bgfx.fakeenum.TextureFormat.Enum.d16, - d24 = bgfx.fakeenum.TextureFormat.Enum.d24, - d24s8 = bgfx.fakeenum.TextureFormat.Enum.d24s8, - d32 = bgfx.fakeenum.TextureFormat.Enum.d32, - d16f = bgfx.fakeenum.TextureFormat.Enum.d16f, - d24f = bgfx.fakeenum.TextureFormat.Enum.d24f, - d32f = bgfx.fakeenum.TextureFormat.Enum.d32f, - d0s8 = bgfx.fakeenum.TextureFormat.Enum.d0s8, - count = bgfx.fakeenum.TextureFormat.Enum.count, +enum TextureFormat: bgfx.impl.TextureFormat.Enum{ + bc1 = bgfx.impl.TextureFormat.Enum.bc1, + bc2 = bgfx.impl.TextureFormat.Enum.bc2, + bc3 = bgfx.impl.TextureFormat.Enum.bc3, + bc4 = bgfx.impl.TextureFormat.Enum.bc4, + bc5 = bgfx.impl.TextureFormat.Enum.bc5, + bc6h = bgfx.impl.TextureFormat.Enum.bc6h, + bc7 = bgfx.impl.TextureFormat.Enum.bc7, + etc1 = bgfx.impl.TextureFormat.Enum.etc1, + etc2 = bgfx.impl.TextureFormat.Enum.etc2, + etc2a = bgfx.impl.TextureFormat.Enum.etc2a, + etc2a1 = bgfx.impl.TextureFormat.Enum.etc2a1, + ptc12 = bgfx.impl.TextureFormat.Enum.ptc12, + ptc14 = bgfx.impl.TextureFormat.Enum.ptc14, + ptc12a = bgfx.impl.TextureFormat.Enum.ptc12a, + ptc14a = bgfx.impl.TextureFormat.Enum.ptc14a, + ptc22 = bgfx.impl.TextureFormat.Enum.ptc22, + ptc24 = bgfx.impl.TextureFormat.Enum.ptc24, + atc = bgfx.impl.TextureFormat.Enum.atc, + atce = bgfx.impl.TextureFormat.Enum.atce, + atci = bgfx.impl.TextureFormat.Enum.atci, + astc4x4 = bgfx.impl.TextureFormat.Enum.astc4x4, + astc5x4 = bgfx.impl.TextureFormat.Enum.astc5x4, + astc5x5 = bgfx.impl.TextureFormat.Enum.astc5x5, + astc6x5 = bgfx.impl.TextureFormat.Enum.astc6x5, + astc6x6 = bgfx.impl.TextureFormat.Enum.astc6x6, + astc8x5 = bgfx.impl.TextureFormat.Enum.astc8x5, + astc8x6 = bgfx.impl.TextureFormat.Enum.astc8x6, + astc8x8 = bgfx.impl.TextureFormat.Enum.astc8x8, + astc10x5 = bgfx.impl.TextureFormat.Enum.astc10x5, + astc10x6 = bgfx.impl.TextureFormat.Enum.astc10x6, + astc10x8 = bgfx.impl.TextureFormat.Enum.astc10x8, + astc10x10 = bgfx.impl.TextureFormat.Enum.astc10x10, + astc12x10 = bgfx.impl.TextureFormat.Enum.astc12x10, + astc12x12 = bgfx.impl.TextureFormat.Enum.astc12x12, + unknown = bgfx.impl.TextureFormat.Enum.unknown, + r1 = bgfx.impl.TextureFormat.Enum.r1, + a8 = bgfx.impl.TextureFormat.Enum.a8, + r8 = bgfx.impl.TextureFormat.Enum.r8, + r8i = bgfx.impl.TextureFormat.Enum.r8i, + r8u = bgfx.impl.TextureFormat.Enum.r8u, + r8s = bgfx.impl.TextureFormat.Enum.r8s, + r16 = bgfx.impl.TextureFormat.Enum.r16, + r16i = bgfx.impl.TextureFormat.Enum.r16i, + r16u = bgfx.impl.TextureFormat.Enum.r16u, + r16f = bgfx.impl.TextureFormat.Enum.r16f, + r16s = bgfx.impl.TextureFormat.Enum.r16s, + r32i = bgfx.impl.TextureFormat.Enum.r32i, + r32u = bgfx.impl.TextureFormat.Enum.r32u, + r32f = bgfx.impl.TextureFormat.Enum.r32f, + rg8 = bgfx.impl.TextureFormat.Enum.rg8, + rg8i = bgfx.impl.TextureFormat.Enum.rg8i, + rg8u = bgfx.impl.TextureFormat.Enum.rg8u, + rg8s = bgfx.impl.TextureFormat.Enum.rg8s, + rg16 = bgfx.impl.TextureFormat.Enum.rg16, + rg16i = bgfx.impl.TextureFormat.Enum.rg16i, + rg16u = bgfx.impl.TextureFormat.Enum.rg16u, + rg16f = bgfx.impl.TextureFormat.Enum.rg16f, + rg16s = bgfx.impl.TextureFormat.Enum.rg16s, + rg32i = bgfx.impl.TextureFormat.Enum.rg32i, + rg32u = bgfx.impl.TextureFormat.Enum.rg32u, + rg32f = bgfx.impl.TextureFormat.Enum.rg32f, + rgb8 = bgfx.impl.TextureFormat.Enum.rgb8, + rgb8i = bgfx.impl.TextureFormat.Enum.rgb8i, + rgb8u = bgfx.impl.TextureFormat.Enum.rgb8u, + rgb8s = bgfx.impl.TextureFormat.Enum.rgb8s, + rgb9e5f = bgfx.impl.TextureFormat.Enum.rgb9e5f, + bgra8 = bgfx.impl.TextureFormat.Enum.bgra8, + rgba8 = bgfx.impl.TextureFormat.Enum.rgba8, + rgba8i = bgfx.impl.TextureFormat.Enum.rgba8i, + rgba8u = bgfx.impl.TextureFormat.Enum.rgba8u, + rgba8s = bgfx.impl.TextureFormat.Enum.rgba8s, + rgba16 = bgfx.impl.TextureFormat.Enum.rgba16, + rgba16i = bgfx.impl.TextureFormat.Enum.rgba16i, + rgba16u = bgfx.impl.TextureFormat.Enum.rgba16u, + rgba16f = bgfx.impl.TextureFormat.Enum.rgba16f, + rgba16s = bgfx.impl.TextureFormat.Enum.rgba16s, + rgba32i = bgfx.impl.TextureFormat.Enum.rgba32i, + rgba32u = bgfx.impl.TextureFormat.Enum.rgba32u, + rgba32f = bgfx.impl.TextureFormat.Enum.rgba32f, + b5g6r5 = bgfx.impl.TextureFormat.Enum.b5g6r5, + r5g6b5 = bgfx.impl.TextureFormat.Enum.r5g6b5, + bgra4 = bgfx.impl.TextureFormat.Enum.bgra4, + rgba4 = bgfx.impl.TextureFormat.Enum.rgba4, + bgr5a1 = bgfx.impl.TextureFormat.Enum.bgr5a1, + rgb5a1 = bgfx.impl.TextureFormat.Enum.rgb5a1, + rgb10a2 = bgfx.impl.TextureFormat.Enum.rgb10a2, + rg11b10f = bgfx.impl.TextureFormat.Enum.rg11b10f, + unknownDepth = bgfx.impl.TextureFormat.Enum.unknownDepth, + d16 = bgfx.impl.TextureFormat.Enum.d16, + d24 = bgfx.impl.TextureFormat.Enum.d24, + d24s8 = bgfx.impl.TextureFormat.Enum.d24s8, + d32 = bgfx.impl.TextureFormat.Enum.d32, + d16f = bgfx.impl.TextureFormat.Enum.d16f, + d24f = bgfx.impl.TextureFormat.Enum.d24f, + d32f = bgfx.impl.TextureFormat.Enum.d32f, + d0s8 = bgfx.impl.TextureFormat.Enum.d0s8, + count = bgfx.impl.TextureFormat.Enum.count, } ///Uniform type enum. -enum UniformType: bgfx.fakeenum.UniformType.Enum{ - sampler = bgfx.fakeenum.UniformType.Enum.sampler, - end = bgfx.fakeenum.UniformType.Enum.end, - vec4 = bgfx.fakeenum.UniformType.Enum.vec4, - mat3 = bgfx.fakeenum.UniformType.Enum.mat3, - mat4 = bgfx.fakeenum.UniformType.Enum.mat4, - count = bgfx.fakeenum.UniformType.Enum.count, +enum UniformType: bgfx.impl.UniformType.Enum{ + sampler = bgfx.impl.UniformType.Enum.sampler, + end = bgfx.impl.UniformType.Enum.end, + vec4 = bgfx.impl.UniformType.Enum.vec4, + mat3 = bgfx.impl.UniformType.Enum.mat3, + mat4 = bgfx.impl.UniformType.Enum.mat4, + count = bgfx.impl.UniformType.Enum.count, } ///Backbuffer ratio enum. -enum BackbufferRatio: bgfx.fakeenum.BackbufferRatio.Enum{ - equal = bgfx.fakeenum.BackbufferRatio.Enum.equal, - half = bgfx.fakeenum.BackbufferRatio.Enum.half, - quarter = bgfx.fakeenum.BackbufferRatio.Enum.quarter, - eighth = bgfx.fakeenum.BackbufferRatio.Enum.eighth, - sixteenth = bgfx.fakeenum.BackbufferRatio.Enum.sixteenth, - double_ = bgfx.fakeenum.BackbufferRatio.Enum.double_, - count = bgfx.fakeenum.BackbufferRatio.Enum.count, +enum BackbufferRatio: bgfx.impl.BackbufferRatio.Enum{ + equal = bgfx.impl.BackbufferRatio.Enum.equal, + half = bgfx.impl.BackbufferRatio.Enum.half, + quarter = bgfx.impl.BackbufferRatio.Enum.quarter, + eighth = bgfx.impl.BackbufferRatio.Enum.eighth, + sixteenth = bgfx.impl.BackbufferRatio.Enum.sixteenth, + double_ = bgfx.impl.BackbufferRatio.Enum.double_, + count = bgfx.impl.BackbufferRatio.Enum.count, } ///Occlusion query result. -enum OcclusionQueryResult: bgfx.fakeenum.OcclusionQueryResult.Enum{ - invisible = bgfx.fakeenum.OcclusionQueryResult.Enum.invisible, - visible = bgfx.fakeenum.OcclusionQueryResult.Enum.visible, - noResult = bgfx.fakeenum.OcclusionQueryResult.Enum.noResult, - count = bgfx.fakeenum.OcclusionQueryResult.Enum.count, +enum OcclusionQueryResult: bgfx.impl.OcclusionQueryResult.Enum{ + invisible = bgfx.impl.OcclusionQueryResult.Enum.invisible, + visible = bgfx.impl.OcclusionQueryResult.Enum.visible, + noResult = bgfx.impl.OcclusionQueryResult.Enum.noResult, + count = bgfx.impl.OcclusionQueryResult.Enum.count, } ///Primitive topology. -enum Topology: bgfx.fakeenum.Topology.Enum{ - triList = bgfx.fakeenum.Topology.Enum.triList, - triStrip = bgfx.fakeenum.Topology.Enum.triStrip, - lineList = bgfx.fakeenum.Topology.Enum.lineList, - lineStrip = bgfx.fakeenum.Topology.Enum.lineStrip, - pointList = bgfx.fakeenum.Topology.Enum.pointList, - count = bgfx.fakeenum.Topology.Enum.count, +enum Topology: bgfx.impl.Topology.Enum{ + triList = bgfx.impl.Topology.Enum.triList, + triStrip = bgfx.impl.Topology.Enum.triStrip, + lineList = bgfx.impl.Topology.Enum.lineList, + lineStrip = bgfx.impl.Topology.Enum.lineStrip, + pointList = bgfx.impl.Topology.Enum.pointList, + count = bgfx.impl.Topology.Enum.count, } ///Topology conversion function. -enum TopologyConvert: bgfx.fakeenum.TopologyConvert.Enum{ - triListFlipWinding = bgfx.fakeenum.TopologyConvert.Enum.triListFlipWinding, - triStripFlipWinding = bgfx.fakeenum.TopologyConvert.Enum.triStripFlipWinding, - triListToLineList = bgfx.fakeenum.TopologyConvert.Enum.triListToLineList, - triStripToTriList = bgfx.fakeenum.TopologyConvert.Enum.triStripToTriList, - lineStripToLineList = bgfx.fakeenum.TopologyConvert.Enum.lineStripToLineList, - count = bgfx.fakeenum.TopologyConvert.Enum.count, +enum TopologyConvert: bgfx.impl.TopologyConvert.Enum{ + triListFlipWinding = bgfx.impl.TopologyConvert.Enum.triListFlipWinding, + triStripFlipWinding = bgfx.impl.TopologyConvert.Enum.triStripFlipWinding, + triListToLineList = bgfx.impl.TopologyConvert.Enum.triListToLineList, + triStripToTriList = bgfx.impl.TopologyConvert.Enum.triStripToTriList, + lineStripToLineList = bgfx.impl.TopologyConvert.Enum.lineStripToLineList, + count = bgfx.impl.TopologyConvert.Enum.count, } ///Topology sort order. -enum TopologySort: bgfx.fakeenum.TopologySort.Enum{ - directionFrontToBackMin = bgfx.fakeenum.TopologySort.Enum.directionFrontToBackMin, - directionFrontToBackAvg = bgfx.fakeenum.TopologySort.Enum.directionFrontToBackAvg, - directionFrontToBackMax = bgfx.fakeenum.TopologySort.Enum.directionFrontToBackMax, - directionBackToFrontMin = bgfx.fakeenum.TopologySort.Enum.directionBackToFrontMin, - directionBackToFrontAvg = bgfx.fakeenum.TopologySort.Enum.directionBackToFrontAvg, - directionBackToFrontMax = bgfx.fakeenum.TopologySort.Enum.directionBackToFrontMax, - distanceFrontToBackMin = bgfx.fakeenum.TopologySort.Enum.distanceFrontToBackMin, - distanceFrontToBackAvg = bgfx.fakeenum.TopologySort.Enum.distanceFrontToBackAvg, - distanceFrontToBackMax = bgfx.fakeenum.TopologySort.Enum.distanceFrontToBackMax, - distanceBackToFrontMin = bgfx.fakeenum.TopologySort.Enum.distanceBackToFrontMin, - distanceBackToFrontAvg = bgfx.fakeenum.TopologySort.Enum.distanceBackToFrontAvg, - distanceBackToFrontMax = bgfx.fakeenum.TopologySort.Enum.distanceBackToFrontMax, - count = bgfx.fakeenum.TopologySort.Enum.count, +enum TopologySort: bgfx.impl.TopologySort.Enum{ + directionFrontToBackMin = bgfx.impl.TopologySort.Enum.directionFrontToBackMin, + directionFrontToBackAvg = bgfx.impl.TopologySort.Enum.directionFrontToBackAvg, + directionFrontToBackMax = bgfx.impl.TopologySort.Enum.directionFrontToBackMax, + directionBackToFrontMin = bgfx.impl.TopologySort.Enum.directionBackToFrontMin, + directionBackToFrontAvg = bgfx.impl.TopologySort.Enum.directionBackToFrontAvg, + directionBackToFrontMax = bgfx.impl.TopologySort.Enum.directionBackToFrontMax, + distanceFrontToBackMin = bgfx.impl.TopologySort.Enum.distanceFrontToBackMin, + distanceFrontToBackAvg = bgfx.impl.TopologySort.Enum.distanceFrontToBackAvg, + distanceFrontToBackMax = bgfx.impl.TopologySort.Enum.distanceFrontToBackMax, + distanceBackToFrontMin = bgfx.impl.TopologySort.Enum.distanceBackToFrontMin, + distanceBackToFrontAvg = bgfx.impl.TopologySort.Enum.distanceBackToFrontAvg, + distanceBackToFrontMax = bgfx.impl.TopologySort.Enum.distanceBackToFrontMax, + count = bgfx.impl.TopologySort.Enum.count, } ///View mode sets draw call sort order. -enum ViewMode: bgfx.fakeenum.ViewMode.Enum{ - default_ = bgfx.fakeenum.ViewMode.Enum.default_, - sequential = bgfx.fakeenum.ViewMode.Enum.sequential, - depthAscending = bgfx.fakeenum.ViewMode.Enum.depthAscending, - depthDescending = bgfx.fakeenum.ViewMode.Enum.depthDescending, - count = bgfx.fakeenum.ViewMode.Enum.count, +enum ViewMode: bgfx.impl.ViewMode.Enum{ + default_ = bgfx.impl.ViewMode.Enum.default_, + sequential = bgfx.impl.ViewMode.Enum.sequential, + depthAscending = bgfx.impl.ViewMode.Enum.depthAscending, + depthDescending = bgfx.impl.ViewMode.Enum.depthDescending, + count = bgfx.impl.ViewMode.Enum.count, } ///Native window handle type. -enum NativeWindowHandleType: bgfx.fakeenum.NativeWindowHandleType.Enum{ - default_ = bgfx.fakeenum.NativeWindowHandleType.Enum.default_, - wayland = bgfx.fakeenum.NativeWindowHandleType.Enum.wayland, - count = bgfx.fakeenum.NativeWindowHandleType.Enum.count, +enum NativeWindowHandleType: bgfx.impl.NativeWindowHandleType.Enum{ + default_ = bgfx.impl.NativeWindowHandleType.Enum.default_, + wayland = bgfx.impl.NativeWindowHandleType.Enum.wayland, + count = bgfx.impl.NativeWindowHandleType.Enum.count, } ///Render frame enum. -enum RenderFrame: bgfx.fakeenum.RenderFrame.Enum{ - noContext = bgfx.fakeenum.RenderFrame.Enum.noContext, - render = bgfx.fakeenum.RenderFrame.Enum.render, - timeout = bgfx.fakeenum.RenderFrame.Enum.timeout, - exiting = bgfx.fakeenum.RenderFrame.Enum.exiting, - count = bgfx.fakeenum.RenderFrame.Enum.count, +enum RenderFrame: bgfx.impl.RenderFrame.Enum{ + noContext = bgfx.impl.RenderFrame.Enum.noContext, + render = bgfx.impl.RenderFrame.Enum.render, + timeout = bgfx.impl.RenderFrame.Enum.timeout, + exiting = bgfx.impl.RenderFrame.Enum.exiting, + count = bgfx.impl.RenderFrame.Enum.count, } extern(C++, "bgfx") struct DynamicIndexBufferHandle{ @@ -900,61 +899,82 @@ extern(C++, "bgfx") struct VertexLayoutHandle{ ushort idx; } -pragma(inline,true) nothrow @nogc pure @safe{ +pragma(inline,true) nothrow @nogc{ + /** + Allocate a buffer to pass to bgfx. Data will be freed inside bgfx. + Params: + size = Size to allocate. + */ + MemoryRef alloc(uint size){ + auto mem = bgfx.impl.alloc(__traits(parameters)); + return MemoryRef(cast(ubyte[])mem.data[0..mem.size], mem); + } + /** + Allocate a buffer to pass to bgfx and copy `data` into it. Data will be freed inside bgfx. + Params: + data = Pointer to data to be copied. + size = Size of data to be copied. + */ + MemoryRef copy(const(void)* data, uint size){ + auto mem = bgfx.impl.copy(__traits(parameters)); + return MemoryRef(cast(ubyte[])mem.data[0..mem.size], mem); + } + + pure @safe: StateBlend_ blendFuncSeparate(StateBlend_ srcRGB, StateBlend_ dstRGB, StateBlend_ srcA, StateBlend_ dstA){ return (srcRGB | ((dstRGB) << 4)) | ((srcA | (dstA << 4)) << 8); } - + ///Blend equation separate. StateBlendEquation_ blendEquationSeparate(StateBlendEquation_ equationRGB, StateBlendEquation_ equationA){ return equationRGB | (equationA << 3); } - + ///Blend function. StateBlend_ blendFunc(StateBlend_ src, StateBlend_ dst){ return blendFuncSeparate(src, dst, src, dst); } - + ///Blend equation. StateBlendEquation_ blendEquation(StateBlendEquation_ equation){ return blendEquationSeparate(equation, equation); } - + ///Utility predefined blend modes. enum StateBlendFunc: StateBlend_{ ///Additive blending. add = blendFunc(StateBlend.one, StateBlend.one), - + ///Alpha blend. alpha = blendFunc(StateBlend.srcAlpha, StateBlend.invSrcAlpha), - + ///Selects darker color of blend. darken = blendFunc(StateBlend.one, StateBlend.one) | blendEquation(StateBlendEquation.min), - + ///Selects lighter color of blend. lighten = blendFunc(StateBlend.one, StateBlend.one) | blendEquation(StateBlendEquation.max), - + ///Multiplies colors. multiply = blendFunc(StateBlend.dstColor, StateBlend.zero), - + ///Opaque pixels will cover the pixels directly below them without any math or algorithm applied to them. normal = blendFunc(StateBlend.one, StateBlend.invSrcAlpha), - + ///Multiplies the inverse of the blend and base colors. screen = blendFunc(StateBlend.one, StateBlend.invSrcColor), - + ///Decreases the brightness of the base color based on the value of the blend color. linearBurn = blendFunc(StateBlend.dstColor, StateBlend.invDstColor) | blendEquation(StateBlendEquation.sub), } - + StateBlend_ blendFuncRTx(StateBlend_ src, StateBlend_ dst){ return cast(uint)(src >> StateBlend.shift) | (cast(uint)(dst >> StateBlend.shift) << 4); } - + StateBlend_ blendFuncRTxE(StateBlend_ src, StateBlend_ dst, StateBlendEquation_ equation){ return blendFuncRTx(src, dst) | (cast(uint)(equation >> StateBlendEquation.shift) << 8); } - + StateBlend_ blendFuncRT1(StateBlend_ src, StateBlend_ dst){ return blendFuncRTx(src, dst) << 0; } StateBlend_ blendFuncRT2(StateBlend_ src, StateBlend_ dst){ return blendFuncRTx(src, dst) << 11; } StateBlend_ blendFuncRT3(StateBlend_ src, StateBlend_ dst){ return blendFuncRTx(src, dst) << 22; } - + StateBlend_ blendFuncRT1E(StateBlend_ src, StateBlend_ dst, StateBlendEquation_ equation){ return blendFuncRTxE(src, dst, equation) << 0; } @@ -966,6 +986,16 @@ pragma(inline,true) nothrow @nogc pure @safe{ } } +/** +A wrapper around `Memory` that allows you to mutate its `data`. +Do not create instances of this struct yourself. +*/ +struct MemoryRef{ + ubyte[] data; + const(Memory)* memory; + alias memory this; +} + ///Renderer capabilities. extern(C++, "bgfx") struct Caps{ ///GPU info. @@ -1243,7 +1273,7 @@ extern(C++, "bgfx") struct Attachment{ mip = Mip level. resolve = Resolve flags. See: `BGFX_RESOLVE_*` */ - {q{void}, q{init}, q{TextureHandle handle, bgfx.fakeenum.Access.Enum access=Access.write, ushort layer=0, ushort numLayers=1, ushort mip=0, ubyte resolve=Resolve.autoGenMIPs}, ext: `C++`}, + {q{void}, q{init}, q{TextureHandle handle, bgfx.impl.Access.Enum access=Access.write, ushort layer=0, ushort numLayers=1, ushort mip=0, ubyte resolve=Resolve.autoGenMIPs}, ext: `C++`}, ]; return ret; }())); @@ -1335,7 +1365,7 @@ extern(C++, "bgfx") struct VertexLayout{ Params: rendererType = Renderer backend type. See: `bgfx::RendererType` */ - {q{VertexLayout*}, q{begin}, q{bgfx.fakeenum.RendererType.Enum rendererType=RendererType.noop}, ext: `C++`}, + {q{VertexLayout*}, q{begin}, q{bgfx.impl.RendererType.Enum rendererType=RendererType.noop}, ext: `C++`}, /** Add attribute to VertexLayout. @@ -1352,7 +1382,7 @@ extern(C++, "bgfx") struct VertexLayout{ vertexConvert for AttribType::Uint8 and AttribType::Int16. Unpacking code must be implemented inside vertex shader. */ - {q{VertexLayout*}, q{add}, q{bgfx.fakeenum.Attrib.Enum attrib, ubyte num, bgfx.fakeenum.AttribType.Enum type, bool normalised=false, bool asInt=false}, ext: `C++`}, + {q{VertexLayout*}, q{add}, q{bgfx.impl.Attrib.Enum attrib, ubyte num, bgfx.impl.AttribType.Enum type, bool normalised=false, bool asInt=false}, ext: `C++`}, /** Decode attribute. @@ -1363,7 +1393,7 @@ extern(C++, "bgfx") struct VertexLayout{ normalised = Attribute is normalized. asInt = Attribute is packed as int. */ - {q{void}, q{decode}, q{bgfx.fakeenum.Attrib.Enum attrib, ref ubyte num, ref bgfx.fakeenum.AttribType.Enum type, ref bool normalised, ref bool asInt}, ext: `C++`, memAttr: q{const}}, + {q{void}, q{decode}, q{bgfx.impl.Attrib.Enum attrib, ref ubyte num, ref bgfx.impl.AttribType.Enum type, ref bool normalised, ref bool asInt}, ext: `C++`, memAttr: q{const}}, /** Skip `_num` bytes in vertex stream. @@ -1736,7 +1766,7 @@ extern(C++, "bgfx") struct Encoder{ handle = Index buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, IndexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++`}, + {q{void}, q{setBuffer}, q{ubyte stage, IndexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++`}, /** Set compute vertex buffer. @@ -1745,7 +1775,7 @@ extern(C++, "bgfx") struct Encoder{ handle = Vertex buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, VertexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++`}, + {q{void}, q{setBuffer}, q{ubyte stage, VertexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++`}, /** Set compute dynamic index buffer. @@ -1754,7 +1784,7 @@ extern(C++, "bgfx") struct Encoder{ handle = Dynamic index buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, DynamicIndexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++`}, + {q{void}, q{setBuffer}, q{ubyte stage, DynamicIndexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++`}, /** Set compute dynamic vertex buffer. @@ -1763,7 +1793,7 @@ extern(C++, "bgfx") struct Encoder{ handle = Dynamic vertex buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, DynamicVertexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++`}, + {q{void}, q{setBuffer}, q{ubyte stage, DynamicVertexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++`}, /** Set compute indirect buffer. @@ -1772,7 +1802,7 @@ extern(C++, "bgfx") struct Encoder{ handle = Indirect buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, IndirectBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++`}, + {q{void}, q{setBuffer}, q{ubyte stage, IndirectBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++`}, /** Set compute image from texture. @@ -1783,7 +1813,7 @@ extern(C++, "bgfx") struct Encoder{ access = Image access. See `Access::Enum`. format = Texture format. See: `TextureFormat::Enum`. */ - {q{void}, q{setImage}, q{ubyte stage, TextureHandle handle, ubyte mip, bgfx.fakeenum.Access.Enum access, bgfx.fakeenum.TextureFormat.Enum format=TextureFormat.count}, ext: `C++`}, + {q{void}, q{setImage}, q{ubyte stage, TextureHandle handle, ubyte mip, bgfx.impl.Access.Enum access, bgfx.impl.TextureFormat.Enum format=TextureFormat.count}, ext: `C++`}, /** Dispatch compute. @@ -1876,7 +1906,7 @@ mixin(joinFnBinds((){ data = Destination vertex stream where data will be packed. index = Vertex index that will be modified. */ - {q{void}, q{vertexPack}, q{const(float)* input, bool inputNormalised, bgfx.fakeenum.Attrib.Enum attr, ref const VertexLayout layout, void* data, uint index=0}, ext: `C++, "bgfx"`}, + {q{void}, q{vertexPack}, q{const(float)* input, bool inputNormalised, bgfx.impl.Attrib.Enum attr, ref const VertexLayout layout, void* data, uint index=0}, ext: `C++, "bgfx"`}, /** * Unpack vertex attribute from vertex stream format. @@ -1887,7 +1917,7 @@ mixin(joinFnBinds((){ data = Source vertex stream from where data will be unpacked. index = Vertex index that will be unpacked. */ - {q{void}, q{vertexUnpack}, q{float* output, bgfx.fakeenum.Attrib.Enum attr, ref const VertexLayout layout, const(void)* data, uint index=0}, ext: `C++, "bgfx"`}, + {q{void}, q{vertexUnpack}, q{float* output, bgfx.impl.Attrib.Enum attr, ref const VertexLayout layout, const(void)* data, uint index=0}, ext: `C++, "bgfx"`}, /** * Converts vertex stream data from one vertex stream format to another. @@ -1926,7 +1956,7 @@ mixin(joinFnBinds((){ numIndices = Number of input indices. index32 = Set to `true` if input indices are 32-bit. */ - {q{uint}, q{topologyConvert}, q{bgfx.fakeenum.TopologyConvert.Enum conversion, void* dst, uint dstSize, const(void)* indices, uint numIndices, bool index32}, ext: `C++, "bgfx"`}, + {q{uint}, q{topologyConvert}, q{bgfx.impl.TopologyConvert.Enum conversion, void* dst, uint dstSize, const(void)* indices, uint numIndices, bool index32}, ext: `C++, "bgfx"`}, /** * Sort indices. @@ -1946,7 +1976,7 @@ mixin(joinFnBinds((){ numIndices = Number of input indices. index32 = Set to `true` if input indices are 32-bit. */ - {q{void}, q{topologySortTriList}, q{bgfx.fakeenum.TopologySort.Enum sort, void* dst, uint dstSize, const(float)* dir, const(float)* pos, const(void)* vertices, uint stride, const(void)* indices, uint numIndices, bool index32}, ext: `C++, "bgfx"`}, + {q{void}, q{topologySortTriList}, q{bgfx.impl.TopologySort.Enum sort, void* dst, uint dstSize, const(float)* dir, const(float)* pos, const(void)* vertices, uint stride, const(void)* indices, uint numIndices, bool index32}, ext: `C++, "bgfx"`}, /** * Returns supported backend API renderers. @@ -1954,14 +1984,14 @@ mixin(joinFnBinds((){ max = Maximum number of elements in _enum array. enum_ = Array where supported renderers will be written. */ - {q{ubyte}, q{getSupportedRenderers}, q{ubyte max=0, bgfx.fakeenum.RendererType.Enum* enum_=null}, ext: `C++, "bgfx"`}, + {q{ubyte}, q{getSupportedRenderers}, q{ubyte max=0, bgfx.impl.RendererType.Enum* enum_=null}, ext: `C++, "bgfx"`}, /** * Returns name of renderer. Params: type = Renderer backend type. See: `bgfx::RendererType` */ - {q{const(char)*}, q{getRendererName}, q{bgfx.fakeenum.RendererType.Enum type}, ext: `C++, "bgfx"`}, + {q{const(char)*}, q{getRendererName}, q{bgfx.impl.RendererType.Enum type}, ext: `C++, "bgfx"`}, /** * Initialize the bgfx library. @@ -1996,7 +2026,7 @@ mixin(joinFnBinds((){ - `BGFX_RESET_SRGB_BACKBUFFER` - Enable sRGB back-buffer. format = Texture format. See: `TextureFormat::Enum`. */ - {q{void}, q{reset}, q{uint width, uint height, uint flags=Reset.none, bgfx.fakeenum.TextureFormat.Enum format=TextureFormat.count}, ext: `C++, "bgfx"`}, + {q{void}, q{reset}, q{uint width, uint height, uint flags=Reset.none, bgfx.impl.TextureFormat.Enum format=TextureFormat.count}, ext: `C++, "bgfx"`}, /** * Advance to next frame. When using multithreaded renderer, this call @@ -2027,21 +2057,6 @@ mixin(joinFnBinds((){ */ {q{const(Stats)*}, q{getStats}, q{}, ext: `C++, "bgfx"`}, - /** - * Allocate buffer to pass to bgfx calls. Data will be freed inside bgfx. - Params: - size = Size to allocate. - */ - {q{const(Memory)*}, q{alloc}, q{uint size}, ext: `C++, "bgfx"`}, - - /** - * Allocate buffer and copy data into it. Data will be freed inside bgfx. - Params: - data = Pointer to data to be copied. - size = Size of data to be copied. - */ - {q{const(Memory)*}, q{copy}, q{const(void)* data, uint size}, ext: `C++, "bgfx"`}, - /** * Make reference to data to pass to bgfx. Unlike `bgfx::alloc`, this call * doesn't allocate memory for data. It just copies the _data pointer. You @@ -2472,7 +2487,7 @@ mixin(joinFnBinds((){ format = Texture format. See: `TextureFormat::Enum`. flags = Texture flags. See `BGFX_TEXTURE_*`. */ - {q{bool}, q{isTextureValid}, q{ushort depth, bool cubeMap, ushort numLayers, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 flags}, ext: `C++, "bgfx"`}, + {q{bool}, q{isTextureValid}, q{ushort depth, bool cubeMap, ushort numLayers, bgfx.impl.TextureFormat.Enum format, c_uint64 flags}, ext: `C++, "bgfx"`}, /** * Validate frame buffer parameters. @@ -2494,7 +2509,7 @@ mixin(joinFnBinds((){ numLayers = Number of layers in texture array. format = Texture format. See: `TextureFormat::Enum`. */ - {q{void}, q{calcTextureSize}, q{ref TextureInfo info, ushort width, ushort height, ushort depth, bool cubeMap, bool hasMIPs, ushort numLayers, bgfx.fakeenum.TextureFormat.Enum format}, ext: `C++, "bgfx"`}, + {q{void}, q{calcTextureSize}, q{ref TextureInfo info, ushort width, ushort height, ushort depth, bool cubeMap, bool hasMIPs, ushort numLayers, bgfx.impl.TextureFormat.Enum format}, ext: `C++, "bgfx"`}, /** * Create texture from memory buffer. @@ -2530,7 +2545,7 @@ mixin(joinFnBinds((){ `_mem` is NULL content of the texture is uninitialized. When `_numLayers` is more than 1, expected memory layout is texture and all mips together for each array element. */ - {q{TextureHandle}, q{createTexture2D}, q{ushort width, ushort height, bool hasMIPs, ushort numLayers, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none, const(Memory)* mem=null}, ext: `C++, "bgfx"`}, + {q{TextureHandle}, q{createTexture2D}, q{ushort width, ushort height, bool hasMIPs, ushort numLayers, bgfx.impl.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none, const(Memory)* mem=null}, ext: `C++, "bgfx"`}, /** * Create texture with size based on back-buffer ratio. Texture will maintain ratio @@ -2548,7 +2563,7 @@ mixin(joinFnBinds((){ - `BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic sampling. */ - {q{TextureHandle}, q{createTexture2D}, q{bgfx.fakeenum.BackbufferRatio.Enum ratio, bool hasMIPs, ushort numLayers, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none}, ext: `C++, "bgfx"`}, + {q{TextureHandle}, q{createTexture2D}, q{bgfx.impl.BackbufferRatio.Enum ratio, bool hasMIPs, ushort numLayers, bgfx.impl.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none}, ext: `C++, "bgfx"`}, /** * Create 3D texture. @@ -2568,7 +2583,7 @@ mixin(joinFnBinds((){ `_mem` is NULL content of the texture is uninitialized. When `_numLayers` is more than 1, expected memory layout is texture and all mips together for each array element. */ - {q{TextureHandle}, q{createTexture3D}, q{ushort width, ushort height, ushort depth, bool hasMIPs, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none, const(Memory)* mem=null}, ext: `C++, "bgfx"`}, + {q{TextureHandle}, q{createTexture3D}, q{ushort width, ushort height, ushort depth, bool hasMIPs, bgfx.impl.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none, const(Memory)* mem=null}, ext: `C++, "bgfx"`}, /** * Create Cube texture. @@ -2588,7 +2603,7 @@ mixin(joinFnBinds((){ `_mem` is NULL content of the texture is uninitialized. When `_numLayers` is more than 1, expected memory layout is texture and all mips together for each array element. */ - {q{TextureHandle}, q{createTextureCube}, q{ushort size, bool hasMIPs, ushort numLayers, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none, const(Memory)* mem=null}, ext: `C++, "bgfx"`}, + {q{TextureHandle}, q{createTextureCube}, q{ushort size, bool hasMIPs, ushort numLayers, bgfx.impl.TextureFormat.Enum format, c_uint64 flags=Texture.none|Sampler.none, const(Memory)* mem=null}, ext: `C++, "bgfx"`}, /** * Update 2D texture. @@ -2708,7 +2723,7 @@ mixin(joinFnBinds((){ - `BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic sampling. */ - {q{FrameBufferHandle}, q{createFrameBuffer}, q{ushort width, ushort height, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 textureFlags=SamplerU.clamp|SamplerV.clamp}, ext: `C++, "bgfx"`}, + {q{FrameBufferHandle}, q{createFrameBuffer}, q{ushort width, ushort height, bgfx.impl.TextureFormat.Enum format, c_uint64 textureFlags=SamplerU.clamp|SamplerV.clamp}, ext: `C++, "bgfx"`}, /** * Create frame buffer with size based on back-buffer ratio. Frame buffer will maintain ratio @@ -2724,7 +2739,7 @@ mixin(joinFnBinds((){ - `BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic sampling. */ - {q{FrameBufferHandle}, q{createFrameBuffer}, q{bgfx.fakeenum.BackbufferRatio.Enum ratio, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 textureFlags=SamplerU.clamp|SamplerV.clamp}, ext: `C++, "bgfx"`}, + {q{FrameBufferHandle}, q{createFrameBuffer}, q{bgfx.impl.BackbufferRatio.Enum ratio, bgfx.impl.TextureFormat.Enum format, c_uint64 textureFlags=SamplerU.clamp|SamplerV.clamp}, ext: `C++, "bgfx"`}, /** * Create MRT frame buffer from texture handles (simple). @@ -2759,7 +2774,7 @@ mixin(joinFnBinds((){ format = Window back buffer color format. depthFormat = Window back buffer depth format. */ - {q{FrameBufferHandle}, q{createFrameBuffer}, q{void* nwh, ushort width, ushort height, bgfx.fakeenum.TextureFormat.Enum format=TextureFormat.count, bgfx.fakeenum.TextureFormat.Enum depthFormat=TextureFormat.count}, ext: `C++, "bgfx"`}, + {q{FrameBufferHandle}, q{createFrameBuffer}, q{void* nwh, ushort width, ushort height, bgfx.impl.TextureFormat.Enum format=TextureFormat.count, bgfx.impl.TextureFormat.Enum depthFormat=TextureFormat.count}, ext: `C++, "bgfx"`}, /** * Set frame buffer debug name. @@ -2815,7 +2830,7 @@ mixin(joinFnBinds((){ type = Type of uniform (See: `bgfx::UniformType`). num = Number of elements in array. */ - {q{UniformHandle}, q{createUniform}, q{const(char)* name, bgfx.fakeenum.UniformType.Enum type, ushort num=1}, ext: `C++, "bgfx"`}, + {q{UniformHandle}, q{createUniform}, q{const(char)* name, bgfx.impl.UniformType.Enum type, ushort num=1}, ext: `C++, "bgfx"`}, /** * Retrieve uniform info. @@ -2917,7 +2932,7 @@ mixin(joinFnBinds((){ ratio = Width and height will be set in respect to back-buffer size. See: `BackbufferRatio::Enum`. */ - {q{void}, q{setViewRect}, q{ViewID id, ushort x, ushort y, bgfx.fakeenum.BackbufferRatio.Enum ratio}, ext: `C++, "bgfx"`}, + {q{void}, q{setViewRect}, q{ViewID id, ushort x, ushort y, bgfx.impl.BackbufferRatio.Enum ratio}, ext: `C++, "bgfx"`}, /** * Set view scissor. Draw primitive outside view will be clipped. When @@ -2972,7 +2987,7 @@ mixin(joinFnBinds((){ id = View id. mode = View sort mode. See `ViewMode::Enum`. */ - {q{void}, q{setViewMode}, q{ViewID id, bgfx.fakeenum.ViewMode.Enum mode=ViewMode.default_}, ext: `C++, "bgfx"`}, + {q{void}, q{setViewMode}, q{ViewID id, bgfx.impl.ViewMode.Enum mode=ViewMode.default_}, ext: `C++, "bgfx"`}, /** * Set view frame buffer. @@ -3100,7 +3115,7 @@ mixin(joinFnBinds((){ - `BGFX_SAMPLER_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic sampling. */ - {q{size_t}, q{overrideInternal}, q{TextureHandle handle, ushort width, ushort height, ubyte numMIPs, bgfx.fakeenum.TextureFormat.Enum format, c_uint64 flags=Texture.none | Sampler.none}, ext: `C++, "bgfx"`}, + {q{size_t}, q{overrideInternal}, q{TextureHandle handle, ushort width, ushort height, ubyte numMIPs, bgfx.impl.TextureFormat.Enum format, c_uint64 flags=Texture.none | Sampler.none}, ext: `C++, "bgfx"`}, /** * Sets a debug marker. This allows you to group graphics calls together for easy browsing in @@ -3460,7 +3475,7 @@ mixin(joinFnBinds((){ handle = Index buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, IndexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++, "bgfx"`}, + {q{void}, q{setBuffer}, q{ubyte stage, IndexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++, "bgfx"`}, /** * Set compute vertex buffer. @@ -3469,7 +3484,7 @@ mixin(joinFnBinds((){ handle = Vertex buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, VertexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++, "bgfx"`}, + {q{void}, q{setBuffer}, q{ubyte stage, VertexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++, "bgfx"`}, /** * Set compute dynamic index buffer. @@ -3478,7 +3493,7 @@ mixin(joinFnBinds((){ handle = Dynamic index buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, DynamicIndexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++, "bgfx"`}, + {q{void}, q{setBuffer}, q{ubyte stage, DynamicIndexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++, "bgfx"`}, /** * Set compute dynamic vertex buffer. @@ -3487,7 +3502,7 @@ mixin(joinFnBinds((){ handle = Dynamic vertex buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, DynamicVertexBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++, "bgfx"`}, + {q{void}, q{setBuffer}, q{ubyte stage, DynamicVertexBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++, "bgfx"`}, /** * Set compute indirect buffer. @@ -3496,7 +3511,7 @@ mixin(joinFnBinds((){ handle = Indirect buffer handle. access = Buffer access. See `Access::Enum`. */ - {q{void}, q{setBuffer}, q{ubyte stage, IndirectBufferHandle handle, bgfx.fakeenum.Access.Enum access}, ext: `C++, "bgfx"`}, + {q{void}, q{setBuffer}, q{ubyte stage, IndirectBufferHandle handle, bgfx.impl.Access.Enum access}, ext: `C++, "bgfx"`}, /** * Set compute image from texture. @@ -3507,7 +3522,7 @@ mixin(joinFnBinds((){ access = Image access. See `Access::Enum`. format = Texture format. See: `TextureFormat::Enum`. */ - {q{void}, q{setImage}, q{ubyte stage, TextureHandle handle, ubyte mip, bgfx.fakeenum.Access.Enum access, bgfx.fakeenum.TextureFormat.Enum format=TextureFormat.count}, ext: `C++, "bgfx"`}, + {q{void}, q{setImage}, q{ubyte stage, TextureHandle handle, ubyte mip, bgfx.impl.Access.Enum access, bgfx.impl.TextureFormat.Enum format=TextureFormat.count}, ext: `C++, "bgfx"`}, /** * Dispatch compute. @@ -3586,13 +3601,13 @@ mixin(joinFnBinds((){ ]; return ret; -}(), "Resolution, Limits, Init, Attachment, VertexLayout, Encoder, ")); +}(), "Resolution, Init.Limits, Init, Attachment, VertexLayout, Encoder, ")); static if(!staticBinding): import bindbc.loader; debug{ - mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libDebug", "bgfxDebug", "bgfx"]), [__MODULE__])); + mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libDebug", "bgfxDebug", "bgfx"]), [__MODULE__, "bgfx.impl"])); }else{ - mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libRelease", "bgfxRelease", "bgfx"]), [__MODULE__])); + mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libRelease", "bgfxRelease", "bgfx"]), [__MODULE__, "bgfx.impl"])); } diff --git a/scripts/bindings-d.lua b/scripts/bindings-d.lua index 8f47d8a0c..8ec28a9d1 100644 --- a/scripts/bindings-d.lua +++ b/scripts/bindings-d.lua @@ -9,10 +9,9 @@ local template = [[ +/ module bgfx; -import bindbc.bgfx.config; - import bindbc.common.types: c_int64, c_uint64, va_list; -static import bgfx.fakeenum; +import bindbc.bgfx.config; +static import bgfx.impl; $version @@ -20,64 +19,85 @@ alias ViewID = ushort; enum invalidHandle(T) = T(ushort.max); -alias ReleaseFn = void function(void* ptr, void* userData); +alias ReleaseFn = extern(C++) void function(void* ptr, void* userData) nothrow; $types -pragma(inline,true) nothrow @nogc pure @safe{ +pragma(inline,true) nothrow @nogc{ + /** + Allocate a buffer to pass to bgfx. Data will be freed inside bgfx. + Params: + size = Size to allocate. + */ + MemoryRef alloc(uint size){ + auto mem = bgfx.impl.alloc(__traits(parameters)); + return MemoryRef(cast(ubyte[])mem.data[0..mem.size], mem); + } + /** + Allocate a buffer to pass to bgfx and copy `data` into it. Data will be freed inside bgfx. + Params: + data = Pointer to data to be copied. + size = Size of data to be copied. + */ + MemoryRef copy(const(void)* data, uint size){ + auto mem = bgfx.impl.copy(__traits(parameters)); + return MemoryRef(cast(ubyte[])mem.data[0..mem.size], mem); + } + + pure @safe: StateBlend_ blendFuncSeparate(StateBlend_ srcRGB, StateBlend_ dstRGB, StateBlend_ srcA, StateBlend_ dstA){ return (srcRGB | ((dstRGB) << 4)) | ((srcA | (dstA << 4)) << 8); } - + ///Blend equation separate. StateBlendEquation_ blendEquationSeparate(StateBlendEquation_ equationRGB, StateBlendEquation_ equationA){ return equationRGB | (equationA << 3); } - + ///Blend function. StateBlend_ blendFunc(StateBlend_ src, StateBlend_ dst){ return blendFuncSeparate(src, dst, src, dst); } - + ///Blend equation. StateBlendEquation_ blendEquation(StateBlendEquation_ equation){ return blendEquationSeparate(equation, equation); } - + ///Utility predefined blend modes. enum StateBlendFunc: StateBlend_{ ///Additive blending. add = blendFunc(StateBlend.one, StateBlend.one), - + ///Alpha blend. alpha = blendFunc(StateBlend.srcAlpha, StateBlend.invSrcAlpha), - + ///Selects darker color of blend. darken = blendFunc(StateBlend.one, StateBlend.one) | blendEquation(StateBlendEquation.min), - + ///Selects lighter color of blend. lighten = blendFunc(StateBlend.one, StateBlend.one) | blendEquation(StateBlendEquation.max), - + ///Multiplies colors. multiply = blendFunc(StateBlend.dstColor, StateBlend.zero), - + ///Opaque pixels will cover the pixels directly below them without any math or algorithm applied to them. normal = blendFunc(StateBlend.one, StateBlend.invSrcAlpha), - + ///Multiplies the inverse of the blend and base colors. screen = blendFunc(StateBlend.one, StateBlend.invSrcColor), - + ///Decreases the brightness of the base color based on the value of the blend color. linearBurn = blendFunc(StateBlend.dstColor, StateBlend.invDstColor) | blendEquation(StateBlendEquation.sub), } - + StateBlend_ blendFuncRTx(StateBlend_ src, StateBlend_ dst){ return cast(uint)(src >> StateBlend.shift) | (cast(uint)(dst >> StateBlend.shift) << 4); } - + StateBlend_ blendFuncRTxE(StateBlend_ src, StateBlend_ dst, StateBlendEquation_ equation){ return blendFuncRTx(src, dst) | (cast(uint)(equation >> StateBlendEquation.shift) << 8); } - + StateBlend_ blendFuncRT1(StateBlend_ src, StateBlend_ dst){ return blendFuncRTx(src, dst) << 0; } StateBlend_ blendFuncRT2(StateBlend_ src, StateBlend_ dst){ return blendFuncRTx(src, dst) << 11; } StateBlend_ blendFuncRT3(StateBlend_ src, StateBlend_ dst){ return blendFuncRTx(src, dst) << 22; } - + StateBlend_ blendFuncRT1E(StateBlend_ src, StateBlend_ dst, StateBlendEquation_ equation){ return blendFuncRTxE(src, dst, equation) << 0; } @@ -89,6 +109,16 @@ pragma(inline,true) nothrow @nogc pure @safe{ } } +/** +A wrapper around `Memory` that allows you to mutate its `data`. +Do not create instances of this struct yourself. +*/ +struct MemoryRef{ + ubyte[] data; + const(Memory)* memory; + alias memory this; +} + $structs mixin(joinFnBinds((){ FnBind[] ret = [ @@ -101,9 +131,9 @@ static if(!staticBinding): import bindbc.loader; debug{ - mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libDebug", "bgfxDebug", "bgfx"]), [__MODULE__])); + mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libDebug", "bgfxDebug", "bgfx"]), [__MODULE__, "bgfx.impl"])); }else{ - mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libRelease", "bgfxRelease", "bgfx"]), [__MODULE__])); + mixin(makeDynloadFns("Bgfx", makeLibPaths(["bgfx-shared-libRelease", "bgfxRelease", "bgfx"]), [__MODULE__, "bgfx.impl"])); } ]] @@ -216,7 +246,7 @@ local function hexStr(val, bits) str = str:sub(0, i) .. "_" .. str:sub(i+1) i = i + 5 end - + return "0x" .. str end @@ -248,14 +278,14 @@ local function convSomeType(arg, isFnArg) end type = type:gsub("::Enum", "") --fix enums type = type:gsub("%s+%*", "*") --remove spacing before `*` - + if isFnArg then for _, enum in pairs(enumTypes) do --fix C++ linkage errors if type == enum then - type = string.format("bgfx.fakeenum.%s.Enum", enum) + type = string.format("bgfx.impl.%s.Enum", enum) else type = (type:gsub("(" .. enum .. ")([^A-Za-z0-9_])", function(s0, s1) - return string.format("bgfx.fakeenum.%s.Enum", enum) .. s1 + return string.format("bgfx.impl.%s.Enum", enum) .. s1 end)) end end @@ -272,7 +302,7 @@ local function convSomeType(arg, isFnArg) type = type:gsub("const%s+([A-Za-z_][A-Za-z0-9_]*)%s*%*", "const(%1)*") --change `const x*` to `const(x)*` type = abbrevsToUpper(type) end - + return type end @@ -289,9 +319,9 @@ local valSubs = { UINT8_MAX = "ubyte.max", UINT16_MAX = "ushort.max", UINT32_MAX = "uint.max", - + BGFX_INVALID_HANDLE = "invalidHandle", - + BGFX_DISCARD_ALL = "Discard.all", BGFX_BUFFER_NONE = "Buffer.none", BGFX_STENCIL_NONE = "Stencil.none", @@ -318,7 +348,7 @@ local function convVal(arg, type) val = val:gsub("INT32_MAX", "int.max") end val = convArray(val) - + return val end @@ -359,7 +389,7 @@ local function genStructMemberFn(func) --NOTE: this does not work on nested stru line = line:gsub("@(%l)(%l+)", function(a, b) return a:upper() .. b .. ":" end) table.insert(st.fns, line) end - + local hasParamsComments = false for _, arg in ipairs(func.args) do if arg.comment ~= nil then @@ -367,11 +397,11 @@ local function genStructMemberFn(func) --NOTE: this does not work on nested stru break end end - + if hasParamsComments then table.insert(st.fns, "Params:") end - + for _, arg in ipairs(func.args) do if arg.comment ~= nil then table.insert(st.fns, "\t" .. toIntlEnUncond(convName(arg.name:sub(2))) .. " = " .. arg.comment[1]) @@ -382,10 +412,10 @@ local function genStructMemberFn(func) --NOTE: this does not work on nested stru end end end - + table.insert(st.fns, "*/") end - + local args = {} for _, arg in ipairs(func.args) do local def = "" @@ -398,14 +428,14 @@ local function genStructMemberFn(func) --NOTE: this does not work on nested stru table.insert(args, convFnArgType(arg) .. " " .. toIntlEnUncond(convName(arg.name:sub(2))) .. def) end end - + if func.const ~= nil then attribs = "const" end if attribs ~= "" then attribs = ", memAttr: q{" .. attribs .. "}" end - + table.insert(st.fns, string.format("{q{%s}, q{%s}, q{%s}, ext: `C++`%s},", convType(func.ret), func.name, table.concat(args, ", "), attribs)) end end @@ -414,16 +444,28 @@ local converter = {} local yield = coroutine.yield local gen = {} -gen.fakeEnumFile = [[ +gen.implFile = [[ /+ + ┌==============================┐ + │ AUTO GENERATED! DO NOT EDIT! │ + └==============================┘ +/ -module bgfx.fakeenum; +///Do NOT import this module! Use the symbols with the same names in `bgfx/package.d` instead. +module bgfx.impl; + +import bindbc.bgfx.config; +import bgfx; -//NOTE: Do NOT use this module! Use the enums with the same names in `bgfx/package.d` instead. package: + +mixin(joinFnBinds((){ + FnBind[] ret = [ + {q{const(Memory)*}, q{alloc}, q{uint size}, ext: `C++, "bgfx"`}, + {q{const(Memory)*}, q{copy}, q{const(void)* data, uint size}, ext: `C++, "bgfx"`}, + ]; + return ret; +}())); + ]] function gen.gen() @@ -431,7 +473,7 @@ function gen.gen() local idx = 1; local r = template:gsub("$([a-zA-Z_]+)", function(what) local tmp = {} - + local ind_end = template:find("$"..what, idx, true) local ind_start = ind_end for j = 1, ind_end-1 do @@ -442,9 +484,9 @@ function gen.gen() break end end - + indent = string.sub(template, ind_start+1, ind_end-1) - + if what == "version" then return genVersion() elseif what == "structs" then @@ -456,7 +498,7 @@ function gen.gen() local co = coroutine.create(converter[what]) local any while true do - local ok, v = coroutine.resume(co, allStructs[object.name], object.name, true, indent:len()) + local ok, v = coroutine.resume(co, allStructs[object.name], object.name, object.name, true, indent:len()) assert(ok, debug.traceback(co, v)) if not v then break @@ -494,23 +536,23 @@ function gen.gen() return r end -function converter.structs(st, name, topLvl) +function converter.structs(st, name, fullyQualifiedName, topLvl) for _, line in ipairs(st.comments) do yield(line) end - + if topLvl then yield("extern(C++, \"bgfx\") struct " .. name .. "{") else yield("extern(C++) struct " .. name .. "{") end - + local subN = 0 for _, subStruct in ipairs(st.subs) do subN = subN + 1 local co = coroutine.create(converter.structs) while true do - local ok, v = coroutine.resume(co, subStruct, subStruct.name, false) + local ok, v = coroutine.resume(co, subStruct, subStruct.name, name .. "." .. subStruct.name, false) assert(ok, debug.traceback(co, v)) if not v then break @@ -521,13 +563,13 @@ function converter.structs(st, name, topLvl) if subN > 0 then yield("\t") end - + for _, line in ipairs(st.fields) do yield(line) end - + if #st.fns > 0 then - membersWithFns = membersWithFns .. name .. ", " + membersWithFns = membersWithFns .. fullyQualifiedName .. ", " yield("\textern(D) mixin(joinFnBinds((){") yield("\t\tFnBind[] ret = [") for _, line in ipairs(st.fns) do @@ -553,13 +595,13 @@ function converter.types(typ) yield("*/") end end - + if typ.handle then ---hnadle yield("extern(C++, \"bgfx\") struct " .. typ.name .. "{") yield("\tushort idx;") yield("}") --yield(typ.name .. " invalidHandle(){ return " .. typ.name .. "(ushort.max); }") - + -- For some reason, this has never worked, so I'm commenting it out just in case it does start working suddenly. :P --[[ elseif typ.funcptr then @@ -571,16 +613,16 @@ function converter.types(typ) table.insert(args, convFnArgType(arg) .. " " .. convName(arg.name:sub(2)) .. def) end end - + yield(string.format("alias %s = extern(C++) %s function(%s);", typ.name, convType(typ.ret), table.concat(args, ", "))) --]] elseif typ.enum then local typeName = abbrevsToUpper(typ.name:gsub("::Enum", "")) - local otherName = string.format("bgfx.fakeenum.%s.Enum", typ.name:gsub("::Enum", "")) - + local otherName = string.format("bgfx.impl.%s.Enum", typ.name:gsub("::Enum", "")) + yield("enum " .. typeName .. ": " .. otherName .. "{") table.insert(enumTypes, typeName) - + local vals = "" for idx, enum in ipairs(typ.enum) do local comments = "" @@ -598,30 +640,30 @@ function converter.types(typ) local name = convName(toCamelCase(enum.name)) yield("\t" .. name .. " = " .. otherName .. "." .. name .. ",") vals = vals .. name .. "," - + local intlName = toIntlEn(enum.name) if intlName ~= nil then yield("\t" .. convName(toCamelCase(intlName)) .. " = " .. otherName .. "." .. name .. ",") end end - - gen.fakeEnumFile = gen.fakeEnumFile .. string.format([[ + + gen.implFile = gen.implFile .. string.format([[ extern(C++, "bgfx") package final abstract class %s{ enum Enum{ %scount } } ]], typeName, vals) - + yield("\t" .. "count = " .. otherName .. ".count,") yield("}") - + elseif typ.bits ~= nil then local typeName = convName(typ.name) if typeName == "Caps" then typeName = "CapFlags" end - + local enumType = "uint" if typ.bits == 64 then enumType = "ulong" @@ -632,7 +674,7 @@ extern(C++, "bgfx") package final abstract class %s{ elseif typ.bits == 8 then enumType = "ubyte" end - + local maxLen = 0 if typ.shift then maxLen = string.len("shift") @@ -642,10 +684,10 @@ extern(C++, "bgfx") package final abstract class %s{ for _, flag in ipairs(typ.flag) do maxLen = math.max(maxLen, flag.name:len()) end - + yield("alias " .. typeName .. "_ = " .. enumType .. ";") yield("enum " .. typeName .. ": " .. typeName .. "_{") - + local function getValOr(name) local t = typeName if typeName == "State" then @@ -685,7 +727,7 @@ extern(C++, "bgfx") package final abstract class %s{ end return abbrevsToUpper(t) .. "." .. convName(toCamelCase(name)) end - + for idx, flag in ipairs(typ.flag) do local value = flag.value if value ~= nil then @@ -699,7 +741,7 @@ extern(C++, "bgfx") package final abstract class %s{ end end end - + local comments = "" if flag.comment ~= nil then if #flag.comment == 1 then @@ -712,17 +754,17 @@ extern(C++, "bgfx") package final abstract class %s{ yield("\t*/") end end - + local name = convName(toCamelCase(flag.name)) yield("\t" .. name .. string.rep(" ", maxLen+2 - name:len()) .. "= " .. value .. "," .. comments) - + local intlName = toIntlEn(name) if intlName ~= nil then intlName = intlName yield("\t" .. intlName .. string.rep(" ", maxLen+2 - intlName:len()) .. "= " .. name .. ",") end end - + if typ.shift then local name = convName("shift") local value = typ.shift @@ -742,12 +784,12 @@ extern(C++, "bgfx") package final abstract class %s{ yield("\t" .. name .. string.rep(" ", maxLen+2 - name:len()) .. "= " .. value .. "," .. comments) end yield("}") - + local intlName = toIntlEn(typeName) if intlName ~= nil then yield("alias " .. intlName .. " = " .. typeName .. ";") end - + if typ.helper then yield(string.format( "%s_ to%s(%s v) nothrow @nogc pure @safe{ return (v << %s) & %s; }", @@ -762,7 +804,7 @@ extern(C++, "bgfx") package final abstract class %s{ end elseif typ.struct ~= nil then local st = {name = typ.name, comments = {}, fields = {}, fns = {}, subs = {}} - + if typ.comments ~= nil then if #typ.comments == 1 then table.insert(st.comments, "///" .. typ.comments[1]) @@ -774,7 +816,7 @@ extern(C++, "bgfx") package final abstract class %s{ table.insert(st.comments, "*/") end end - + for _, member in ipairs(typ.struct) do local comments = "" if member.comment ~= nil then @@ -793,11 +835,11 @@ extern(C++, "bgfx") package final abstract class %s{ end table.insert(st.fields, "\t" .. convStructMember(member) .. ";" .. comments) end - + if typ.ctor ~= nil and typ.name ~= "PlatformData" then table.insert(st.fns, "{q{void}, q{this}, q{}, ext: `C++`},") end - + if typ.namespace ~= nil then --if this is a sub-struct if allStructs[typ.namespace] ~= nil then table.insert(allStructs[typ.namespace].subs, st) @@ -817,7 +859,7 @@ function converter.funcs(func) if func.class == nil and func.conly == nil and func.cppinline == nil then local extern = "C++, \"bgfx\"" local attribs = "" - if func.cfunc ~= nil and func.name ~= "init" then --what the is "cfunc" even meant to mean? + if (func.cfunc ~= nil and func.name ~= "init") or func.name == "alloc" or func.name == "copy" then --what the is "cfunc" even meant to mean? return end if func.comments ~= nil then @@ -828,7 +870,7 @@ function converter.funcs(func) line = line:gsub("@(%l)(%l+)", function(a, b) return a:upper() .. b .. ":" end) yield("* " .. line) end - + local hasParamsComments = false for _, arg in ipairs(func.args) do if arg.comment ~= nil then @@ -836,11 +878,11 @@ function converter.funcs(func) break end end - + if hasParamsComments then yield("Params:") end - + for _, arg in ipairs(func.args) do if arg.comment ~= nil then yield("\t" .. toIntlEnUncond(convName(arg.name:sub(2))) .. " = " .. arg.comment[1]) @@ -851,10 +893,10 @@ function converter.funcs(func) end end end - + yield("*/") end - + local args = {} for _, arg in ipairs(func.args) do local def = "" @@ -867,11 +909,11 @@ function converter.funcs(func) table.insert(args, convFnArgType(arg) .. " " .. toIntlEnUncond(convName(arg.name:sub(2))) .. def) end end - + if attribs ~= "" then attribs = ", memAttr: q{" .. attribs .. "}" end - + yield(string.format("{q{%s}, q{%s}, q{%s}, ext: `%s`%s},", convType(func.ret), func.name, table.concat(args, ", "), extern, attribs)) end end diff --git a/scripts/genie.lua b/scripts/genie.lua index 06659dcd1..ca14c8ae4 100644 --- a/scripts/genie.lua +++ b/scripts/genie.lua @@ -76,7 +76,7 @@ newaction { local dgen = require "bindings-d" dgen.write(dgen.gen(), "../bindings/d/package.d") - dgen.write(dgen.fakeEnumFile, "../bindings/d/fakeenum.d") + dgen.write(dgen.implFile, "../bindings/d/impl.d") local csgen = require "bindings-bf" csgen.write(csgen.gen(), "../bindings/bf/bgfx.bf")