自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

闲暇部落

今天的自己比昨天更优秀。记录工作中的点滴积累,总结成长的步伐里程。

  • 博客(240)
  • 收藏
  • 关注

原创 Kotlin协程详解——withContext函数

虽然能够提供线程的切换,但这只是单方向的,因为它没有提供线程的恢复。试想一下,我们有个网络请求,我们通过将线程切换到,当拿到请求成功的数据之后,所在的线程还是IO线程,这样并不能有利于我们UI操作。所以为了解决这个问题kotlin提供了,它不仅能够接受来帮助我们切换线程,同时在执行完毕之后还会帮助我们将之前切换掉的线程进恢复,保证协程运行的连贯性。这也是为什么官方推荐使用进行协程线程的切换的原因。

2025-02-12 17:18:33 240

原创 kotlin中expect和actual关键字修饰的函数作用

在 Kotlin 多平台编程中,expect和actual关键字用于定义跨平台的抽象和具体实现。这种机制允许开发者声明一个平台无关的接口或函数签名(使用expect),然后在每个目标平台上提供具体的实现(使用actualexpect。

2025-02-12 15:52:17 382

原创 Kotlin协程详解——拦截器ContinuationInterceptor

来创建一个协程(内部具体如何创建的这篇文章先不说,后续文章会单独分析),然后再调用了。既然已经明白了它的拦截方式,我们自己来手动写一个拦截器来验证一下。整体再来看这个例子,它是不是像一个简易版的协程的线程切换呢。所以发生这种情况也就不奇怪了,这是我们拦截的效果。理解是正确的,它可以在协程启动的时候进行拦截操作。结束之后,它内部还会进行一次线程恢复,将自身所处的。类型的实例,才将它加入到拼接链的尾部,对应的就是。因为我们使用的是默认参数,所以这里对应的就是。另外还有一点,如果细心的老铁就会发现,

2025-02-12 15:45:57 635

原创 Android网络框架——OKHttp拦截器

一、Interceptor 的作用二、Interceptor 的类型1. Application Interceptor(应用拦截器)2. Network Interceptor(网络拦截器)3.源码解读三、Interceptor使用

2025-02-12 09:02:23 1244

原创 Android网络框架——OKHttp

OKHttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付公司贡献(该公司还贡献了Picasso)用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除,现在已经打不出来)

2025-02-12 08:50:07 920

原创 Kotlin协程详解——Job

基本上每启动一个协程就会产生对应的Job,例如返回的就是一个Job,它可以用来管理协程,一个Job中可以关联多个子Job,同时它也提供了通过外部传入parent的实现这个很好理解,当传入parent时,此时的Job将会作为parent的子Job。

2025-02-11 16:28:38 540

原创 Kotlin协程详解——协程作用域CoroutineScope

一、一、

2025-02-11 16:16:56 829

原创 Kotlin协程详解——组合挂起函数

假设我们在不同的地方定义了两个进行某种调用远程服务或者进行计算的挂起函数。我们只如果需要按 顺序 调用它们,我们接下来会做什么——首先调用 doSomethingUsefulOne 接下来调用 doSomethingUsefulTwo ,并且计算它们结果的和吗?实际上,如果我们要根据第一个函数的结果来决定是否我们需要调用第二个函数或者决定如何调用它时,我们就会这样做。我们使用普通的顺序来进行调用,因为这些代码是运行在协程中的,只要像常规的代码一样顺序 都是默认的。

2025-02-10 19:50:41 254

原创 Kotlin协程详解——协程上下文

协程的上下文,它包含用户定义的一些数据集合,这些数据与协程密切相关。它类似于map集合,可以通过key来获取不同类型的数据。同时的灵活性很强,如果其需要改变只需使用当前的来创建一个新的即可。在协程启动部分提到,启动协程需要三个部分,其中一个部分就是上下文,其接口类型是CoroutineContext,通常所见的上下文类型是CombinedContext或者EmptyCoroutineContext,一个表示上下文组合,另一个表示空。

