96SEO 2026-02-19 23:05 24
1.封装BaseFilter过滤器基类#xff0c…NDK系列之OpenGL离屏渲染与工程代码整合本节主要是对上一节OpenGL渲染画面效果代码进行封装设计将各种特效代码进行分离解耦便于后期增加其他特效。

1.封装BaseFilter过滤器基类实现通用的顶点着色器、片元着色器和着色器程序的初始化赋值和绘制操作
2.编写CamreaFilter相机过滤器实现FBO离屏渲染和变换矩阵等相机相关操作绘制操作完成后将相机过滤器实现的效果的纹理ID传递给下一个过滤器在相机过滤器效果上进行叠加其他效果。
1BaseFilter构造方法保存顶点着色器和片元着色器代码资源文件id,保存坐标系到数据缓冲区
子类传递过来的顶点着色器代码IDthis.mFragmentSourceId
BufferHelper.getFloatBuffer(VERTEX);
BufferHelper.getFloatBuffer(TEXTURE);
2加载并编译着色器代码链接色器ID输出着色器程序并获取着色器的索引值
TextResourceReader.readTextFileFromResource(context,
TextResourceReader.readTextFileFromResource(context,
ShaderHelper.compileVertexShader(vertexSource);
ShaderHelper.compileFragmentShader(fragmentSource);
ShaderHelper.linkProgram(vertexShaderId,
着色器IDglDeleteShader(vertexShaderId);glDeleteShader(fragmentShaderId);//
glGetAttribLocation(mProgramId,
glGetAttribLocation(mProgramId,
glGetUniformLocation(mProgramId,
glGetUniformLocation(mProgramId,
3完成绘制操作顶点坐标赋值纹理坐标赋值采样器赋值通知opengl绘制将过滤器实现的效果的纹理ID返回给下一个过滤器
mHeight);glUseProgram(mProgramId);
1.顶点坐标赋值mVertexBuffer.position(0);//
传值glVertexAttribPointer(vPosition,
激活glEnableVertexAttribArray(vPosition);//
2.纹理坐标赋值mTextureBuffer.position(0);//
传值glVertexAttribPointer(vCoord,
激活glEnableVertexAttribArray(vCoord);//
只需要把OpenGL的纹理ID渲染到屏幕上就可以了不需要矩阵数据传递给顶点着色器了//
vTextureglActiveTexture(GL_TEXTURE0);
绑定图层为什么不需要GL_TEXTURE_EXTERNAL_OES答目前拿到的textureId已经是纹理ID了不是摄像头直接采集到的纹理IDglBindTexture(GL_TEXTURE_2D
因为CameraFilter已经做过了我就直接显示我用OepnGL
glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
由于这种方式并不是通用的所以先去除glUniform1i(vTexture,
传递采样器glDrawArrays(GL_TRIANGLE_STRIP,
1CameraFilter构造方法将顶点着色器和片元着色器代码资源文件id传给父类完成顶点着色器、片元着色器和着色器程序的初始化工作
{super.onReady(width,height);//
从数组中第几个id来保存,从零下标开始glGenFramebuffers(mFrameBuffers.length,
纹理(第一节课是没有配置的但是这个是FOB纹理所以需要配置纹理)//
FBO看不见的离屏的屏幕下面的目的就是要把画面显示到FBO中mFrameBufferTextures
记录FBO纹理的IDTextureHelper.genTextures(mFrameBufferTextures);
还没有任何关系现在要让他们绑定起来glBindTexture(GL_TEXTURE_2D,
pixels*/glTexImage2D(GL_TEXTURE_2D,
null);glBindFramebuffer(GL_FRAMEBUFFER,
level一般都是0*/glFramebufferTexture2D(GL_FRAMEBUFFER,
第四步解绑操作glBindTexture(GL_TEXTURE_2D,
0);glBindFramebuffer(GL_FRAMEBUFFER,
3完成绘制操作渲染到FBO离线缓存中顶点坐标赋值纹理坐标赋值变换矩阵把mtx矩阵数据传递到vMatrix相机过滤器处理过后其他过滤器不需要再变换矩阵采样器赋值通知opengl绘制将FBO的纹理ID返回给下一个过滤器
super.onDrawFrame(textureId);glViewport(0,
离屏渲染glBindFramebuffer(GL_FRAMEBUFFER,
mFrameBuffers[0]);glUseProgram(mProgramId);
顶点坐标赋值glVertexAttribPointer(vPosition,
传值glEnableVertexAttribArray(vPosition);
纹理坐标赋值glVertexAttribPointer(vCoord,
传值glEnableVertexAttribArray(vCoord);
变换矩阵在我们CameraFilter这里就需要处理了后面的BaseFilter就不需要了glUniformMatrix4fv(vMatrix,
vTextureglActiveTexture(GL_TEXTURE0);
1glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
0);glDrawArrays(GL_TRIANGLE_STRIP,
fboglBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES,
0);glBindFramebuffer(GL_FRAMEBUFFER,
samplerExternalOES才能采样相机的数据varying
把这个最终的计算成果给片元着色器拿到最终的成果我才能上色void
1ScreenFilter构造方法将顶点着色器和片元着色器代码资源文件id传给父类完成顶点着色器、片元着色器和着色器程序的初始化工作
2D显示就行了不需要摄像头了sampler2D)varying
把这个最终的计算成果给片元着色器拿到最终的成果我才能上色void
直接上色你直接上色是上camera_fragment.glsl的底片效果
从上一节中我们知道MyGlRenderer实现GLSurfaceView.Renderer接口实现接口的onSurfaceCreated()、onSurfaceChanged()和onDrawFrame()方法
1当Surface创建时回调onSurfaceCreated()函数创建ScreenFilter屏幕过滤器同样在创建ScreenFilter屏幕过滤器之前我们要先创建CamreaFilter相机过滤器
CameraFilter(myGLSurfaceView.getContext());
ScreenFilter(myGLSurfaceView.getContext());
2当Surface改变时回调onSurfaceChanged()函数完成过滤器准备工作
height);mScreenFilter.onReady(width,
3绘制一帧图像时回调onDrawFrame()函数获取纹理对象的图像数据先通过CamreaFilter相机过滤器实现相关效果再将其FBO的纹理ID传递给下一个过滤器这里由于暂无实现其他特效就传递给了ScreenFilter屏幕过滤器将最终成果的纹理ID通过OpenGL渲染到屏幕
相机过滤器绘制一帧图像不可见mCameraFilter.setMatrix(mtx);int
mCameraFilter.onDrawFrame(mTextureID[0]);
美白.onDrawFrame(textureId);textureId
大眼.onDrawFrame(textureId);textureId
xxx.onDrawFrame(textureId);*///
屏幕过滤器绘制一帧图像屏幕显示mScreenFilter.onDrawFrame(textureId);
注后续将会在CamreaFilter相机过滤器和ScreenFilter屏幕过滤器中间增加各种效果过滤器实现其他特效如美白大眼兔耳朵等。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback