Делаю x64 версию SR2D.
Тестовая версия, пример использования на vb.net: https://yadi.sk/d/ejnc7Q-iPJyYkA
В этой версии быстродействие многих функций будет ниже, чем в x86 версии, так как убраны ассемблерные вставки и даже интринсики, цель - отладить корректность алгоритмов и взаимодействия dll с основной программой. Оптимизации - потом.
В тестовом примере демонстрируется работа DPBM, но переведены все функции, можно проверять.
Есть изменение - Blend теперь не один из операторов наложения функцией Draw или MaskDraw, а независимая функция, это позволило сделать BlendFactor аргументом функции, а не свойством спрайта-источника, что позволяет использовать один источник в разных потоках с разным BlendFactor, ранее при многопоточности было ограничение на разные значения BlendFactor.
Запустил Release x64:
1 тест - 2307 fps
2 тест - 423 fps
Благодарю.
Судя по цифрам - хороший процессор :)
Поясню - это тест, скорее, для пользователей SR2D, пример того, как и какие модули подключать. Предполагается изменять код под свои нужды, спрашивать меня, если что-то не получается, сообщать об ошибках.
у меня ~1960 в первом и ~395 во втором
это ризен 2700х
если не теребонькать мышку
ps
проверил последний билд.
клеар не прерывает, больше, исполнение, если запущен на 2ом фреймворке
Mikle
у меня немного тупой вопрос
можешь объяснить аргументы clearrect?
pleft pright top bottom
я что-то туплю, не могу увидеть логики
pleft pright top bottom - левый, правый, верхний, нижний - координаты ректа для очистки. Всё просто, вроде бы.
я наверное перегорел уже, не могу реально вдуплить
я жду от квадрата, левый верхний угол и нижний правый
а тут получается, левый првый и верхний нижний
т.е нужно указывать левый потом правый, потом верхний, потом нижний, что-ли, откуда такой разброс?)
Вроде получил нужный результат, но так и не понял почему координаты так разбиты, по какому принципу. Я конечно могу аргументы пересортировать, как мне удобнее, или в конструкторе писать в том порядке в каком хочу, такая фича вроде есть, но тем не менее интересно почему именно так разбито?
SilentPrayerCG
> могу аргументы пересортировать
Пересортируй, я просто не обращал внимания даже, с таким набором всего одна функция.
Mikle
tiledraw кажется не рисует ничего если опустить опциональные аргументы
т.е
backgr.TileDraw(BackTile, 0, 0, ObstacleMap.Width, ObstacleMap.Height) вот так черный экран
backgr.TileDraw(BackTile, 0, 0, ObstacleMap.Width, ObstacleMap.Height, 0, 0, Op.Paint) - вот так рисует нормально
SilentPrayerCG
А чему равен Op спрайта backgr? Может там недопустимое значение?
Ведь в примере DPBM такая строка есть и работает, только там вместо "ObstacleMap.Width, ObstacleMap.Height" стоят конкретные величины "512, 512".
Mikle
ну он дефолтный по-идее, я специально не задавал
Dim backgr As New Sprite(overlaysprite.Width, overlaysprite.Height)
попробовал вот так
Dim back As New Sprite(1024, 768, Op.Paint) Dim tile As New Sprite("BackLight.png") back.TileDraw(tile, 0, 0, 1024, 768) back.PaintToDevice(hDC)
черный холст ↑
Dim back As New Sprite(1024, 768, Op.Paint) Dim tile As New Sprite("BackLight.png") back.TileDraw(tile, 0, 0, 1024, 768, 0, 0, Op.DefaultOp) back.PaintToDevice(hDC)
вот так черный тоже ↑
Dim back As New Sprite(1024, 768, Op.Paint) Dim tile As New Sprite("BackLight.png") back.TileDraw(tile, 0, 0, 1024, 768, 0, 0, Op.Paint) back.PaintToDevice(hDC)
и вот так рисует ↑ нормально, когда через имя файла объявляешь аргумента op я там не увидел
сейчас еще попробовал заресайзить спрайт, blabla new sprite(oldsprite, размер) и фигня полная на выход идет, полосы ступеньками
Я выше неверно спросил, важен Op спрайта-источника, то есть BackTile.
> Dim tile As New Sprite("BackLight.png")
Кажется, понятно. При загрузке из файла с альфаканалом Op по умолчанию становится AlphaBlend, а в BackLight.png, видимо, альфаканал есть, но чистый - равен нулю. То есть это неправильный файл, попробуй с помощью SaveToFile пересохранить его в 24-битном формате и проверить так.
SilentPrayerCG
> попробовал заресайзить спрайт, blabla new sprite(oldsprite, размер) и фигня
> полная на выход идет, полосы ступеньками
Проверил. У меня работает. Ты точно не пропускаешь никакие параметры? Правильный пример:
SprNorm = New Sprite("wall_norm.jpg", , 320, 450)
Mikle
с ресайзом, перепроверил, вроде нормально
кстати, по поводу ресайза хотел спросить, вроде что-то всплывало в прошлой теме об этом давно, нет ли ресайза по nearest neighbor?
по поводу тайла, загрузил bmp все равно чёрный квадрат, если опустить опциональные аргументы
в bmp то альфы точно нету
SilentPrayerCG
> bmp то альфы точно нету
bmp с альфой есть, вот jpg - точно нет.
Спрайту можно просто задать нужный Op:
Spr.Op = Op.Paint
SilentPrayerCG
> нет ли ресайза по nearest neighbor?
То есть без фильтрации? Нет, не делал, а нужно?
Mikle
я точно попал в параллельную вселенную, эффект Манделы
до недавнего времени был уверен, что 100% jpeg - lossless
теперь еще и в бмп альфа бывает (сам сейчас на сейве это увидел)
ну для пиксель арта бы не помешал
допустим есть маленький пиксель арт, к примеру, и скейлишь его в два раза, что-бы не мылилось
по-моему в тот самый раз об этом и спрашивали
как вариант если-бы можно было выбирать