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

Архитектура OpenGL враппера (7 стр)

Страницы: 13 4 5 6 7 8 Следующая »
#90
15:44, 9 сен. 2019

Джек Аллигатор
> .set_indices_offset(10)
>   .set_indices_num(12)
>   .set_vertex_offset(100)
>   .set_instances_offset(666)
>   .set_instances_num(333)
>   .draw();

Мне кажется это неправильно. Ты забудешь вызвать один из set методов и компилятор даже не ругнется.


#91
18:35, 9 сен. 2019

0xc0de, это опциональные параметры, он и не должен ругаться: The builder pattern

Реализация метода builder.draw():

pub fn draw(self){

    let (draw_mode, indices_type) = self.vao.prepare_to_drawing(self.pipeline);

    let indices_offset = self.indices_offset.unwrap_or(0);
    let indices_num = self.indices_num.unwrap_or_else(|| self.vao.indices_num - indices_offset);
    let instances_num = self.instances_num.unwrap_or(1);
    let vertex_offset = self.vertex_offset.unwrap_or(0);
    let instances_offset = self.instances_offset.unwrap_or(0);

    glDrawElementsInstancedBaseVertexBaseInstance(draw_mode, indices_num, indices_type, get_indices_offset_b(indices_type, indices_offset), instances_num, vertex_offset, instances_offset);
}

Заместо отсутствующих аргументов устанавливаются дефолтные.
Надо бы конечно добавить проверки на выход за пределы буферов, но пока и так сойдет.

#92
10:49, 20 сен. 2019

Тема ушла, хочу спросить, для gl можно написать обёртку pipeline, чтоб и vulkan держать, это state tracker надо, а как быть с descriptor сетами?

#93
11:13, 20 сен. 2019

Dimich
> для gl можно написать обёртку pipeline

может тогда лучше high level api?

#94
17:50, 20 сен. 2019

Dimich
> а как быть с descriptor сетами?
А в чем проблема?
В вулкане десктриптор сеты надо заново биндить если забиндил несовместимый пайплайн, в огл все как забиндил так и осталось.

#95
22:16, 20 сен. 2019

Dimich
> gl можно написать обёртку pipeline,

Я у себя так сделал - у меня объект pipeline инкапсулирует shader program pipeline и vao.
Ну и стейты кеширует.

Пример:

+ Показать
#96
7:16, 21 сен. 2019

0xc0de
> Я у себя так сделал - у меня объект pipeline инкапсулирует shader program
> pipeline и vao.
если у тебя для создания пайплайна нужен vao, это значит, что ты не сможешь рендерить несколько разных мешей с одним пайплайном.

#97
8:15, 21 сен. 2019

Suslik
> если у тебя для создания пайплайна нужен vao, это значит, что ты не сможешь
> рендерить несколько разных мешей с одним пайплайном.
С помощью ARB_vertex_attrib_binding можно.

Ладно, попробую обёртку над ubo как-нибудь сделать, посмотрю, как оно будет выглядеть.

#98
17:52, 21 сен. 2019

0xc0de
> Я у себя так сделал - у меня объект pipeline инкапсулирует shader program
> pipeline и vao.
Ох уж эти любители C с классами. Я у себя сделал так:

struct Vertex
{
float4 position;
float3 normal;
float4 color;
float2 texcoord;
};

VertexInputStructure<Vertex> vertexInputState(0, {
        {0, &Vertex::position},
        {1, &Vertex::normal},
        {2, &Vertex::color},
        {3, &Vertex::texcoord}});
#99
21:26, 21 сен. 2019

Suslik
> если у тебя для создания пайплайна нужен vao, это значит, что ты не сможешь
> рендерить несколько разных мешей с одним пайплайном.

Могу:

+ Показать
#100
10:04, 22 сен. 2019

0xc0de
таким образом твой метод "bind" по сути модифицирует vao, который ему по сути не принадлежит. то есть один пайплайн может перетереть vao, который также используется другим пайплайном.

#101
12:40, 22 сен. 2019

Suslik
кажется ктото не до конца разобрался в огл)

#102
14:10, 22 сен. 2019

Suslik
> таким образом твой метод "bind" по сути модифицирует vao, который ему по сути
> не принадлежит. то есть один пайплайн может перетереть vao, который также
> используется другим пайплайном.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBindV… xBuffer.xhtml

#103
14:52, 22 сен. 2019

Suslik

в OpenGL 4.3 это изменилось, там добавили возможность Separate attribute format (расширение ARB_vertex_attrib_binding), которое по сути делает использование VAO похожим на UBO и текстуры (правда, не идеально похожим). Появляется т.н. binding index для VBO, к которому с одной стороны привязываются вершинные буферы, а с другой стороны атрибуты (через glVertexAttribBinding). Это даёт возможность настроить VAO один раз, указав, из каких binding index'ов какие атрибуты брать, и затем использовать этот один VAO для рисования, только подключая разные VBO к этим binding index'ам.

https://gamedev.ru/code/forum/?id=189914&m=3562112#m3

#104
15:17, 22 сен. 2019

делаю вброс ... может стоит посмотреть на RHI в UE4?

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

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