2025-02-10 19:49:47 1038

原创 Kotlin协程详解——挂起函数的应用和原理

定义:挂起函数是 Kotlin 协程中的一个特殊函数,使用suspend关键字进行标记。特性挂起函数可以在协程中暂停执行,直到某个异步操作完成后再恢复执行。挂起函数不会阻塞调用它的线程,而是让出线程去执行其他任务。挂起函数只能在协程或其他挂起函数中调用。

2025-02-08 17:43:44 1062

原创 Kotlin协程详解——调度器Dispatcher

Kotlin协程提供了多种内置的调度器,如Dispatchers.Default、Dispatchers.IO、Dispatchers.Main等,以及自定义调度器的创建方式,以适应不同的应用场景。通过合理使用调度器,可以显著提高应用的性能。Coroutine使用Dispatchers来负责调度协调程序执行的线程,这一点与RxJava的schedules有点类似,但不同的是Coroutine一定要执行在Dispatchers调度中,因为Dispatchers将负责resume被suspend的任务。

2025-02-08 11:13:28 199

原创 Kotlin协程详解——API函数介绍

Coroutine如何创建呢?有两种方式,分别为launch与asynclaunch: 开启一个新的Coroutine,但不返回结果async: 开启一个新的Coroutine,但返回结果还是上面的例子,如果我们需要执行fetch方法,可以使用launch创建一个Coroutine。

2025-02-08 11:12:12 120

原创 Kotlin协程详解——协程取消与超时

在一个长时间运行的应用程序中,你也许需要对你的后台协程进行细粒度的控制。 比如说,一个用户也许关闭了一个启动了协程的界面,那么现在协程的执行结果已经不再被需要了,这时,它应该是可以被取消的。 该 launch 函数返回了一个可以被用来取消运行中的协程的Job。在实践中绝大多数取消一个协程的理由是它有可能超时。 当你手动追踪一个相关 Job 的引用并启动了一个单独的协程在延迟后取消追踪,这里已经准备好使用 withTimeout 函数来做这件事

2025-02-07 16:54:04 1414

原创 Kotlin协程详解——runBlocking和coroutineScope的区别

runBlocking会阻塞当前线程,这意味着在当前线程执行runBlocking时,其他在该线程上等待的任务将被暂停执行,直到runBlocking内部的协程全部完成。coroutineScope则不会阻塞当前线程,而是挂起当前协程。挂起协程意味着当前协程的执行被暂停,但所在线程可以继续执行其他任务。当所有子协程执行完毕后,当前协程会恢复执行。

2025-02-06 17:46:32 476

原创 结构化并发是什么

结构化并发(Structured Concurrency)是一种编程范式,旨在通过明确的生命周期管理和层次化的任务组织,确保并发操作(如线程、协程等)的可控性和可维护性。它的核心思想是:并发任务应该像结构化编程中的代码块一样,具有清晰的开始和结束,并且父任务必须等待所有子任务完成才能结束。

2025-02-06 13:25:44 352

原创 异步程序设计方式

​几十年以来,作为开发人员,我们面临着需要解决的问题——如何防止我们的应用程序被阻塞。 当我们正在开发桌面应用,移动应用,甚至服务器端应用程序时,我们希望避免让用户等待或导致更糟糕的原因成为阻碍应用程序扩展的瓶颈。有很多途径来解决这种问题,包括:线程回调Future、 Promise 及其他反应式扩展协程​

2025-02-05 18:58:28 773

原创 Kotlin协程详解——协程基础

你通常会看到 runBlocking 在应用程序的最顶层被这样使用,而在真正的代码中却很少见到它的身影,因为线程是宝贵的资源,阻塞它们是低效的,而且通常是不被期望的。协程遵循结构化并发的原则,这意味着新的协程只能在特定的 CoroutineScope 内启动,该作用域限定了协程的生命周期。这些情况导致的问题是代码间的嵌套层级太深,导致逻辑嵌套复杂,后续的维护成本也要提高,这不是我们所要看到的。协程可以被视为轻量级的线程,但它们之间存在一些重要的区别,这使得它们在实际使用中与线程有很大的不同。

