精通安卓性能优化-第八章(四)

helloOpenGLES2.0 在GLSurfaceView上使用OpenGL ES绘制一个简单的三角形和正方形,初步介绍OpenGL ES的使用方法 立即下载

Manifest

OpenGL应用的manifest需要指定两件事:
(1) 需要设备支持哪个OpenGL版本
(2) 应用支持哪种材质压缩格式
Listing 8-16给出了如何指定设备支持OpenGL 2.0和应用支持两种压缩格式:ETC1和PVRTC。
Listing 8-16 Manifest和OpenGL

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.apress.proandroid.opengl"
    android:versionCode="1"
    android:versionName="1.0" >
    
    <uses-sdk android:minSdkVersion="8" />
    
    <uses-feature android:glEsVersion="0x00020000" />
    
    <support-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    <support-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    
    ...
    
</manifest>

NOTE: OpenGL ES的版本是16.16的数,所以0x0002000指OpenGL ES 2.0。

当设备连接到市场的时候,安卓市场将使用这个信息去过滤应用。比如,仅支持OpenGL 1.1的设备不会看到需要OpenGL ES 2.0的应用。相似的,仅支持ETC1 texture压缩的设备不会看到仅支持PVRTC和ATC texture的应用。
如果你的应用不在manifest中指定任何压缩格式,安卓市场不会基于压缩格式做任何过滤(假设你的应用支持所有的压缩格式)。这将导致用户安装你的应用,仅仅发现应用不能工作,潜在的导致坏的评论。

Mipmaps

3D场景的对象经常作为背景出现,不占用屏幕上很多空间。比如,在一个屏幕上仅占10*10像素的对象使用256*256的材质是资源的浪费(内存,带宽)。Mipmaps通过提供多个级别的材质细节解决了这个问题,Figure 8-6所示。

Figure 8-6 从256*256到1*1的Mipmaps


一个mipmap集合比单独的原始图片多使用33%的内存,它不仅可以提升性能,同样还有视觉质量。
就像你在Figure 8-6看到的,每个图片是原始图片的一个版本,但是在细节上级别不同。显然,在1*1版本的材质上很难看到花朵。
AMR Mali GPU Texture Compression Tool可以为你产生mipmaps。不是单独产生一个.pkm文件,工具将产生所有级别的细节直到1*1,每个都将创建一个.pkm文件。你的应用需要依次加载这些不同级别的细节,比如通过调用ETC1Util.loadTexture()或者GLES20.glTexImage2D()。
因为不是所有的设备都相同,他们可能不都需要同样级别的细节。比如,分辨率1920*1080(HD分辨率)的Google TV设备通常比Samsung Nexus S(800*480)需要更高的细节级别。结果,当256*256 材质可能被Google TV使用,但是Nexus S可能不会使用,而是使用128*128。

NOTE:不要简单的依赖设备的分辨率去决定你的应用做什么。比如,Sony Google TV电视(1920*1080分辨率)在400MHz使用PowerVR SGX535,没有在新的Samsung Galaxy Nexus(1280*720分辨率)上发现的384MHz的PowerVR SGX540强大。

材质如何被渲染同样依赖于使用glTexParameter()方法设置的材质参数(比如glTexParameteri())。比如,你可以通过调用glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,param)设置minifying功能,param是如下的值之一:
(1) GL_NEAREST
(2) GL_LINEAR
(3) GL_NEAREST_MIPMAP_NEAREST
(4) GL_NEAREST_MIPMAP_LINEAR
(5) GL_LINEAR_MIPMAP_NEAREST
(6) GL_LINEAR_MIPMAP_LINEAR
GL_NEAREST通常比GL_LINEAR要快,GL_LINEAR比其他四个要快,更好的视觉质量可以通过更慢的函数达到。应用选择什么样的参数可能依赖用户的设置(如果你提供了用户配置渲染方式的入口),然而很多用户没有耐心去尝试不同的设置,找到在他们的设置工作很好的组合。作为结论,你的应用需要尽力决定合适的OpenGL配置。
OpenGL许多事情可以配置,一些默认值倾向于视觉质量而不是性能,所以你要熟悉你的应用可以配置什么。比如,考虑到材质,http://www.khronos.org/opengles/sdk/docs/man/的文档给了你可以设置的所有不同参数。

Multiple APKs

