Флейм
GameDev.ru / Флейм / Форум / BerylEngine: 0.09 [95 из 365] (23 стр)

BerylEngine: 0.09 [95 из 365] (23 стр)

Страницы: 122 23 24 2553 Следующая »
DampireУчастникwww9 апр. 20189:23#330
war_zes
это называется BindBase/ToSlot/ToIndex/etc. Или для обновления константного буфера ты будешь его биндить к слоту?

Правка: 9 апр. 2018 9:24

war_zesПостоялецwww9 апр. 20189:31#331
StepEver
> чисто абстрактного криминала я не вижу, использование ссылок избавляет от
> проверки указателей на нул. Но, похоже, у него в коде должен быть перевод
> сначала указателя в ссылку, потом из ссылки обратно в указатель (тут).

данная шаблонная функция работает вот так:

struct CBdata
{
   Matrix4 wvp;
   Matrix4 world;
} data;
...
constBuffer->SetData(data);

согласитесь, это намного лучше чем писать прямо:
constBuffer->SetData(static_cast<const void*>(&value), sizeof(value));

war_zesПостоялецwww9 апр. 20189:36#332
Dampire
> А про enum (struct) SomeEnum : GLenum { zero = GL_ZERO, ...}. war_zes свичует.
есть один маленький нюанс. enum struct не кастится к своему типу автоматом. надо руками, через static_cast
то бишь
GLenum e = static_cast<GLenum>(SomeEnum::zero);

лучше ли это свитча... не знаю

DampireУчастникwww9 апр. 20189:37#333
war_zes
> согласитесь, это намного лучше чем писать прямо:
> constBuffer->SetData(static_cast<const void*>(&value), sizeof(value));
Да как-бы без разницы, особенно учитывая, что статик каст в const void* - явно лишнее.
> лучше ли это свитча... не знаю
Огромный свич безусловно лучше.

Правка: 9 апр. 2018 9:39

war_zesПостоялецwww9 апр. 20189:40#334
Dampire
> это называется BindBase/ToSlot/ToIndex/etc. Или для обновления константного
повторю - константый буфер наследует бесполезный метод, который доступен пользователю

В обновлении буфера не используется свой же метод Bind()

void Buffer::SetData(const void *source, size_t offsetInBytes, size_t sizeInBytes)
{
  Assert(0 != m_bufferId && "Updating invalid buffer.");
  Assert(source != nullptr && sizeInBytes > 0);

  glBindBuffer(m_type, m_bufferId);
  glBufferSubData(m_type, offsetInBytes, sizeInBytes, source);
  glBindBuffer(m_type, 0);
}

Сделано так, с учетом возможности добавления DSA

war_zesПостоялецwww9 апр. 20189:43#335
Dampire
> Огромный свич безусловно лучше.
Учитывая что в других движках вообще огромные массивы
https://github.com/bkaradzic/bgfx/blob/master/src/renderer_gl.cpp
static const GLenum s_stencilOp[] =
  {
    GL_ZERO,
    GL_KEEP,
    GL_REPLACE,
    GL_INCR_WRAP,
    GL_INCR,
    GL_DECR_WRAP,
    GL_DECR,
    GL_INVERT,
  };
war_zesПостоялецwww9 апр. 20189:46#336
StepEver
> а если тебе понадобится туда nullptr прокинуть (в glBufferData)?
этот шаблон - это обертка над базовой функцией, в которой можно написать
cb->SetData(nullptr, 0);
Соответственно, если мне надо будет прокинуть ноль, то добавлю соответсвующую реализацию шаблона под этот случай
DampireУчастникwww9 апр. 20189:47#337
war_zes
> Учитывая что в других движках вообще огромные массивы
Ты за свой движок говори, а не за других.
+ Показать
AndreyПостоялецwww9 апр. 201815:19#338
war_zes
это жесть:
void ShaderProgram::Uniform3(const char *name, const Vector3 &v)
{
  glUniform3f(getUniLoc(name), v.x, v.y, v.z);
}
далее...
int32_t RenderDevice::GetMaxTextureSlot()
такие вещи в какой нибудь RenderCapabilities вынести
короче обертки над OGL нету. Где BufferStorage ? где TextureStorage ? где Samplers ? где MultiBind ?  или ты для каждого объекта будет убого по 1 текстурки ставить на десктопе в 21 веке?
нету загрузки текстур, сначала загружаем в память, а потом glTexImage2D, нужно в классе image давать некий Callback который сразу с диска булдет подавать на glCompressed* пиксели.Нафиг все эти обертки над текатурами, FBO, буферами, зачем ООП ради ООП.

