位置: 编程技术 - 正文

NDK的OpenGLes2.0 官方例子解析(ndk sdk)

编辑:rootadmin
提要

推荐整理分享NDK的OpenGLes2.0 官方例子解析(ndk sdk),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ndk_toolchain_version,ndk版本有要求吗,ndk dose not contain any platform,ndk dose not contain any platform,ndk版本有要求吗,ndk_toolchain_version,ndk_toolchain_version,ndk sdk,内容如对您有帮助,希望把文章链接给更多的朋友!

NDK自带了一个OpenGLes的例子,下面就一起来学习一下。

环境:Ubuntu. NDK r ADT. Android Native Development Tools 8.

注:在ubuntu的adt需要手动安装Android Native Development Tools才能很好的支持NDK。

如果你对Java调用C/C++的代码还不了解,可以参考:JNI原理及实现 利用JNI进行对象操作

如果你对NDK还不了解,可以参考:Android的NDK开发(1)-不一样的HelloWorld

如果你对NDK下的OpenGL es 编程不了解,可以参考:Android的NDK开发(2)-基于NDK的OpenGL开发

加载项目

File -> Import -> Existing Android Code Into Workspace

定位到ndk的目录,samples -> hello-gl2,加载就可以了。加载好之后目录的结构是像这样的:

Java的代码主要aom.android.gl2jni目录下面,C++的代码主要就在jni目录,obj目录是ndk编译产生的一些文件,libs下面是ndk交叉编译出的各个版本cpu所使用的库版本。

运行结果非常简单,中间一个三角形,背景从白到黑不断变换。

代码分析

首先来看下java的代码

GL2JNILib.java

这个类作为Java和C++的桥,用System.loadLibrary()方法来加载C++的库,接着声明一些C++实现好的一些静态公有方法。算是一种小小的封装吧。

GL2JNIView.java

这个类自定义了一个SurfaceView,作为Activity的content,定义了一个Renderer用于渲染内容,分别实现了Render的onDrawFrame和onSurfaceChanged方法,这里就直接调用GL2JNILib的静态共有方法了。

还定义了两个类,一个ContextFactory,用与生成OpenGL的Context。

一个ConfigChooser,用于选定支持es 2.0 的EGLConfig。

感觉这几个类分开写一下会更清晰一些。

GL2JNIActivity.java

这个类的定义了主要的Activity,只是简单的new了一个刚才定义好的GL2JNIView,然后设为content。

NDK的OpenGLes2.0 官方例子解析(ndk sdk)

JNI方面,主要看gl_code.cpp就好了。

首先说几个C++的几个关键字的用法。

全局static变量与static函数

在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。 1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。好处:定义全局静态变量的好处:1)不会被其他文件所访问,修改2)其他文件中可以使用相同名字的变量,不会发生冲突。

静态函数在函数的返回类型前加上关键字static,函数就被定义成为静态函数。 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。定义静态函数的好处:<1> 其他文件中可以定义相同名字的函数,不会发生冲突<2> 静态函数不能被其他文件所用。

extern "C" 的用法

被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;实现C++与C及其它语言的混合编程。

而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。

如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。

在这里用 extern "C"框住两个函数,主要是让Jni来调用它们。

代码分析

首先是在c++代码中打tag的方法。

首先先是包含头log.h文件,

接下来是将自带的log函数用用预定义的方法简化一下。

printGLString等于是又封装了一层,同时可以打印gl的信息。

checkGlError用于检查OpenGL内部发生的错误,OpenGL在运行过程中所产生的错误都可以用glGetError来获得。

vertext shader和fregment shader的内容还有三角形的顶点位置都用已经在程序中写死。如果想加载外部的shader的话,要么在ndk中实现文件的读写,要么就在用java读取,然后传到C里面来处理。

shader相关的流水线可以参考 - GLSL入门

setupGraphics用于shader的一些初始化,还有context的一些初始化。

renderframe非常简单,就是渲染三角形,改变背景颜色,不断刷新。

打完收工

Android游戏开发之Cocos2d-android-1 引擎有缺陷 (二) 大家好,学习完千锋的视频之后,我对Cocos2d-android-1进行了相关的查阅,发现该引擎还有很多的方法是缺少的,也发现贴吧朋友说该引擎已经不再更新了

