public void setSize(int width, int height) { mRenderTarget1.setWidth(width); mRenderTarget1.setHeight(height); mRenderTarget2.setWidth(width); mRenderTarget2.setHeight(height); for (IPass pass : mPasses) { pass.setSize(width, height); } // reset(renderTarget); mWidth = width; mHeight = height; }
public void render(long ellapsedTime, double deltaTime) { if (mComponentsDirty) { updatePassesList(); mComponentsDirty = false; } mWriteBuffer = mRenderTarget1; mReadBuffer = mRenderTarget2; boolean maskActive = false; IPass pass; for (int i = 0; i < mNumPasses; i++) { pass = mPasses.get(i); if (!pass.isEnabled()) continue; PassType type = pass.getPassType(); pass.render( type == PassType.RENDER || type == PassType.DEPTH ? mRenderer.getCurrentScene() : mScene, mRenderer, mScreenQuad, mWriteBuffer, mReadBuffer, ellapsedTime, deltaTime); if (pass.needsSwap() && i < mNumPasses - 1) { if (maskActive) { GLES20.glStencilFunc(GLES20.GL_NOTEQUAL, 1, 0xffffffff); mCopyPass.render( mScene, mRenderer, mScreenQuad, mWriteBuffer, mReadBuffer, ellapsedTime, deltaTime); GLES20.glStencilFunc(GLES20.GL_EQUAL, 1, 0xffffffff); } swapBuffers(); } // If the current pass is a mask pass, notify the next pass that mask is active. if (type == PassType.MASK) maskActive = true; else if (type == PassType.CLEAR) maskActive = false; } }