Войти
ДельфинарийФорум

Буферы данных в OpenGL через расширения texture_buffer_object и uniform_buffer_object (комментарии)

#0
11:56, 21 апр. 2010

Буферы данных в OpenGL через расширения texture_buffer_object и uniform_buffer_object (комментарии)

Это сообщение сгенерировано автоматически.


#1
11:56, 21 апр. 2010

Спасибо за статью, но есть пару моментов:
1) непонятно как биндить буферы (в коде программы) перед использованием.
2) в статье намешаны расширения и ядро OpenGL 3.2 - не факт, что константы с _ARB будут правильно работать в ядре OpenGL 3.2 - для ядра они могут иметь совершенно другое значение

#2
8:08, 22 апр. 2010

1)Если ты о текстурных, то как обычную текстуру делаю. Моделька выводится нормально.
Единственный минус текстурный канал занят получается.
Если uniform, то так:
glBindBuffer(GL_UNIFORM_BUFFER, ID);

2)да, тут я затупил.:(
Спасибо, что поправил)

#3
8:48, 22 апр. 2010

Да, с расширениями ты намудрил...

> Текстурные буферы стали доступны в OpenGL 3.1 через расширение GL_ARB_texture_buffer_object (ранее доступные через расширение GL_EXT_texture_buffer_object).

Не совсем так...
TBO в ядре ОСНОВАНО на расширении GL_ARB_texture_buffer_object
Другими словами GL_ARB_texture_buffer_object != OpenGL 3.1 Core TBO

Ты путаешься bindable uniforms и UBO, это не одно и тоже... У тебя константы для UBO даны от GL_EXT_bindable_uniform...

У тебя:

GL_RGBA32F_ARB --- GL_ARB_texture_float
GL_TEXTURE_BUFFER_EXT --- GL_EXT_texture_buffer_object
GL_MAX_TEXTURE_BUFFER_SIZE_ARB --- GL_ARB_texture_buffer_object
GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT --- GL_EXT_bindable_uniform
GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT --- GL_EXT_bindable_uniform
GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT --- GL_EXT_bindable_uniform
GL_MAX_BINDABLE_UNIFORM_SIZE_EXT --- GL_EXT_bindable_uniform

А нужно:

GL_RGBA32F --- OpenGL 3.0 Core
GL_TEXTURE_BUFFER --- OpenGL 3.1 Core
GL_MAX_TEXTURE_BUFFER_SIZE --- OpenGL 3.1 Core
Константы для UBO (см. расширение GL_ARB_uniform_buffer_object, которое идентично функционалу ядра)

Не всегда имеет значение какую константу писать, GL_XXX или GL_XXX_EXT или GL_XXX_ARB, но иногда их значение не совпадает, поэтому это потенциальный источник проблем... Поэтому лучше стараться писать не мешая в кучу разный функционал...

#4
9:28, 22 апр. 2010

Значения этих констант совпадает. Я прежде чем здесь написать написать приложение использующее TBO и UBO.
Обычно, если вижу что есть и _ARB(_EXT), то сравниваю значения константы, наверное это мой косяк, надо исправляться
С расширениями, да, там путаница.
Надо бы исправить.

Про "GL_ARB_texture_buffer_object != OpenGL 3.1 Core TBO" не знал, спасибо)

На будущее учту ошибки.

#5
9:42, 22 апр. 2010

Поправил. Спасибо за исправления)

Прошло более 3 лет
#6
15:44, 27 мар. 2014

Не вполне понятно следующее:
texelFetch возвращает vec4.
А у меня texture buffer имеет тип GL_R32F. Элементы в нём вовсе не vec4, а float.
Как обращаться к элементам?

#7
8:48, 26 июня 2014

Silver Overlord
> Элементы в нём вовсе не vec4, а float.

Я уже давненько за это дело не брался, но ты попробуй первый элемент вектора получить.
vec4 это float-вектор, и я в примере указывал GL_RGBA32F - должно получиться.

Наверняка там перегрузка есть, можешь ещё попробовать прямо во float получать. Как вариант.

#8
1:19, 28 июня 2014

Silver Overlord
> Как обращаться к элементам?

texelFetch(...).x?

Прошло более 9 месяцев
#9
12:09, 14 апр. 2015

Еще вопрос у меня

задача  - построить сплайн ...
обычно имея массив опорных точек - делается обработка полинома

так вот...

мне нужно будет рождать новые линии в GS - обрабатывая полином...
и как-то адресоваться к нужным опорным точкам.. значит будет рандомная индексация.

хранить для каждой обрабатываемой вершины 4 соседних опорных точки как атрибуты - это смерть и олдскул , значит в GS надо будет адресоваться к массиву опорных точек..

вроде если передать опорные точки как attribute cpoints; то нельзя будет в GS делать что-то типа vec3 cp = cpoints[XXX]...

Для этого мне надо cpoints передать как TBO - тупой линейный массив.. и тогда можно будет адресоваться да?

ДельфинарийФорум

Тема в архиве.