浏览代码

Culled D bindings for header-only C++ functions (#3130)

* Reformatted comments; fixed a couple of oversights

* D bindings: deterministic sub-struct order

* Added missing default to IDL

* Fixed sub-struct linkage; regenerate D binds

* Culled D bindings for header-only C++ functions

* Added missing default to bgfx.idl

* cppinline now supported by all auto-gen bindings

The pattern "func.cppinline and not func.conly" is to make sure that C bindings for `bgfx_vertex_layout_has` are still generated.
IchorDev 2 年之前
父节点
当前提交
878767e751
共有 8 个文件被更改,包括 16 次插入34 次删除
  1. 1 27
      bindings/d/package.d
  2. 1 1
      scripts/bgfx-codegen.lua
  3. 5 4
      scripts/bgfx.idl
  4. 2 0
      scripts/bindings-bf.lua
  5. 2 0
      scripts/bindings-cs.lua
  6. 2 2
      scripts/bindings-d.lua
  7. 2 0
      scripts/bindings-zig.lua
  8. 1 0
      scripts/idl.lua

+ 1 - 27
bindings/d/package.d

@@ -1357,13 +1357,6 @@ extern(C++, "bgfx") struct VertexLayout{
 			*/
 			[q{void}, q{decode}, q{bgfx.fakeenum.Attrib.Enum attrib, ref ubyte num, ref bgfx.fakeenum.AttribType.Enum type, ref bool normalized, ref bool asInt}, `C++`, q{const}],
 			
-			/**
-			Returns `true` if VertexLayout contains attribute.
-			Params:
-				attrib = Attribute semantics. See: `bgfx::Attrib`
-			*/
-			[q{bool}, q{has}, q{bgfx.fakeenum.Attrib.Enum attrib}, `C++`, q{const}],
-			
 			/**
 			Skip `_num` bytes in vertex stream.
 			Params:
@@ -1375,25 +1368,6 @@ extern(C++, "bgfx") struct VertexLayout{
 			End VertexLayout.
 			*/
 			[q{void}, q{end}, q{}, `C++`],
-			
-			/**
-			Returns relative attribute offset from the vertex.
-			Params:
-				attrib = Attribute semantics. See: `bgfx::Attrib`
-			*/
-			[q{ushort}, q{getOffset}, q{bgfx.fakeenum.Attrib.Enum attrib}, `C++`, q{const}],
-			
-			/**
-			Returns vertex stride.
-			*/
-			[q{ushort}, q{getStride}, q{}, `C++`, q{const}],
-			
-			/**
-			Returns size of vertex buffer for number of vertices.
-			Params:
-				num = Number of vertices.
-			*/
-			[q{uint}, q{getSize}, q{uint num}, `C++`, q{const}],
 		], true);
 		return ret;
 	}(), typeof(this).stringof));
@@ -1487,7 +1461,7 @@ extern(C++, "bgfx") struct Encoder{
 				mtx = Pointer to first matrix in array.
 				num = Number of matrices in array.
 			*/
-			[q{uint}, q{setTransform}, q{const(void)* mtx, ushort num}, `C++`],
+			[q{uint}, q{setTransform}, q{const(void)* mtx, ushort num=1}, `C++`],
 			
 			/**
 			 Set model matrix from matrix cache for draw primitive.

+ 1 - 1
scripts/bgfx-codegen.lua

@@ -32,7 +32,7 @@ local type_actions = {
 
 local function cfunc(f)
 	return function(func)
-		if not func.cpponly then
+		if (not func.cpponly) and (not func.cppinline or func.conly) then
 			return f(func)
 		end
 	end

+ 5 - 4
scripts/bgfx.idl

@@ -1039,7 +1039,7 @@ func.VertexLayout.decode { const }
 	.asInt      "bool &"             { out } --- Attribute is packed as int.
 
 --- Returns `true` if VertexLayout contains attribute.
-func.VertexLayout.has { const }
+func.VertexLayout.has { const, conly, cppinline }
 	"bool"                 --- True if VertexLayout contains attribute.
 	.attrib "Attrib::Enum" --- Attribute semantics. See: `bgfx::Attrib`
 
@@ -1054,16 +1054,16 @@ func.VertexLayout["end"]
 	"void"
 
 --- Returns relative attribute offset from the vertex.
-func.VertexLayout.getOffset { const , cpponly }
+func.VertexLayout.getOffset { const, cppinline }
 	"uint16_t"                --- Relative attribute offset from the vertex.
 	.attrib    "Attrib::Enum" --- Attribute semantics. See: `bgfx::Attrib`
 
 --- Returns vertex stride.
-func.VertexLayout.getStride { const , cpponly }
+func.VertexLayout.getStride { const, cppinline }
 	"uint16_t" --- Vertex stride.
 
 --- Returns size of vertex buffer for number of vertices.
-func.VertexLayout.getSize { const, cpponly }
+func.VertexLayout.getSize { const, cppinline }
 	"uint32_t"      --- Size of vertex buffer for number of vertices.
 	.num "uint32_t" --- Number of vertices.
 
@@ -2216,6 +2216,7 @@ func.Encoder.setTransform
 	                   --- to be used for other draw primitive call.
 	.mtx "const void*" --- Pointer to first matrix in array.
 	.num "uint16_t"    --- Number of matrices in array.
+	 { default = 1 }
 
 ---  Set model matrix from matrix cache for draw primitive.
 func.Encoder.setTransform { cname = "set_transform_cached" }

+ 2 - 0
scripts/bindings-bf.lua

@@ -357,6 +357,8 @@ function converter.funcs(func)
 
 	if func.cpponly then
 		return
+	elseif func.cppinline and not func.conly then
+		return
 	end
 
 	if func.comments ~= nil then

+ 2 - 0
scripts/bindings-cs.lua

@@ -387,6 +387,8 @@ function converter.funcs(func)
 
 	if func.cpponly then
 		return
+	elseif func.cppinline and not func.conly then
+		return
 	end
 
 	if func.comments ~= nil then

+ 2 - 2
scripts/bindings-d.lua

@@ -334,7 +334,7 @@ local function genVersion()
 end
 
 local function genStructMemberFn(func) --NOTE: this does not work on nested structs
-	if func.class ~= nil and func.conly == nil then
+	if func.class ~= nil and func.conly == nil and func.cppinline == nil then
 		local st = allStructs[func.class]
 		local attribs = ""
 		if func.comments ~= nil then
@@ -804,7 +804,7 @@ extern(C++, "bgfx") package final abstract class %s{
 end
 
 function converter.funcs(func)
-	if func.class == nil and func.conly == nil then
+	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?

+ 2 - 0
scripts/bindings-zig.lua

@@ -405,6 +405,8 @@ function converter.funcs(params)
 	local func = params.obj
 	if func.cpponly then
 		return
+	elseif func.cppinline and not func.conly then
+		return
 	end
 
 	-- skip for now, don't know how to handle variadic functions

+ 1 - 0
scripts/idl.lua

@@ -235,6 +235,7 @@ idl.cfunc      = "cfunc"
 idl.underscore = "underscore"
 idl.conly      = "conly"
 idl.cpponly    = "cpponly"
+idl.cppinline = "cppinline"
 idl.shortname  = "shortname"
 idl.NULL       = "NULL"
 idl.UINT16_MAX = "UINT16_MAX"