Black Shark Graphics Engine

Модератор: Модераторы

Re: Black Shark Graphics Engine

Сообщение zub » 21.05.2021 21:56:33

>>Не быстрая штука, но это glReadPixels так работает.
(это возможно устарело, но лет 10 назад работало) glReadPixels действительно не быстр, но он чувствителен к формату чтения. BGRA раньше был в разы быстрее RGBA проверь.

Краем глаза глянул исходники. странные впечатления((
Код: Выделить всё
function StrLengthInBytes(const Value: string): int32;
begin
  {$ifdef FPC}
  Result := Length(Value);
  {$else}
  Result := Length(Value) * SizeOf(Char);
  {$endif}
end;

откуда уверенность что в фпц строки всегда с однобайтовыми [s]символами[/s] неправильно выразился, не символами, элементами которые []? Result := Length(Value) * SizeOf(Value[1]); будет работать и в дельфи и в фпц с любым типом строк

Код: Выделить всё
function StrLength(const Value: string): int32;
begin
  {$ifdef FPC}
  Result := UTF8LengthFast(PChar(Value));
  {$else}
  Result := Length(Value);
  {$endif}
end;

Для фпц ты составные символы учитываешь, а почему для делфи нет? они там гораздо реже, но есть
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 22.05.2021 09:09:07

Зуб мудрый - слушайте его! :D (Главный перфекционист форума это не хухры мухры :wink: ) :idea:
Alex2013
долгожитель
 
Сообщения: 2925
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение BlackShark » 22.05.2021 13:22:43

zub писал(а):Краем глаза глянул исходники. странные впечатления((
откуда уверенность что в фпц строки всегда с однобайтовыми [s]символами[/s] неправильно выразился, не символами, элементами которые []? Result := Length(Value) * SizeOf(Value[1]); будет работать и в дельфи и в фпц с любым типом строк
Для фпц ты составные символы учитываешь, а почему для делфи нет? они там гораздо реже, но есть


В делфи тип string не кодирует формат UTF8, в отличии от FPC, где это является кодировкой по умолчанию и Length возвращает кол-во байт занимаемые строкой. По этой же причине SizeOf(Char) в StrLengthInBytes в директиве FPC не уместно, хоть и по счастливой случайности если умножить на SizeOf(Char), функция вернёт верное значение.
UTF8 в делфи указываются явно через UTF8String, а Length для string возвращает кол-во символов, что собственно и требовалось.
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение zub » 22.05.2021 15:21:04

>>В делфи тип string не кодирует формат UTF8, в отличии от FPC
да, он кодирует utf16. думаешь в нем нет составных символов? если уж ты решил считать длину в именно в символах, не в байтах

>>хоть и по счастливой случайности если умножить...
а вот ты по несчастливой случайности наплодил ненужных ифдефов. сменится завтра представление строки и будешь шарить по исходникам-править
Length(Value) * SizeOf(Value[1]) - зависит только от типа строки (ни от каких чаров - вот где действительно счастливая случайность), SizeOf(Value[1]) вернет размер элемента строки даже если value='', т.к. SizeOf это не функция

но тебе конечно видней))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Black Shark Graphics Engine

Сообщение BlackShark » 22.05.2021 16:06:15

zub писал(а):>>В делфи тип string не кодирует формат UTF8, в отличии от FPC
да, он кодирует utf16. думаешь в нем нет составных символов? если уж ты решил считать длину в именно в символах, не в байтах

В доке делфи однозначно написано что Length для string вернёт кол-во символов, о чём я писал уже выше. Какие ещё извращения требуются???
zub писал(а):>>хоть и по счастливой случайности если умножить...
а вот ты по несчастливой случайности

..мда
zub писал(а):сменится завтра представление строки и будешь шарить по исходникам-править
Length(Value) * SizeOf(Value[1]) - зависит только от типа строки (ни от каких чаров - вот где действительно счастливая случайность), SizeOf(Value[1]) вернет размер элемента строки даже если value='', т.к. SizeOf это не функция

Во-первых, мне для этого достаточно будет отрефакторить юнит bs.strings, для чего собственно и создавался.
Во-вторых, length FPC возращает кол-во байт под строкой, зачем эта шляпа, в которой ещё и длину предварительно нужно проверить чтоб в AV не упасть на пустой строке: Length(Value) * SizeOf(Value[1])?
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение zub » 22.05.2021 19:03:40

давай тупо все проверим. код для делфи:

Код: Выделить всё
procedure TForm1.onCreateHandler(Sender: TObject);
var
  s:string;
begin
  Memo1.Align:=alClient;
  Memo1.Clear;

  s:=chr($D803)+chr($DC0C);
  Memo1.Lines.Add(format('s = ''%s''',[s]));
  Memo1.Lines.Add(format('length(s) = ''%d'' упс, символ та вроде один...((',[length(s)]));
  Memo1.Lines.Add(format('Length(s) * SizeOf(Char) = %d',[Length(s) * SizeOf(Char)]));
  Memo1.Lines.Add(format('Length(s) * SizeOf(s[1]) = %d',[Length(s) * SizeOf(s[1])]));

  s:='';
  Memo1.Lines.Add(format('s = ''%s''',[s]));
  Memo1.Lines.Add(format('length(s) = ''%d''',[length(s)]));
  Memo1.Lines.Add(format('Length(s) * SizeOf(Char) = %d',[Length(s) * SizeOf(Char)]));
  Memo1.Lines.Add(format('Length(s) * SizeOf(s[1]) = %d  упс, s[1] та вроде нету...((',[Length(s) * SizeOf(s[1])]));
end;


Добавлено спустя 1 минуту 14 секунд:
>>Во-первых, мне для этого достаточно будет отрефакторить юнит bs.strings, для чего собственно и создавался.
зачем, если можно написать так чтоб работало всегда и везде

Добавлено спустя 4 минуты 30 секунд:
>>Во-вторых, length FPC возращает кол-во байт под строкой
во вторых, length delphi возращает кол-во пар байт под строкой

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

Добавлено спустя 2 минуты 13 секунд:
>> чтоб в AV не упасть на пустой строке
я же написал выше что SizeOf не функция, он получает на входе тип, и работает во время компиляции, во время выполнения это захардкоженая в бинарник циферка
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Black Shark Graphics Engine

Сообщение runewalsh » 23.05.2021 00:09:17

И в FPC, и в Дельфи length(ansistring) возвращает число char'ов (байт) в строке, length(unicodestring) — количество widechar'ов (пар байт). По-хорошему это значение бесполезно для чего-либо, кроме вычисления размера выделяемой под строку памяти домножением length(s) на размер элемента — тот самый sizeof(s[1]).

Но UTF8Length — число кодовых точек в строке — ещё бесполезнее. Число кодовых точек не связано ни с отображаемой шириной строки (бывают символы нулевой ширины), ни с числом символов, каким его воспринимает человек (бывают комбинируемые символы).

Иными словами, любой код, использующий length(не-ANSI-строка) для чего-то кроме работы с памятью, и АБСОЛЮТНО любой код, использующий UTF8Length, сломаны. Для работы с Unicode-строкой необходима и достаточна итерация по символам (кодовым точкам).
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

Re: Black Shark Graphics Engine

Сообщение Seenkao » 23.05.2021 16:04:15

Пробежался.
Seenkao писал(а):Object inspector - шевелим ползунками формы и всё с формы может спокойно убежать.
Как бы удаление этой возможности, это не решение проблемы. )))
Не буду конкретно говорить где, пробегался быстро, не стал на всё обращать внимания: выбирая объект во внутренней форме и выводя мышку за пределы этой формы, мы "теряем" этот объект, он перестаёт быть выбранным.

