Имам проста променлива 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. Използването на променлива на показалеца вместо това поправя проблема.
В C:
const float positions[9];
превежда на
let positions: (Float, Float, Float, Float, Float, Float, Float, Float, Float)
в SwiftВ 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)
Да имаш масив като нефрит в Суифт изглежда много странно, ако някой има някакви мисли по този въпрос, бих се радвал на някаква обратна връзка.