Важная информация

User Tag List

Показано с 1 по 8 из 8

Тема: Библиотека Cybergraphics(CGX) для FPC OS4.1

  1. #1
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    847
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    100
    Поблагодарили
    67 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Библиотека Cybergraphics(CGX) для FPC OS4.1

    Хотелось бы освоить библиотеку сайберграфикс на фри Паскале.
    В системе в папке LIBS есть файл cybergaphics.l.main. Значит ли это, что библиотека уже установлена?
    Нашёл ссылку на описание библиотеки https://www.freepascal.org/daily/pac...s/index-8.html
    Но без примеров кода совершенно ничего не могу понять. Программировал ли кто используя эту библиотеку? Может, кто приведёт какой-нибудь пример кода( можно на си)?
    ¡Un momento, señor fiscal!


  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member Аватар для kas1e
    Регистрация
    30.03.2005
    Адрес
    minsk
    Сообщений
    116
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    37
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    @Smalovsky
    Ответу по пунктам что такое .l.main и про cybergraphics, сначала про .l.main:

    Когда нет нативной powerpc версии какой-то либы, а только старая 68к версия, но мы хотим ее использовать с powerpc кодеса, то у нас есть 2 варианта: сделать вот такие powepc->68k стабы, или юзать EmulateTags(). С EmulateTags() гемора больше и дольше когда речь о большой либе с большим кол-во функций, поэтому в основном делают стабы. Можешь зачитать Migaration Guide о том что такое powerpc->68k стабы, но в целоем, если у тебя есть скажем 68k версия dopus5.library, и ты хочешь ее использовать с нативных amigaos4/ppc бинарников, то ты создаешь dopus5.l.main. И когда код из твоего ос4-ппц бинарника захочет использовать функции 68 либы, система (ramlib если более точно), автоматически сканит на .l.main и если найдено, открывает и берет интерфейс оттуда. Стабы эти не нужно самому писать (хотя можно), они генерятся тулзами типа fd2pragma, fdtrans, IDLtool.

    Само имя стаба в целом не важно, не обязательно это .library, может быть .module или пох что. Главное что ramlib в нужном сценарии будет искать "." в имени начиная с конца и как нашлось интерфейс добавляется, и можно юзать ппц кодеса.

    Если интересно я писал статейку об этом неск. лет назад (на английском правда) : https://os4coding.net/blog/kas1e/how...-68k-libraries

    Далее про cybergraphics : это старая древняя либа, которая в os4 уже давно интегрирована в graphics.library, как и picasso96. Фукнции обеих либ еще могут юзаться, но это уже просто врапперы над graphics.library's функциями, и остались в SDK только ради поддержки старого кодеса, и все. Поэтому на современное amigaos4 , юзать не cgx, не p96 больше не нужно и не рекомендуется. Юзается теперь чисто graphics.library напрямую онли.

    Откуда у тебя в Libs: вообще cybegraphics.l.main - хз , но она уже не нужна.


    Ну и в целом, паскалем у тебя будет гемор на ОС4, FPC не до конца корректно работает с ОС4 тачками где нужен "alignement", и поэтому некоторые тулзы будут крашится. Плюс паскаль не поддержен в SDK официальном. C ОС4 только C / C++ язык выбора если хочется полного контроля, поддержки и тд.
    Последний раз редактировалось kas1e; 07.09.2023 в 08:05.

  4. #3
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    847
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    100
    Поблагодарили
    67 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Фукнции обеих либ еще могут юзаться, но это уже просто врапперы над graphics.library's функциями, и остались в SDK только ради поддержки старого кодеса, и все. Поэтому на современное amigaos4 , юзать не cgx, не p96 больше не нужно и не рекомендуется. Юзается теперь чисто graphics.library напрямую онли.
    Вот что-то я не нахожу на Паскале для agraphics( http://www.alb42.de/fpc-docu/agraphics/index-5.html ) расширенных функций из cgx. Приходится обращаться к киберграфиксу...
    Написал программку, которая должна узнать у системы характеристики режимов для 24-битного цвета:

    Код:
    Program CGX_Test;
    uses  exec, sysutils, utility, intuition,agraphics,cybergraphics;
    var
    
            execlist:PList;
            cybernode:PCyberModeNode;
            cyberitem1:tTagItem;
            cyberitem2:tTagItem;
            citemarray:array [0..1] of ^tTagItem;
            deptharray:array [0..1] of Word;
    begin
    
            deptharray[0]:=PIXFMT_BGR24;
            deptharray[1]:=PIXFMT_RGB24;
    
            cyberitem1.ti_Tag:=CYBRMREQ_CModelArray;
            cyberitem1.ti_Data:=LongWord(@deptharray);
    
            cyberitem2.ti_Tag:=TAG_END;
            cyberitem2.ti_Data:=0;
    
            citemarray[0]:=@cyberitem1;
            citemarray[1]:=@cyberitem2;
    
            execlist:=AllocCModeListTagList(@citemarray);
            if execlist <> nil then writeln('cyber');
            cybernode:=PCyberModeNode(execlist^.lh_Head);
            repeat
                    writeln('Mode ',cybernode^.ModeText);
                    writeln('Width ',cybernode^.Width);
                    writeln('Height ',cybernode^.Height);
                    writeln('Depth ',cybernode^.Depth);
                    writeln();
                    cybernode:=PCyberModeNode(cybernode^.Node.ln_Succ);
            until cybernode=nil;
    
    end.
    Я писал её без других примеров. Где-то ошибся, так как мне выводятся все видеорежимы, а не те которые я запросил( с 24-битным цветом). Информацию о видеорежимах выводит неправильно. Вот пример вывода:

    Код:
    Mode PicassoIV:1280x720 x15 RGB
    Width 720
    Height 15
    Depth 0
    Видно, что Height пишет в Width, Depth пишет в Height. Может, я с указателями ошибся? Хорошо бы какие-нибудь примеры для кберграфикса на си посмотреть. Только, не могу эти примеры найти.

    - - - Добавлено - - -

    Нашёл какие-то примеры для Ароса. Ну хоть что-то.
    https://en.wikibooks.org/wiki/Aros/D...Libraries/CGFX
    Последний раз редактировалось Smalovsky; 10.09.2023 в 16:35.
    ¡Un momento, señor fiscal!


  5. #4
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    847
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    100
    Поблагодарили
    67 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Задолбался я с ошибками. Решил просмотреть все видеорежимы с помощью программы:

    Код:
    Program CGX_Test;
    uses  exec, sysutils, utility, intuition,agraphics,cybergraphics;
    var
    
            execlist:PList;
            cybernode:PCyberModeNode;
    
    begin
    
    
    
            execlist:=AllocCModeListTagList(nil);
            if execlist <> nil then writeln('cyber');
            cybernode:=PCyberModeNode(execlist^.lh_Head);
            while cybernode<>nil do
            begin
                    writeln('Mode ',cybernode^.ModeText);
                    writeln('Width ',cybernode^.Width);
                    writeln('Height ',cybernode^.Height);
                    writeln('Depth ',cybernode^.Depth);
                    writeln();
                    cybernode:=PCyberModeNode(cybernode^.Node.ln_Succ);
            end;
    
    end.
    Опять, с ошибками формирует список. Вручную откорректировал указатели на некоторые данные:

    Код:
    Program CGX_Test;
    uses  exec, sysutils, utility, intuition,agraphics,cybergraphics;
    var
    
            execlist:PList;
            cybernode:PCyberModeNode;
            p:^Word;
    
    begin
            execlist:=AllocCModeListTagList(nil);
            if execlist <> nil then writeln('cyber');
            cybernode:=PCyberModeNode(execlist^.lh_Head);
            while cybernode<>nil do
            begin
                    writeln('Mode ',cybernode^.ModeText);
                    p:=@cybernode^.Width;
                     writeln('Width ',(p-1)^);
                    // writeln('Width ',cybernode^.Width);
                    p:=@cybernode^.Height;
                     writeln('Height ',(p-1)^);
                    //writeln('Height ',cybernode^.Height);
                    p:=@cybernode^.Depth;
                    writeln('Depth ',(p-1)^);
                    //writeln('Depth ',cybernode^.Depth);
                    writeln();
                    cybernode:=PCyberModeNode(cybernode^.Node.ln_Succ);
            end;
    Выводит видеорежимы правильно. Но другие данные побиты.
    Зарегистрируюсь на форуме Фри Паскаля и опишу баги.

    - - - Добавлено - - -

    Незнаю, что делать. Написал на форум https://forum.lazarus.freepascal.org...c,64644.0.html
    ¡Un momento, señor fiscal!


  6. #5
    Member Аватар для kas1e
    Регистрация
    30.03.2005
    Адрес
    minsk
    Сообщений
    116
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    37
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    С паскалем будет гемор, только С будет норм. Паскаль на ОС4 это просто чувак для себя портанул компилятор, и хз чего он там и как и куда и почему сделал. А С официально поддержан, это порт GCC, и все девелоперы на ОС4 именно его юзают.
    Последний раз редактировалось kas1e; 19.09.2023 в 07:15.

  7. #6
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    847
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    100
    Поблагодарили
    67 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от kas1e Посмотреть сообщение
    С паскалем будет гемор, только С будет норм. Паскаль на ОС4 это просто чувак для себя портанул компилятор, и хз чего он там и как и куда и почему сделал. А С официально поддержан, это порт GCC, и все девелоперы на ОС4 именно его юзают.
    Я перешёл на picasso96api. "Пикасуха" нормально завелась. Жду исправления киберграфикса.

    - - - Добавлено - - -

    Меня просят отправить баг на баг-трейкер, но для этого нужно перевести грамотно мой первый пост на английский https://forum.lazarus.freepascal.org...1790#msg491790
    Может, кто поможет с переводом? Перевести нужно только русский текст. Перевод можно отправить прямо в этот топик.
    ¡Un momento, señor fiscal!


  8. #7
    Member Аватар для kas1e
    Регистрация
    30.03.2005
    Адрес
    minsk
    Сообщений
    116
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    37
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Меня просят отправить баг на баг-трейкер, но для этого нужно перевести грамотно мой первый пост на английский https://forum.lazarus.freepascal.org...1790#msg491790
    Может, кто поможет с переводом? Перевести нужно только русский текст. Перевод можно отправить прямо в этот топик.
    Hi,

    While using AmigaOS4 PPC OS (on WinUAE emulator emulating Amiga4000 with graphics card for me) and FreePascal 3.2.2 for AmigaOS4.1 i do have a problem when trying to use CyberGraphics library:

    Firstly, i tried to get videomode's properties with this kind of code:

    ...Здесь первый кусок кода...

    But returned information contain bugs. Heigh, widht, depth and other fields just messed around into TCyberModeNode. So i made a small modification via pointer:

    ...Здесь второй кусок кода...


    So then i have correct widht, height and depth. Other fields i didn't touch, but they messed too.

    To whom i should send a bug report ?

    The bug itself are:

    Wrong return of the AllocCModeListTagList(): Function return a list, elements of which when casting to a pointer type PCyberModeNode and returning of TCyberModeNode by this pointer contain wrong values (they just messed around in wrong fields).

  9. Этот пользователь поблагодарил kas1e за это полезное сообщение:

    Smalovsky (21.09.2023)

  10. #8
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    847
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    100
    Поблагодарили
    67 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    kas1e, спасибо за работу. Буду пробовать отсылать баг.
    Я в "Пикасухе" нашёл пару багов...)) Но их обойти можно.
    Ну а что делать?.. Надо пробовать программировать, отсылать баги. Так можно помочь разработчикам. Это мне напоминает историю с компилятором SDCC для спектрума. Поначалу, этим компилятором вообще пользоваться нельзя было - баги в огромных количествах. Потом спектрумисты начали отсылать баг-репорты разработчикам, и компилятор постепенно стали исправалять. Исправили до приличного уровня.
    Последний раз редактировалось Smalovsky; 21.09.2023 в 17:01.
    ¡Un momento, señor fiscal!


Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Программирование на free Pascal в OS4.1
    от Smalovsky в разделе Amiga
    Ответов: 4
    Последнее: 07.09.2023, 08:06
  2. Ответов: 0
    Последнее: 29.01.2021, 19:57
  3. Графическая библиотека
    от alone в разделе Программирование
    Ответов: 81
    Последнее: 31.01.2016, 20:37
  4. Библиотека нужных процедур для написания демо
    от GM BIT в разделе Программирование
    Ответов: 297
    Последнее: 14.02.2014, 08:47
  5. Библиотека Си для Апогея.
    от vinxru в разделе Радио-86РК
    Ответов: 4
    Последнее: 16.12.2012, 17:21

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •