Войти
AEФорум

Нужна помощь в разработке (2 стр)

Страницы: 1 2 3 Следующая »
#15
12:49, 5 авг. 2021

MrShoor
Раз тебя беспокоит скорость улучшения движка, помоги его улучшать быстрее. Вот возьми и приведи в порядок аппаратные спрайты, чтобы для них генерировалсь геометрия и они рисовались батчами, а не как сейчас.

#16
(Правка: 18:55) 18:54, 5 авг. 2021

Huldra
> помоги его улучшать быстрее.
Может и помог бы, если бы:
1. Автор бы занимался разработкой
2. Не был зациклен на спрайтах, а держал курс на 3д в том числе. И вообще больше доступа к шейдерам и прочей магии, больше программирования под GPU, а не дрючево вершин на CPU
3. Параллельно с движком делалась бы игра

Увы, ни по одному пункту не проходит.

#17
15:31, 8 авг. 2021

Huldra ты запуталась. Занимаешься не теми вещами, которые нужны.
Может RTX начнёшь прикручивать, лол?
Создаётся впечатление что ты код даже не видела.

#18
(Правка: 15:39) 15:39, 8 авг. 2021

MrShoor
> Ого скорость улучшений... притормози их там, а то еще к 20210 году AE может
> захватить мир.
Наступила эра прокрастинации. Начались нелепые правки в документации вместо глобального переписывания кода под современные архитектурные реалии.


Huldra
Знаешь что меньше всего я хочу в движке? Заниматься ручным рисованием спрайтов, Вызывать всякие Draw(). Меня, как игродела, недолжно волновать как движок это всё нарисует. Мне важно чтобы я оперировал более высокоуровневаыми объектами, то есть игровыми. Найди мужика себе, пусть он напишет тебе каркас движка за кастрюлю борща.

#19
17:05, 8 авг. 2021

Huldra
Особенно меня поражает это:

Vec2Si32::Vec2Si32(const struct Vec2D &s) {
  x = static_cast<Si32>(s.x);
  y = static_cast<Si32>(s.y);
}
Свой glm кривой и нахардкоженный)
void HwSprite::LoadFromData(const Ui8* data, Ui64 size_bytes,
    const char *file_name)
