/ / Използвайте променливата C const в Swift като UnsafePointer - ios, c, swift, opengl-es

Използвайте променливата C const в Swift като UnsafePointer - ios, c, swift, opengl-es

Имам проста променлива C const в .h / c файл, който изглежда така:

data.h

const float positions[9];

data.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)

Грешката, която получавам е "(Плаващо, плаващо, плаващо, плаващо, плаващо, плаващо, плаващо, плаващо, плаващо)" не може да се конвертира в "UnsafePointer <Void>".

Трябва да се отбележи, че това е само едно тестово приложение, така че не използвам VBOs (Списък 8-2).

Отговори:

3 за отговор № 1

Извежда статично разпределеният C масив в Swift като n-tile. Използването на променлива на показалеца вместо това поправя проблема.

  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 файлове, както следва, прави трик:

data.h

const float *positions;

data.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)

Да имаш масив като нефрит в Суифт изглежда много странно, ако някой има някакви мисли по този въпрос, бих се радвал на някаква обратна връзка.