【OPENGLES】opengles-jni实例1

2023-11-17

首先,说明下为什么要用jni实现opengl es

在进行移动端图像算法开发的过程中,需要完成对大量的数据进行处理,opengl是在进行图形渲染或者大批量图像运算处理时有着很大的优势。如果能够在算法库开发中加入opengl,则对于提升算法运行效率有很大帮助。

本系列文章则是描述如何用opengl进行图像算法的开发。
本文主要描述如何完成一个简单的opengles实例,通过jni调用opengles接口。

1、基本框架

最简单的opengles实例可参考:《Opengl ES入门1》
这里完成的实例主要是通过在java层,对opengl es的接口进行调用。

下面,将具体介绍如何转换成jni接口的调用。

2、jni接口定义

在MyGLSurfaceView中,修改三大接口如下:
其实GLSurfaceView中java层的调用跟在jni层调用是一致的,只不过在具体实现的时候是在jni调用opengles库实现而已。

    @Override
    public void onDrawFrame(GL10 arg0) {
        // TODO Auto-generated method stub
        render();
    }
    @Override
    public void onSurfaceChanged(GL10 arg0, int width, int height) {
        // TODO Auto-generated method stub
        surfaceChanged( width, height);
    }
    @Override
    public void onSurfaceCreated(GL10 arg0, EGLConfig arg1) {
        // TODO Auto-generated method stub
        surfaceCreated();
    }
    public native void surfaceChanged(int w, int h);
    public native void surfaceCreated();
    public native void render();
    static{
        System.loadLibrary("OpenglTest");
    }

工程项目下新建jni文件夹,然后写makefile文件及src文件
Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
OPENGLES_LIB  := -lGLESv2
OPENGLES_DEF  := -DUSE_OPENGL_ES_2_0
LOCAL_CFLAGS := -Wno-write-strings $(OPENGLES_DEF)
LOCAL_LDLIBS := \
     -llog $(OPENGLES_LIB) 
LOCAL_MODULE    := libOpenglTest
LOCAL_CFLAGS    := -Werror
LOCAL_SRC_FILES := OpenglUtil.cpp
LOCAL_SHARED_LIBRARIES := liblog libGLESv2
include $(BUILD_SHARED_LIBRARY)

OpenglUtil.cpp

#include <stdlib.h>
#include <stdio.h>
#include <android/log.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include "jni.h"

#define EPRINTF(...)  __android_log_print(ANDROID_LOG_ERROR,"OpenglUtil",__VA_ARGS__)
#define DPRINTF(...)  __android_log_print(ANDROID_LOG_DEBUG,"OpenglUtil",__VA_ARGS__)
#ifdef __cplusplus
extern "C"{
#endif
JNIEXPORT void JNICALL Java_com_example_opengltest_MyGLSurfaceView_surfaceCreated
( JNIEnv * env, jobject obj, jint width, jint height)
{
   DPRINTF( "surface create" );
   //Set up viewport. We only need to do this once.
   glClearColor(1.0f, 0, 0, 1.0f);
   return;
}
JNIEXPORT void JNICALL
   Java_com_example_opengltest_MyGLSurfaceView_surfaceChanged
(   JNIEnv * env, jobject obj, jint width, jint height )
{
   DPRINTF( "Viewport changed to %ux%u \n", width, height );
   //Set up viewport. We only need to do this once.
   glViewport(0, 0, width, height);
   return;
}
JNIEXPORT void JNICALL Java_com_example_opengltest_MyGLSurfaceView_render
(  JNIEnv * env, jobject obj, jbyteArray img, jint w, jint h)
{
    glClear(GL_COLOR_BUFFER_BIT);
}
#ifdef __cplusplus
}
#endif

3、在eclipse中编译JNI:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

保存即可。
并把新建的jni_builder位置移动到最上面。
这样设置之后,每次修改完jni文件夹内部文件时都会自动编译。
编译完下载运行即可。