2025-02-05 11:13:45 635 1

原创 多线程详解——Kotlin多线程几种实现方式

在Kotlin中,你可以使用多种方式来实现多线程编程。

2025-01-24 18:50:25 1356

原创 多线程详解——IntentService工作原理(源码详解)

是Service组件类的一个扩展,继承自Service,用于按需处理异步请求(以Intent的形式表达),避免IntentService中耗时操作造成主线程ANR,所以IntentService内部创建单独的工作线程HandleThread。客户端通过调用方法发送请求;服务会在需要时被启动,使用一个工作线程依次处理每个Intent,并在没有更多工作要处理时自行停止。这种“工作队列处理器”模式通常用于将任务从应用程序的主线程中获取出来。类的存在就是为了简化这种模式并处理其机制。要使用它,你需要扩展并实现。

2025-01-24 08:00:10 213

原创 kotlin内联函数——runCatching

kotlin内联函数——runCatching

2025-01-24 07:09:37 797

原创 kotlin内联函数——takeIf和takeUnless

kotlin中内联函数takeIf和takeUnless

2025-01-23 12:59:31 711

原创 kotlin内联函数——let,run,apply,also,with的区别

kotlin中内联函数let,run,apply,also,with的区别

2025-01-23 11:09:44 1210

原创 Android应用(进程)间数据共享的几种方式——IPC

进程间通信方式

2025-01-13 06:48:41 1136

原创 Kotlin中is,!is,as和as?运算符的区别

Kotlin中is,!is,as和as?运算符的区别

2025-01-11 15:37:09 315

原创 android四大组件之一——Service

Service 是应用组件,代表一个应用的长时间后台运行的操作,没有交互界面,提供给其他应用一些功能。每个service类必须在清单文件里做 声明. Services可以被启动通过和services像其他应用对象一样,运行在宿主进程的主线程。这意味着,如果你的服务要执行任何CPU密集型(如MP3播放)或阻塞(如网络)操作,它应该生成自己的线程来完成这项工作。有在Processes and Threads中可以找到更多的信息。类作为标准实现类,它有自己的线程可以按部就班的处理事务。

2025-01-11 11:25:39 809

原创 Android详解——ConstraintLayout约束布局

ConstraintLayout继承自ViewGroup,允许用户以更加灵活的方式在布局中设置控件的位置和尺寸(ConstraintLayout在API>9可用)。ConstraintLayout采用方向约束的方式对控件进行定位,至少要保证水平和垂直方向都至少有一个约束才能确定控件的位置。相对位置边距中心位置圆形位置可见性尺寸约束链式布局虚拟辅助控件优化器记住,依赖关系中不能有循环依赖关系。

2024-12-19 13:55:13 2271

原创 多线程详解——HandlerThread工作原理(源码详解)

