GPUImage for Android 如何使用这个 glsl文件

使用 GPUImage for Android 加载和应用自定义 GLSL 文件(例如你的 transition 文件)的方法如下:


1. 准备 GLSL 文件

确保你的 GLSL 文件已经调整为 GPUImage 的格式。对于你的自定义 GLSL 文件,GPUImage 期望包含以下结构:

  • 顶点着色器:
    GPUImage 默认使用标准顶点着色器,你无需更改。内容如下:

    attribute vec4 position;
    attribute vec4 inputTextureCoordinate;
    
    varying vec2 textureCoordinate;
    
    void main() {
        gl_Position = position;
        textureCoordinate = inputTextureCoordinate.xy;
    }
    
  • 片段着色器:
    调整你的 GLSL 文件以适配 GPUImage 的 getFromColorgetToColor 的实现。

    precision mediump float;
    
    varying vec2 textureCoordinate;
    
    uniform sampler2D inputImageTexture;   // 当前纹理
    uniform sampler2D inputImageTexture2; // 下一个纹理
    
    uniform float progress;   // 过渡进度
    uniform float dots;       // 参数 dots
    uniform vec2 center;      // 参数中心点
    
    const float SQRT_2 = 1.414213562373;
    
    vec4 getFromColor(vec2 uv) {
        return texture2D(inputImageTexture, uv);
    }
    
    vec4 getToColor(vec2 uv) {
        return texture2D(inputImageTexture2, uv);
    }
    
    vec4 transition(vec2 uv) {
        bool nextImage = distance(fract(uv * dots), vec2(0.5, 0.5)) < (progress / distance(uv, center));
        return nextImage ? getToColor(uv) : getFromColor(uv);
    }
    
    void main() {
        gl_FragColor = transition(textureCoordinate);
    }
    

将片段着色器保存为一个 .glsl 文件,例如:assets/shaders/transition.glsl


2. 在 GPUImage 中使用自定义着色器

2.1 添加 GPUImage 库

在项目的 build.gradle 文件中添加 GPUImage 的依赖:

implementation 'jp.co.cyberagent.android:gpuimage:2.1.0'
2.2 创建自定义滤镜

创建一个类来加载自定义片段着色器:

class CustomTransitionFilter(context: Context) : GPUImageFilter(NO_FILTER_VERTEX_SHADER, loadShaderFromAssets(context)) {
   
   

    private var progressLocation: Int = 0
    private var dotsLocation: Int = 0<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值