本文实例具体代码可参考:opengles-jni实例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【OPENGLES】opengles-jni实例1 的相关文章

  • android 相机预览编译 libyuv 处理 YUV 数据

    下载源码 需翻墙 Android Studio 新建一个 NDK 项目 源码拷贝到 cpp 目录下 include 下面是头文件 source 下面是源码 其它文件基本用不到不用管 CMakeLists txt 是 cmake 编译脚本 现
  • android开发使用 ndk-stack 打印崩溃日志

    使用 ndk stack 的时候需要你的 lib 编译为 debug 版 通常需要下面的修改 1 修改 android mk 增加 为 LOCAL CFLAGS 增加 g 选项 2 修改 application mk 增加 APP OPTI
  • Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用

    前言 一直觉得无论是从行业形式来看 还是从就业角度说 学习JNI NDK开发是一条必经之路 很多说Android和IOS几乎没有市场了 其实只能说现在开发APP的需求没那么多了 再加上之前培训机构疯狂向市场输出Android IOS开发人员
  • Cygwin编译JNI的环境配置

    一 什么是NDK NDK提供了一系列的工具 帮助开发者快速开发C 或C 的动态库 并能自动将so和java应用一起打包成apk 这些工具对开发者的帮助是巨大的 NDK 集成了交叉编译器 并提供了相应的mk文件隔离CPU 平台 ABI 等差异
  • 手把手教你在Android中使用bsdiff实现文件增量更新 (超详细)

    全量更新和增量更新 在Android开发中 版本更新是一个非常常见的需求 目前更新主要分为两种方式 全量更新 增量更新 如下图 分别是酷安和应用宝两个商店的更新页面 可以明显的看到 酷安的更新方式是全量更新 即每次下载全量的新版本文件 当然
  • jni开发:jni基础教程及实例(一)

    本篇博客将带初次接触jni的小白完成对jni基本知识的了解 本篇主要以概念为主 下一篇博客会带大家完成一个难度不大的jni实例 请两篇博客连起来看 谢谢支持 一 jni简介 1 jni的全称就是Java Native Interface 就
  • NDK 入门HelloJni 以及 javah 找不到类文件的问题 解决(ubuntu)

    1 首先创建一个android工程 创建一个HelloJni java 文件 并编写如下代码 package com ndk import android app Activity import android os Bundle impo
  • 开发日记(5) 我们如何让EditText的光标消失呢?

    很多日子没有分享文章 赶项目呢 3人5项目 好烦啊 正题 这是分享的 原文章 http www cnblogs com yejiurui archive 2013 01 02 2841945 html 在我们的应用中 有时候一进入一个页面
  • keil的终极配色方案(提供配置文件)

    1 效果图 先放效果图 本资源来源于网络下载整理 白色背景蓝色字体 使用说明 版本建议keil5 32 GB2321设置 这套配色需要你安装JetBrains Mono字体 JetBrains的字体真的太漂亮了 或者使用微软的YaHei C
  • ADB命令开启和关闭飞行模式,两段式操作方式!!!!

    开启飞行模式 必须要先执行1 再执行2 执行1 adb shell settings put global airplane mode on 1 执行2 adb shell am broadcast a android intent act
  • Android JNI打印logcat日志

    在 JNI 中打印日志可以使用 android log print 函数来实现 该函数是 Android NDK 提供的一个用于在本地代码中输出日志消息到 logcat 的方法 要在 JNI 中打印日志 请按照以下步骤进行操作 在你的 JN
  • 安卓开发常用icon/png图样

    安卓开发常用icon png图样 平时开发当中会用到很多png图样 但是自己又不太会做 因此做好的办法就是直接在网上下载下来用了 这里给大家推荐一个比较好用的网站 免费的 有很多好的png可以直接下载下来使用 http www iconar
  • 最近接触的技术汇集帖

    最近在网上查资料碰到好多没接触过的技术 先汇总在这里备用 以后慢慢吸收 1 JNA JNI的替代品 调用方式比JNI更直接 不再需要JNI那层中间接口 几乎达到Java直接调用动态库 2 SmallSQL 基于JDBC3 0转为Deskto
  • GLSL(着色器语言)

    GLSL 着色器语言 简介 OpenGLES的着色器语言GLSL是一种高级的图形化编程语言 其源自应用广泛的C语言 与传统的c语言不同的是 它提供了更加丰富的针对于图像处理的原生类型 诸如向量 矩阵之类 OpenGLES 主要包含以下特性
  • Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)

    在Android OpenGLES2 0 十四 Obj格式3D模型加载中实现了Obj格式的3D模型的加载 加载的是一个没有贴图 没有光照处理的帽子 为了呈现出立体效果 手动 加了光照 拥有贴图的纹理及光照又该怎么加载呢 模型文件 本篇博客例
  • java调用C++代码

    首先我的参考博客如下 https www cnblogs com CLAYJJ p 7725975 html https www cnblogs com xiaocainiao2hao p 5619862 html https www cn
  • java调用c++文件

    网上有很多例子 参照着执行有时候相对路径问题经常卡住了 实战了一把通过后 特重新整理一份 供小白参考 首先需要有一个含有native方法的java类 vi Users mac work git javademo src main java
  • Android获取当前位置的三种方式及其使用方法

    1 GPS定位 2 基站定位 此类位置的获取有赖于手机无线通讯信号 当手机处在信号覆盖范围内 手机可以获得该区域 即通讯术语中的 小区 的识别号 因为这些识别号是惟一的 因此可以将识别号和地理坐标对应起来 因此根据识别号就可以知道地理位置
  • Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤

    1 打开新立得包管理器 搜索JDK 选择openjdk 6 jdk安装 2 打开Ubuntu软件中心 搜索Eclipse 选择Eclipse集成开发环境 安装 3 打开Eclipse File gt New gt Java Project
  • Android中JNI在C/C++中的区别

    一 一个疑问 在进行JNI编程中 同样一个函数FindClass C和C 中有不同的用法 如果是C 要用 env gt FindClass str 如果是C要用 env gt FindClass env str 类似的区别几乎涉及到每一个结