开启Thread子线程进行耗时操作多次创建和销毁线程是很耗系统资源的。(为什么呢,因为java的线程是依托操作系统,线程的创建和销毁以及频繁切换都涉及到用户态和内核态的切换,以及线程上下文的保存和恢复,所以是比较耗资源的。既然已经有Handler可以实现线程间通信,为什么又设计了HandlerThread?HandlerThread通过字面意思我们可以看到,它是Handler+Thread,那么我们猜测它应该实现了Handler和Thread功能,到底是不是呢,我们向下看。

2024-12-13 14:04:10 1950

原创 多线程详解——AsyncTask工作原理(源码详解)

AsyncTask是对Handler与线程池的封装。使用它的方便之处在于能够更新用户界面,当然这里更新用户界面的操作还是在主线程中完成的,但是由于AsyncTask内部包含一个Handler,所以可以发送消息给主线程让它更新UI。另外,AsyncTask内还包含了一个线程池。使用线程池的主要原因是避免不必要的创建及销毁线程的开销。设想下面这样一个场景:有100个只需要0.001ms就能执行完毕的任务,如果创建100个线程来执行这些任务,执行完任务的线程就进行销毁。

2024-12-12 11:59:48 1304

原创 OpenGL ES详解——多个纹理实现混叠显示

【代码】OpenGL ES详解——多个纹理实现混叠显示。

2024-12-11 19:33:52 533

原创 OpenGL ES详解——glUniform1i方法是否能用于设置纹理单元

需要注意的是,OpenGL允许你同时绑定多个纹理到不同的纹理单元上,并在着色器中通过不同的sampler uniform变量来选择它们。在OpenGL中,纹理单元是图形硬件的一部分,它允许你同时绑定多个纹理,并在着色器程序中通过uniform变量来选择使用哪个纹理。通常,纹理单元通过整数索引来访问,这些索引在着色器中以sampler2D(或其他类型的采样器)uniform变量的形式出现。然后,你需要确保在绑定纹理到纹理单元时,使用与你在着色器中设置的索引相匹配的纹理单元。现在,当你在着色器中访问。

2024-12-11 19:06:48 464

原创 OpenGL ES详解——glTexImage2D作用

glTexImage2D是OpenGL中的一个重要函数,其作用是为2D纹理分配显存并上传数据。

2024-12-11 09:37:58 746

原创 Camera2 API——CameraCaptureSession

CameraDevice的已配置捕获会话,用于从相机捕获图像或重新处理之前在同一会话中从相机捕获的图像。

2024-12-10 07:34:56 379

原创 OpenGL ES详解——Camera2数据渲染

二、获取Camera2数据。三、渲染Camera2数据。一、Camera2介绍。

2024-12-10 07:08:14 138

原创 OpenGL ES详解——YUV数据渲染

YUV是一种图像颜色编码方式。在说 yuv 之前,就不得不说 RGB 图像空间,顾名思义,RGB 是值图像的每一个像素都有 R、G,B 三个值,且三个值一次排列存储;但不一定说一定是按照 R,G,B 顺序排列,也可以是 B,G,R 这样的顺序。其中 R,G,B 的位深为 8 bit。我们常见的图片处理,都是用 R,G,B 的图像格式,比如bitmap,比如图像的存储,基本使用 R,G,B。

2024-12-09 16:59:00 1592

原创 OpenGL ES详解——文字渲染

FreeType的这些度量值中包含了字形在相对于基线上的偏移量用来描述字形相对于此基线的位置,字形的大小,以及与下一个字符之间的距离。当你想要使用不同的字体时,你不得不重新生成位图字体,以及你的程序会被限制在一个固定的分辨率:如果你对这些文字进行放大的话你会看到文字的像素边缘。然而,你的应用程序可能并不需要这么强大的功能,性能更好的点阵字体也许是更可取的。通常这并不会出现什么问题,因为通常的纹理都有4或者4的整数倍的储存大小,但是现在我们只用一位来表示每一个像素颜色,此时的纹理可能有任意内存长度。

2024-12-04 17:01:31 1555

原创 Android opengl 绘制矩形,宽高相同,不能显示为正方形,是怎么回事

通过上述检查和调整,你应该能够找到导致矩形不能显示为正方形的原因,并进行相应的修正。如果问题依旧存在,可能需要更详细地检查OpenGL的渲染管道和具体的代码实现。在Android上使用OpenGL绘制矩形(或尝试显示为正方形)时,如果结果显示为不是正方形,可能有几个原因。

2024-11-29 19:23:53 506

原创 Android shader glsl math方法有哪些举例

在Android的Shader编程中,GLSL(OpenGL Shading Language)被用于实现各种图形效果。GLSL提供了一系列数学方法,这些方法可以在顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)中使用,以实现复杂的图形变换和效果。

2024-11-29 18:52:42 620

原创 android shader gl_Position是几个分量

