Sto seguendo this tutorial su OpenGL/GLKit per iOS ma sto provando a implementarlo in Swift. Sta andando bene fino a quando ottengo a questa parte:Come posso convertire questo matematico del puntatore OpenGL in 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
Ho un immobile self.quad
che è uno Swift struct come questo:
struct TexturedVertex {
let geometryVertex: CGPoint
let textureVertex: CGPoint
}
struct TexturedQuad {
let bottomLeft: TexturedVertex
let bottomRight: TexturedVertex
let topLeft: TexturedVertex
let topRight: TexturedVertex
}
E 'una struttura abbastanza semplice, ma io non so come per passarlo all'ultimo argomento di glVertexAttribPointer
. Qualsiasi aiuto sarebbe stellare!
Eccellente! Aggiungerò anche il prossimo problema nel tutorial è che la maggior parte di GLKit viene sballato in Swift perché Swift manca 'union'. Questo bit di codice risolve il problema anche se https://github.com/programmingthomas/OpenGL.swift – jbrennan
Inoltre, sì, 'CGPoint' non funziona perché i float sono troppo grandi. Devi usare "GL_FLOAT" a 32 bit. – jbrennan