innuendo
я бы texelFetch использовал в его случае.
fecaloid666
Nsight
А нельзя ли строить вертексную модель фрезерованной поверхности инкрементально? Ведь вся эта фрезерованная поверхность она не сразу же возникает, а в результате обработки плоской поверхности фрезой.
Изначально - просто квад из четырех вертексов. По мере применения фрезы - добавляются новые вертексы. Основная нагрузка будет только на перестроение индексного буфера (вертексный можно просто заранее взять побольше и добавлять новые вершины через glBufferSubData).
Еще вариант - необязательно ведь для вертекса хранить x,y,z. Ведь в современном OpenGL нет предопределенных атрибутов. Можно задать для каждого вертекса только координату Z (и если точность устраивает - это может быть даже uint8), положив все эти данные подряд в буфере и указав нужный страйд (то есть, для uint8 можно задать страйд в 1 байт).
А чтобы не требовался индексный буфер - вертексы в буфере расположить по спирали (прямоугольной) от центра, после чего можно будет все вертексы отрисовать одним дравколлом GL_TRIANGLE_STRIP. В вертексном шейдере недостающие координаты x, y высчитывать из gl_VertexId (сейчас формулу не соображу, но она должна быть не очень сложной).
В таком случае потребление памяти будет точно таким же, как для текстуры.
А, не, наврал, со спиралью GL_TRIANGLE_STRIP не получается, GL_TRIANGLE_FAN тоже не то. Но чтоб обойтись без индексного буфера явно какое-то решение есть.
Dmitry_Milk
Вычисления инкрементальные, да, но не всегда с простой модели(в большинстве случаев материал обрабатывается за несколько разных проходов). Точность uint8 для высоты, к сожалению, недостаточна. Индексные буферы - слишком много памяти и, полагаю, меньшая скорость. В нынешней реализации на отрисовку отправляется только одна вершина с инстансингом, float-текстура с картой высот и текстура с цветом точки растра(uint8), то есть ~500MB на максималке, если текстуры обновлять в GPU целиком. Все X,Y координаты и flat-нормали считаются параметрически в геом. шейдере.
Лоды чуть позже запилю, это уже мелочь.
All
Разобрался с нечтением текстуры. Я в юниформ сэмплера писал ID текстуры вместо номера текстурного блока. Вопрос решен. Всем спасибо!
Тема закрыта.