Перейти к содержанию
Fire Monkey от А до Я

Mars M

Пользователи
  • Постов

    63
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Активность репутации

  1. Like
    Mars M отреагировална Pax Beach в Direct3D. Работа со снимками экрана   
    Библиотека для работы с изображениями находится здесь.
     
    Готовится описание.
     
  2. Like
    Mars M отреагировална Равиль Зарипов (ZuBy) в [Windows] Сворачивание приложение   
    кто-то в чатике просил сделать подобное, вот что получилось
    FMX.AppMinimized.zip
    сворачивание/разворачивание делается, только после разворота не делается активация формы (не было времени с этим разбираться у меня)
  3. Like
    Mars M отреагировална dnekrasov в Как узнать номер нажатой строки в memo delphi fmx?   
    TCustomMemo.CaretPosition.Line
  4. Like
    Mars M отреагировална Vladimir PRO в Узнать размер видеопамяти   
    Это я этот пример выложил более года назад. Пример проверяет вашу конфигурацию на наличие разл. GPU (выдаёт их списком), инициализирует всё что необходимо на видео-акселераторе, создаёт массивы памяти на GPU, закачивает в них исходные данные из памяти CPU. Главное не забудьте, что рядом с файлом *.exe должны лежать текстовые файлы *.cpp (они при запуске передаются видеодрайверу на компиляцию). Если в них - в коде для GPU (Kernel, текстовом файле) на языке C99 есть ошибки - они будут показаны в "чёрном" окне. Потом выполняются в цикле несложные, но длительные операции.
    Причём это делается и на GPU (с контролем времени), и на CPU: чтобы убедиться в корректности вычислений. Папка со словом Slow в названии - это пример использования Atomic-функций (например, если надо найти среднее по большому массиву данных). В своих научных программах Atomic-функции стараюсь избегать: замедляют расчёты, "фирменные" atomic работают только с целыми. Использую вместо них barrier.
    Месяца 3 назад NVIDIA наконец-то начала переход со стандарта OpenCL1.2 на 2.0. Жаль, что такие интересные возможности OpenCL 2.0, как Pipes (трубы для обмена данными между модулями) NVIDIA (как и их любимая CUDA) пока не поддерживают... Только AMD даёт полноценную поддержку OpenCL 2.0 (только при размере видеопамяти более 2Gb!), а NVIDIA полностью совместима только с версией 1.2.
    В общем, будут вопросы - пишите: работаю только в связке Delphi/OpenCL уже давно. Кстати, в среде RAD Studio очень удобно редактировать одновременно и код Delphi-pascal, и C-код для OpenCL.
     
    =====
    Дополню (конец декабря 2017). Внутри той же  ссылки для скачивания добавил папку:
    OpenCL_Demo2017 Barrier and Local_Memory REDUCT
    В ней новый пример под Delphi XE8 64bit (работает и при компиляции в Delphi под Win32, но с ограничениями, о которых будет сказано ниже). Отличия:
    Добавлен пример простейшей редукции с использованием barrier и LocalMemory с обилием комментариев внутри Kernel-файла ProgramGPU1.cpp Показано, как внутри Kernel создать а-ля динамический массив (стандарт языка OpenCL 1.2 этого не позволяет). Главное. На форме добавлены Gauge-компоненты, показывающие:
    общую загрузку CPU ; загрузку CPU данной задачей ; загрузку GPU (общую); загрузку контроллера памяти GPU ; проценты использованной памяти GPU ; температуру GPU (в текстовом виде). Для определения загрузки GPU используется nvml.dll  (мануал 2017), так что последние 4 параметра определяются только для карт NVIDIA, и при компиляции в Delphi под 64bit. Эта динамич. библиотека для каждой карты NVIDIA - своя, обычно при установке драйвера карты она попадает в папку
    C:\Program Files\NVIDIA Corporation\NVSMI\nvml.dll (этот путь прямо прописан в прилагаемом примере по ссылке).
    Всё что связано с определением загрузки CPU-GPU находится в отдельном модуле ProcessorUsage.pas, который может быть применён и для других программ (без OpenCL).
    Если есть желание попробовать OpenCL не только на видеокартах, но и на процессорах INTEL, надо поставить драйвер Ещё раз напоминаю, что при запуске *.exe рядом с ним должны лежать два текстовых файла *.cpp - они будут отправлены на компиляцию драйверу видеокарты! Буду весьма признателен, если кто-то подскажет способ измерения загрузки памяти GPU от AMD (загрузку GPU, его температуру, скорость FAN и т.д. уже знаю, как программно определить и для AMD тоже: использую atiadlxx.dll . Есть похожая DLL или иной способ определения свободной/использованной памяти именно для AMD?
    Всех с наступающим Новым годом!!
  5. Like
    Mars M отреагировална kami в June FSM (FMX SPb Meeting)   
    небольшой фотоотчет. Будет время - напишу еще и результаты блиц-интервью участников.
    Начало встречи.

    потом было вот это

    ну и эпилог:

    на последнем фото, слева направо (без учета z-order): @kami @Error @Nik @Brovin Yaroslav
  6. Like
    Mars M отреагировална krapotkin в Hex редактор   
    чисто заготовочка
    _FMXProject.7z
  7. Like
    Mars M получил реакцию от ENERGY в Перемещение 3D объектов   
    Вот тут есть пример где объект перемещается в позицию клика мыши.
     
  8. Like
    Mars M получил реакцию от Ingalime в Перемещение 3D объектов   
    Вот тут есть пример где объект перемещается в позицию клика мыши.
     
  9. Like
    Mars M получил реакцию от Rusland в Стрелковый тир (игра)   
    Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
    Всего один TImage который используется для отрисовки битмапов.
    Видео
     и проект 
     
    Tire.rar
  10. Like
    Mars M получил реакцию от Равиль Зарипов (ZuBy) в Стрелковый тир (игра)   
    Сделать так что бы были известны
    Создай что то типа редактора карт, где пользователь сможет выбрать текстуру, задать размеры и положение, потом сохранить все это в файл.
    А потом в игре отрывать его и будет известно все что нужно.
    Для примера, создать запись(record)
    type TMap = record Texture: string[255]; wallRect: TRectF; targetRect: TRectF; winRect: TRectF; RadArr: array[0..3] of Single; ClrArr: array[0..3] of TAlphaColor; end; Пользователь во время создания/редактирования карты заполняет его.
    ............... var Map: TMap; ............... Texture := 'wall.bmp'; wallRect := TRectF.Create(0, 0, 20, 50); ............... ............... Сохраняем в файл
    var mStream: TMemoryStream; begin mStream := TMemoryStream.Create; mStream.Write(Map, SizeOf(TMap)); mStream.SaveToFile('maps\tire.dat'); mStream.Free; end; В игре создаем точно такую же запись(record) как и в редакторе, загружаем сохраненный файл с параметрами и заполняем из него запись
    var mStream: TMemoryStream; Map: TMap; begin mStream := TMemoryStream.Create; mStream.LoadFromFile('maps\tire.dat'); mStream.Read(Map, SizeOf(TMap)); mStream.Free; end; В таком случае будут все нужные параметры известны, и примерно так же в играх и делают.
  11. Like
    Mars M получил реакцию от denprox в Стрелковый тир (игра)   
    Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
    Всего один TImage который используется для отрисовки битмапов.
    Видео
     и проект 
     
    Tire.rar
  12. Like
    Mars M получил реакцию от Maximus в Стрелковый тир (игра)   
    Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
    Всего один TImage который используется для отрисовки битмапов.
    Видео
     и проект 
     
    Tire.rar
  13. Like
    Mars M получил реакцию от Ingalime в Стрелковый тир (игра)   
    Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
    Всего один TImage который используется для отрисовки битмапов.
    Видео
     и проект 
     
    Tire.rar
  14. Like
    Mars M получил реакцию от Равиль Зарипов (ZuBy) в Стрелковый тир (игра)   
    Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
    Всего один TImage который используется для отрисовки битмапов.
    Видео
     и проект 
     
    Tire.rar
  15. Like
    Mars M получил реакцию от Andrey Efimov в Узнать размер видеопамяти   
    Вот так вот вроде работает:
    Только нужно будет закомментировать строчку
    assert(sizeof(TCudaDeviceProp) = 540, 'sizeof(TCudaDeviceProp) <> 540');  
  16. Like
    Mars M получил реакцию от Andrey Efimov в Узнать размер видеопамяти   
    Подниму тему. CUDA конечно хорош(а?), но только для nvidia.
    Наткнулся тут на работу с OpenCL в делфи http://www.delphisources.ru/forum/showthread.php?t=28188
    Там по ссылке в первом сообщение в принципе все есть что нужно. Кому оттуда не удобно перезалил все файлы https://yadi.sk/d/t3mPqlJT3HnfiX
    Вот пример использования https://yadi.sk/d/bmDKXZ0k3Hnfny
    Проверял на картах nvidia и ati, конечно же карты должны поддерживать OpenCL.
    Если в MyOpenCL.pas чего то не хватает, можно взять это в CL.pas из GLScene https://sourceforge.net/p/glscene/code/HEAD/tree/trunk/Source/ParallelAPIs/
    Я например добавил константу   CL_DEVICE_LOCAL_MEM_SIZEэ
    А можно использовать родные CL.pas и CL_Platform.pas, в первом архиве есть пример использования.
    В архиве как раз есть рабочий пример вычислений 
  17. Like
    Mars M отреагировална denprox в Глобальные и локальные координаты позиции курсора   
    Спасибо! То что нужно! 
    Вот рабочий пример:
    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var AbsoluteMousePos: TPointF; LocalMousePos: TPointF; begin Label1.Text := 'X: '+FloatToStr(X); //Координаты в пределах объекта Label2.Text := 'Y: '+FloatToStr(Y); LocalMousePos := TPointF.Create(X, Y); AbsoluteMousePos := Panel1.LocalToAbsolute(LocalMousePos); Label3.Text := 'gX: '+ FloatToStr(AbsoluteMousePos.X); //Координаты относительно формы Label4.Text := 'gY: '+ FloatToStr(AbsoluteMousePos.Y);  
  18. Like
    Mars M получил реакцию от Alex7wrt в Глобальные и локальные координаты позиции курсора   
    Вот тут скорее всего как раз про это 
     
  19. Like
    Mars M получил реакцию от denprox в Глобальные и локальные координаты позиции курсора   
    Вот тут скорее всего как раз про это 
     
  20. Like
    Mars M получил реакцию от AngryOwl в Глобальные и локальные координаты позиции курсора   
    Вот тут скорее всего как раз про это 
     
  21. Like
    Mars M получил реакцию от ENERGY в 2D<>3D координаты   
    В общем свой вопрос решил. Вышеописанные функции удобны для работы с координатами.
    И подошли бы мне если бы нужно было перемещать саму модель, но в моем случае нужно работать только с камерой, а это значит что нужно постоянно учитывать ее положение. Короче слишком много математики для фичи которая будет только для того что бы была
    Но к счастью есть свойство ScreenBounds, которое все сделает за меня.
    Вот обновленный пример, по правой кнопке куб вписывается в окно, что мне и нужно.
    https://yadi.sk/d/KVJFHajd3J9ALD
     
    Projects.rar
  22. Like
    Mars M получил реакцию от Rusland в 2D<>3D координаты   
    В общем свой вопрос решил. Вышеописанные функции удобны для работы с координатами.
    И подошли бы мне если бы нужно было перемещать саму модель, но в моем случае нужно работать только с камерой, а это значит что нужно постоянно учитывать ее положение. Короче слишком много математики для фичи которая будет только для того что бы была
    Но к счастью есть свойство ScreenBounds, которое все сделает за меня.
    Вот обновленный пример, по правой кнопке куб вписывается в окно, что мне и нужно.
    https://yadi.sk/d/KVJFHajd3J9ALD
     
    Projects.rar
  23. Like
    Mars M получил реакцию от Rusland в 2D<>3D координаты   
    Есть такие функции LocalToAbsolute3D и AbsoluteToLocal3D 
    С первой разобрался(пример), со второй тоже в принципе ясно.
    Осталось только разобраться как это применить
    PS: пример честно скопипастил отсюда  у него там есть и другие интересные проекты.
    https://github.com/LUXOPHIA/Sketch3D
     
    Projects.rar
  24. Like
    Mars M получил реакцию от Rusland в 2D<>3D координаты   
    Спасибо, гляну, может что и найду там
    Вот тут тогда тоже может быть то чего нету в примерах 
    https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/trunk/Object Pascal/
  25. Like
    Mars M получил реакцию от Rusland в Узнать размер видеопамяти   
    Подниму тему. CUDA конечно хорош(а?), но только для nvidia.
    Наткнулся тут на работу с OpenCL в делфи http://www.delphisources.ru/forum/showthread.php?t=28188
    Там по ссылке в первом сообщение в принципе все есть что нужно. Кому оттуда не удобно перезалил все файлы https://yadi.sk/d/t3mPqlJT3HnfiX
    Вот пример использования https://yadi.sk/d/bmDKXZ0k3Hnfny
    Проверял на картах nvidia и ati, конечно же карты должны поддерживать OpenCL.
    Если в MyOpenCL.pas чего то не хватает, можно взять это в CL.pas из GLScene https://sourceforge.net/p/glscene/code/HEAD/tree/trunk/Source/ParallelAPIs/
    Я например добавил константу   CL_DEVICE_LOCAL_MEM_SIZEэ
    А можно использовать родные CL.pas и CL_Platform.pas, в первом архиве есть пример использования.
    В архиве как раз есть рабочий пример вычислений 
×
×
  • Создать...