在Android的OpenGL ES中是一个四维向量,包含x、y、z和w四个分量。这些分量共同决定了顶点的位置和投影效果。是顶点着色器(Vertex Shader)的一个内置输出变量,它用于指定顶点在裁剪空间(Clip Space)中的位置。是一个四维向量(4-component vector),包含四个分量:x、y、z和w。这四个分量共同定义了顶点的位置和相对于观察者的深度(或距离)。的值会被用来确定顶点是否位于裁剪空间内,以及它应该如何被投影到屏幕上。在Android的OpenGL ES中,

2024-11-29 17:39:02 396

原创 GL_TRIANGLE_FAN,GL_TRIANGLE_STRIP和GL_TRIANGLES的区别是什么

独立性:GL_TRIANGLES绘制的三角形是独立的,不共享顶点;而GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN绘制的三角形是相连的,可以共享顶点。顶点使用方式:GL_TRIANGLES按每三个顶点一组使用;GL_TRIANGLE_STRIP根据顶点的奇偶性决定三角形的顶点组合;GL_TRIANGLE_FAN则是以一个顶点为中心,与其他顶点组合形成三角形。适用场景:根据具体需求选择合适的绘制方式,可以在满足需求的情况下提高性能。

2024-11-28 11:55:26 809

原创 Android OpenGL ES详解——绘制圆角矩形

绘制矩形绘制圆形绘制圆角矩形

2024-11-22 22:19:09 488

android IntentService服务应用举例demo源码

IntentService 是 Service 组件类的一个扩展,用于按需处理异步请求(以 Intent 的形式表达)。客户端通过调用 android.content.Context#startService(Intent) 方法发送请求;服务会在需要时被启动,使用一个工作线程依次处理每个 Intent,并在没有更多工作要处理时自行停止。 这种“工作队列处理器”模式通常用于将任务从应用程序的主线程中获取出来。IntentService 类的存在就是为了简化这种模式并处理其机制。要使用它,你需要扩展 IntentService 并实现 onHandleIntent(Intent) 方法。IntentService 会接收 Intent,启动一个工作线程,并在适当的时候停止服务。 所有请求都在单个工作线程上处理——只要有请求,线程就会工作。(并且不会阻塞应用程序的主循环),但一次只能处理一个请求。

2025-01-24

android组件Service服务应用举例demo源码

android组件Service服务应用举例demo源码 详情介绍请见:https://mp.youkuaiyun.com/mp_blog/creation/editor/145040064 目录 ​一、Service概述 二、Service分类 1.前台服务 2.后台服务 3.绑定服务 三、Service的两种启动方式 1.start启动模式  2.bind绑定模式 四、权限 五、Service生命周期 六、组件与绑定Service的通信方式 1.扩展 Binder 类 2.Messenger信使 3.AIDL 七、总结 场景使用区别 八、源码下载

2025-01-16

Android OpenGL ES多个纹理实现混叠显示项目源码

Android OpenGL ES多个纹理实现混叠显示项目源码 详解见:https://blog.youkuaiyun.com/github_27263697/article/details/144408165?sharetype=blogdetail&sharerId=144408165&sharerefer=PC&sharesource=github_27263697&spm=1011.2480.3001.8118 目录 一、获取图片纹理数据 二、着色器编写 1. 顶点着色器 2. 片元着色器 三、绑定和绘制纹理 1. 绑定纹理 2. 绘制纹理 四、源码下载

2024-12-11

YUV格式图片和视频文件

YUV格式图片和视频文件:image_640_480.yuv,video_640_480.yuv

2024-12-11

Android OpenGL ES创建绘制YUV格式图片和视频项目源码

Android OpenGL ES创建绘制YUV格式图片和视频项目源码 详解:https://blog.youkuaiyun.com/github_27263697/article/details/144349961?sharetype=blogdetail&sharerId=144349961&sharerefer=PC&sharesource=github_27263697&spm=1011.2480.3001.8118 目录 一、YUV介绍 1. 为什么使用YUV 2. YUV 格式 二、YUV转RGB公式 三、YUV渲染 1. GL_LUMINANCE介绍 2. 获取 YUV 视频 3. 读取YUV文件数据 4. 着色器编写 5. 纹理加载和绘制 四、源码下载