cocos2dx3.2 屏幕适配浅析 在开发Android游戏时,由于机型种类繁多,屏幕分辨率也多种多样,不可能为每一种机型定制程序,这里,可以采用cocos2dx提供的屏幕适配策略。简单地

Android游戏开发:游戏框架的搭建(1) 通常情况下,游戏开发的基本框架中,一般包括以下模块:窗口管理(Windowmanagement):该模块负责在Android平台上创建、运行、暂停、恢复游戏界面等功能

标签: ndk sdk

本文链接地址:https://www.jiuchutong.com/biancheng/371260.html 转载请保留说明!

上一篇:Android游戏开发之Cocos2d-android-1 安装运行 (一)(Android游戏开发教程)

下一篇:Android游戏开发之Cocos2d-android-1 引擎有缺陷 (二)(android游戏开发框架)

  • 对外支付哪些项目需要缴税
  • 个体工商户怎么补交个人所得税
  • 个体工商户所得税核定征收2023
  • 其他应收款是负数怎么报税
  • 私募基金如何做大规模
  • 外出经营涉税事项报告
  • 加油充值卡发票能入账吗
  • 企业里面不征税的发票能报销吗
  • 怎样查验电子发票真伪
  • a3软件怎么反记账
  • 合并报表负商誉为什么计留存收益
  • 小额贷款公司的钱从哪里来
  • 其他应收款利息收入税务规定
  • 旧的固定资产销售怎么算税
  • 质量保证产品一般是指
  • 案例分析建筑业差额征税如何进行账务处理?
  • 会计人员必备的知识和技能
  • 质保金的税务处理
  • 工程开发票备注栏必需要写吗?
  • 学校应该缴纳的税
  • 预缴的个人所得税会计分录
  • 营改增一般纳税人申请过渡性财政扶持资金
  • 土地作价入股政策
  • 出口退税挂靠业务如何做帐?
  • 非居民纳税人享受协定待遇办理方式
  • 光驱弹不出来灯也不亮
  • 华为鸿蒙系统的服务
  • 子公司代总公司付款
  • 所得税以前年度亏损
  • 如何手机个人热点连电脑
  • macbookpro安装dmg
  • QQPCTray.exe是什么进程 QQPCTray.exe文件介绍
  • 工业企业采购部门职责
  • 怎么更改win7
  • Yii使用技巧大汇总
  • 企业雇佣临时工个税
  • framework core
  • vue基础知识
  • 无形资产的摊销应计入什么科目
  • 小规模负数发票怎么申报增值税
  • 数据库锁面试题
  • node更新到最新版本
  • 5个 ChatGPT 功能,帮助你提升日常编码效率
  • set nu命令
  • 房地产股权转让涉及哪些税费
  • 上季度的发票开出去了可以作废吗
  • 物业管理费开票类目
  • 电子发票怎么清盘操作流程
  • python中删除字典里的空项目
  • 支付给退休人员的退休费计入
  • 个人所得税核定征收税率
  • sql2005备份数据库
  • 摊销无形资产10000元
  • 有限公司股权转让需要股东会决议吗
  • 内部应收账款计提坏账准备的抵消例题
  • 农业合作社账务都有什么科目
  • 资产负债表所有者权益和利润表关系
  • 无票收入怎么报增值税
  • aspnet数据库访问
  • 下载windows vista
  • easybcd修复ubuntu
  • Win7系统不小心将TCP/IP协议卸载如何重新安装?
  • WIN10如何禁用驱动程序强制签名
  • owmngr.exe - owmngr是什么进程 作用是什么
  • win8超级按钮在哪
  • win10系统如何查看版本号
  • win8.1系统如何升级到win11
  • glsl fract
  • unity 3d ui
  • 欢迎使用本公司智能语音电动车音效
  • jquery自定义的方法有哪些
  • js math.js
  • 安卓源代码开放吗
  • jquery将文本框设置为只读
  • android 打包
  • 开展税务培训
  • 改税务报表会有限风险吗
  • 国税发票如何查真伪查询
  • 船舶吨税案例分析
  • 争议问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设