赞
踩
private void checkRenderThreadState() {
if (mGLThread != null) {
throw new IllegalStateException(
“setRenderer has already been called for this instance.”);
}
}
也就是说,设置了Renderer
后,就不能更换了,那么如果有需求:本来是渲染一个灰度滤镜的,当想变换其他滤镜的时候,又不能重新设置Renderer
,此时应该如何
其实可以这样,Renderer
可以只做一个调度者,Renderer
里面可以写很多的滤镜,也可以变换滤镜,那么就可以满足我们的需求
那么接下来就先来定义一个基础滤镜
首先第一步,创建一个IRender
public interface IRender {
/**
/**
/**
/**
和Renderer
有些许不同,修改和增加了一些方法
新建BaseRender,实现IRender接口
public class BaseRender implements IRender {
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
public BaseRender(Context context) {
this(context, “render/base/base/vertex.frag”, “render/base/base/frag.frag”);
}
public BaseRender(Context context, String vertexFilename, String fragFilename) {
this.context = context;
this.vertexFilename = vertexFilename;
this.fragFilename = fragFilename;
}
@Override
public void onCreate() {
if (isCreate) {
return;
}
onCreatePre();
onClearColor();
onInitBlend();
onInitVertexBuffer();
onInitCoordinateBuffer();
onInitVbo();
onInitProgram();
onCreateAfter();
isCreate = true;
}
@Override
public void onChange(int width, int height) {
if (isChange) {
return;
}
onChangePre();
setWidth(width);
setHeight(height);
onViewport();
onInitFbo();
onChangeAfter();
isChange = true;
}
@Override
public void onDraw(int textureId) {
if (!onReadyToDraw()) {
return;
}
onDrawPre();
onClear();
onUseProgram();
onInitLocation();
onBindFbo();
onBindVbo();
onActiveTexture(textureId);
onEnableVertexAttributeArray();
onSetVertexData();
onSetCoordinateData();
onSetOtherData();
onDraw();
onDisableVertexAttributeArray();
onUnBind();
onDrawAfter();
}
@Override
public void onRelease() {
onDeleteProgram(program);
onDeleteShader(vert
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。