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
CIMGUI_API void igTextColored0(const ImVec4_c col,const char* fmt)
{
return igTextColored(ConvertToCPP_ImVec4(col),fmt);
return igTextColored(col,fmt);
}
#endif
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
local function recur_calc_depth(FP, structs, 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
for i,field in ipairs(struct) do
local typ = field.type:gsub("const ","")
@@ -1118,6 +1118,7 @@ local function recur_calc_depth(FP, structs, k,n)
end
local function gen_structs_c(FP)
local structs = FP.structs_and_enums_table.structs
local nonPOD = FP.structs_and_enums_table.nonPOD
--sort nP_used by dependencies and name
nP_used_sorted = {}
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
--M.table_do_sorted(FP.nP_used, function(k,v)
for _,k in ipairs(npsorted) do
if nonPOD[k]~="inherited" then
insert(tabs,"typedef struct "..k.."_c "..k.."_c;")
insert(tabs_c,"typedef struct "..k.."_c "..k..";")
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
local typ = field.type:gsub("const ","")
typ = typ:gsub("*","")
@@ -1150,6 +1152,7 @@ local function gen_structs_c(FP)
end
end
insert(tabs,"};")
end
end --)
if #tabs > 0 then
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,"\n")
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 ""
local structs = FP.structs_and_enums_table.structs
--local structs = FP.structs_and_enums_table.structs
for i,field in ipairs(struct) do
local ftype = field.type:gsub("*","")
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
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..");")
@@ -1181,21 +1185,32 @@ local function gen_field_conversion(tab, struct, FP, to,prefix)
end
local function genConversions(FP)
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 = {}
--for k,v in pairs(FP.nP_used) do
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,"{")
insert(convers," "..k.." dest;")
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,"}")
insert(convers,"static inline "..k.."_c ConvertFromCPP_"..k.."(const "..k.."& src)")
insert(convers,"{")
insert(convers," "..k.."_c dest;")
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,"}")
end)
@@ -1205,6 +1220,11 @@ end
local function get_nonPODused(FP)
--print("get_nonPODused-----------------------------")
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)
local typeargs = {}
local typeargs_ret = {}
@@ -1232,6 +1252,7 @@ local function get_nonPODused(FP)
end
end
end
--M.prtable(nonPOD)
local all_type_nP = {}
for k,v in pairs(typeargs) do
local k2 = k:gsub("const ","")
@@ -1242,6 +1263,7 @@ local function get_nonPODused(FP)
all_type_nP[k2] = true
end
FP.nP_used = all_type_nP
--M.prtable("FP.nP_used",FP.nP_used)
FP.nP_args = typeargs
FP.nP_ret = typeargs_ret
--genConversions(FP)
@@ -2922,7 +2944,7 @@ local function ImGui_f_implementation(def)
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, "{\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, "#endif\n")
elseif def.nonUDT then

View File

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

View File

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