2024-12-11

Android OpenGL ES绘制圆角矩形演示demo源码

Android OpenGL ES绘制圆角矩形演示demo源码 绘制圆角,详解见https://blog.youkuaiyun.com/github_27263697/article/details/143981399?sharetype=blogdetail&sharerId=143981399&sharerefer=PC&sharesource=github_27263697&spm=1011.2480.3001.8118 目录 1、绘制矩形 Renderer基类 矩形Renderer类 顶点着色器 片元着色器 2、绘制圆形 圆形Renderer类 顶点着色器 片元着色器 3、绘制圆角矩形 圆角矩形Renderer类 顶点着色器 片元着色器

2024-11-29

Android OpenGL ES多重采样抗锯齿MSAA演示demo源码

Android OpenGL ES多重采样抗锯齿MSAA演示demo源码 多重采样抗锯齿MSAA,详解见:https://blog.youkuaiyun.com/github_27263697/article/details/143859755 目录 一、抗锯齿概念 二、多重采样 三、OpenGL中的MSAA 1、多样本缓冲的使用 2、离屏MSAA——多采样帧缓冲 1、多采样纹理附件 2、多采样渲染缓冲对象 3、渲染到多采样帧缓冲 四、自定义抗锯齿算法 五、总结

2024-11-19

Android OpenGL高级GLSL应用-GLSL的内建变量的使用-绘制顶点功能源码

Android OpenGL高级GLSL应用——GLSL的内建变量的使用_绘制顶点功能源码 Android OpenGL ES详解——高级GLSL 详解见:https://blog.youkuaiyun.com/github_27263697/article/details/143758317 目录 一、GLSL的内建变量 1、顶点着色器变量 gl_Position gl_PointSize gl_VertexID 2、片段着色器的变量 gl_FragCoord gl_FrontFacing gl_FragDepth 二、接口块 1、输出块 2、输入块 三、Uniform缓冲对象 1、创建uniform缓冲对象 2、Uniform块布局 3、使用uniform缓冲 块绑定到绑定点 缓冲对象绑定到绑定点 4、应用举例 5、好处

2024-11-14

Android OpenGL 立方体贴图应用举例-天空盒演示demo源码

Android OpenGL 立方体贴图应用举例——天空盒演示demo源码 立方体贴图详解见:https://blog.youkuaiyun.com/github_27263697/article/details/143738612 一、概念 二、如何使用 1、创建立方体贴图 2、生成纹理 3、设置纹理环绕和过滤方式 4、激活和绑定立方体贴图 三、应用举例——天空盒 1、概念 2、加载天空盒 3、显示天空盒 4、优化 四、应用举例——环境映射:反射 五、应用举例——环境映射:折射 六、应用举例——动态环境贴图

2024-11-13

模板测试StencilTest功能应用演示demo源码

模板测试StencilTest功能应用演示demo源码 详解:https://blog.youkuaiyun.com/github_27263697/article/details/143401842?sharetype=blogdetail&sharerId=143401842&sharerefer=PC&sharesource=github_27263697&spm=1011.2480.3001.8118 在OpenGL中,模板测试(Stencil Testing)是一种用于控制像素绘制的方式。它允许开发者根据模板缓冲区(Stencil Buffer)中的值来决定是否绘制某个像素。模板测试通常用于实现一些高级的图形效果,如阴影、反射、折射等。 当片段着色器处理完片段之后,模板测试(Stencil Test) 就开始执行了,和深度测试一样,它能丢弃一些片段。仍然保留下来的片段进入深度测试阶段,深度测试可能丢弃更多。模板测试基于另一个缓冲,这个缓冲叫做模板缓冲。

2024-11-04

裁剪Scissor功能应用演示demo源码