nesПостоялецwww9 апр. 201815:22#339
Andrey
>такие вещи в какой нибудь RenderCapabilities вынести
Зачем плодить лишние сущности?
Девайс имхо - вполне себе подходит для хранения всяких аппаратных констант.
AndreyПостоялецwww9 апр. 201817:41#340
nes
> Девайс имхо - вполне себе подходит для хранения всяких аппаратных констант.
возможно, а возможно его задача объекты создавать, а возможности выплюнуть отдельно
MAMOHT-92Постоялецwww9 апр. 201817:54#341
Andrey
> Нафиг все эти обертки над текатурами, FBO, буферами, зачем ООП ради ООП.
я его спрашивал пару страниц назад, он сказал, что это опыт и ему хочется свой фреймворк. Ну хочется и хочется, пущай дальше пишет, но пусть не ноет потом на форуме, что его опыт написания движков никому не нужен. Хотя движок то он сам ниразу и не писал.
lookidПостоялецwww9 апр. 201819:15#342
Andrey
Напиши за неделю из головы ОК и выложи. Пусть даже Deferred. Без кластеров и тайлов. А то тут уже 2 месяца работа кипит.
war_zesПостоялецwww10 апр. 20183:15#343
Andrey
> Где BufferStorage ?
а ничего что это 4.4? который на моем рабочем интеле не поддерживается видеокартой (макс 4.3)

> где Samplers ? где MultiBind ?
есть

> где TextureStorage ?
с этим были проблемы, но вообще первоначально было (сейчас закрыто дефайном)

> или ты для каждого объекта будет убого по 1 текстурки ставить на десктопе в 21
> веке?
лолчто?

> нету загрузки текстур
есть же

> сначала загружаем в память
именно так оно сейчас

> нужно в классе image давать некий Callback который сразу с диска булдет
> подавать на
не лучшее решение. С чего image должен знать о текстуре?
да и моими планами на потоки не сработает

> возможно, а возможно его задача объекты создавать, а возможности выплюнуть
> отдельно
Там DX11 стиль - а именно два класса - RenderDevice и RenderContext

war_zesПостоялецwww10 апр. 20183:25#344
MAMOHT-92
> я его спрашивал пару страниц назад, он сказал, что это опыт и ему хочется свой
> фреймворк.
а я отвечал.. ну могу и на примере. Захотелось мне как-то проверить разницу между юниформами и констант буферами... А не на чем. Под рукой тогда не было обертки. Тратить кучу времени на вспомогательный код - не хотелось, но пришлось. Конечно проверил - но не полноценно. На полноценно не хватило сил и времени - все ушло на подготовку к тесту (ну то есть на написание оберток)

Тогда, думаю, и начала зарождаться идея сделать идеальную (для меня) обертку. Чтобы как раз делать такие вещи не тратя лишнее время.

Еще, у меня не такое представление о движках, как у вас. Вы их видите... ну наверное как юнити, с кучей инструментов (90% из которых не нужны проекту).

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

впрочем - это все не значит что я остановлюсь на обертке. Ведь впереди у меня еще 316 дней, а работа над оберткой GAPI подходит к концу

Страницы: 122 23 24 2553 Следующая »

/ Форум / Флейм / ПроЭкты

2001—2018 © GameDev.ru — Разработка игр