2014-10-30 45 views
4

我想把它轉換成swift,或者至少找到能做同樣事情的東西。什麼是這個演員的快速等值?

size_t width = CGImageGetWidth(spriteImage); 
size_t height = CGImageGetHeight(spriteImage); 

GLubyte * spriteData = (GLubyte *) calloc(width*height*4, sizeof(GLubyte)); 

我需要在正確大小的swift中初始化spriteData指針。

回答

5

前兩個那些是size_t類型,它映射到在Uint夫特,最後是GLubyte,映射到UInt8。此代碼將初始化spriteDataGLubyte數組,你可以傳遞給需要一個UnsafeMutablePointer<GLubyte>UnsafePointer<GLubyte>任何C函數:

let width = CGImageGetWidth(spriteImage) 
let height = CGImageGetHeight(spriteImage)  
var spriteData: [GLubyte] = Array(count: Int(width * height * 4), repeatedValue: 0) 

你有什麼需要spriteData呢?

+0

我傳遞spriteData到CGBitmapContextCreate(&spriteData,...)加載到一個位圖,我可以加載到OpenGL。我一直在掙扎幾個小時。從字面上看,沒有一個將紋理加載到Internet上的OpenGL的快速示例,我可以找到它。即使蘋果公司也沒有我知道的例子。 – NJGUY 2014-10-30 03:18:18

+0

任何成功?如果您已經完成了工作,請發佈有關您遇到的問題的問題,然後添加解決方案作爲答案! – 2014-10-30 04:02:50

+0

我已經絕對沒有成功 – NJGUY 2014-10-30 12:57:55

1

直接的方法是:

var spriteData = UnsafeMutablePointer<GLubyte>.alloc(Int(width * height * 4)) 

需要注意的是,如果你這樣做,你必須手動到dealloc它。

spriteData.dealloc(Int(width * height * 4)) 

/// Deallocate `num` objects. 
/// 
/// :param: num number of objects to deallocate. Should match exactly 
/// the value that was passed to `alloc()` (partial deallocations are not 
/// possible). 
+0

我應該爲dealloc()添加什麼參數?它要求一個整數。 – NJGUY 2014-10-30 03:04:05

+0

對不起,我編輯了答案。我認爲你應該接受@NateCook的答案。如果你使用'Array',Swift處理內存。 – rintaro 2014-10-30 03:07:14