Я пытаюсь запрограммировать систему частиц для моей 2D игры opengl.
Следовательно, создание геометрии кажется хорошим вместе с TBO, хранящим данные каждой частицы.
Проблема в том, что при инициализации функция
glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, buffer);
падает с ошибкой сегментации. Функция init для TBO:
glGenBuffers(1, &buffer);
glBindBuffer(GL_TEXTURE_BUFFER, buffer);
glBufferData(GL_TEXTURE_BUFFER, MAX_PARTICLES_N * 4 * sizeof(float), NULL,
GL_DYNAMIC_DRAW);
glGenTextures(1, &transforms);
glBindTexture(GL_TEXTURE_BUFFER, transforms);
glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, buffer);
С контекстом OpenGL все в порядке. OpenGL-3.0 также поддерживается (необходим для TBO).
Я запускаю это на Ubuntu 13.04 с картой Radeon. Драйвер Intel® Sandybridge Mobile.
Решение:
Моя главная ошибка заключалась в том, что я ожидал, что все в OpenGL, которое компилируется, должно работать. На самом деле, моя версия OpenGL используется 3.0, в то время как
glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, buffer);
нужна версия 3.1 или выше.
glewIsSupported("GL_ARB_texture_buffer_object")
возвращает false, единственный способ заставить его работать — установить
glewExperimental = GL_TRUE;
до глевинита ();
Задача ещё не решена.
Других решений пока нет …