因为你可能希望支持多个材质压缩格式(尽量为每种设备优化),mipmaps需要更多的空间,应用的大小可能会超出安卓市场定义的限制(现在是50M)
如果这发生了,你有三个选择:
(1) 减少应用的大小,比如只支持ETC1材质压缩
(2) 在应用安装完成后从远程服务器下载材质
(3) 产生多个APK,每个有自己的材质集
安卓市场允许你为应用发布不同的APK,每个针对不同的配置。比如,你可能有一个仅支持ETC1材质的APK,另外有个仅支持PVRTC材质的APK(基于Android设备针对PowerVR的优化APK)。这些APK共享同样的安卓市场列表,安卓市场会为每个设备选择合适的APK。用户不需要担心下载和安装的APK是否正确,因为选择是自动并且透明的。


NOTE:不是所有的Android应用市场支持这个功能,所以如果你在多个商店发布你的应用,尽可能使用支持所有设备的单个APK。


当然,材质可能不是你发布多个APK的单独原因。比如,你可能会为老一些的设备发布小一些的APK,为新的设备发布带有更多功能的更大的APK。尽管可以发布多个APK,它使得你的维护和发布过程更加复杂,推荐你如果可能的话尽量尝试单个APK。

Shaders

OpenGL ES 2.0支持OpenGL ES Shading Language,替换OpenGL ES 1.x固定的转换函数和fragment管道。基于C,这门语言允许你通过自己的向量和fragment shaders控制OpenGL管道。
向任何的C工程,shaders可以从非常简单到及其复杂。没有你可以遵循的规则,需要尝试尽可能减少你的shader的复杂度,因为这会显著影响到性能。

场景复杂度

显然,复杂的场景比渲染简单的场景需要更多的时间。因此提升帧率的一个简单的方式在维持可接受的视觉质量下简化要渲染的场景。比如,如果你已经看了材质,远处的对象细节更少,可以被更少的三角形组成。更简单的对象使用更少的内存和带宽。

Culling

尽管GPU的几何很好并且可以决定要渲染什么,你的应用需要尽力去消除视野之外的对象,这样不会为这些对象发送draw命令而是简单的忽略,因为他们是不可见的。
有很多的方法去cull对象,这些方法不在本书的讨论范围之内,差劲的culling可能会导致低于预期的帧率。比如,在camera后面的对象可以被简单的快速消除。


NOTE:你需要开启back face culling,所以背面的对象不会被渲染。

渲染模式

默认OpenGL renderer持续在场景上渲染,而不管什么已经改变。在一些情况下,帧之间的场景可能没有改变,你可能希望显式的告诉renderer仅仅在你需要的时候渲染场景。可以通过改变GLSurfaceView的渲染模式达到这个目标。
你可以通过调用setRenderMode()设置GLSurfaceView的渲染模式,使用如下的值:
(1) RENDERMODE_CONTINUOUSLY
(2) RENDERMODE_WHEN_DIRTY
当渲染模式设置为RENDERMODE_WHEN_DIRTY,当surface被创建的时候或者GLSurfaceView.requestRender()调用的时候renderer将会渲染场景。

电能消耗

现在GPU的一个伟大的品质是他们可以休眠或者至少在非交互的周期的快速慢下来。比如,GPU可以在两帧之间关闭(部分或者全部),如果有一阵无事可做,减少电能消耗因此增加电池使用时间。
一旦你的应用达到了可接受的帧率,你可能仍然希望为了减少电能消耗进一步优化。一帧被渲染的越快,GPU进入idle越快,电池的使用时间越长(用户可以使用你的应用的时间越长)。对某些应用,对OpenGL提升电池使用时间的一个伟大方式是仅当场景变化的时候去渲染帧(就像上面提到的RENDERMODE_WHEN_DIRTY渲染模式)。

Summary

最新的Android设备硬件功能很强大,支持2D和3D的大图。比起两年前一些优化已经不怎么重要,新的挑战在于设备支持越来越高的屏幕分辩率,对OpenGL ES 2.0的普遍支持,和用户更高的期望。本章仅仅涉及OpenGL的皮毛,仅介绍了几个可以简单实现但是可以得到很大效果的技术。幸运的是,学习OpenGL有很多的资源,不管是初级的还是高级的。记得参考GPU提供商的文档(ARM、Imagination Technologyies、NviDia和Qualcomm),因为他们以不同的方式为自己的GPU优化渲染。

18650锂电池充放电测试全流程:从实验室到实际应用的避坑指南 本文详细介绍了18650锂电池充放电测试的全流程,从实验室设备选型到实际应用中的常见问题解决方案。涵盖测试前的准备工作、标准测试流程执行、动态工况测试以及数据深度分析方法,为电池测试工程师和科研人员提供实用的避坑指南。特别针对电压平台异常和温度异常等关键问题,提供了专业的诊断与解决措施。 阅读详情