span и vector это сложна, лучше как обычно ловить краши.
  void Draw(const HwSprite &to_sprite, const Si32 to_x, const Si32 to_y,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Si32 to_x, const Si32 to_y,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Si32 to_x, const Si32 to_y,
      const Si32 to_width, const Si32 to_height,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Si32 to_x, const Si32 to_y,
      const Si32 to_width, const Si32 to_height,
      const Si32 from_x, const Si32 from_y,
      const Si32 from_width, const Si32 from_height,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const HwSprite &to_sprite, const Si32 to_x, const Si32 to_y,
      const Si32 to_width, const Si32 to_height,
      const Si32 from_x, const Si32 from_y,
      const Si32 from_width, const Si32 from_height,
      DrawBlendingMode blending_mode, DrawFilterMode filter_mode, Rgba in_color);
  void Draw(const HwSprite &to_sprite, const Vec2Si32 to_pos,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const HwSprite &to_sprite, const Vec2Si32 to_pos, const Vec2Si32 to_size,
      DrawBlendingMode blending_mode, DrawFilterMode filter_mode,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Vec2Si32 to_pos,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Vec2Si32 to_pos, const Vec2Si32 to_size,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Vec2Si32 to_pos, const Vec2Si32 to_size,
      const Vec2Si32 from_pos, const Vec2Si32 from_size,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Si32 to_x, const Si32 to_y,
      const Si32 to_width, const Si32 to_height,
      const Si32 from_x, const Si32 from_y,
      const Si32 from_width, const Si32 from_height,
      const HwSprite &to_sprite, DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff)) const;

  void Draw(const Vec2F to, float angle_radians,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const float to_x, const float to_y, float angle_radians,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const Vec2F to, float angle_radians, float zoom,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(Rgba in_color, const float to_x, const float to_y, float angle_radians, float zoom,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest);
  [[deprecated("Use Draw(Rgba in_color, const float to_x, const float to_y, float angle_radians, float zoom, DrawBlendingMode blending_mode, DrawFilterMode filter_mode)")]]
  void Draw(const float to_x, const float to_y, float angle_radians, float zoom,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend,
      DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
  void Draw(const float to_x, const float to_y, float angle_radians, float zoom, const HwSprite &to_sprite,
      DrawBlendingMode blending_mode = kDrawBlendingModeAlphaBlend, DrawFilterMode filter_mode = kFilterNearest,
      Rgba in_color = Rgba(0xffffffff));
А на случай рисования из центра есть вариант?
#20
1:24, 9 авг. 2021
А на случай рисования из центра есть вариант?

Установи Pivot в центр и будет тебе рисование из центра.
#21
2:08, 9 авг. 2021

Huldra тебе голодные студенты код пишут?

#22
8:08, 9 авг. 2021

> kDrawBlendingModeAlphaBlend
Зачем в имя элемента перечисления добавлять DrawBlendingMode?
тоже самое в kFilterNearest

#23
(Правка: 21:44) 21:44, 9 авг. 2021

std::cin
> > kDrawBlendingModeAlphaBlend
> Зачем в имя элемента перечисления добавлять DrawBlendingMode?
> тоже самое в kFilterNearest
потому что это с++

#24
0:14, 10 авг. 2021

std::cin
> Зачем в имя элемента перечисления добавлять DrawBlendingMode?
> тоже самое в kFilterNearest
Чтобы отличить варианты допустимые для DrawBlendingMode от всего остального

#25
(Правка: 7:26) 7:25, 10 авг. 2021

Huldra
> Чтобы отличить варианты допустимые для DrawBlendingMode от всего остального
enum class для такого в плюсах есть из коробки (вместо обычного enum).
Бонусом - нельзя передать не ту константу ибо не скомпилируется

#26
(Правка: 7:35) 7:34, 10 авг. 2021

Фильтрацию можно было вынести в настройки самой текстуры. from_x это я так понимаю атлас, это можно было вынести в отдельные параметры и принимать именно их.
где рисовать спрайт, должен знать сам спрайт, знать где он находится. И получилось бы что то такое
Function( Sprite )
Function( Sprite, Params )

Params {
source_x
source_y
source_width
source_height
}

который тоже лучше вынести в Sprite, ведь именно он будет читать информацию из SpriteSheet (атлас)

Sprite.x
Sprite.y
Sprite.SpriteSheet.Texture.FilterMode
Sprite.SpriteSheet.source_x
Sprite.SpriteSheet.source_y

в итоге получится просто
Function( Sprite )
а лучше
Sprite.Draw(canvas)

#27
(Правка: 2:54) 2:52, 11 авг. 2021

Salamandr
> from_x это я так понимаю атлас, это можно было вынести в отдельные параметры и
> принимать именно их.
> где рисовать спрайт, должен знать сам спрайт

Так спрайт знает. Точнее, тут все - спрайты.
Атлас - спрайт, сами тайлы - тоже спрайты, которые ссылаются на кусочек атласа.
Примерно так:

Sprite atlas;
Sprite tile1;
Sprite tile2;
...
atlas.Load("atlas.tga");
tile1.Reference(atlas, 0, 0, 32, 32);
tile2.Reference(atlas, 32, 0, 32, 32);

Рисовать тайлы можно после этого например так

Vec2Si32 pos(100, 200);
...
tile1.Draw(pos);

но идея про аппаратные спрайты на самом деле в том чтобы движок сам собирал/пересобирал из используемых вместе аппаратных спрайтов атласы в рантайме

#28
(Правка: 3:31) 3:30, 11 авг. 2021

u960
Huldra
> Чтобы отличить варианты допустимые для DrawBlendingMode от всего остального

enum BlendingMode
{
    ADD,
    SUBSTRACT,
    MIN,
    MAX,
    ALPHA_BLEND
};

int main()
{
    BlendingMode bm = BlendingMode::ADD;

    std::cout << "Hello World!\n";
}
#29
0:11, 31 авг. 2021

std::cin
Но в реальности будет написано вот так

BlendingMode bm = ADD;
Потому что скомпилируется
Страницы: 1 2 3 Следующая »
AEФорум