- #include <jni.h>
- #include <android/log.h>
- #include <GLES2/gl2.h>
- #include <GLES2/gl2ext.h>
- #include <GLES/gl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- const GLfloat gTriangleVertices[] = {
- -0.5f, -0.5f, 0.5f,
- 0.5f, -0.5f,0.5f,
- 0.0f,-0.5f, 1.0f,
- 0.0f, 0.0f, 0.5f,
- };
- const GLfloat _colorArray[] = {
- 1.0f,0.0f,0.0f,1.0f,
- 0.0f,1.0f,0.0f,1.0f,
- 0.0f,0.0f,1.0f,1.0f,
- 1.0f,1.0f,1.0f,1.0f,
- };
- const GLbyte _indexArray[] = {
- 0,1,3,
- 0,2,1,
- 0,3,2,
- 1,2,3,
- };
- GLfloat _xAngle = 0.0f;
- GLfloat _yAngle = 0.0f;
- extern "C" {
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceCreated(JNIEnv * env, jobject obj);
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceChanged(JNIEnv * env, jobject obj, jint width, jint height);
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeDrawFrame(JNIEnv * env, jobject obj);
- JNIEXPORT void JNICALL Java_com_geolo_android_MyGLSurfaceView_setXYangle(JNIEnv * env, jobject obj,jfloat x , jfloat y);
- };
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceCreated(JNIEnv * env, jobject obj){
-
- }
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceChanged(JNIEnv * env, jobject obj,jint w,jint h){
- }
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeDrawFrame(JNIEnv * env, jobject obj){
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- //glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
- // glVertexAttribPointer(3, 2, GL_FLOAT, GL_FALSE, 0, gTriangleVertices);
- // glColorAttribPointer(4 , GL_FLOAT , 0, _colorArray );
- // glDrawArrays(GL_TRIANGLES, 0, 3);
- glClear(GL_COLOR_BUFFER_BIT);
- //glLoadIdentity();
- glRotatef(_xAngle, 0.5f, 0.0f, 0.0f);
- glRotatef(_yAngle, 0.0f, 0.5f, 0.0f);
- //顶点
- glVertexPointer(3, GL_FLOAT, 0, gTriangleVertices);
- //顶点颜色
- glColorPointer(4, GL_FLOAT, 0, _colorArray);
- glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, _indexArray);
- }
- JNIEXPORT void JNICALL Java_com_geolo_android_MyGLSurfaceView_setXYangle(JNIEnv * env, jobject obj,jfloat x , jfloat y){
- _xAngle = x;
- _yAngle = y;
- }
复制代码
第二重要的部分是:Android.mk
view plaincopy to clipboardprint?
- # Copyright (C) 2009 The Android Open Source Project
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- #
- LOCAL_PATH:= $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := Geolo3D
- LOCAL_CFLAGS := -Werror
- LOCAL_SRC_FILES := NativeRenderer.cpp
- LOCAL_LDLIBS := -llog -lGLESv2 -lGLESv1_CM -ldl
-
include $(BUILD_SHARED_LIBRARY)
其中Android.mk重要的部分是:LOCAL_LDLIBS := -llog -lGLESv2 -lGLESv1_CM -ldl
比如,如果没有-ldl 是不能在C/C++中调用 glVertexPointer(3, GL_FLOAT, 0, gTriangleVertices);和
glColorPointer(4, GL_FLOAT, 0, _colorArray);
-ldl是个函数库,我没有这方面的资料文档,如果那个哥们有这些文档,请发给我,geolo@vip.qq.com。谢谢。。。
geolo.OpenGL.JNI.rar (73.9 KB, 下载次数: 23)
|
分享到:
相关推荐
Android JNI串口通讯【实战例子】 学习NDK开发很好的例子,也可以直接用在项目中
它涵盖了JNI编程、Android NDK开发、原生代码与Java代码的交互、串口通信协议以及Android权限管理等多个方面的知识。对于需要进行Android硬件扩展或进行嵌入式开发的工程师来说,这是一个非常有价值的参考案例。
这个压缩包“安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar”似乎包含了一个示例项目,展示了如何在Android应用中使用JNI来实现串口、Socket通信以及USB驱动的交互。以下将详细介绍这些知识点。 1. *...
2. **Android与JNI**: 在Android系统中,JNI被广泛用于提高性能、访问底层硬件和利用已有的C/C++库。由于Android的Dalvik/ART虚拟机支持JNI,所以开发者可以创建本地库,然后在Android应用中通过JNI接口调用。 3....
在Android开发中,JNI(Java Native Interface)是...通过这个简单的例子,你了解了如何在Android应用中利用JNI调用C++代码。随着对JNI的深入理解,你可以在需要的地方充分利用C++的优势,提高应用性能或实现特定功能。
2. **Android与JNI**:在Android系统中,JNI特别有用,因为它允许开发者用C/C++编写性能敏感的部分,例如底层的硬件驱动、图形渲染等,这些部分在Java中可能无法达到最佳性能。Android SDK提供了工具和库来支持JNI...
这个"android JNI小例子"旨在提供一个基础的实践教程,帮助开发者理解如何在Android应用中使用JNI技术。 JNI的核心功能是为Java应用程序提供了一种方式来调用本地(native)代码,也就是用C、C++或其他非Java语言...
本教程将通过一个小例子,详细介绍如何使用JNI实现Java与C++方法的互调。 首先,我们需要在Java层定义一个native方法。在Java中,我们可以使用`native`关键字声明一个方法,但不提供具体实现,如下所示: ```java ...
这个特定的项目旨在通过JNI调用来结合这两个强大的库——OpenGL ES用于图形渲染,OpenCV用于图像处理,从而在Android设备上显示一幅图片。 OpenGL ES是OpenGL的嵌入式版本,主要用于移动设备和嵌入式系统。它是...
这个小例子展示了如何使用JNI和C语言来创建一个本地库,用于执行文件的读写操作,从而实现底层的高效控制。下面将详细阐述Android JNI、C语言在Android中的应用以及如何实现文件的读写。 首先,我们需要了解JNI的...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互。JNI在很多场景下是必要的,比如优化性能、利用硬件特性、调用C/C++库或者与第三方库集成。Android ...
总之,Android JNI图像处理经典例子提供了一个学习如何结合Java和C/C++来优化图像处理流程的平台。通过这种方式,开发者能够提升应用的性能,尤其是在处理大量图像数据时,同时还能深入理解Android的跨语言编程。...
#### 一、JNI与Android中的.so库载入 在深入了解JNI(Java Native Interface)之前,我们需要明确一点:Android应用程序的主要部分是基于Java开发的,并且这些Java类会被编译成Dex格式的字节码,然后在Dalvik虚拟机...
在Android开发中,JNI(Java ...通过以上步骤,你已经了解了如何在Android应用中引入和使用JNI,以及如何结合socket进行网络通信。记住,使用JNI时需要注意内存管理和线程同步问题,避免出现潜在的内存泄漏或数据竞争。
在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码和其他语言写的代码进行交互。这个“Androidstudio调用jni的示例”是一个基础教程,旨在帮助初学者理解如何在Android Studio项目中...
Android 2.3中的截屏功能可以通过JNI(Java Native Interface)来实现,这是一种在Java程序中调用本地(C/C++)代码的技术。JNI允许开发者利用Java的跨平台特性,同时利用C/C++的强大性能和低级别操作能力。在这个场景下...
通过 JNI,我们可以在 Android 项目中调用.so 动态库中的 C/C++ 方法,实现与 native 代码的交互。 首先,我们需要在 Eclipse 中创建一个 Android 项目,并在项目中创建一个 Java 类,例如 TestJNI.java。这个类中...
总结一下,本示例提供的`testndk`项目是一个结合使用AIDL和JNI的实践案例,展示了如何在Android应用中进行跨进程通信并利用C/C++代码提升性能。通过阅读源码和配合博客文章,你可以深入理解这两种技术的工作原理和...
在Android系统中,JNI和HAL结合使用,使得应用程序能够更高效地与设备硬件交互。例如,在处理3G通信时,应用程序层(APP:Phone)通过Java调用framework层的telephony java代码,该代码又通过JNI调用底层的C语言实现...
Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例