• AGAL反编译器


    源码:https://files.cnblogs.com/flash3d/Disassembler.rar

    AGAL是一种用来为显卡写着色器程序的汇编语言,是手工写Molehill程序 必须掌握的技术。在AS中,他以字符串的形式存在,通过官方提供的AGALMiniAssembler类将其编译成字节数组。而后将其包装入 Program3D通过Context3D上传至显卡完成执行。

    前段时间曾为一个使用Molehill技术的程序进行压缩,里面用到一个技巧。实际上着色器程序完全可以脱离AGALMiniAssembler存在。可事 先将AGAL程序进行编译,生成字节数组,再以字符串的形式保存。该字符串既是已经编译好的程序,而不必在运行时通过AGALMiniAssembler 进行编译。省略AGALMiniAssembler类大概可节约程序10K的体积。这让原本就没几K的小程序大大瘦身了一把。

    这个技巧在国外比较流行,所以有时候拆开人家程序的时候,其着色器程序往往是一堆看不懂的“乱码”。于是,国外另外一些好事者就做了一个AGAL反编译程序,只要能获取着色器的字节数组,就可以将其反编译成可读的AGAL程序。

    本人把反编译程序包装了个UI来演示他的效果。

    左边是源码框;右边是字节码框;左下角是程序类型(顶点着色器or段着色器),可以找个程序尝试玩一下。

    测试顶点着色程序:

    m44 op, va0, vc0          

    mov v0, va1

    dp3 vt0,vc4,va2

    add vt0.x,vc5.x,vt0.x

    div v1,vt0.x,vc5.y

    测试段着色器程序:

    tex ft1, v0, fs0 <2d,linear,nomip>     

    mul ft1,ft1,v1.x

    mov oc, ft1

    最近开始研究Molehill,还是真抽象!大家一起进步吧!

  • 相关阅读:
    [No0000F0]DataGrid一行Row添加ToolTip,wpf
    [No0000EE]主要的宏观经济指标查询
    [No0000E9]Microsoft Help Viewer 2.3绿色版
    [No0000F2]ip安全监视器
    [No0000ED]IPSec策略之管理
    [No0000EC]C# 字符串(String)
    [No0000EB]C# 数组(Array)
    [No0000EA]C# 可空类型(Nullable)
    [No0000E8]C# 方法 参数传递
    [No0000E7]C# 封装 与访问修饰符
  • 原文地址:https://www.cnblogs.com/flash3d/p/2332249.html
Copyright © 2020-2023  润新知