2013-06-26 2 views
0

У меня есть массив указателей, объявленных в верхней части моего файла следующим образом.Отправка массива указателей на функцию

GLuint *buffers[2]; 

И я хочу, чтобы передать фактические значения массива в функцию г л для создания буферов:

GL_API void GL_APIENTRY glGenBuffers(GLsizei n, GLuint *buffers); 

Это запись API. Я не могу изменить функцию, Khronos/Apple (по расширению) может.

Я пробовал:

glGenBuffers(2, *buffers); 

не повезло. Я не знаю, возможно ли это, и я предполагаю, что это не так, но если есть шанс, это сделает мою программу намного легче написать.

Этот пример не так, как я его использую, я планирую написать загрузчик геометрии, основанный на запросах, который будет генерировать все буферы и разбивать mallocs на более крупные, чтобы уменьшить количество звонков и скорость производительность.

EDIT: Я не могу изменить функцию glGenBuffers, если это то, что люди предлагают.

EDIT: Я понимаю, насколько смешной мой запрос кажется, я просто надеялся, что, возможно, у была функция, которая говорит, что это указатели, поэтому отредактируйте их ценности, подумав об этом подробно, это кажется смехотворным. Вероятно, я просто выделил массив буферов, чем мои исходные указатели (в отдельном файле класса), равное этому значению, перейдя: * originalBuffer [i] = сгенерированныйBuffer [i]; В петле.

+1

Вы пытались вызвать 'glGenBuffers (2, buffers)' и объявлять 'void glGenBuffers (int, GLuint **)'? Включили ли вы все предупреждения и отладочную информацию в своем компиляторе? Вы использовали отладчик? –

+0

Да, для первого, как перезаписывать декларацию фактической функции что-нибудь изменит? Да для отладки, я использую LLDB. – user22817

+0

Но прототип функции неизвестен ... В соответствии с данным кодом я предполагаю, что это 'void' /' int' glGenBuffers (int, GLuint *). Это так? – yulian

ответ

0

Учитывая запись API (скопированную из ваших комментариев в вопрос) и объявление переменной, вы не можете передать массив указателей на функцию.

Вы могли бы написать:

GLuint buffer[2]; 

glGenBuffers(2, buffer); 

Вы могли бы написать:

GLuint *buffers[2]; 
buffers[0] = malloc(number * sizeof(GLuint)); 
buffers[1] = malloc(number * sizeof(GLuint)); 
glGenBuffers(number, buffers[0]); 
glGenBuffers(number, buffers[1]); 

Любой из этих отношениях API.

+0

Последнее полностью разрушает цель моего кода, я хочу, чтобы один вызов функции и уменьшить количество mallocs, теперь я понимаю, что могу просто использовать временный буферный массив, а затем редактировать исходные буферы. И первое не будет поддерживать функциональность. Я приношу свои извинения за то, что вы наглости, единственное исправление этой проблемы - это изменение дизайна. – user22817

+0

Я согласен, что вам нужно будет изменить дизайн своего кода, чтобы он соответствовал API, который вы хотите использовать. Поскольку я не знаю, как вы планируете использовать буферы или как разрабатывается ваш код (и ни один из них на SO, по крайней мере, на основе информации в вашем вопросе), вам не поможет Больше. То, что вы не можете сделать, это злоупотреблять функцией API; это не поможет вам. Вы должны продемонстрировать с убедительным указанием времени, что количество вызовов 'malloc()' является существенным фактором в производительности вашего кода, - откровенно говоря, это крайне маловероятно. –

+0

Когда я загружаю огромные файлы геометрии, это помогает сократить вызовы malloc, поскольку любая скорость значительно повышает скорость загрузки моего приложения и загружает новый контент и т. Д. – user22817