Compare commits

...

3 Commits

Author SHA1 Message Date
sonoro1234
363fb5869d cpp2ffi: take care of CIMGUI_VARGS0 2025-11-14 09:42:56 +01:00
sonoro1234
c44d649bf5 generator.lua: ImTextureID_Invalid define for cl compiler 2025-11-13 19:14:43 +01:00
sonoro1234
9e036bb003 cpp2ffi: take care or cimgui_inherited 2025-11-11 11:06:46 +01:00
4 changed files with 36 additions and 10 deletions

View File

@@ -680,7 +680,7 @@ CIMGUI_API void igTextColored(const ImVec4_c col,const char* fmt,...)
#ifdef CIMGUI_VARGS0 #ifdef CIMGUI_VARGS0
CIMGUI_API void igTextColored0(const ImVec4_c col,const char* fmt) CIMGUI_API void igTextColored0(const ImVec4_c col,const char* fmt)
{ {
return igTextColored(ConvertToCPP_ImVec4(col),fmt); return igTextColored(col,fmt);
} }
#endif #endif
CIMGUI_API void igTextColoredV(const ImVec4_c col,const char* fmt,va_list args) CIMGUI_API void igTextColoredV(const ImVec4_c col,const char* fmt,va_list args)

View File

@@ -1105,7 +1105,7 @@ local function get_nonPOD(FP)
end end
local function recur_calc_depth(FP, structs, k,n) local function recur_calc_depth(FP, structs, k,n)
--print("recur_calc_depth",k,n) --print("recur_calc_depth",k,n)
local struct = structs[k] local struct = structs[k] or FP.cimgui_inherited.structs[k]
local n1 = n local n1 = n
for i,field in ipairs(struct) do for i,field in ipairs(struct) do
local typ = field.type:gsub("const ","") local typ = field.type:gsub("const ","")
@@ -1118,6 +1118,7 @@ local function recur_calc_depth(FP, structs, k,n)
end end
local function gen_structs_c(FP) local function gen_structs_c(FP)
local structs = FP.structs_and_enums_table.structs local structs = FP.structs_and_enums_table.structs
local nonPOD = FP.structs_and_enums_table.nonPOD
--sort nP_used by dependencies and name --sort nP_used by dependencies and name
nP_used_sorted = {} nP_used_sorted = {}
for k,v in pairs(FP.nP_used) do for k,v in pairs(FP.nP_used) do
@@ -1135,10 +1136,11 @@ local function gen_structs_c(FP)
--for k,v in pairs(FP.nP_used) do --for k,v in pairs(FP.nP_used) do
--M.table_do_sorted(FP.nP_used, function(k,v) --M.table_do_sorted(FP.nP_used, function(k,v)
for _,k in ipairs(npsorted) do for _,k in ipairs(npsorted) do
if nonPOD[k]~="inherited" then
insert(tabs,"typedef struct "..k.."_c "..k.."_c;") insert(tabs,"typedef struct "..k.."_c "..k.."_c;")
insert(tabs_c,"typedef struct "..k.."_c "..k..";") insert(tabs_c,"typedef struct "..k.."_c "..k..";")
insert(tabs,"struct "..k.."_c {") insert(tabs,"struct "..k.."_c {")
local struct = structs[k] local struct = structs[k] or FP.cimgui_inherited.structs[k]
for i,field in ipairs(struct) do for i,field in ipairs(struct) do
local typ = field.type:gsub("const ","") local typ = field.type:gsub("const ","")
typ = typ:gsub("*","") typ = typ:gsub("*","")
@@ -1150,6 +1152,7 @@ local function gen_structs_c(FP)
end end
end end
insert(tabs,"};") insert(tabs,"};")
end
end --) end --)
if #tabs > 0 then if #tabs > 0 then
insert(tabs,1,"#ifndef CIMGUI_DEFINE_ENUMS_AND_STRUCTS") insert(tabs,1,"#ifndef CIMGUI_DEFINE_ENUMS_AND_STRUCTS")
@@ -1164,13 +1167,14 @@ local function gen_structs_c(FP)
return table.concat(tabs_c,"\n").."\n"..table.concat(tabs,"\n") return table.concat(tabs_c,"\n").."\n"..table.concat(tabs,"\n")
--return table.concat(tabs,"\n") --return table.concat(tabs,"\n")
end end
local function gen_field_conversion(tab, struct, FP, to,prefix) local function gen_field_conversion(tab, struct,structs, FP, to,prefix)
--M.prtable("gen_field_conversion",struct)
prefix = prefix or "" prefix = prefix or ""
local structs = FP.structs_and_enums_table.structs --local structs = FP.structs_and_enums_table.structs
for i,field in ipairs(struct) do for i,field in ipairs(struct) do
local ftype = field.type:gsub("*","") local ftype = field.type:gsub("*","")
if FP.nP_used[field.type] then if FP.nP_used[field.type] then
gen_field_conversion(tab, structs[field.type],FP, to,prefix..field.name..".") gen_field_conversion(tab, structs[field.type],structs,FP, to,prefix..field.name..".")
elseif FP.nP_used[ftype] then elseif FP.nP_used[ftype] then
local ftypec = field.type:gsub(ftype,not to and (ftype.."_c") or ftype) local ftypec = field.type:gsub(ftype,not to and (ftype.."_c") or ftype)
insert(tab, " dest."..prefix..field.name.." = reinterpret_cast<"..ftypec..">(src."..prefix..field.name..");") insert(tab, " dest."..prefix..field.name.." = reinterpret_cast<"..ftypec..">(src."..prefix..field.name..");")
@@ -1181,21 +1185,32 @@ local function gen_field_conversion(tab, struct, FP, to,prefix)
end end
local function genConversions(FP) local function genConversions(FP)
local structs = FP.structs_and_enums_table.structs local structs = FP.structs_and_enums_table.structs
if FP.cimgui_inherited then
structs = {}
for k,v in pairs(FP.cimgui_inherited.structs) do
assert(not structs[k])
structs[k] = v
end
for k,v in pairs(FP.structs_and_enums_table.structs) do
structs[k] = v
end
end
local convers = {} local convers = {}
--for k,v in pairs(FP.nP_used) do --for k,v in pairs(FP.nP_used) do
M.table_do_sorted(FP.nP_used, function(k,v) M.table_do_sorted(FP.nP_used, function(k,v)
--print("genConversions",k)
insert(convers,"static inline "..k.." ConvertToCPP_"..k.."(const "..k.."_c& src)") insert(convers,"static inline "..k.." ConvertToCPP_"..k.."(const "..k.."_c& src)")
insert(convers,"{") insert(convers,"{")
insert(convers," "..k.." dest;") insert(convers," "..k.." dest;")
local struct = structs[k] local struct = structs[k]
gen_field_conversion(convers,struct,FP, true) gen_field_conversion(convers,struct,structs,FP, true)
insert(convers," return dest;") insert(convers," return dest;")
insert(convers,"}") insert(convers,"}")
insert(convers,"static inline "..k.."_c ConvertFromCPP_"..k.."(const "..k.."& src)") insert(convers,"static inline "..k.."_c ConvertFromCPP_"..k.."(const "..k.."& src)")
insert(convers,"{") insert(convers,"{")
insert(convers," "..k.."_c dest;") insert(convers," "..k.."_c dest;")
local struct = structs[k] local struct = structs[k]
gen_field_conversion(convers,struct,FP, false) gen_field_conversion(convers,struct,structs,FP, false)
insert(convers," return dest;") insert(convers," return dest;")
insert(convers,"}") insert(convers,"}")
end) end)
@@ -1205,6 +1220,11 @@ end
local function get_nonPODused(FP) local function get_nonPODused(FP)
--print("get_nonPODused-----------------------------") --print("get_nonPODused-----------------------------")
local nonPOD = FP.structs_and_enums_table.nonPOD local nonPOD = FP.structs_and_enums_table.nonPOD
if FP.cimgui_inherited then
for k,v in pairs(FP.cimgui_inherited.nonPOD) do
nonPOD[k] = "inherited"
end
end
--M.prtable(nonPOD) --M.prtable(nonPOD)
local typeargs = {} local typeargs = {}
local typeargs_ret = {} local typeargs_ret = {}
@@ -1232,6 +1252,7 @@ local function get_nonPODused(FP)
end end
end end
end end
--M.prtable(nonPOD)
local all_type_nP = {} local all_type_nP = {}
for k,v in pairs(typeargs) do for k,v in pairs(typeargs) do
local k2 = k:gsub("const ","") local k2 = k:gsub("const ","")
@@ -1242,6 +1263,7 @@ local function get_nonPODused(FP)
all_type_nP[k2] = true all_type_nP[k2] = true
end end
FP.nP_used = all_type_nP FP.nP_used = all_type_nP
--M.prtable("FP.nP_used",FP.nP_used)
FP.nP_args = typeargs FP.nP_args = typeargs
FP.nP_ret = typeargs_ret FP.nP_ret = typeargs_ret
--genConversions(FP) --genConversions(FP)
@@ -2922,7 +2944,7 @@ local function ImGui_f_implementation(def)
table.insert(outtab, "#ifdef CIMGUI_VARGS0\n") table.insert(outtab, "#ifdef CIMGUI_VARGS0\n")
table.insert(outtab, "CIMGUI_API".." "..def.ret.." "..def.ov_cimguiname.."0"..paramListWithoutDots(def.args).."\n") table.insert(outtab, "CIMGUI_API".." "..def.ret.." "..def.ov_cimguiname.."0"..paramListWithoutDots(def.args).."\n")
table.insert(outtab, "{\n") table.insert(outtab, "{\n")
table.insert(outtab, " return "..def.ov_cimguiname..paramListWithoutDots(def.call_args)..";\n") table.insert(outtab, " return "..def.ov_cimguiname..paramListWithoutDots(def.call_args_old)..";\n")
table.insert(outtab, "}\n") table.insert(outtab, "}\n")
table.insert(outtab, "#endif\n") table.insert(outtab, "#endif\n")
elseif def.nonUDT then elseif def.nonUDT then

View File

@@ -186,7 +186,7 @@ local function get_defines(t)
end end
pipe:close() pipe:close()
--require"anima.utils" --require"anima.utils"
--prtable(defines) --cpp2ffi.prtable(defines)
assert(next(defines), table.concat(compiler_output, "\n")) assert(next(defines), table.concat(compiler_output, "\n"))
local ret = {} local ret = {}
for i,v in ipairs(t) do for i,v in ipairs(t) do

View File

@@ -34,4 +34,8 @@
#ifdef IMGUI_HAS_TEXTURES #ifdef IMGUI_HAS_TEXTURES
#pragma message(CIMGUI_DEFSTRING(IMGUI_HAS_TEXTURES)) #pragma message(CIMGUI_DEFSTRING(IMGUI_HAS_TEXTURES))
#endif
#ifdef ImTextureID_Invalid
#pragma message(CIMGUI_DEFSTRING(ImTextureID_Invalid))
#endif #endif