如何在gpuimage android中提供多个位图作为输入

问题描述 投票:0回答:1

我是Android的OpenGl的漂亮初学者。我正在使用Android的GPUImage在图像上应用滤镜。但是,我的片段着色器需要三个输入位图才能产生输出。

uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
uniform sampler2D inputImageTexture3;
uniform float intensity;

但是据我所知GPUImage支持GPUImageTwoInputFilter。因此,应该为同一着色器提供三个位图的程序。或者有任何简单的方法可以将OpenGL用于此任务。

android opengl-es gpuimage android-gpuimageview
1个回答
0
投票

您必须将每个纹理对象绑定到不同的纹理单元。可以通过glActiveTexture选择纹理单位。

这意味着如果您有3个纹理对象glActiveTexturet1t2,则(伪代码):

t3

纹理单元的编号必须设置为纹理采样器统一的。制服的编号是纹理对象和采样器制服的绑定点。

通过glActiveTexture(GL_TEXTURE0) glBindTexture(GL_TEXTURE_2D, t1) glActiveTexture(GL_TEXTURE1) glBindTexture(GL_TEXTURE_2D, t2) glActiveTexture(GL_TEXTURE2) glBindTexture(GL_TEXTURE_2D, t3) 获取制服的资源(位置)索引,并通过glGetUniformLocation设置绑定点。例如(伪代码和):

glGetUniformLocation

[glUniform1i是着色器程序对象。

glUniform1i

0、1和2是绑定点,它们是纹理单元GLint loc_t1 = glGetUniformLocation(program, "inputImageTexture") GLint loc_t2 = glGetUniformLocation(program, "inputImageTexture2") GLint loc_t3 = glGetUniformLocation(program, "inputImageTexture3") programglUniform1i(loc_t1, 0) glUniform1i(loc_t2, 1) glUniform1i(loc_t3, 2) 的编号。

© www.soinside.com 2019 - 2024. All rights reserved.