相关推荐

力软敏捷开发框架源码7.0.6旗舰版 JNPF开发平台3.4.5 企业版 旗舰版

JNPF作为作为一款深受用户喜爱的低代码产品,凭借雄厚的科研技术力量、丰富的软件开发项目经验、严谨的项目开发流程和高质量的售后服务,已成功帮助千家企业完成数字化项目,建立了覆盖不同行业客户和不同发展阶段的软件产品服务体系。

huoooos0的博客 1839

Android GLSurfaceView用法解析

转自:https://blog.youkuaiyun.com/hjj378315764/article/details/79701040 OpenGL和OpenGLES简介 这里先简单介绍下OpenGL和OpenGLES。OpenGL(Open Graphics Library)意为开放图形库,是一个跨平台的图形API,用于指定3D图形处理硬件中的软硬件编程接口。OpenGL一般用于图形工作站...

淡淡的宁静的博客 1万+

Mission Planner连接Autopilot保姆级教程:从USB到无线全搞定

本文提供Mission Planner连接Autopilot的全面指南,涵盖USB直连、无线数传、蓝牙适配等多种连接方案。详细讲解驱动安装、波特率匹配、性能优化等关键步骤,并分享多链路冗余配置与故障转移的高阶技巧,助你快速解决连接问题。

weixin_28455801的博客 376

【我的OpenGL学习进阶之旅】关于OpenGL ES 绘制中使用到的 Android中GLSurfaceView的两种渲染模式

介绍OpenGL ES 绘制中使用到的 Android中GLSurfaceView的两种渲染模式以及使用注意事项

字节卷动 5635

AD21导出gerber文件

文件–>制造输出–>Gerber Files 文件–>制造输出–>Gerber Files 通用、光圈和高级跟第一步一样 3.文件–>制造输出–>NC Drill Files 这个默认就可以了 主要参考视频来自bilibili添加链接描述 此篇博客主要是写给自己好记的,无其他商业用途 ...

新手小杨 1万+

DVWA全级别详细通关教程

dvwa全级别详细通关教程,暴力破解,命令注入,CSRF跨站请求伪造,文件包含,文件上传​,SQL注入,XSS

m0_62063669的博客 1万+

NDK OpenGL渲染画面效果

针对手机、PDA和游戏主机等嵌入式设备而设计的OpenGL API 子集, GLSurfaceView(不仅仅有,SurfaceView的所有功能,还拥有了 OpenGL的处理)。系列之OpenGL渲染画面效果技术实战,本节主要是通过OpenGL Java库(谷歌对OpenGL C++库做了JIN封装,核心实现还是在Native层),实现页面渲染,自定义渲染特效。设置纹理坐标,用来图形上色;3)绘制一帧图像时,回调onDrawFrame()函数,获取纹理对象的图像数据,通过OpenGL渲染到屏幕;

sziitjin的博客 1202

Zemax:初学者的混合模式

光线以序列模式开始,然后接近非序列组件的入口端口。到达入口端口后,光线以非序列模式传播,然后接近出口端口。光线离开出口端口后,我们又回到序列模式。在此博客中,使用混合模式的示例将演示根据您自己的需要复制此工作流程所需的基本设置,以及一些有用的技巧。非序列组件表面类型必须在序列模式和非序列模式下定义。为了定义非序列组件的几何形状,请转到设置->编辑器->非序列,单击非序列编辑器。一旦我们进入非序列组件编辑器:表面 2 上的组件组,找到一个对象类型并进行定义。它能让您兼具序列模式的精确性和非序列模式的灵活性。

jkh920184196的博客 1337

关于android OpenGl ES 渲染方式

OpenGl ES关于渲染方式有以下两种: RENDERMODE_CONTINUOUSLY和RENDERMODE_WHEN_DIRTY。 默认渲染方式为RENDERMODE_CONTINUOUSLY,这两种渲染的含义是: RENDERMODE_CONTINUOUSLY:渲染器会不停地渲染场景, RENDERMODE_WHEN_DIRTY:只有在创建和调用requestRender()时才会

417

海康H304NAS 刷机飞牛

本文旨在分享如何将闲置的海康威视H304 NAS刷入飞牛NAS系统,并利用iStoreOS作为安装媒介。之前因为使用极空间NAS,这台H304闲置已久。最近尝试了飞牛NAS,在虚拟机上安装后挂载极空间的电影资源,体验不错,于是决定重新折腾这台H304。我个人喜欢尝试新系统,之前经常更新H304的固件,但设备总在使用一两年后出现故障,需要联系技术清理日志才能恢复。最后一次设备“变砖”后,连技术人员也联系不上了,自己尝试修复未果,设备就此闲置两三年。

