Android Open Source - LiveBlurListView G L Render






From Project

Back to project page LiveBlurListView.

License

The source code is released under:

Apache License

If you think the Android project LiveBlurListView listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.koalcat.view;
//from   www.  ja v  a2  s  .c  o m
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.egl.EGLSurface;
import javax.microedition.khronos.opengles.GL10;

import android.graphics.Bitmap;
import android.util.Log;

public class GLRender {
  
  private static final String TAG = "GLRender";
  
  private EGL10 mEgl;
  private EGLDisplay mEglDisplay;
  private EGLContext mEglContext;
  private EGLSurface mEglPBSurface;
  private GL10 mGL;
  
  private IntBuffer PixelBuffer;
  
  public GLRender(int width, int height) {
    
    int[] version = new int[2];   
    EGLConfig[] configs = new EGLConfig[1];  
    int[] num_config = new int[1];  

    int[] configSpec ={  
        EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT,   
        EGL10.EGL_RED_SIZE, 8,  
        EGL10.EGL_GREEN_SIZE, 8,  
        EGL10.EGL_BLUE_SIZE, 8,  
        EGL10.EGL_ALPHA_SIZE, 8,  
        EGL10.EGL_NONE   
    };  

    int attribListPbuffer[] = {  
        EGL10.EGL_WIDTH, width,  
        EGL10.EGL_HEIGHT, height,  
        EGL10.EGL_NONE  
    };
    
    mEgl = (EGL10)EGLContext.getEGL();
    mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
  
    mEgl.eglInitialize(mEglDisplay, version);
  
    mEgl.eglChooseConfig(mEglDisplay, configSpec, configs, 1, num_config);
  
    EGLConfig mEglConfig = configs[0];

    mEglContext = mEgl.eglCreateContext(mEglDisplay, mEglConfig, EGL10.EGL_NO_CONTEXT, null);
    if (mEglContext == EGL10.EGL_NO_CONTEXT) {
      Log.d(TAG, "EGL_NO_CONTEXT");
    }

    mEglPBSurface = mEgl.eglCreatePbufferSurface(mEglDisplay, mEglConfig, attribListPbuffer);
    if (mEglPBSurface == EGL10.EGL_NO_SURFACE) {
      int errorcode = mEgl.eglGetError();
      switch(errorcode) {
      case EGL10.EGL_BAD_DISPLAY:
        Log.d(TAG, "EGL_BAD_DISPLAY");
        break;
      case EGL10.EGL_NOT_INITIALIZED:
        Log.d(TAG, "EGL_NOT_INITIALIZED");
        break;
      case EGL10.EGL_BAD_CONFIG:
        Log.d(TAG, "EGL_BAD_CONFIG");
        break;
      case EGL10.EGL_BAD_ATTRIBUTE:
        Log.d(TAG, "EGL_BAD_ATTRIBUTE");
        break;
      case EGL10.EGL_BAD_ALLOC:
        Log.d(TAG, "EGL_BAD_ALLOC");
        break;
      case EGL10.EGL_BAD_MATCH:
        Log.d(TAG, "EGL_BAD_MATCH");
        break;
      }        
    }
  
  
    if (!mEgl.eglMakeCurrent(mEglDisplay, mEglPBSurface, mEglPBSurface, mEglContext)) {
      Log.d(TAG, "bind failed code:" + mEgl.eglGetError());
    }
  
    mGL = (GL10) mEglContext.getGL();
    PixelBuffer = IntBuffer.allocate(width * height);
  }
  
  private void process(Bitmap bitmap, boolean fast) {
    final GL10 gl = mGL;
    
    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    gl.glShadeModel(GL10.GL_SMOOTH);
    gl.glEnable(GL10.GL_DEPTH_TEST);
    gl.glClearDepthf(1.0f);
    gl.glDepthFunc(GL10.GL_LEQUAL);
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glEnable(GL10.GL_LEQUAL);
    
    float[] color = new float[16];
    FloatBuffer colorBuffer;
    float[] texVertex = new float[12];
    FloatBuffer vertexBuffer;
    
    ByteBuffer texByteBuffer = ByteBuffer.allocateDirect(texVertex.length * 4);
    texByteBuffer.order(ByteOrder.nativeOrder());
    vertexBuffer = texByteBuffer.asFloatBuffer();
    vertexBuffer.put(texVertex);
    vertexBuffer.position(0);
    
    ByteBuffer colorByteBuffer = ByteBuffer.allocateDirect(color.length * 4);
    colorByteBuffer.order(ByteOrder.nativeOrder());
    colorBuffer = colorByteBuffer.asFloatBuffer();
    colorBuffer.put(color);
    colorBuffer.position(0);
    
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glPushMatrix();
    gl.glTranslatef(0.0f, 0.0f, 0.0f);
    

    
    colorBuffer.clear();
    colorBuffer.put(1.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(1.0f);
    
    colorBuffer.put(1.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(1.0f);
    
    colorBuffer.put(1.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(1.0f);
    
    colorBuffer.put(1.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(0.0f);
    colorBuffer.put(1.0f);
    
    vertexBuffer.clear();
    vertexBuffer.put(0);
    vertexBuffer.put(0);
    vertexBuffer.put(0);
    vertexBuffer.put(5f);
    vertexBuffer.put(0);
    vertexBuffer.put(0);
    vertexBuffer.put(5f);
    vertexBuffer.put(5f);
    vertexBuffer.put(0);
    vertexBuffer.put(0);
    vertexBuffer.put(5f);
    vertexBuffer.put(0);
    
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    

    
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);
    
    gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4);
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
    
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glPopMatrix();
  }
  
  private Bitmap pullpixs(Bitmap bitmap) {
    final int width = bitmap.getWidth();
    final int height = bitmap.getHeight();
    PixelBuffer.position(0);
    mGL.glReadPixels(0, 0, width, height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
    PixelBuffer.position(0);
    bitmap.copyPixelsFromBuffer(PixelBuffer);

    return bitmap;
  }

  public Bitmap Blur(Bitmap bitmap, boolean fast) {
    process(bitmap, fast);
    return pullpixs(bitmap);
  }
}




Java Source Code List

com.koalcat.blurdemo.AppInfo.java
com.koalcat.blurdemo.ApplicationsAdapter.java
com.koalcat.blurdemo.BlurActivity.java
com.koalcat.blurdemo.FastBitmapDrawable.java
com.koalcat.blurdemo.HanziToPinyin.java
com.koalcat.blurdemo.IndexCursor.java
com.koalcat.blurdemo.Utilities.java
com.koalcat.view.BaseRender.java
com.koalcat.view.BlurRSRender.java
com.koalcat.view.Blur.java
com.koalcat.view.GLRender.java
com.koalcat.view.JNIRender.java
com.koalcat.view.LiveBlurListView.java
com.koalcat.view.LiveBlurViewGroup.java
com.koalcat.view.RSRender.java
com.koalcat.view.ScriptIntrinsicBlurRender.java