Использование буферов в OpenGL для рисования чего-либо - PullRequest
0 голосов
/ 13 марта 2012

Я хочу рисовать линии с помощью мыши.Для этого я использую объект буфера.

Я пытаюсь сохранить координаты места, где щелкает мышь, как вершины этих линий.Эти вершины хранятся в переменной массива, которую я создал, но линии не рисуются.

Ниже приведен важный код:

typedef struct {
float x;
float y;
} vec2;

vec2 hotSpot[1000];

hotSpot - это переменная, в которой я храню значения вершин.Буфер был инициализирован так:

 glBufferData( GL_ARRAY_BUFFER, sizeof(hotSpot), NULL, GL_STATIC_DRAW);

В функции mouse () я сохраняю значение координат в hotSpot при каждом нажатии.Как я понимаю, функция main () всегда находится в цикле.Вот что я написал в функции main ():

glBufferData(GL_ARRAY_BUFFER, 0, sizeof(hotSpot), &hotSpot); 

Затем в функции display () я делаю следующее:

glClear(GL_COLOR_BUFFER_BIT); 
glDrawArrays(GL_LINES, 0, 2);
glFlush();  

Я иду не такгде-нибудь?

1 Ответ

0 голосов
/ 14 марта 2012

Как я понимаю, функция main () всегда находится в цикле.

Нет, основная функция не зацикливается.Конечно, ваша программа имеет цикл обработки событий, часто называемый «главным циклом обработки событий», но это не связано с функцией «main».

Лучшим способом для вас была не перезагрузка всего буфера, а использование glBufferSubData`обновить только одну запись в буфере, которая отмечает следующую позицию мыши.Это также позволяет вам избавиться от этого большого статического буфера в вашей программе.Вы просто создаете объект буфера правильного размера и ведете некоторую бухгалтерию (размер буфера, текущее количество сохраненных кликов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...