android NDK项目的创建这里就不多说了。
这里我们采用OpenGLES2.0来做演示。
//显示activity
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("opengltest");
}
private GLSurfaceView glSurfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
glSurfaceView = new GLSurfaceView(this);
glSurfaceView.setRenderer(new CCRender());
setContentView(glSurfaceView);
}
}
//这里 提供的是jni方式调用
public class CCRender implements GLSurfaceView.Renderer {
private native void ndkGL();
private native void ndkPaintGL();
private native void ndkResizeGL(int width,int height);
@Override
public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
ndkGL();
// GLES20.glClearColor(1.0f, 0f, 0f, 1.0f);
}
@Override
public void onSurfaceChanged(GL10 gl10, int width, int height) {
ndkResizeGL(width, height);
// GLES20.glViewport(0,0,width,height);
}
@Override
public void onDrawFrame(GL10 gl10) {
ndkPaintGL();
// GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
}
}
#include <GLES2/gl2.h>
extern "C"
JNIEXPORT void JNICALL
Java_com_henry_opengltest_CCRender_ndkGL(JNIEnv *env, jobject _obj) {
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);//显示红色 R(1.0f) G(0.0f) B(0.0f) A(1.0f)
}
extern "C"
JNIEXPORT void JNICALL
Java_com_henry_opengltest_CCRender_ndkPaintGL(JNIEnv *env, jobject _obj) {
//擦除了屏幕上的所有颜色,并使用我们之前调用glClearColor()来定义的颜色填充屏幕。
glClear(GL_COLOR_BUFFER_BIT);
}
extern "C"
JNIEXPORT void JNICALL
Java_com_henry_opengltest_CCRender_ndkResizeGL(JNIEnv *env, jobject _obj, jint width, jint height) {
//设置显示区域的大小
glViewport(0, 0, width, height);
}
//cmake配置
cmake_minimum_required(VERSION 3.18.1)
project("opengltest")
add_library(
opengltest
SHARED
native-lib.cpp)
find_library(
log-lib
log)
target_link_libraries(
opengltest
//引入es2.0
-lGLESv2
${log-lib})
以上就是一个很简单的OpenGLES的清屏显示颜色的demo。