我有以下简单的片段着色器
precision lowp float;
uniform sampler2D u_texture_image;
uniform sampler2D u_texture_mask;
uniform lowp float u_blink;
varying lowp vec2 v_texCoords_image;
varying lowp vec2 v_texCoords_mask;
varying lowp float v_shadow;
void main() {
lowp vec4 color= vec4(texture2D(u_texture_image, v_texCoords_image));
lowp vec4 mask_color= vec4(texture2D(u_texture_mask, v_texCoords_mask));
//masking image
color = vec4(color.xyz,mask_color.a);
//blink
color =mix(color,vec4(1.0,1.0,1.0,mask_color.a),u_blink);
//check if its a shadow
color=mix(color, mask_color*0.3, v_shadow);
gl_FragColor = color;
}我用这个代码绘制了4400个多边形,得到了25fps( onDrawFrame调用间隔~40ms).This是不够的,因为这不是整个场景。
我能以某种方式优化这段代码吗?我的目标fps是30。
我还想知道有没有一些片段着色器代码的分析工具?
添加:如何调用片段着色器
private void drawPieces() {
//set my shader
piecesProgram.useProgram();
//set uniforms
piecesProgram.setUniforms(MVPMatrix, textureImageId, textureMaskId,new PointF(2f,2f),0f);
//load my vertcices with glVertexAttribPointer
piecesMesh.bindPieceData(piecesProgram,false);
//draw it with glDrawElements
piecesMesh.drawPieces(false);
piecesMesh.disableAttributes(piecesProgram);
}发布于 2016-10-26 23:05:08
该着色器看起来并不复杂。
您使用的是什么硬件?您是否在每次使用此着色器时都重新编译它?如何调用此着色器?
苹果公司写了一篇关于GLSL的最好的https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/BestPracticesforShaders/BestPracticesforShaders.html的文章。
https://stackoverflow.com/questions/40265247
复制相似问题