Войти
ПрограммированиеФорумГрафика

OpenGL. Constant Buffer для бедных.

Страницы: 1 2 3 4 5 6 Следующая »
#0
16:17, 19 фев. 2018

Хочу загружать данные за один вызов. ©™ Но опенжл не хочет, потому что вектора у него столбцами. Или матрицы неправильно работают.

Суть.
Заменяем это

layout (std140) uniform PerFrame
{
    mat4 view;
    mat4 projection;
    mat4 invProjView;
    vec4 fogColor;
    vec4 ambientColor;
    // data[0] = zNear, data[1] = zFar, data[2] = fogStart, data[3] = fogEnd
    vec4 data;
    // data2[0] = r addition, data2[1] = g addition, data2[2] = b addition data[4].brightness
    vec4 data2;
    vec2 resolution;
};
На это (структура разумеется выровнена как положено до кратной 64 байтам)
// PER FRAME
#define VIEW per_frame[0]
#define PROJ per_frame[1]
#define INV_PROJ per_frame[2]
#define FOG_COLOR per_frame[3][0]
#define AMBIENT_COLOR per_frame[3][1]
#define ZNEAR per_frame[3][2].x
#define ZFAR per_frame[3][2].y
#define FOG_START per_frame[3][2].z
#define FOG_END per_frame[3][2].w
#define POST per_frame[3][3]
#define RESOLUTION per_frame[4][0]
uniform mat4[5] per_frame;

Разумеется оно не работает. Как малой кровью заставить это работать? Особенно при условии, что часть рендера останется на UBO, часть на почтиUBO. Перелопачивать весь рендер не очень хочется.

#1
18:09, 19 фев. 2018
layout (std140, row_major) uniform;
не покатит?
#2
18:17, 19 фев. 2018

Надо наоборот сделать. я хочу выпилить UBO и впилить костыль на основе mat4[xxx]. на инстансинг я так и не перешел, нужды нет, а перелопачивать весь рендер на одиночные юниформы я не хочу. Оверхед UBO лишний.

Мне непонятно вот что. При загрузке в UBO матрицы автоматом транспонируются? Потому-что при загрузке с транспонированием (glUniformMatrix4fv(..., true, ...)) все один хрен не работает. gDebuggerом водил, данные вроде все норм в буферах. Шейдер портировался, пол логике прошелся - все как было.

#3
19:05, 19 фев. 2018

Если стоит row_major, то да, в какой-то момент при загрузке в UBO они транспонируются.

#4
8:48, 20 фев. 2018

nvm, это я тупой. ошибся в дефайнах лэйаута другого объекта, пропустив поле.

#5
10:57, 20 фев. 2018

Dampire
> vec2 resolution;
ты в курсе, что оно будет выравниваться до vec4? то есть если будут другие float/vec2 поля, то их перекроет?

> Хочу загружать данные за один вызов. ©™
я не понял, где сам-то виновник торжества?

#6
11:07, 20 фев. 2018
facepalm | OpenGL. Constant Buffer для бедных.
#7
11:11, 20 фев. 2018

Suslik
Да, в курсе. Говорю же, что структуры все выровнены как положено. Все уже рендерится. Вин по сравнению с UBO - ~1мс.

#8
11:41, 20 фев. 2018

innuendo
Вообще-то твой совет из одного эпичного треда. (что оптимальнее массив с дефайнами, чем UBO/SSBO).

#9
15:02, 21 фев. 2018

Раскройте уже эту великую тайну, что там за данные такие, которые нельзя загрузить за один вызов, но очень хочется?

И как можно рисовать что-то, не имея достаточно данных? Или смысл вообще не в отрисовке, а именно в загрузке и непременно за один вызов?

#10
19:33, 21 фев. 2018

Dampire
я про другое - про виновника:)

#11
22:50, 21 фев. 2018

Dampire
> Все уже рендерится. Вин по сравнению с UBO - ~1мс.
Дохрена какой то большой вин. На каком железе измеряешь?

#12
22:52, 21 фев. 2018

Dampire
> Все уже рендерится. Вин по сравнению с UBO - ~1мс.

%? да, какое железо?

Dampire
> (что оптимальнее массив с дефайнами, чем UBO/SSBO).

мой поинт был не в оптимальности, а в том, чтобы для начала нужно прочитать документацию

#13
7:41, 22 фев. 2018

MrShoor
На двух железках тестил. Дипов под две сотни. Запускалось все неоднократно и поочередно, все в рамках погрешности.
GeForce GT 1030 + i3 3.7GHz -  1.9-2.0мс на UBO, 1.1-1.2мс на массиве.
GeForce GT 620 + i5 3.2GHz - 7.5-7.6мс на UBO, 6.5-6.6 на массиве.
(По хорошему надо еще потестить на старом новуте с еще более слабым процом и видюхой ушедшей в тротлинг, но мне лень его собирать).

#14
7:51, 22 фев. 2018

Dampire
> GeForce GT 1030 + i3 3.7GHz -  1.9-2.0мс на UBO, 1.1-1.2мс на массиве.
и что это за сцена такая, что у тебя время работы с юниформами вообще занимает как мимум 50% времени исполнения?

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

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