我在文档中看到ffi.C.free是我可以用来释放malloc的东西.我试图在这里这样做:
callbacks.free_buffer = function(buffer)
print("free_buffer_callback")
ffi.C.free(buffer)
end
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
missing declaration for symbol 'free'
Run Code Online (Sandbox Code Playgroud)
这是否意味着我必须首先使用FFI来记忆内存?我不能在这个特定的函数中做到这一点(因为它是回调中的参数).我该怎么做才能释放这个缓冲区?
编辑:看起来所有的ffi.C函数都不起作用,即使在回调函数之外也是如此.我的ffi似乎工作正常吗?
我在加载纹理时已经有了这些行:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Run Code Online (Sandbox Code Playgroud)
但是当我在渲染过程中缩放图像时:
glTexCoord2d(0.0,0.0);
glTexCoord2d(0.0454,0.0);
glTexCoord2d(0.0454,1.0);
glTexCoord2d(1.0,1.0);
Run Code Online (Sandbox Code Playgroud)
我对纹理的过滤非常糟糕(纹理是一个有多个框架的spritesheet,我宁愿不为每个框架制作单独的文件).
所以首先我加载一个我需要的DLL
local ffi = require("ffi")
local theDLL = ffi.load("thisDLL")
Run Code Online (Sandbox Code Playgroud)
在ffi cdef我有两种不同的结构
ffi.cdef [[
typedef struct StructSession StructSession;
typedef struct {
/*
* begin_proj callback
*/
bool (__cdecl *begin_proj)(char *proj);
/*
* save_proj_state
*/
bool (__cdecl *save_proj_state)(unsigned char **buffer, int *len);
} StructCallbacks;
Run Code Online (Sandbox Code Playgroud)
我在cdef中也有这个功能
__declspec(dllexport) int __cdecl start_session(StructSession **session,
StructCallbacks *cb);
Run Code Online (Sandbox Code Playgroud)
现在我想调用这个函数
print(theDLL.start_session(a,b))
Run Code Online (Sandbox Code Playgroud)
变量a和b显然是占位符,问题是如何传递函数所需的结构?并说我们得到StructSession工作,正在回复一个函数WITHIN LuaJIT甚至可以用于StructCallbacks?
class Myuser * MyClient_GetMyUser(AUser aUser);
Run Code Online (Sandbox Code Playgroud)
这是尝试使用ffi.cdef声明该函数的错误:
Error: dllImport.lua:861: declaration specifier expected near 'class' at line 20
Run Code Online (Sandbox Code Playgroud)
这怎么可能?如果我必须在cdef中这样做,我将如何宣布'课堂'?