我在.h / c文件中有一个简单的C const变量,如下所示:
const float positions[9];
#include "data.h"
const float positions[9] = {
1.0, -1.0, 1.0,
-1.0, -1.0, 1.0,
-1.0, -1.0, -1.0,
};
如何在Swift中使用此变量的数据?更具体地说,我需要将数据传递给glVertexAttribPointer(,,,,, <#ptr: UnsafePointer<Void>#>)
。
例如,我在Swift中有以下代码:(我将 data.h 添加到桥接头中):
glEnableVertexAttribArray(0)
glVertexAttribPointer(0, 3, GLenum(GL_FLOAT), GLboolean(GL_FALSE), 0, positions)
// Error: '(Float, Float, Float, Float, Float, Float, Float, Float, Float)' is not convertible to 'UnsafePointer<Void>'
glDrawArrays(GLenum(GL_TRIANGLES), 0, 3)
我得到的错误是'(Float,Float,Float,Float,Float,Float,Float,Float,Float)'不能转换为'UnsafePointer&lt; Void&gt;'。
我应该指出,这只是一个测试应用,所以我没有使用VBO(Listing 8-2)。
答案 0 :(得分:3)
结果是静态分配的C数组作为元组进入Swift。使用指针变量来修复问题。
在C中:const float positions[9];
转换为
Swift中的let positions: (Float, Float, Float, Float, Float, Float, Float, Float, Float)
在C中:const float *positions;
转换为
Swift中的var positions: UnsafePointer<Float>
(这是我们需要的)
所以修改C文件如下所示:
const float *positions;
#include "data.h"
const float _positions[9] = {
1.0, -1.0, 1.0,
-1.0, -1.0, 1.0,
-1.0, -1.0, -1.0,
};
const float *positions = _positions;
glVertexAttribPointer(0, 3, GLenum(GL_FLOAT), GLboolean(GL_FALSE), 0, positions)
将数组作为Swift中的元组似乎很奇怪,如果有人对此有任何想法,我会很感激一些反馈。