gpt4 book ai didi

ios - 在 Swift 中使用 C const 变量作为 UnsafePointer

转载 作者:可可西里 更新时间:2023-11-01 01:06:32 24 4
gpt4 key购买 nike

我在 .h/c 文件中有一个简单的 C 常量变量,如下所示:

数据.h

const float positions[9];

数据.c

#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

我如何在 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)' is not convertible to 'UnsafePointer ' 。 p>

我应该指出,这只是一个测试应用,所以我没有使用 VBO (Listing 8-2)。

最佳答案

原来静态分配的 C 数组作为元组进入 Swift。使用指针变量可以解决此问题。

  1. 在 C 中:const float positions[9];翻译成
    let positions: (Float, Float, Float, Float, Float, Float, Float, Float, Float)在 Swift 中

  2. 在 C 中:const float *positions;翻译成
    var positions: UnsafePointer<Float>在 Swift 中(这是我们需要的)

所以修改 C 文件如下:

数据.h

const float *positions;

数据.c

#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;

swift

glVertexAttribPointer(0, 3, GLenum(GL_FLOAT), GLboolean(GL_FALSE), 0, positions)

在 Swift 中将数组作为元组看起来很奇怪,如果有人对此有任何想法,我将不胜感激。

关于ios - 在 Swift 中使用 C const 变量作为 UnsafePointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com