裁剪Scissor功能应用演示demo源码 1、开发语言Kotlin 2、开发环境Android Studio 3、裁剪功能介绍 详解:https://blog.youkuaiyun.com/github_27263697/article/details/143380432?sharetype=blogdetail&sharerId=143380432&sharerefer=PC&sharesource=github_27263697&spm=1011.2480.3001.8118 裁剪是OpenGL中提⾼渲染的⼀种方式,只刷新屏幕上发生变化的部分,OpenGL 允许将要进⾏渲染的窗⼝中指定⼀个裁剪框。 基本原理:⽤于渲染时限制绘制区域,通过此技术可以在屏幕(帧缓冲)指定一个矩形区域。启⽤剪裁测试之后,不在此矩形区域内的片元被丢弃,只有在此矩形区域内的片元才有可能进入帧缓冲。因此实际达到的效果就是在屏幕上开辟了了一个小窗⼝,可以再其中进行行指定内容的绘制。

2024-10-31

RBO渲染缓冲附件关联到FBO演示demo源码

RBO渲染缓冲附件关联到FBO演示demo源码 RBO渲染缓冲简介 详解:https://blog.youkuaiyun.com/github_27263697/article/details/143058770 使用纹理来存储颜色缓存附件、深度缓存附件、模板缓存附件,但纹理并不是唯一的选择。尤其是针对深度缓存附件、模板缓存附件这类不需要在着色器中读取的缓存数据,OpenGL 还提供了另一种更加高效的缓存区附件——渲染缓冲对象(Renderbuffer Object, RBO)附件,用于存储渲染结果。 渲染缓冲对象(RBO)是 OpenGL 提供的一种存储渲染结果的帧缓冲对象(FrameBuffer Object,FBO)附件,与帧缓冲对象(FBO)配合使用。

2024-10-30

Android OpenGL Texture纹理附件关联到FBO演示demo源码

Android OpenGL Texture纹理附件关联到FBO演示demo源码 1、开发语言kotlin 2、开发环境Android studio 3、Texture纹理附件关联到FBO 详解: https://blog.youkuaiyun.com/github_27263697/article/details/143058770 FBO 虽然也叫缓冲区对象,但是它并不是一个真正的缓冲区,因为 OpenGL 并没有为它分配存储空间去存储渲染所需的几何、像素数据,我们可以认为它是一个指针的集合,这些指针指向了颜色缓冲区、深度缓冲区、模板缓冲区、累积缓冲区等这些真正的缓冲区对象,我们把这里的『指向关系』叫做附着,而 FBO 中的附着点类型有:颜色附着、深度附着和模板附着。这些附着点指向的缓冲区通常包含在某些对象里,我们把这些对象叫做附件,附件的类型有:纹理(Texture)或渲染缓冲区对象(Render Buffer Object,RBO)。

2024-10-28

Android OpenGL 图片Texture渲染render 演示demo

Android OpenGL 图片Texture渲染render 演示demo 1、开发语言:Kotlin 2、开发环境:Android studio 3、图片纹理渲染简介 OpenGL图片纹理渲染‌是指在3D图形渲染过程中,将2D图片(纹理)映射到3D物体表面的过程。这个过程主要通过以下几个步骤实现: ‌创建纹理对象‌:通过调用OpenGL的接口,创建一个纹理对象。纹理对象是一个用于存储纹理数据的缓冲区‌1。 ‌加载纹理数据‌:将图像数据加载到纹理对象中。在Android中,可以使用Bitmap类加载图片,并将其转换为OpenGL的纹理数据‌1。 ‌设置纹理参数‌:为纹理对象设置一些参数,例如过滤方式、边缘处理等。 ‌纹理映射‌是将2D纹理映射到3D物体上的过程。

2024-10-27

Android OpenGL EBO索引缓冲区对象应用演示demo

