【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 的相关文章

  • OpenGL ES 3.0 开发(一)

    什么是 OpenGLES OpenGLES 全称 OpenGL for Embedded Systems 是三维图形应用程序接口 OpenGL 的子集 本质上是一个跨编程语言 跨平台的编程接口规范 主要应用于嵌入式设备 如手机 平板等 由科
  • JNI GetFieldID和GetMethodID函数解释及方法签名

    1 GetFieldID是得到java类中的参数ID GetMethodID得到java类中方法的ID 它们只能调用类中声明为 public的参数或方法 举例说明 jclass c env gt FindClass env com came
  • java调用.so文件

    第一步 public class JavaToCTest private native void sayHello 声明本地方法 static System loadLibrary JavaToCTest 需要加载的so库文件的名称 在li
  • Cocos2dx-OpenGL ES2.0教程:你的第一个立方体(5)

    在上篇文章中 我们介绍了VBO索引的使用 使用VBO索引可以有效地减少顶点个数 优化内存 提高程序效率 本教程将带领大家一起走进3D 绘制一个立方体 其实画立方体本质上和画三角形没什么区别 所有的模型最终都要转换为三角形 同时 本文还会介绍
  • C语言基础入门详解一

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 前言 初识C语言 include 相当于java的import stdio全称 standard inpu
  • Android JNI编程 与 NDK开发(一) 简介,区别,使用场景

    JNI是什么 JNI 全称Java Native Interface 是java与其他语言 主要是c c 交互的接口 是java的一种特性一种协议 开发者可以通过JNI在java中调用c c 代码或在c c 中调用java代码 NDK是什么
  • jni开发:jni基础教程及实例(一)

    本篇博客将带初次接触jni的小白完成对jni基本知识的了解 本篇主要以概念为主 下一篇博客会带大家完成一个难度不大的jni实例 请两篇博客连起来看 谢谢支持 一 jni简介 1 jni的全称就是Java Native Interface 就
  • JNI中的回调函数,C++中的vector数组和Java中int数组的转换

    简介 使用JNI的过程中 在Java端使用C 程序中的回调函数 对程序来说很方便 最近在做图形识别的过程中遇到了数组的转换方面的问题 后来仔细想了一下 在网上简单看了点资料 发现在JNI层对vector数组转换 最后在回调中返回到Java端
  • 开发日记(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
  • IOS Opengl ES 用多光源实现材质,阴影,高光效果

    在Opengl ES 1 0 中 要实现材质效果 往往需要光源的设置 如果环境光和漫反射光强了 材质效果难以体现 如果环境光和漫反射光弱了 材质就暗了 实现阴影效果 可以放置一个主平行光源 为了材质效果 需要将环境光设到比较弱 漫反射光设到
  • Attention! No symbol directories found - please check your native debug configuration</font>

    我出现问题的版本是Android Studio2 2 3 之前项目是正常的 可以调试JNI代码 但是突然有一次不知道什么原因就无法调试 断点无法断下 调试时有这样的警告 Now Launching Native Debug Session
  • 【已解决】Android Studio Cannot resolve symbol '@dimen/activity_vertical_margin'

    Android Studio中dimens xml是用来存储部件尺寸大小的配置文件 我们可以将配置存储在dimens xml中 就可以使多个部件使用同样的值而只需更改一次 dimens xml路径为app gt src gt main gt
  • JNI线程

    作者 左少华 博客 http blog csdn net shaohuazuo article details 43149193 转载请注明出处 http blog csdn net shaohuazuo 1 Android线程介绍 1 线
  • Android JNI(一):JNI基础概念

    本文讲述 NDK和JNI是什么 JNI的原理 JNI开发流程的步骤 认识JNI相关的代码语法 名称概念 什么是NDK NDK 其中NDK的全拼是 Native Develop Kit Android NDK 就是一套工具集合 允许你使用C
  • Java调用Native方法

    Java调用Native方法 Java中支持调用其他语言 C C 想要实现调用 需要进行以下几步操作 编写Java类并声明Native方法 package my mynative background public class Studen
  • 安卓开发之前端

    安卓开发之前端界面的搭建 前段时间因为网络编程这门课要做一个课程project 题目是本地服务器的开发 需要开发一个安卓客户端 于是就把去年小学期学的那点安卓知识捡起来了 心累 想到去年小学期学的那点安卓真的不算什么 就是一些很简单的东西
  • jni中如何查看函数签名

    操作步骤 第一步 找到 build 文件夹 第二步 找到 javac 文件夹 第三步 找到自己写的 xxx class文件 第四步 右键 xxx class 文件 在 Terminal 中打开 第五步 执行 javap s xxx clas
  • Android NDK 编译时出现make (e=2): 系统找不到指定的文

    今天编译一个so文件时出现如下错误 C Users xxj Desktop test OpenCamera gt ndk build armeabi v7a Compile SeetafaceSo lt face detection cpp
  • Ubuntu下,Java中利用JNI调用codeblocks c++生成的动态库的使用步骤

    1 打开新立得包管理器 搜索JDK 选择openjdk 6 jdk安装 2 打开Ubuntu软件中心 搜索Eclipse 选择Eclipse集成开发环境 安装 3 打开Eclipse File gt New gt Java Project

随机推荐

  • 【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 则对于提升算法运