u012985257的博客 2745

工商银行软件开发中心数据安全监测溯源防护体系建设成果及展望

结合业界先进溯源理念和我行管理要求,依托大数据、分布式搜索分析引擎等技术,构建PB级海量数据加工分析和小时级快速核验、检索、溯源手段(如图6所示),支撑6种客户敏感信息关键要素的单一或组合溯源,形成行之有效的数据安全溯源流程,配套落地自动化快速泄露样本真实性核验和灵活高效的溯源能力,通过数据相关属性的自动化分析,实现追踪泄露源头、明确泄露路径的目标,为有效应对数据安全事件,降低和消除风险与不良影响,开展事后追责处置工作提供体系化解决方案。提高数据排查的自动化程度和排查效率,降低人工成本。

银行信息系统应用架构详解 221

android GLSurfaceView渲染模式

今天,简单讲讲  GLSurfaceView的渲染模式。 其实也很简单 OpenGl ES关于渲染方式有以下两种:RENDERMODE_CONTINUOUSLY和RENDERMODE_WHEN_DIRTY。 默认渲染方式为RENDERMODE_CONTINUOUSLY,当设置为RENDERMODE_CONTINUOUSLY时渲染器会不停地渲染场景,当设置为RE

谢岩的博客 1万+

基于LSTM的股票价格预测系统,Django框架,Web的股票预测系统,训练+数据集+源码(无需安装环境版)

股票价格预测是投资领域的一个重点关注课题。由于股票价格受到诸多非线性因素的影响,得到精确的预测结果较为困难。使用 PyCharm 作为代码开发工具,通过下载好的股票金融数据,进行数据预处理,构建 LSTM 网络模型,训练模型并训练出最优模型,输出股票未来收盘价波动的走势,最后在训练好的模型上,设计股票模型应用系统,运行效率较高,对股票预测具有一定的积极意义。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 953

精通安卓性能优化-第八章(三)

OpenGL ES 在现在的Android设备和应用上3D渲染变得越来越重要。成为一个3D渲染专家需要很多的时间,为了使用3D渲染,接下来的部分介绍几个简单实现的技术,以及需要意识到的几个基本的思想。如果想学习更多的Android OpenGL ES,你可以参考"Pro OpenGL ES for Android"。 大多数当前的Android设备支持OpenGL ES 1.1和OpenGL

路漫漫 其修远 1675

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精通安卓性能优化-第八章(一)

第八章 Graphics 你经常需要花费很多时间去定义你的应用的样子。不管是一个使用标准Android控件的e-mail应用或者使用OpenGL ES的游戏,当浏览应用商店比如Android市场或者Amazon应用市场的时候,你的应用看起来什么样子是用户首先会注意到的。 一个看起来很好的应用,但是图片的显示很慢或者更新很慢,很可能不会有很大的点击量。相似的,一个游戏如果渲染质量很高,但是帧率很

路漫漫 其修远 689

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android串口开发入门,金三银四Android面试的一些感受

*其实上面说了这么多,钱是永远赚不完的,在这个知识付费的时代,知识技能提升才是是根本!我作为一名8年的高级工程师,知识技能已经学习的差不多。**在看这篇文章的可能有刚刚入门,刚刚开始工作,或者大佬级人物。像刚刚开始学Android开发小白想要快速提升自己,最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。这么重要的事情说三遍啦!

2401_84407849的博客 1079

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android性能优化问题方案的总结~

虽然总说“英雄不问出处”,但大厂卡学历是默认的“潜规则”。不过最近一个老弟,让我挺振奋的!人家完全靠实力上岸。他就属于死磕型的,是我近2年见过的少有的Android性能优化高手。 要说他也挺聪明,贼会选领域。你出去随便问,10个大牛9个都会说精通性能优化对一名Android开发来说性价比最高! 这不仅是大厂永恒的敲门砖,更是工作中最能突显价值的金字招牌。近几年面试进一步向深、向广。 做了哪些性能优化呢(启动速度、电量、页面、内存…); 如何减少APP启动时间; 内存优化,对于内存泄露就必须得了解; 还比如

248

精通安卓游戏开发(一)

这本书是学习高级 Android 应用开发的实用指南。本书帮助掌握 Android 的核心概念,并在实际项目中快速应用知识。在整本书中,创建了一个应用,并在每一章中不断进化,以便读者可以轻松地跟随并吸收概念。本书分为十二章。前三章专注于应用的设计,解释了设计的基本概念以及 Android 中使用的编程模式。接下来的几章旨在改进应用,访问服务器端以下载要在应用中显示的信息。一旦应用功能完成,它将使用 Material Design 组件和其他第三方库进行改进。