Android OpenGL EBO索引缓冲区对象应用演示demo 1、EBO索引缓冲区对 详解:https://blog.youkuaiyun.com/github_27263697/article/details/143058770 2、开发环境:Android studio 3、开发语言:Kotlin 4、EBO索引缓冲区对象——简介 IBO/EBO, Element Buffer Objec,索引缓冲区对象。EBO用于存储顶点的索引数据,允许通过索引引用顶点,避免重复存储相同的顶点数据。 索引缓冲区和顶点缓冲区类似,也是显存上的一段内存,只不过上面的数据用处不同,索引缓冲区故名思义里面的数据是用于索引,主要作用是用于复用顶点缓冲区里的数据。 使用的GL_ELEMENT_ARRAY_BUFFER表示索引缓冲区。 EBO提高了渲染效率,减少了顶点数据的冗余,尤其在渲染复杂网格时,通过索引复用顶点能够显著节省内存。

2024-10-23

Android OpenGL粒子系统演示demo

开发语言Kotlin 开发环境Android studio 粒子系统简介 。粒子是一种基本的图形元素,它们通常被表示为一组点。通过巧妙地组合一些基础的物理效果,我们能够创造出许多令人惊叹的视觉效果。想象一下,我们可以模拟一个水滴从喷泉中喷出,然后优雅地落回地面的场景。同样,我们也能模拟出逼真的下雨效果,或者制作出爆炸和烟花的动画。粒子系统的数学原理相对简单,这使得它们很容易被集成到任何三维场景中。

2024-10-23

Android OpenGL混合(Blend)半透明功能应用演示demo

Android OpenGL混合Blend功能应用演示demo 1、Blend混合半透明功能 详解如下: https://blog.youkuaiyun.com/github_27263697/article/details/141888912 2、开发工具android studio 3、开发语言kotlin 4、混合(Blend)概念 混合是一种常用的技巧,通常可以用来实现半透明。但其实它也是十分灵活的,你可以通过不同的设置得到不同的混合结果,产生一些有趣或者奇怪的图象。 混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。 假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的物体,再绘制红色玻璃。在绘制红色玻璃的时候,利用“混合”功能,把将要绘制上去的红色和原来的绿色进行混合,于是得到一种新的颜色,看上去就好像玻璃是半透明的。

2024-10-23

Android OpenGL VAO顶点数组对象应用演示demo

Android OpenGL VAO顶点数组对象应用演示demo 1、VAO顶点数组对象 详解如下 https://blog.youkuaiyun.com/github_27263697/article/details/143058770?sharetype=blogdetail&sharerId=143058770&sharerefer=PC&sharesource=github_27263697&spm=1011.2480.3001.8118 2、开发语言kotlin 3、开发环境Android studio 4、概念 VAO顶点数组对象。 VAO是OpenGL ES 3.0之后才推出的新特性, 所以在使用VAO前需要确定OpenGL ES的版本是否是3.0之后的版本。 顶点数组对象可以像顶点缓冲对象那样被绑定,任何随后的顶点属性调用都会储存在这个VAO中。这样的好处就是,当配置顶点属性指针时,你只需要将那些调用执行一次,之后再绘制物体的时候只需要绑定相应的VAO就行了。这使在不同顶点数据和属性配置之间切换变得非常简单,只需要绑定不同的VAO就行了.

2024-10-23

Android OpenGL VBO顶点缓冲区对象应用演示demo

Android OpenGL顶点缓冲区对象应用演示demo 1、VBO顶点缓冲区对象 详解如下: https://blog.youkuaiyun.com/github_27263697/article/details/143058770?sharetype=blogdetail&sharerId=143058770&sharerefer=PC&sharesource=github_27263697&spm=1011.2480.3001.8118 2、开发语言kotlin 3、开发环境Android studio 4、VBO顶点缓冲区概念 VBO(Vertex Buffer Object)顶点缓冲对象,是在显卡存储空间(即,GPU内存)中开辟的一块区域,在显卡存储空间中开辟一块区域,用于存放顶点的各类属性信息。如顶点坐标、纹理坐标、顶点颜色等数据。 在渲染时直接从显VBO去取数据而不必与CPU进行数据交换。

2024-10-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除