Mars M
-
Постов
63 -
Зарегистрирован
-
Посещение
-
Победитель дней
4
Активность репутации
-
Mars M отреагировална Pax Beach в Direct3D. Работа со снимками экрана
Библиотека для работы с изображениями находится здесь.
Готовится описание.
-
Mars M отреагировална Равиль Зарипов (ZuBy) в [Windows] Сворачивание приложение
кто-то в чатике просил сделать подобное, вот что получилось
FMX.AppMinimized.zip
сворачивание/разворачивание делается, только после разворота не делается активация формы (не было времени с этим разбираться у меня)
-
Mars M отреагировална dnekrasov в Как узнать номер нажатой строки в memo delphi fmx?
TCustomMemo.CaretPosition.Line
-
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?
Всех с наступающим Новым годом!!
-
Mars M отреагировална kami в June FSM (FMX SPb Meeting)
небольшой фотоотчет. Будет время - напишу еще и результаты блиц-интервью участников.
Начало встречи.
потом было вот это
ну и эпилог:
на последнем фото, слева направо (без учета z-order): @kami @Error @Nik @Brovin Yaroslav
-
-
Mars M получил реакцию от ENERGY в Перемещение 3D объектов
Вот тут есть пример где объект перемещается в позицию клика мыши.
-
Mars M получил реакцию от Ingalime в Перемещение 3D объектов
Вот тут есть пример где объект перемещается в позицию клика мыши.
-
Mars M получил реакцию от Rusland в Стрелковый тир (игра)
Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
Всего один TImage который используется для отрисовки битмапов.
Видео
и проект
Tire.rar
-
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; В таком случае будут все нужные параметры известны, и примерно так же в играх и делают.
-
Mars M получил реакцию от denprox в Стрелковый тир (игра)
Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
Всего один TImage который используется для отрисовки битмапов.
Видео
и проект
Tire.rar
-
Mars M получил реакцию от Maximus в Стрелковый тир (игра)
Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
Всего один TImage который используется для отрисовки битмапов.
Видео
и проект
Tire.rar
-
Mars M получил реакцию от Ingalime в Стрелковый тир (игра)
Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
Всего один TImage который используется для отрисовки битмапов.
Видео
и проект
Tire.rar
-
Mars M получил реакцию от Равиль Зарипов (ZuBy) в Стрелковый тир (игра)
Описание того что нужно как то расплывчато, но вот примерно так можно сделать.
Всего один TImage который используется для отрисовки битмапов.
Видео
и проект
Tire.rar
-
Mars M получил реакцию от Andrey Efimov в Узнать размер видеопамяти
Вот так вот вроде работает:
Только нужно будет закомментировать строчку
assert(sizeof(TCudaDeviceProp) = 540, 'sizeof(TCudaDeviceProp) <> 540');
-
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, в первом архиве есть пример использования.
В архиве как раз есть рабочий пример вычислений
-
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);
-
Mars M получил реакцию от Alex7wrt в Глобальные и локальные координаты позиции курсора
Вот тут скорее всего как раз про это
-
Mars M получил реакцию от denprox в Глобальные и локальные координаты позиции курсора
Вот тут скорее всего как раз про это
-
Mars M получил реакцию от AngryOwl в Глобальные и локальные координаты позиции курсора
Вот тут скорее всего как раз про это
-
Mars M получил реакцию от ENERGY в 2D<>3D координаты
В общем свой вопрос решил. Вышеописанные функции удобны для работы с координатами.
И подошли бы мне если бы нужно было перемещать саму модель, но в моем случае нужно работать только с камерой, а это значит что нужно постоянно учитывать ее положение. Короче слишком много математики для фичи которая будет только для того что бы была
Но к счастью есть свойство ScreenBounds, которое все сделает за меня.
Вот обновленный пример, по правой кнопке куб вписывается в окно, что мне и нужно.
https://yadi.sk/d/KVJFHajd3J9ALD
Projects.rar
-
Mars M получил реакцию от Rusland в 2D<>3D координаты
В общем свой вопрос решил. Вышеописанные функции удобны для работы с координатами.
И подошли бы мне если бы нужно было перемещать саму модель, но в моем случае нужно работать только с камерой, а это значит что нужно постоянно учитывать ее положение. Короче слишком много математики для фичи которая будет только для того что бы была
Но к счастью есть свойство ScreenBounds, которое все сделает за меня.
Вот обновленный пример, по правой кнопке куб вписывается в окно, что мне и нужно.
https://yadi.sk/d/KVJFHajd3J9ALD
Projects.rar
-
Mars M получил реакцию от Rusland в 2D<>3D координаты
Есть такие функции LocalToAbsolute3D и AbsoluteToLocal3D
С первой разобрался(пример), со второй тоже в принципе ясно.
Осталось только разобраться как это применить
PS: пример честно скопипастил отсюда у него там есть и другие интересные проекты.
https://github.com/LUXOPHIA/Sketch3D
Projects.rar
-
Mars M получил реакцию от Rusland в 2D<>3D координаты
Спасибо, гляну, может что и найду там
Вот тут тогда тоже может быть то чего нету в примерах
https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/trunk/Object Pascal/
-
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, в первом архиве есть пример использования.
В архиве как раз есть рабочий пример вычислений