Seenkao писал(а):после закрытия приложения (не всегда) вылетает SIGSEGV.

Кусок лога (увеличивай или копируй):
Call trace for block $00007FFFE7EE6160 size 144
$000000000080EBAA CREATENODE, line 1353 of ../../core/bs.geometry.pas
$0000000000811E2D SPLITNODE, line 2078 of ../../core/bs.geometry.pas
$0000000000812163 SPLITNODE, line 2102 of ../../core/bs.geometry.pas
$0000000000810E15 ADD, line 1850 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
Call trace for block $00007FFFE7C75CA0 size 144
$000000000080EBAA CREATENODE, line 1353 of ../../core/bs.geometry.pas
$0000000000811C8D SPLITNODE, line 2064 of ../../core/bs.geometry.pas
$0000000000812163 SPLITNODE, line 2102 of ../../core/bs.geometry.pas
$0000000000810E15 ADD, line 1850 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
Call trace for block $00007FFFF4B4C780 size 176
$00000000007FCCCD ADD, line 1096 of ../../common/bs.collections.pas
$0000000000811B66 SPLITNODE, line 2036 of ../../core/bs.geometry.pas
$0000000000812163 SPLITNODE, line 2102 of ../../core/bs.geometry.pas
$0000000000810E15 ADD, line 1850 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
Call trace for block $00007FFFF4B4C180 size 176
$00000000007FCCCD ADD, line 1096 of ../../common/bs.collections.pas
$0000000000811B66 SPLITNODE, line 2036 of ../../core/bs.geometry.pas
$0000000000812163 SPLITNODE, line 2102 of ../../core/bs.geometry.pas
$0000000000810E15 ADD, line 1850 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
Call trace for block $00007FFFECB7F160 size 80
$00000000007FCCCD ADD, line 1096 of ../../common/bs.collections.pas
$0000000000811B66 SPLITNODE, line 2036 of ../../core/bs.geometry.pas
$0000000000812163 SPLITNODE, line 2102 of ../../core/bs.geometry.pas
$0000000000810E15 ADD, line 1850 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
Call trace for block $00007FFFE7866A20 size 80
$00000000007FCCCD ADD, line 1096 of ../../common/bs.collections.pas
$0000000000811AFD SPLITNODE, line 2031 of ../../core/bs.geometry.pas
$0000000000812163 SPLITNODE, line 2102 of ../../core/bs.geometry.pas
$0000000000810E15 ADD, line 1850 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
Call trace for block $00007FFFE7EE2BC0 size 144
$000000000080EBAA CREATENODE, line 1353 of ../../core/bs.geometry.pas
$0000000000812029 SPLITNODE, line 2096 of ../../core/bs.geometry.pas
$0000000000810E15 ADD, line 1850 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
Call trace for block $00007FFFF4B4C000 size 176
$000000000084529D ADD, line 1096 of ../../common/bs.collections.pas
$000000000084B8B3 GENFRAMEUV, line 1007 of ../../core/bs.texture.pas
$000000000084AC34 COPYRECT, line 796 of ../../core/bs.texture.pas
$000000000084E022 INSERTTOMAP, line 1556 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
Call trace for block $00007FFFE791E600 size 48
$000000000084AC34 COPYRECT, line 796 of ../../core/bs.texture.pas
$000000000084E022 INSERTTOMAP, line 1556 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084CBBA GENERATETEXTURE, line 1215 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
Call trace for block $00007FFFECF9A800 size 140
$000000000084CB05 GENERATETEXTURE, line 1204 of ../../core/bs.texture.pas
$0000000000869763 CREATE, line 447 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
Call trace for block $00007FFFECF64720 size 144
$000000000080EBAA CREATENODE, line 1353 of ../../core/bs.geometry.pas
$0000000000810E2B ADD, line 1853 of ../../core/bs.geometry.pas
$000000000080E430 ADD, line 1256 of ../../core/bs.geometry.pas
$000000000084E0C5 INSERTTOMAP, line 1558 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084D466 LOADTEXTURE, line 1303 of ../../core/bs.texture.pas
$000000000084D504 LOADTEXTURE, line 1315 of ../../core/bs.texture.pas
$000000000084D2B2 LOADTEXTURE, line 1281 of ../../core/bs.texture.pas
$00000000008699DE CREATE, line 472 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
Call trace for block $00007FFFED035400 size 48
$000000000084AC34 COPYRECT, line 796 of ../../core/bs.texture.pas
$000000000084E022 INSERTTOMAP, line 1556 of ../../core/bs.texture.pas
$000000000084BCBD INSERTTOMAP, line 1081 of ../../core/bs.texture.pas
$000000000084D466 LOADTEXTURE, line 1303 of ../../core/bs.texture.pas
$000000000084D504 LOADTEXTURE, line 1315 of ../../core/bs.texture.pas
$000000000084D2B2 LOADTEXTURE, line 1281 of ../../core/bs.texture.pas
$00000000008699DE CREATE, line 472 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
Call trace for block $00007FFFE79C7800 size 42
$00000000008699DE CREATE, line 472 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
Call trace for block $00007FFFE5024A00 size 38
$00000000008D7817 LOADFROMFILE, line 3280 of ../../core/bs.canvas.pas
$000000000086AC32 CREATE, line 616 of ../bs.test.canvas.primitives.pas
$000000000046318F RUNTEST, line 113 of umain.pas
$0000000000462E5C CBAVAILABLETESTSCHANGE, line 68 of umain.pas
$0000000000584909 CHANGE, line 216 of include/customcombobox.inc
$00000000005848C5 LMCHANGED, line 205 of include/customcombobox.inc
$0000000000430FCA
$0000000000537B59 WNDPROC, line 5429 of include/wincontrol.inc
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas
$00000000007154F0 LCLSENDCHANGEDMSG, line 499 of lclmessageglue.pas
$0000000000724830 GTKCHANGEDCB, line 1657 of gtk2/gtk2wsstdctrls.pp
$0000000000714EE2 DELIVERMESSAGE, line 112 of lclmessageglue.pas

