Podążam za this tutorial o OpenGL/GLKit dla iOS, ale próbuję go zaimplementować w Swift. To będzie w porządku, dopóki nie dostać się do tej strony:Jak przekonwertować ten wskaźnik pointeru OpenGL na 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
Mam właściwość self.quad
To Swift struct tak:
struct TexturedVertex {
let geometryVertex: CGPoint
let textureVertex: CGPoint
}
struct TexturedQuad {
let bottomLeft: TexturedVertex
let bottomRight: TexturedVertex
let topLeft: TexturedVertex
let topRight: TexturedVertex
}
Jest to dość prosta konstrukcja, ale nie wiem jak przekazać go do ostatniego argumentu glVertexAttribPointer
. Każda pomoc będzie gwiezdna!
Doskonale! Dodam także, że następny problem w samouczku to, że większość GLKit jest rozwalona w Swift, ponieważ Swift nie ma "union". Ten kawałek kodu omija problem https://github.com/programmingthomas/OpenGL.swift – jbrennan
Ponadto, tak, 'CGPoint' nie działa, ponieważ zmienne są zbyt duże. Musisz użyć 32-bitowego "GL_FLOAT". – jbrennan