2014-10-30 3 views
4

Я хочу преобразовать это в быстрое или, по крайней мере, найти что-то, что делает то же самое.Что такое быстрый эквивалент этого актера?

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

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

Мне нужно инициализировать указатель spriteData в быстром правильном размере.

ответ

5

Первые два из них имеют тип size_t, который отображает на Uint в Swift, а последний GLubyte, который отображает на UInt8. Этот код будет инициализировать spriteData как массив GLubyte, который вы могли бы перейти к любой функции C, которая нуждается в UnsafeMutablePointer<GLubyte> или UnsafePointer<GLubyte>:

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. Я боролся с этим часами. В буквальном смысле нет быстрых примеров загрузки текстуры в OpenGL в Интернете, которые я могу найти. Даже у Apple нет примеров, которые я знаю, если. – NJGUY

+0

Любой успех? Если вы заработали, задайте вопрос о том, что у вас возникло, а затем добавьте свое решение в качестве ответа! –

+0

У меня не было абсолютно никакого успеха – NJGUY

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()? Он просит ввести int. – NJGUY

+0

Извините за это, я отредактировал ответ. Я думаю, вы должны принять ответ @NateCook. Если вы используете 'Array', Swift обрабатывает память. – rintaro

Смежные вопросы