(удалил нафиг большой кусок лога, слишком длинный... )
Пробегаясь через все демки, наверняка это можно поймать. Выставь флаг в дебаггере -gh. Думаю поймаешь полный лог, я не стал ждать окончания.
Проверял на Linux.

У меня Windows 7, а EGL для него нет (хотя найти наверно можно, но пользователи... вряд ли будут искать проблему) - как результат на Windows 7 запустить не могу? Что так же означает, что многих ты просто отсеял от использования твоей библиотеки..
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: Black Shark Graphics Engine

Сообщение olegy123 » 24.05.2021 14:21:45

BlackShark писал(а):В делфи тип string не кодирует формат UTF8, в отличии от FPC, где это является кодировкой по умолчанию и Length возвращает кол-во байт занимаемые строкой.
Это родная кодировка Windows Utf16,
Utf8 не является родной для Windows систем, поэтому нужны конвертация, особенно явно видно когда надо работать с Web/Android. Если надо String)данные отправить - то переводят в ByteArray(типа String -> ByteArray), тогда становится ясно сколько нужно отправить. вот он показывает размер в байтах.
QString (QT) вообще работает с UTF32.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Black Shark Graphics Engine

Сообщение Снег Север » 25.05.2021 06:32:20

Для длины строки в байтах независимо от кодировки давно есть функция BytesOf(string).
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2994
Зарегистрирован: 27.11.2007 16:14:47

