I know there are examples of creating pointers using the LuaJIT FFI, but most of these aren't pointed to existing data. One such example of this is here: How to pass a pointer to LuaJIT ffi to be used as out argument?
One thing that I haven't been able to successfully do is create a pointer to an existing value. In order to have a pointer type as far as I know, I have to know that I want to have a pointer point to it at some point in the future, as in:
local vao = ffi.new("GLuint[1]")
gl.GenVertexArrays(1, vao)
gl.BindVertexArray(vao[0])
Here, I know that glGenVertexArrays needs a pointer to vao
, so I specify it as a GLuint[1]. In C, I would be doing something like the following:
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
Here, I have no idea that I'll be needing a pointer to vao
, so I can just specify it normally.
In other words, is there a way to get the address of, or create a pointer to, an existing value? Do I have to foresee what I'll be doing with the value before I create it?
Thanks!
There's no way to get a pointer to a cdata object in the FFI.
I remember reading in the LuaJIT mailing list that this was done intentionally for some optimizations to work, though I can't find the exact message in the archive.
So far, I haven't had a need for getting the pointer of a cdata object; LuaJIT refers to cdata by reference (similar to tables) and the type[1]
trick works for out parameters.