Я следую this tutorial о OpenGL/GLKit для iOS, но пытаюсь реализовать его в Swift. Это будет хорошо, пока я не дойду до этой части:Как преобразовать этот указатель OpenGL в Swift?
- (void)render {
// 1
self.effect.texture2d0.name = self.textureInfo.name;
self.effect.texture2d0.enabled = YES;
// 2
[self.effect prepareToDraw];
// 3
glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
//---------------- This is where things break down...
long offset = (long)&_quad;
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, sizeof(TexturedVertex), (void *) (offset + offsetof(TexturedVertex, geometryVertex)));
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(TexturedVertex), (void *) (offset + offsetof(TexturedVertex, textureVertex)));
// 5
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
@end
У меня есть свойство self.quad
это Свифт структуры, как это:
struct TexturedVertex {
let geometryVertex: CGPoint
let textureVertex: CGPoint
}
struct TexturedQuad {
let bottomLeft: TexturedVertex
let bottomRight: TexturedVertex
let topLeft: TexturedVertex
let topRight: TexturedVertex
}
Это довольно простая структура, но я не знаю, как передать его последнему аргументу glVertexAttribPointer
. Любая помощь будет звездной!
Отлично! Я также добавлю следующую проблему в учебник: большая часть GLKit находится в Swift, потому что Swift не имеет 'union'. Этот бит кода затрагивает проблему, хотя https://github.com/programmingthomas/OpenGL.swift – jbrennan
Кроме того, да, 'CGPoint' не работает, потому что поплавки слишком велики. Вы должны использовать 32-битный 'GL_FLOAT'. – jbrennan