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

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

Страницы: 122 23 24 2552 Следующая »
DampireУчастникwww9 апр. 20189:18#330
lookid
Я написал законченную игру на своем движке. *много-много воды* и таким образом *еще чуть-чуть воды* никоим образом нельзя!!! *последняя капелька* так я и стал экспертом в области написания движков. Вопросы?

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

war_zesПостоялецwww9 апр. 20189:22#331
Andrey
> Bind() - это в базовый класс, еще пару assert на входные параметры не помешает.
> Меньше кода больше дела.
ровно до тех пока, не не приходит константый буфер, с совершенно другим Bind
void ConstantBuffer::Bind(uint8_t slotIndex)
{
  glBindBufferBase(GL_UNIFORM_BUFFER, slotIndex, m_bufferId);
}
У которого добавляется входящий аргумент, и другая реализация тела.

Из-за чего получается коряво, когда Bind общий, то в констант буфере он болтается непонятно зачем.
Так что да, это один из случаев - когда я сделал копипаст, чтобы этого лишнего Bind не было в константаном буфере (можно было бы изворотиться приватностью базового Bind и перекрытием через полиморфизм - но все это фигня)

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

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

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

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

war_zesПостоялецwww9 апр. 20189:40#336
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#337
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#338
StepEver
> а если тебе понадобится туда nullptr прокинуть (в glBufferData)?
этот шаблон - это обертка над базовой функцией, в которой можно написать
cb->SetData(nullptr, 0);
Соответственно, если мне надо будет прокинуть ноль, то добавлю соответсвующую реализацию шаблона под этот случай
DampireУчастникwww9 апр. 20189:47#339
war_zes
> Учитывая что в других движках вообще огромные массивы
Ты за свой движок говори, а не за других.
+ Показать
AndreyПостоялецwww9 апр. 201815:19#340
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#341
Andrey
>такие вещи в какой нибудь RenderCapabilities вынести
Зачем плодить лишние сущности?
Девайс имхо - вполне себе подходит для хранения всяких аппаратных констант.
AndreyПостоялецwww9 апр. 201817:41#342
nes
> Девайс имхо - вполне себе подходит для хранения всяких аппаратных констант.
возможно, а возможно его задача объекты создавать, а возможности выплюнуть отдельно
MAMOHT-92Постоялецwww9 апр. 201817:54#343
Andrey
> Нафиг все эти обертки над текатурами, FBO, буферами, зачем ООП ради ООП.
я его спрашивал пару страниц назад, он сказал, что это опыт и ему хочется свой фреймворк. Ну хочется и хочется, пущай дальше пишет, но пусть не ноет потом на форуме, что его опыт написания движков никому не нужен. Хотя движок то он сам ниразу и не писал.
lookidПостоялецwww9 апр. 201819:15#344
Andrey
Напиши за неделю из головы ОК и выложи. Пусть даже Deferred. Без кластеров и тайлов. А то тут уже 2 месяца работа кипит.
Страницы: 122 23 24 2552 Следующая »

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

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