Exemplo n.º 1
0
  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;
  }
Exemplo n.º 2
0
  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;
    }
  }