Re: Black Shark Graphics Engine

Сообщение Seenkao » 25.05.2021 09:48:49

Снег Север писал(а):BytesOf(string).

SizeOf(Byte)... Блин, мне вот интересно, что раньше появилось? Наврняка ведь одинаково работают?!
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: Black Shark Graphics Engine

Сообщение Seenkao » 26.05.2021 11:39:36

(дурная голова ногам покоя не даёт... :oops: )
BlackShark писал(а):По крайней мере никаких заметных задержек на тесте KD-tree с 5000 движущимися объектами заметно не было.

В общем уменьшая расстояние от -30 до 30, то на моём компьютере уже явные проседания есть при прорисовке. Нормальная прорисовка только при 2000 объектов. Так же есть явная проблема, чем больше объектов, тем больше заметно, что события клавиш не очищаются вовремя. И удерживая достаточное время клавишу и отпустив её потом, камера будет двигаться дальше. Ещё, даже если мы не видим объектов, но они перед нами, проседания заметны.

Я не придираюсь. Зачастую и 2000 объектов в камере не мало.
Seenkao
энтузиаст
 
Сообщения: 502
Зарегистрирован: 01.04.2020 03:37:12

Re: Black Shark Graphics Engine

Сообщение BlackShark » 28.05.2021 14:28:03

