码迷,mamicode.com
首页 > 其他好文 > 详细

OpengGL ES2.0 With NDK

时间:2016-08-08 12:24:03      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

使用C语言在Android Studio中编写OpenGL ES,首要的任务就是配置编程环境。

在最新的Android Studio中,可以直接编译C/C++源代码。本人的版本是Android Studio2.0。

1.程序结构图

技术分享

2.在local.properties中添加并确认ndk路径

ndk.dir=C\:\\Users\\Liroc\\AppData\\Local\\Android\\Sdk\\ndk-bundle
sdk.dir=C\:\\Users\\Liroc\\AppData\\Local\\Android\\Sdk

3.在gradle.properties中添加NDK支持

org.gradle.jvmargs=-Xmx4g -XX\:MaxPermSize\=512m
android.useDeprecatedNdk=true

4.在build.gradle(app)中添加ndk模块,同时需要增加子节点ldLibs,使程序在编译时,可以链接到libGLESv2.so

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.1"

    defaultConfig {
        applicationId "com.example.liroc.openglone"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "game"
            ldLibs "GLESv2"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
    }
}

5.添加native code

#include <GLES2/gl2.h>

void on_surface_created() {
    glClearColor(1.0f, 1.0f, 0.0f, 0.0f);
}

void on_surface_changed() {

}

void on_draw_frame() {
    glClear(GL_COLOR_BUFFER_BIT);
}

6.添加相应的类来调用JNI代码

public class BasicNativeLib {
    static {
        System.loadLibrary("game");
    }

    public static native void on_surface_created();

    public static native void on_surface_changed(int width, int height);

    public static native void on_draw_frame();
}

7.相应的JNI函数

#include <jni.h>

JNIEXPORT void JNICALL Java_com_example_liroc_openglone_testone_BasicNativeLib_on_1surface_1created
    (JNIEnv * env, jclass cls) {
    on_surface_created();
}

JNIEXPORT void JNICALL Java_com_example_liroc_openglone_testone_BasicNativeLib_on_1surface_1changed
    (JNIEnv * env, jclass cls, jint width, jint height) {
    on_surface_changed();
}

JNIEXPORT void JNICALL Java_com_example_liroc_openglone_testone_BasicNativeLib_on_1draw_1frame
    (JNIEnv * env, jclass cls) {
    on_draw_frame();
}

8.最后,在我们的GLSurface.Renderer类中调用相应的方法即可

   private class SceneRenderer implements GLSurfaceView.Renderer {
        BasicTriangle triangle;

        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            //glClearColor(0, 0, 0, 1.0f);
            //triangle = new BasicTriangle(BasicGLSurfaceView.this);
            BasicNativeLib.on_surface_created();
        }

        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            //glViewport(0, 0, width, height);
            BasicNativeLib.on_surface_changed(width, height);
        }

        @Override
        public void onDrawFrame(GL10 gl) {
            //glClear(GL_COLOR_BUFFER_BIT);
            //triangle.draw();
            BasicNativeLib.on_draw_frame();
        }
    }

9.效果图

技术分享

 

OpengGL ES2.0 With NDK

标签:

原文地址:http://www.cnblogs.com/lirocking/p/5748560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!