我找到了具有模糊效果的 andengine 示例,它工作正常,我发现我可以使用 ShaderProgram 类,并且在 Sprite 的 PreDraw 中使用一些着色器(setShaders)。
我可以使用相同的类 ShaderProgramm 并使用着色器而不附加到精灵吗?
例如,在 onDraw 中使用仅在场景上绘制 grenn 三角形的着色器(如在 android opengl 示例中)。有没有以这种方式使用 ShaderProgram 的简单方法(如何将着色器从 Sprite 的 PreDraw 中附加出来)?
我试过这样:
BrushShaderProgram bs = BrushShaderProgram.getInstance();
bs.link(pGLState);
GLES20.glUseProgram(bs.getId());
GLES20.glVertexAttribPointer(bs.maPositionHandle, 3, GLES20.GL_FLOAT, false, 12, triangleVB);
GLES20.glEnableVertexAttribArray(bs.maPositionHandle);
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
着色器很简单:
public static final String VERTEXSHADER =
"attribute vec4 vPosition; \n" +
"void main(){ \n" +
" gl_Position = vPosition; \n" +
"} \n";
public static final String FRAGMENTSHADER = "precision mediump float; \n" +
"void main(){ \n" +
" gl_FragColor = vec4 (0.63671875, 0.76953125, 0.22265625, 1.0); \n" +
"} \n";