Seenkao писал(а):У меня Windows 7, а EGL для него нет (хотя найти наверно можно, но пользователи... вряд ли будут искать проблему) - как результат на Windows 7 запустить не могу? Что так же означает, что многих ты просто отсеял от использования твоей библиотеки..

Попробовал на VMWare запустить под Windows 7. Завелось после установки дров от VMWare, через главное меню: Player/File/Preferences...Download All Components Now. После в папке с плеером появляются образы *.ISO. Далее в настройках своей виртуальной Windows 7 в разделе CD/DVD выбираешь Use ISO image file и указываешь образ, например: C:Program Files (x86)/VMware/VMware Player/windows.iso. После этого запускаешь VM c Windows 7 и из дисковода в ней устанавливаешь дрова.
Похоже что режим эмуляции OpenGL egl в лоб не поддерживает, хотя хром умудряется.. Полез было копать его исходники, но без отладки тяжко. Солюшн (файл проекта) для Visual Studio теперь генерируется питоном, хотя раньше я помню были в комплекте с репой. В общем потеряв уйму времени всё это хозяйство поднять не удалось...
Seenkao писал(а):(дурная голова ногам покоя не даёт... :oops: )
В общем уменьшая расстояние от -30 до 30, то на моём компьютере уже явные проседания есть при прорисовке. Нормальная прорисовка только при 2000 объектов. Так же есть явная проблема, чем больше объектов, тем больше заметно, что события клавиш не очищаются вовремя. И удерживая достаточное время клавишу и отпустив её потом, камера будет двигаться дальше. Ещё, даже если мы не видим объектов, но они перед нами, проседания заметны.

При размере сцены -30х30 (если я правильно понял), минимум половина из 5000 объектов попадают в камеру т.к. в текущем тесте фронтальная плоскость отсечения выставлена на 90 единиц. Отрисовка каждого объекта выполняется отдельно, поэтому рендереру становится тяжело. Вот если это вывести через хардварный инстансинг, то отрисовка выполнится за один раз для всех объектов, как я уже писал выше. Я обязательно буду расширять функционал в этом направлении. Сейчас пока занялся загрузкой моделей COLLADA с анимациями...
Seenkao писал(а):Я не придираюсь

Такой фидбэк только на общую пользу ;)

Posted after 7 minutes 17 seconds:
Всем кто по поводу string писал - спасибо. В принципе всё это для меня более/менее очевидно, кроме ньюанса с суррогатной парой в делфи, о чём писал zub...
Последний раз редактировалось BlackShark 28.05.2021 16:56:59, всего редактировалось 2 раз(а).
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение Дож » 28.05.2021 16:37:17

zub писал(а):я же написал выше что SizeOf не функция, он получает на входе тип, и работает во время компиляции, во время выполнения это захардкоженая в бинарник циферка

Всё не так просто :)
Код: Выделить всё
{$MODE FPC}
type
P1 = ^T1;
T1 = object
  A: UInt64;
  constructor Init;
end;

P2 = ^T2;
T2 = object(T1)
  B: UInt64;
end;

constructor T1.Init;
begin
end;

procedure Foo(Obj: P1);
begin
  Writeln(SizeOf(Obj^));
end;

begin
  Foo(New(P1, Init));
  Foo(New(P2, Init));
  Foo(nil);
end.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Black Shark Graphics Engine

Сообщение zub » 28.05.2021 17:01:09

>>Всё не так просто :)
Я писал о данном случае, возможно неверно высказался, с обжектами с разбор идет в рантайме

Но я наивно думал что в object`ах без виртуальных методов тип в рантайме не установить, т.к. соответствующий указатель появляется при появлении виртуальных методов в описании. сейчас глянул sizeof пустого обжекта не равен нулю. в делфи так стало в 2009. а в fpc давно так?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Графика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru