我想讓我的context
(EAGLContext
)在Swift中呈現;但幾天來我一直無法使用功能glDrawElements
工作。參數類型UnsafePointer <Void> in glDrawElements
我已經閱讀了Stackoverflow上的一些類似的問題,但無濟於事。
我glDrawElements
如下:
glDrawElements(GLenum(GL_TRIANGLES), GLsizei(Indices.count), GLenum(GL_UNSIGNED_BYTE), &offset)
我有最後一個參數的問題 - 偏移,這需要一個UnsafePointer<Void>
。
我曾嘗試以下:
let offset: CConstVoidPointer = COpaquePointer(UnsafePointer<Int>(0))
以上不再起作用,因爲CConstVoidPointer
似乎並不提供了斯威夫特1.2。
和:
var offset = UnsafePointer<Int>(other: 0)
以上給出了,我應該使用bitPattern:
,而不是警告。
雖然我不相信bitPattern:
此處應該使用(因爲參數需要一個Word
)不,我決定根據提供諸如以下的建議,不妨一試:
var offset = UnsafePointer<Int>(bitPattern: 0)
glDrawElements(GLenum(GL_TRIANGLES), GLsizei(Indices.count), GLenum(GL_UNSIGNED_BYTE), &offset)
我會得到EXE_BAD_ACCESS (code=EXC_I386_GPFLT)
錯誤。
var offsetZero : Int = 0
,並隨後將其送入的glDrawElements
像這樣的最後一個參數:
glDrawElements(GLenum(GL_TRIANGLES), GLsizei(Indices.count), GLenum(GL_UNSIGNED_BYTE), &offsetZero)
我收到相同
徒勞的,我也爲下面嘗試使用簡單的東西EXE_BAD_ACCESS
就像上面的情況一樣。
我該如何正確地形成一個適合最後一個參數glDrawElements
的類型,該類型的預期類型爲UnsafePointer<Void>
?
@RobMayoff
更新(VBO爲建立和變量的聲明和定義添加代碼):
struct vertex
{
var position: (CFloat, CFloat, CFloat)
var color: (CFloat, CFloat, CFloat, CFloat)
}
var vertices =
[
vertex(position: (-1, -1, 0) , color: (1, 1, 0, 1)),
vertex(position: (1, -1, 0) , color: (1, 1, 1, 1)),
vertex(position: (-1, 0, 1) , color: (0, 1, 0, 1)),
vertex(position: (-1, 1, 1), color: (1, 0, 0, 1))
]
let indices: [UInt8] = [ 0, 2, 3, 3, 1, 0 ]
class mainGLView : UIView
{
var layer : CAEAGLLayer!
var context : EAGLContext!
var cBuffer : GLuint = GLuint()
var pos : GLuint = GLuint()
var color : GLuint = GLuint()
var iBuffer : GLuint = GLuint()
var vBuffer : GLuint = GLuint()
var vao : GLuint = GLuint()
override class func layerClass() -> AnyClass
{
return CAEAGLLayer.self
}
required init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
//setting up context, buffers, shaders, etc.
self.configureVBO()
self.setupRendering()
}
func configureVBO()
{
glGenVertexArraysOES(1, &vao);
glBindVertexArrayOES(vao);
glGenBuffers(GLsizei(1), &vBuffer)
glBindBuffer(GLenum(GL_ARRAY_BUFFER), vBuffer)
glBufferData(GLenum(GL_ARRAY_BUFFER), vertices.size(), vertices, GLenum(GL_STATIC_DRAW))
glEnableVertexAttribArray(pos)
var ptr = COpaquePointer(UnsafePointer<Int>(bitPattern: 0))
glVertexAttribPointer(GLuint(pos), GLint(3), GLenum(GL_FLOAT), GLboolean(GL_FALSE), GLsizei(sizeof(vertex)), &ptr)
glEnableVertexAttribArray(color)
let fColor = UnsafePointer<Int>(bitPattern: sizeof(Float) * 3)
glVertexAttribPointer(GLuint(color), 4, GLenum(GL_FLOAT), GLboolean(GL_FALSE), GLsizei(sizeof(vertex)), fColor)
glGenBuffers(1, &iBuffer)
glBindBuffer(GLenum(GL_ELEMENT_ARRAY_BUFFER), iBuffer)
glBufferData(GLenum(GL_ELEMENT_ARRAY_BUFFER), indices.size(), indices, GLenum(GL_STATIC_DRAW))
glBindBuffer(GLenum(GL_ARRAY_BUFFER), 0)
glBindVertexArrayOES(0)
}
func setupRendering()
{
glBindVertexArrayOES(vao);
glViewport(0, 0, GLint(self.frame.size.width), GLint(self.frame.size.height));
indices.withUnsafeBufferPointer
{
(pointer : UnsafeBufferPointer<UInt8>) -> Void in
glDrawElements(GLenum(GL_TRIANGLES), GLsizei(indices.count), GLenum(GL_UNSIGNED_BYTE), UnsafePointer<Void>(pointer.baseAddress))
Void()
}
self.context.presentRenderbuffer(Int(GL_RENDERBUFFER))
glBindVertexArrayOES(0)
}
}
對不起濫用此評論,但我無法找到你聊天。恭喜所有八個管家徽章[so]。我已經做出[此](https://data.stackexchange.com/stackoverflow/query/311167/most-steward-badges-by-number-and-date)數據查詢,您的正確號碼應在下週一顯示與數據庫更新。 – Anthon