Size: a a a

2020 March 13

AT

Aleg Tut in Delphi & Lazarus
Я попробовал в примере поставить TTest2 = class sealed (TTest1) и procedure Test(); override; final;, но судя по дизассемблеру разницы нет.

Но и не в этом вопрос. Вопрос в том, что виртуальные методы нельзя инлайнить - а это  самая классная вещь для небольших методов. Они могут оптимизироваться вплоть до сворачивания до 1-2 ассемблерных команд. А  виртуальные методы в Delphi не девиртуализируются.
источник

GB

George Bakhtadze in Delphi & Lazarus
Aleg Tut
Я попробовал в примере поставить TTest2 = class sealed (TTest1) и procedure Test(); override; final;, но судя по дизассемблеру разницы нет.

Но и не в этом вопрос. Вопрос в том, что виртуальные методы нельзя инлайнить - а это  самая классная вещь для небольших методов. Они могут оптимизироваться вплоть до сворачивания до 1-2 ассемблерных команд. А  виртуальные методы в Delphi не девиртуализируются.
я тоже попробовал и разница есть. в этом случае метод девиртуализируется. а значит и заинлайнить можно, хотя на практике этого не происходит. но это в любом случае другое - техника времени выполнения.
источник

AT

Aleg Tut in Delphi & Lazarus
А вообще да, разница есть. (Что-то я вчера не туда был глянул.) Но обращу внимание на след. моменты:
1. Разница с sealed и final - минус 1 операция mov. Но гляньте на call - там используется разная адресация. И честно говоря, я б не рисковал делать ставку какой вариант быстрее на современных процессорах.
2. Как я писал ранее, главный выигрыш по скорости можно получить когда метод инлайнится. С виртуальными методами это не проходит.
Прилагаю дизассемблер с вызовом виртуального метода, и тот же вызов с пометками final и sealed. Delphi 10.3.3 Win32
источник

AT

Aleg Tut in Delphi & Lazarus
источник

AI

Alexander Ivanov in Delphi & Lazarus
Viktor Akselrod
ну не, баги правят, особенно если на них обратить должное внимание и обосновать.
@ziv_2006 не даст соврать
Правят, но не все.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Alexander Ivanov
Правят, но не все.
конечно всё исправить невозможно разом.
речь шла о том, что работа идет и шансы на исправление есть
источник

a

aford in Delphi & Lazarus
Всем привет! Есть у кого-нибудь пример карты в изометрии на любом движке? Нужно сделать что-то типа фермы, но в очень упрощенном варианте, драгэндроп и сохранение построек. Карта большая, на экран не вмещается, т.е. надо двигать
источник

a

aford in Delphi & Lazarus
Или подскажите, плз, куда копать)
источник

a

aford in Delphi & Lazarus
естественно на Delphi, имеется ввиду что лучше использовать, канвас, opengl, DelphiX, glscene или может у кого что самописное есть, мне много функций не надо
источник

SB

Sergey Bodrov in Delphi & Lazarus
aford
Или подскажите, плз, куда копать)
Любой 3D движок, уже давно 3D сцены отрисовываются гораздо быстрее 2D примитивов.
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Sergey Bodrov
Любой 3D движок, уже давно 3D сцены отрисовываются гораздо быстрее 2D примитивов.
Это как?
источник

a

aford in Delphi & Lazarus
Sergey Bodrov
Любой 3D движок, уже давно 3D сцены отрисовываются гораздо быстрее 2D примитивов.
Спасибо, но мне куда проще надо) Вот что-то накопал https://www.youtube.com/watch?v=Joayyognr3c Осталось прикрутить драгэндроп и двигание карты, я думаю, что это не так сложно будет)
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Sergey Bodrov
Любой 3D движок, уже давно 3D сцены отрисовываются гораздо быстрее 2D примитивов.
Или я вне контекста не понял)
источник

SB

Sergey Bodrov in Delphi & Lazarus
3D-сцена это массивы трех координат (X, Y, Z) трех точек, образующих треугольник. Можно вместо координат использовать ссылки на координаты, чтобы не дублировать в памяти координаты одной вершины разных треугольников. Преобразование координат (всякие повороты, изменения размера и дистанции) выполняются железкой сразу над всеми точками. Проецирование сцены на 2D пространство экрана, с наложением текстур и эффектов делается железом автоматически. То есть, программно нужно только указать координаты треугольников и формулы для их преобразования.
источник

SB

Sergey Bodrov in Delphi & Lazarus
И дошло до того, что чисто 2D объекты гораздо (в десятки раз) быстрее отрисовывать не по пикселям или спрайтам, а в виде треугольников и текстур.
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Sergey Bodrov
И дошло до того, что чисто 2D объекты гораздо (в десятки раз) быстрее отрисовывать не по пикселям или спрайтам, а в виде треугольников и текстур.
Не, это понятно конечно
источник

SB

Sergey Bodrov in Delphi & Lazarus
Например, весь FMX работает через 3D.
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Просто проблема понятий
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Sergey Bodrov
Например, весь FMX работает через 3D.
Я всегда использую Direct2D, так что
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
У меня даже некоторые vcl компоненты отрисовываются через него
источник