Конференция "FreePascal" » Модуль Texture.pas от Jan Horn [Win32]
 
  • frame © (04.02.05 02:39) [40]
    Вот забыл. Основной файл - template.dpr. Если компилировать в Delphi то ничего менять не нужно, если в FreePascal - расширение вместо dpr на pas поменять (хотя если не менять оно тоже скомпилируется, только в fp.exe подсветка синтаксиса на этом файле работать не будет).
  • Sniper17 (04.02.05 15:07) [41]
    FPC скомпилил без вопросов! ;-)  Delphi 7 не хочет - обижается на стоки ReadFile(F,Header,SizeOF(Header),n,nil) фразами
    [Error] TexLoad.pas(179): Types of actual and formal var parameters must be identical
  • frame © (04.02.05 18:46) [42]
    Delphi7 не для OpenGL на мой взгляд, у меня Delphi 3 - всё ок! Хотя я всё равно разберусь ;) Вот, кстати http://opengl.land.ru/files/header.zip ->
    моя версия gl.pp (только для win32!) - по идее, должно уменьшить размер exe на 20-30кб
  • frame © (04.02.05 22:37) [43]
    Попробуй посмотреть, какие параметры требует ReadFile в Delphi7. Мне кажется, если два последних поменять с Integer на Longint или что-то в этом роде, то должно работать.
  • Sniper17 (07.02.05 17:44) [44]
    Кстати не работает на 1.9.6. Работает только на 1.0.10 ;-(
  • frame © (08.02.05 00:42) [45]
    В IDE нужно поставить mode-release, тогда всё заработает. У меня с коммандной строки всё компилируется и запускается без проблем.
    Для gl.pp нужно включить smartlink (он собственно, для этого режима и делался)
    Вы ж как-то поинформативней описуйте ошибки ;)
  • Wyvern (25.02.05 15:30) [46]
    >>frame: Как-то всё у вас тут тяжело
    Так онож ещё и JPG грузит (да и заголовочный файл ипользуется нестандартный dglOpenGL.pas, всё-в-одном).
    >>frame: Иногда проще написать самому, чем добиться этого от окружающих =)
    Всегда :о)
  • Sniper17 (26.02.05 13:25) [47]
    новый dglOpenGL.pas с версии 1.6 поддерживает и FPC=)
    Может переделать?
  • Wyvern (27.02.05 23:13) [48]
    >>Sniper17: новый dglOpenGL.pas с версии 1.6 поддерживает и FPC
    Уже 1.6 есть, это хорошо :о)
    1.5 тоже FPC поддерживает, только как-то коряво.

    >>Sniper17: Может переделать?
    Чего переделать?
  • Romtek (01.08.05 19:16) [49]
    Модуль texload.pas не скомпилировался:
    Texture.pas(508,31) Error: You can not reach COSTAB from that code
    Texture.pas(564,31) Error: You can not reach COSTAB from that code


    отсюда:
    PROCEDURE invDCTfix(var dst,src:Tblocklongint);assembler;
  • имя (23.07.09 14:42) [50]
    Удалено модератором
  • 0x00FF00 (15.11.09 16:02) [51]
    звиняюсь за некропостинг, однако не удержусь:


    > procedure CopySwapPixel(const source, destination: Pointer);
    > asm push eax push edx push ebx mov eax, source mov edx,
    > destination mov bl,[eax+0] mov bh,[eax+1] mov [edx+2],bl
    > mov [edx+1],bh mov bl,[eax+2] mov bh,[eax+3] mov [edx+0],
    > bl mov [edx+3],bh pop ebx pop edx pop eaxend;


    о хосспаде...
    кто писал это... этот... код?
    есть ведь гораздо более быстрые (алсо, вменяемые) способы!

    EAX: [ 0 1 2 3 ]
    EDX: [ 2 1 0 3 ]

    напоминает RGBA -> BGRA переход, правда?
    не проще ли будет сделать вот так:

    procedure CopySwapPixel(const source, destination: Pointer);
    asm
     MOV ECX, [EAX];
     BSWAP ECX;
     ROR ECX, 8;
     MOV [EDX], ECX;
    end;


    по х86-соглашениям (а этот код определённо заточен под 32, если Pointer-ы имеют четырёхбайтный размер), стандартная pascal-евская директива вызова предполагает наличие в EAX первого параметра, а в EDX — второго.
    на протяжении всех 4 строчек ни тот, ни другой, в полном согласии с директивой const, вручную не меняются.
    по тем же соглашениям, *CX и *DX — это регистры, сохраняемые вызывающим, т.е. вызываемая подпрограмма о них заботиться не должна.

    единственное замечание — указанный код не заработает на процессоре классом ниже *486.
    впрочем, не думаю, что в наше время кто-то попытается для раскодировки всяческой мультимедии пользовать триставосьмидесятники %)
    но если уж вдруг, могу предоставить код и для них:

    procedure CopySwapPixel(const source, destination: Pointer);
    asm
     MOV ECX, [EAX];
     XCHG CL, CH;
     ROL ECX, 16;
     XCHG CL, CH;
     ROL ECX, 8;
     MOV [EDX], ECX;
    end;



    (была, впрочем, реализация и в три строки, только, к сожалению, забыл принцип, там использовавшийся. пусть уж так. кому они, в конце концов, нужны на десктопах, эти триставосьмидесятники...)
  • Sergey (20.01.10 17:11) [52]
    У меня почему-то компилятор ругается на директивы {$MODE DELPHI}
    {$asmmode Intel}
  • 0x00FF00 (27.01.10 19:10) [53]

    > У меня почему-то компилятор ругается на директивы
    > {$MODE DELPHI} {$asmmode Intel}

    возможно, компилятор не тот? =)
    взгляни на название конференции.
 
Конференция "FreePascal" » Модуль Texture.pas от Jan Horn [Win32]
Есть новые Нет новых   [118427   +4][b:0.001][p:0.002]