Автор Тема: Помогите создать графический фильтр для Kega Fusion  (Прочитано 6027 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
Собственно вот решил создать граф. фильтр для кеги, который уберет этот назойливый сеговский дитеринг на изображении. Таким образом субьективно увеличивается количество цветов и полутонов на экране, дитеринг пропадает а персонажи остаются четкими (трешолд работает). Я реализовал необходимый алгоритм на Dark Basic Pro, но у меня нет опыта создания длл-ок (а у каге фьюжн вроде фильтры ввиде длл-ок). Прошу знающих людей оказать помощь в реализации конечного фильтра для кеги. Алгоритм простейший, исходник на васике прилагается.

Плиложил архив с прогой на Dark Basic Pro. Входная картинка должна называться "input.bmp". В конфиге первое число - агрессия фильтра, 2-е - трешолд. Можно менять в пределах от 1 до 255. Результат оброботки - в файле "output.bmp".

З.Ы. просьба не писать ничего типа "Нафига вам фильтры, я играю только на телике и без них..." и т.п.

Забыл предупредить, что для работы проги необходим 9-й директ, а точнее 9.0с. И еще, там задержка прописана при отрисовке чтобы легче заметить вносимые фильтром изменения, поэтому не перформанс жаловаться не стОит :).

З.Ы2. Протестил на скринах с Jurassic Park Lost World и нашел подходящие значения для конфига:
40
30
« Последнее редактирование: 22 Сентябрь 2008, 13:51:12 от 3DSchumacher »

Оффлайн Zephyr

  • Пользователь
  • Сообщений: 544
  • Пол: Мужской
  • coder
    • Просмотр профиля
Никогда этим не занимался, но вот мое видение дела...
Также мысли мои пока не подкрепляю какой-либо литературой, те все навскидку,
так что просьба не ржать если чего...

Если я не ошибаюсь... то с развитием 32 битных технологий язык перестал иметь значение...
Любую длл можно просмотреть на точки входа... те процедуры в которые можно войти из
определенного языка (тут имеет значение только типы данных)...

Берешь исходник кеги и смотришь как там длл подключаются...
Потом пишешь свою длл на том чем можешь...
Если ты свою длл организуешь точно с такими же параметрами на входные и выходные значения
как и другие кега фильтры... все должно само заработать.

Вот немного инфы по просмотру длл:
(Это из учебника по OpenGL - просто то что вспомнилось навскидку)
*********************************************************************************
DLL
Файлы DLL (Dynamic Link Library, библиотека динамической компоновки) являются основой программной архитектуры Windows и отличаются от исполняемых файлов фактически только заголовком

Замечание
Но это не означает, что если переименовать DLL-файл, то он станет исполняемым имеется в виду заголовочная информация файла

Для загрузки операционной системы необходимо запустить файл win com, имеющий размер всего 25 Кбайт Как легко догадаться, в файл такого размера невозможно поместить код, реализующий всю ту гигантскую работу, которая производится по ходу выполнения любого приложения Этот файл является загрузчиком ядра операционной системы, физически размещенным в нескольких DLL-файлах.
Помимо кода, DLL-файлы могут хранить данные и ресурсы. Например, при изменении значка (ярлыка) пользователю предлагается на выбор набор значков из файла SHELL32. DLL.
Как мы уже знаем, для создания любой программы Windows, имеющей собственное окно, в проекте необходимо подключать как минимум два модуля' windows и Messages Первый из этих файлов содержит прототипы функций API и GDI Посмотрим на прототип одной из них:

function CreateDC;
external gdi32 name 'CreateDCA';
Здесь величина gdi32 - константа, описанная в этом же модуле'
const
gdi32 = 'gdi32. dll';

Таким образом, функция CreateDC физически размешена в файле gdi32 dll и каждое приложение, использующее функции GDI, обращается к этой библиотеке.
Приблизительно так же выглядят прототипы остальных функций и процедур, но указываемые в прототипе имена библиотек индивидуальны для каждой из них.
Обратите внимание, что в этом же файле находится описание константы opengl32 Использование DLL, в частности, позволяет операционной системе экономить память.
Приложение не умеет ни создавать окно, ни выводить в него информацию и не содержит кода для этих действий. Все запущенные приложения (клиенты) передают соответствующие команды файлу gdi32. dll (серверу), который отрабатывает их, осуществляя вывод на устройство, ссылку на контекст которого передается в качестве первого аргумента функции. При этом клиентов обслуживает единственная копия сервера в памяти. Помимо важности DLL как основы программной архитектуры операционной системы, представление о динамических библиотеках необходимо иметь каждому разработчику программных систем. Многие программные системы строятся по следующему принципу: основной код и данные размещаются в динамических библиотеках, а исполняемому файлу отводится роль загрузчика. Подробнее о такой организации мы поговорим в главе 5. Библиотека OpenGL физически также размещена в виде двух DLL-файлов: opengl23. dll и glu32. dll. Первый из этих файлов и есть собственно библиотека OpenGL. Назначение его - осуществление взаимодействия с акселератором или программная эмуляция ускорителя за счет центрального процессора. Поддержка ЗD-акселерации осуществляется с помощью полного (устанавливаемого) клиентского драйвера (Installable Client Driver, ICD) и мини-драйвера (Mini-Client Driver, MCD).
Библиотека OpenGL реализована по клиент-серверной схеме, т. e. ее одновременно может использовать несколько приложений при единственной копии сервера в памяти или вообще при удаленном расположении сервера (сервер в принципе может располагаться и не на компьютере клиента). Иногда программисту, как, например, в случае с OpenGL, бывает необходимо просмотреть список функций и процедур, размещенных в конкретном файле DLL. Для этого можно воспользоваться либо утилитой быстрого просмотра, поставляемой в составе операционной системы, либо утилитой tdump. exe, поставляемой в составе Delphi.
Для вызова утилиты быстрого просмотра установите курсор мыши на значок нужного файла и нажмите правую кнопку. В появившемся меню должен присутствовать пункт "Быстрый просмотр", если этого пункта нет, то требуется установить компонент операционной системы "Быстрый просмотр". Для использования утилиты tdump скопируйте ее и необходимый dll-файл в отдельный каталог. Запустите его с параметрами <имя анализируемого файла> и <имя файла-результата>, например:

TDUMP. EXE opengl32. dll opengl. txt

В файле opengl. txt будет выдана информация, извлеченная утилитой из заголовка библиотеки, аналогичная той, что выводится утилитой быстрого просмотра. Информация группируется по секциям, среди которых наиболее
часто программисту требуется секция экспортируемых функций для уточнения содержимого библиотеки.
Итак, чаще всего DLL представляет собой набор функций и процедур. Как говорится в справке Delphi по DLL, "динамические библиотеки являются идеалом для многоязыковых проектов". Это действительно так: при использовании OpenGL совершенно безразлично, в какой среде созданы сама библиотека и вызывающие ее модули.
*********************************************************************************

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
За инфу канешна спасибо, но проблема в том шо я пишу какраз на тех языках которые не умеют компилить длл-ки :(. А изучать например СиШарп ради одного фильтра мне не очень хочется. Тут работы на час максимум для знающего человека.

Оффлайн Zephyr

  • Пользователь
  • Сообщений: 544
  • Пол: Мужской
  • coder
    • Просмотр профиля
Также прикрепляю утилиту tdump.exe
http://slil.ru/26168548
Успехов!!!

Добавлено позже:
СиШарп придуман ради технологии NET, неужели Кега на нем писана???  <_<
Возьми дельфи... Я бы может и попробывал, но забит под завязку...
На мне счас почти 10 программных проектов весит... Из них 6 для моей группы,
2 по учебе и 2 коммерческих... может кто другой...

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Я смотрю у фильтра такая скорость оброботки графики, что игра превратится в слайд шоу. Я так понимаю, что скорость обработки должна быть 1\60 секунды, чтобы не тормозило.

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
да нормальная там скорость оброботки. Просто я после отрисовки каждого пикселя обновляю экран. Типа как пауза для того чтобы прослеживать вносимые им изменения на ходу.

И не следует забывать что написан он на одном из самых тормозных языков в мире :), а алгоритм там очень простой и быстрый.

Оффлайн Zephyr

  • Пользователь
  • Сообщений: 544
  • Пол: Мужской
  • coder
    • Просмотр профиля
ну всегда можно написать письмо авторам эмулятора...
я думаю это самое грамотное решение...

Оффлайн Mashin

  • Пользователь
  • Сообщений: 85
  • Пол: Мужской
    • Twitter
    • Просмотр профиля
Цитата
Берешь исходник кеги и смотришь как там длл подключаются...

С этим наверное будут проблемы, а вот примеры исходников Render plugin'ов для Fusion'a есть здесь http://eidolons-inn.net/tiki-index.php?page=Kega

Оффлайн Zephyr

  • Пользователь
  • Сообщений: 544
  • Пол: Мужской
  • coder
    • Просмотр профиля
Writing Plugins:

Plugins are basically DLLs renamed to RPIs.

It is a very simple system - there are two functions you need to implement:

RenderPluginGetInfo - supplies info about the plugin to the emulator.
RenderPluginOutput  - the main render code.

RenderPluginGetInfo returns a pointer to an internal structure to the emulator.
This structure should be global scope.
итд...

Ну не так уж там все и сложно... Сидеть нужно, разбираться...
3DSchumacher дерзай!

Оффлайн Steel

  • Пользователь
  • Сообщений: 75
  • Пол: Мужской
    • Просмотр профиля
О, хороший фильтр для этого эмуля не повредит.

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
Re: Помогите создать графический фильтр для Kega Fusion
« Ответ #10 : 23 Сентябрь 2008, 09:07:49 »
Ок. Решено делать длл-ку на Pure Basic (да, я бейсикоман :)). Насчет скорости ее работы незнаю, поэтому ждите результаты в течении нескольких дней. Тему просьба не закрывать.

З.Ы. А почему никто не отписАлся о возможных дороботках фильтра? Или всех устраивает текущий алгоритм антидитеринга?

Оффлайн evgeny

  • Пользователь
  • Сообщений: 1390
  • Пол: Мужской
    • Просмотр профиля
Re: Помогите создать графический фильтр для Kega Fusion
« Ответ #11 : 23 Сентябрь 2008, 15:12:07 »
Не устраивает то, что размер картинки не меняется. Если бы это было дополнение к фильтру HQ2x,например - другое дело. А играть с большими пикселями, а местами размытыми как-то не очень.

Оффлайн 3DSchumacher

  • Ушел с форума
  • Сообщений: 2164
  • Пол: Мужской
    • Просмотр профиля
Re: Помогите создать графический фильтр для Kega Fusion
« Ответ #12 : 23 Сентябрь 2008, 15:23:45 »
После написания первой версии фильтра я совмещу его с Hqx, исходники для кеги есть.