随机推荐

  • 【Flink】处理函数Process

    目录 处理函数 基本处理函数 ProcessFunction 处理函数的功能 ProcessFunction解析 处理函数的分类 按键分区处理函数 KeyedProcessFunction 定时器Timer 和定时服务 TimerServi
  • 几种css炫酷背景欣赏

    这里为大家带来几种表现惊人的css背景效果 纯css表现效果 有桌布效果 星空效果 心形效果 砖墙效果等 请欣赏 background radial gradient rgba 255 255 255 0 0 rgba 255 255 25
  • 2020-10-29 org.apache.commons.lang3.StringUtils

    public static void TestStr null 和 操作 判断是否Null 或者 System out println StringUtils isEmpty null System out println StringUt
  • 基于神经网络的模式识别

    一 项目设计的目的 通过构建BP网络和离散Hopfield网络模式识别实例 输出稳定结果 二 相关原理知识介绍 BP学习算法是通过反向学习过程使误差最小 其算法过程从输出节点开始 反向地向第一隐含层 即最接近输入层的隐含层 传播由总误差引起
  • Ceres Solver从零开始手把手教学使用

    目录 一 简介 二 安装 三 介绍 四 Hello Word 五 导数 1 数值导数 2解析求导 六 实践 Powell函数 一 简介 笔者已经半年没有更新新的内容了 最近学习视觉SLAM的过程中发现自己之前学习的库基础不够扎实 Ceres
  • 用JS获取移动设备信息

    获取设备信息少不了的一个JS脚本就是 mobile detect js 如图第二个script链接就是mobile detect js的网上链接 它的官方链接我给大家放在这里了 mobile detect js官方地址https www m
  • 【毕业设计】深度学习图像语义分割算法研究与实现 - python 机器视觉

    文章目录 0 前言 2 概念介绍 2 1 什么是图像语义分割 3 条件随机场的深度学习模型 3 1 多尺度特征融合 4 语义分割开发过程 4 1 建立 4 2 下载CamVid数据集 4 3 加载CamVid图像 4 4 加载CamVid像
  • SpringBoot学习笔记35——实现List校验@Validated

    在 Controller 类上 加上 Validated 在需要校验的参数上加上 Valid 就可以校验list里的实体类的属性 还需要在统一异常处理类中添加异常处理 参数校验异常类 param exception return autho
  • redis未授权访问漏洞利用+redis日志分析

    redis未授权访问漏洞利用 redis日志分析 redis未授权访问 远程连接redis kali redis cli h IP redis常用语句 set key value 设置键值对 get key 获得值 incr intkey
  • 超分辨率学习记录

    超分辨率学习记录 超分定义 经典模型 前上采样 SRCNN 后上采样 FSRCNN 这篇博客主要内容来自于天池网站的超分辨率理论基础 同时对于其中涉及的学术名词也进行了解释 作为自己学习的记录 注 所有名词右上方带 的下面都有详细解释 博客
  • 最近点对问题

    分而治之 题目来源 Quoit Design Problem Description Have you ever played quoit in a playground Quoit is a game in which flat ring
  • 视频编解码(一):ffmpeg编码H.264帧类型判断

    本文主要讲述ffmpeg编码过程中是如何设置I帧 B帧及P帧的 以及如何通过代码判断帧类型 之前看过很多网上的文章 讲述如何判断I帧 B帧 P帧 然而都是停留在H 264官方文档中的定义 如果不结合ffmpeg 就仿佛纸上谈兵 有点不切实际
  • 人脸识别5.1- insightface人脸检测模型scrfd-训练实战笔记,目标检测的理论理解

    1 insightface detection scrfd模型训练 1 0 数据集 数据集下载说明 https github com deepinsight insightface tree master detection dataset
  • Java面向对象编程

    对于IP地址130 63 160 2 MASK为255 255 255 0 子网号为 A 160 2 B 160 C 63 160 D 130 63 160 答案 B 将网络物理地址转换为IP地址的协议是 A IP B ICMP C ARP
  • uni-app项目中引入uView组件库

    在uni app项目中引入uView组件库 其实uView的官方文档写的很清楚了 但是作为菜鸟踩过坑的我还是记录一下 什么是uView uView是uni app生态专用的UI框架 uni app 是一个使用 Vue js 开发所有前端应用
  • Linux 中的 chmod 命令及示例

    在 Unix 操作系统中 chmod命令用于更改文件的访问模式 该名称是change mode的缩写 其中规定每个文件和目录都有一组权限来控制权限 例如谁可以读取 写入或执行该文件 其中权限分为三类 同时读 写和执行 用 r w 和 x 表
  • Java程序员需看的面试题

    进大厂是大部分程序员的梦想 而进大厂的门槛也是比较高的 所以这里整理了一份阿里 美团 滴滴 头条等大厂面试大全 对于Java后端的朋友来说应该是最全面最完整的面试备战仓库 为了更好地整理每个模块 我也参考了很多网上的优质博文和项目 力求不漏
  • 在父子页面嵌套的结构中,当父页面完成某个操作后给子页面一个回调函数

    企业级系统中有一种常见的页面结构 所有的表单都套在一个父页面里 有业务场景 要求父页面在子页面完成加载后做一些操作 如下 这些代码不是本文的重点内容 不做介绍了 这里的iframe是元素 init my iframe function if
  • 策略模式对象初始化为空解决方案及项目中具体的使用

    使用类 Component public class TaskReceiver Autowired TaskHandlerMapping mapper RabbitHandler RabbitListener queues MqTaskCo
  • 【OPENGLES】opengles-jni实例1

    首先 说明下为什么要用jni实现opengl es 在进行移动端图像算法开发的过程中 需要完成对大量的数据进行处理 opengl是在进行图形渲染或者大批量图像运算处理时有着很大的优势 如果能够在算法库开发中加入opengl 则对于提升算法运