龙哥盟 475

精通安卓性能优化-第八章(二)

复用Layout 和在C/C++中直接#include相似,Android在XML布局中支持标签。简单的使标签包含另外一个XML布局,如Listing 8-7所示。 标签可以为两个目的使用: (1) 你期望多次使用同样的布局 (2) 你的布局有个通用部分,依赖于设备配置(比如,屏幕方向:landscapte或者protrait) Listing 8-7给出了当覆盖某些included的布

路漫漫 其修远 644

针对 Android/安卓系统进阶一对一训练营!

大家好,我是code小生,今天的推文是针对Android系统开发的进阶课程,是付费的,而且不是那种几毛几块的课程,感兴趣可以继续看下去!以下,是正文:安卓入门,主要以学习各种控件的使用方式...

weixin_38754349的博客 427

精通安卓应用开发(一)

本书是学习高级 Android 应用开发的实用指南。本书帮助掌握 Android 的核心概念,并在实际项目中快速应用知识。在整本书中,创建了一个应用,并在每一章中进化,以便读者可以轻松地跟随并吸收概念。本书共分为十二章。前三章主要关注应用的设计,解释了设计的基本概念以及在 Android 中使用的编程模式。接下来的章节旨在改进应用,访问服务器端以下载应用中要显示的信息。应用功能完成后,将使用 Material Design 组件和其他第三方库进行改进。在结束之前,为应用添加了额外服务,如位置服务、分析、崩溃

龙哥盟 445

全网最详Android framework从入门到精通【程序员必看】

Android Framework在Android开发中扮演着至关重要的角色。它提供了丰富的功能和工具,使得开发者能够轻松创建高质量、稳定可靠的Android应用程序。因此,对于Android开发者来说,熟练掌握Android Framework是必不可少的。在这里为大家提供一份《Android framework从入门到精通》,祝大家学完后都能升职加薪。有需要的朋友可以扫描下方二维码,免费获取更多相关学习资料。

Gaga246的博客 8889

安卓插件化开发!美团点评APP在移动网络性能优化的实践,Android篇

写在前面 1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷……尽管很多时候我们自己知道,我不是找不到工作,只是找不到理想中的好工作。但这也不能改变你的空白期正在一天一天变长,不妥协的那份坚定正在一天一天动摇的事实。 朋友推荐给我这份文档,狂刷五遍之后,最近刚刚获得字节跳动等多家公司的offer,今天将这份文档分享给大家,希望正在找工作或准备找工作的朋友都可以获得自己心仪公司的offer。 第一

380

破解Android Framework学习之谜:从困境到精通的进阶之路

在Android开发的广阔天地中,Android Framework无疑是一片既充满机遇又布满挑战的深水区。它不仅是构建应用程序的基础,更是一个优秀开发者能力的试金石。缺乏有效的问题解决方法论实践环境的限制,以及深入理解与应用能力的不足。

yihanss的博客 757

高要求,字节内部“Android面试宝典” ,安卓开发必看的涨薪秘籍

金三银四求职季,面试者源源不断,但很多资深面试官却表示,想招到合适的中高级Android开发,却并不容易。有认识的面试官说,最近的面试中,很多面试者对于应聘都没有做好充足的准备:简历上写着精通,一问就含含糊糊,对于做过的项目也表达不清。很多开发者做了3-5年,一问底层原理、框架,都是答得牛头不对马嘴。 面试官也表示,很多人目前身处一家不错的公司,薪水也不错,待着也舒心。但从公司架构的角度看,随着时间的流逝,一个开发者如果只增加了资历,而没有提升自己的技术深度,那么相比更加年轻的程序员,二者的性价比自然是不言

Android23333的博客 212

Android性能优化常见问题,分享PDF高清版

一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。 第一份笔记:Flutter学习笔记 由于篇幅原因,为了避免影响到大家的阅读体验,在此只以截图展示部分内容。 入门——进阶篇 第一章 为什么 Flutter 是跨平台开发的终极之选? 第二章 在 Windows 上搭建Flutter 开发环境 第三章 编写您的第一个 Flutter App 第四章 Flutter 开发环境搭建和调试 第五章 Dart 语法篇之基础语法(一)

m0_56130999的博客 209
上一篇: 精通安卓性能优化-第八章(三)
北冥_有鱼
博客等级 码龄19年 14粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值