Saturday, 12 December 2015

Create a renderer environment in Android OpenGL ES


Hello, let's get started and learn how to create a renderer environment in Android Studio with OpenGL ES.

First we need to create a Frame Layout, we make this frame layout as the container of the renderer screen and we name the container as stage while the layout file we name it as main_layout

Add this code to the Frame Layout:

<YOUR_PACKAGE_NAME.Stage
android:id="@+id/my_stage"
android:layout_width="match_parent"
android:layout_height="match_parent" />

Next in the main activity class

Add this code inside your onCreate function:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

setContentView(R.layout.main_layout);
stage = (Stage)findViewById(R.id.my_stage);

Here is some explanation of the window manager code it is to make the app full screen and hide the title bar

Next create a class name it Stage and extends it with GLSurfaceView

After this add 2 global variables of float w and h, it is for the stage width and height and
add 2 global variables of int screenWidth and screemHeight

Next create a constructor for your class

Add this code inside your Stage class

public Stage(Context context, AttributeSet attrs) {
super(context, attrs);
setEGLConfigChooser(8, 8, 8, 8, 0, 0);
setRenderer(new MyRenderer());
}

Lastly we add a private inner class in our Stage class, which is implements a renderer

Add this code into the Stage class

private final class MyRenderer implements GLSurfaceView.Renderer {

        public final void onDrawFrame(GL10 gl) {

        }

        public final void onSurfaceChanged(GL10 gl, int width, int height) {
        gl.glClearColor(0, 0, 0, 1.0f);
        if(width > height) {
            h = 600;
            w = width * h / height;
        } else {
            w = 600;
            h = height * w / width;
        }
        screenWidth = width;
        screenHeight = height;
        gl.glViewport(0, 0, screenWidth, screenHeight);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glOrthof(0, w, h, 0, -1, 1);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        }

        public final void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // Set up alpha blending
        gl.glEnable(GL10.GL_ALPHA_TEST);
        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
        // We are in 2D, so no need depth
        gl.glDisable(GL10.GL_DEPTH_TEST);
        // Enable vertex arrays (we'll use them to draw primitives).
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        }

}

Video Tutorial: Click here

No comments:

Post a Comment