示例#1
0
  public void deleteRecycledResources() {
    synchronized (mUnboundTextures) {
      IntArray ids = mUnboundTextures;
      if (ids.size() > 0) {
        GLId.glDeleteTextures(mGL, ids.size(), ids.getInternalArray(), 0);
        ids.clear();
      }

      ids = mDeleteBuffers;
      if (ids.size() > 0) {
        GLId.glDeleteBuffers(mGL, ids.size(), ids.getInternalArray(), 0);
        ids.clear();
      }
    }
  }
示例#2
0
  private void setRenderTarget(RawTexture texture) {
    GL11ExtensionPack gl11ep = (GL11ExtensionPack) mGL;

    if (mTargetTexture == null && texture != null) {
      GLId.glGenBuffers(1, mFrameBuffer, 0);
      gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, mFrameBuffer[0]);
    }
    if (mTargetTexture != null && texture == null) {
      gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, 0);
      gl11ep.glDeleteFramebuffersOES(1, mFrameBuffer, 0);
    }

    mTargetTexture = texture;
    if (texture == null) {
      setSize(mScreenWidth, mScreenHeight);
    } else {
      setSize(texture.getWidth(), texture.getHeight());

      if (!texture.isLoaded()) texture.prepare(this);

      gl11ep.glFramebufferTexture2DOES(
          GL11ExtensionPack.GL_FRAMEBUFFER_OES,
          GL11ExtensionPack.GL_COLOR_ATTACHMENT0_OES,
          GL11.GL_TEXTURE_2D,
          texture.getId(),
          0);

      checkFramebufferStatus(gl11ep);
    }
  }
示例#3
0
  private void initialize() {
    GL11 gl = mGL;

    // First create an nio buffer, then create a VBO from it.
    int size = BOX_COORDINATES.length * Float.SIZE / Byte.SIZE;
    FloatBuffer xyBuffer = allocateDirectNativeOrderBuffer(size).asFloatBuffer();
    xyBuffer.put(BOX_COORDINATES, 0, BOX_COORDINATES.length).position(0);

    int[] name = new int[1];
    GLId.glGenBuffers(1, name, 0);
    mBoxCoords = name[0];

    gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, mBoxCoords);
    gl.glBufferData(
        GL11.GL_ARRAY_BUFFER,
        xyBuffer.capacity() * (Float.SIZE / Byte.SIZE),
        xyBuffer,
        GL11.GL_STATIC_DRAW);

    gl.glVertexPointer(2, GL11.GL_FLOAT, 0, 0);
    gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0);

    // Enable the texture coordinate array for Texture 1
    gl.glClientActiveTexture(GL11.GL_TEXTURE1);
    gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, 0);
    gl.glClientActiveTexture(GL11.GL_TEXTURE0);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    // mMatrixValues and mAlpha will be initialized in setSize()
  }
  private void prepareBuffers(GLCanvas canvas) {
    mBufferNames = new int[3];
    GL11 gl = canvas.getGLInstance();
    GLId.glGenBuffers(3, mBufferNames, 0);

    gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, mBufferNames[0]);
    gl.glBufferData(
        GL11.GL_ARRAY_BUFFER,
        mXyBuffer.capacity() * (Float.SIZE / Byte.SIZE),
        mXyBuffer,
        GL11.GL_STATIC_DRAW);

    gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, mBufferNames[1]);
    gl.glBufferData(
        GL11.GL_ARRAY_BUFFER,
        mUvBuffer.capacity() * (Float.SIZE / Byte.SIZE),
        mUvBuffer,
        GL11.GL_STATIC_DRAW);

    gl.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, mBufferNames[2]);
    gl.glBufferData(
        GL11.GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer.capacity(), mIndexBuffer, GL11.GL_STATIC_DRAW);

    // These buffers are never used again.
    mXyBuffer = null;
    mUvBuffer = null;
    mIndexBuffer = null;
  }