Skip to content

Commit 7ddae18

Browse files
committed
update
1 parent b82bcd9 commit 7ddae18

File tree

7 files changed

+55
-74
lines changed

7 files changed

+55
-74
lines changed

JavaKnowledge/Git简介.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ Git简介
1919
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个 人 的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
2020
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
2121
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/git_fenbu.jpeg)
22-
dddd
2322

2423
版本库
2524
---

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ Android学习笔记
515515
[237]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/6.OpenGL%20ES%E7%BB%98%E5%88%B6%E7%9F%A9%E5%BD%A2%E5%8F%8A%E5%9C%86%E5%BD%A2.md "6.OpenGL ES绘制矩形及圆形"
516516
[238]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/7.OpenGL%20ES%E7%9D%80%E8%89%B2%E5%99%A8%E8%AF%AD%E8%A8%80GLSL.md "7.OpenGL ES着色器语言GLSL"
517517
[239]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/8.GLES%E7%B1%BB%E5%8F%8AMatrix%E7%B1%BB.md "8.GLES类及Matrix类"
518-
[240]: "https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/9.OpenGL%20ES%E7%BA%B9%E7%90%86.md" "9.OpenGL ES纹理"
518+
[240]: "https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/9.OpenGL%20ES%E7%BA%B9%E7%90%86.md "9.OpenGL ES纹理"
519519
[241]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/10.GLSurfaceView%2BMediaPlayer%E6%92%AD%E6%94%BE%E8%A7%86%E9%A2%91.md " 10.GLSurfaceView+MediaPlayer播放视频"
520520
[242]: https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/11.OpenGL%20ES%E6%BB%A4%E9%95%9C.md "11.OpenGL ES滤镜"
521521
[243]: https://github.com/CharonChui/AndroidNote/tree/master/VideoDevelopment/Danmaku "弹幕"

VideoDevelopment/OpenGL/1.OpenGL简介.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
## 1.OpenGL简介
22

3-
[OpenGL官网]https://www.opengl.org/
3+
[OpenGL官网](https://www.opengl.org/)
44

5-
OpenGL(Open Graphics Library开发图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口。
5+
OpenGL(Open Graphics Library开放图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口。
66

77
OpenGL的前身是硅谷图形功能(SGI)公司为其图形工作站开发的IRIS GL,后来因为IRIS GL的移植性不好,所以在其基础上,开发出了OpenGl。OpenGl一般用于在图形工作站,PC端使用,由于性能各方面原因,在移动端使用OpenGl基本带不动。为此,Khronos公司就为OpenGl提供了一个子集,OpenGl ES(OpenGl for Embedded System)。
88

@@ -11,7 +11,7 @@ OpenGL的前身是硅谷图形功能(SGI)公司为其图形工作站开发的IRI
1111

1212
### OpenGL ES
1313

14-
[OpenGL ES 官网]https://www.khronos.org/opengles/
14+
[OpenGL ES 官网](https://www.khronos.org/opengles/)
1515

1616
OpenGL ES是免费的跨平台的功能完善的2D/3D图形库接口的API,是OpenGL的一个子集,主要针对手机、Pad和游戏主机等嵌入式设备而设计。
1717

@@ -174,7 +174,7 @@ OpenGL是一个仅仅关注图像渲染的图像接口库,在渲染过程中
174174

175175
EGL为双缓冲工作模式,既有一个Back Frame Buffer和一个Front Frame Buffer,正常绘制的目标都是Back Frame Buffer,绘制完成后再调用eglSwapBuffer API,将绘制完毕的FrameBuffer交换到Front Frame Buffer并显示出来。
176176

177-
要在Android平台实现OpenGL渲染,需要完成一系列的EGL操作,主要为下面几步:
177+
要在Android平台实现OpenGL渲染,需要完成一系列的EGL操作,主要为下面几步(后面分析GLSurfaceView源码的时候也是这样来实现的):
178178

179179
1. 获取显示设备(EGL Display)
180180

VideoDevelopment/OpenGL/2.GLSurfaceView简介.md

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
Android 通过其框架 API 和原生开发套件 (NDK) 来支持 OpenGL。
44

5-
Android 框架中有如下两个基本类,用于通过 OpenGL ES API 来创建和操控图形:`GLSurfaceView``GLSurfaceView.Renderer`。也就是说我们想在Android中使用OpenGL ES的最简单的方法就是将我们要显示的图像渲染到GLSurfaceView上,但它只是一个展示类,至于怎么渲染到上面我们就要自己去实现GLSurfaceView.Renderer来生成我们自己的渲染器从而完成渲染操作。
5+
Android 框架中有如下两个基本类,用于通过 OpenGL ES API 来创建和操控图形:`GLSurfaceView``GLSurfaceView.Renderer`。也就是说我们想在Android中使用OpenGL ES的最简单的方法就是将我们要显示的图像渲染到GLSurfaceView上,但它只是一个展示类,至于怎么渲染到上面我们就要自己去实现GLSurfaceView.Renderer来生成我们自己的渲染器从而完成渲染操作,这里是不是感觉Android框架提供的类太少了,怎么没有GLTextureView,后面在分析完GLSurfaceView的源码后,可以直接拷贝自己去实现GLTextureView,[有关SurfaceView与TextureView的区别可以看这篇文章](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/SurfaceView%E4%B8%8ETextureView.md)
66

7-
######## GLSurfaceView(使用OpenGL绘制的图形的视图容器)
7+
### GLSurfaceView(使用OpenGL绘制的图形的视图容器)
88

99
SurfaceView在View的基础上创建了独立的Surface,拥有SurfaceHolder来管理它的Surface,渲染的工作可以不再主线程中做。可以通过SurfaceHolder得到Canvas,在单独的线程中,利用Canvas绘制需要显示的内容,然后更新到Surface上。
1010

@@ -16,39 +16,28 @@ GLSurfaceView继承自SurfaceView,它主要是在SurfaceView的基础上加入
1616
- onPause:暂停渲染,最好在Activity、Fragment的onPause方法内调用,减少不必要的性能开销,避免不必要的崩溃
1717
- onResume:恢复渲染
1818
- setRender:设置渲染器
19-
- setRenderMode:设置渲染模式
19+
- setRenderMode:设置渲染模式,有连续渲染和按需渲染两种模式,按需渲染需要调用下面的requestRender方法才会去渲染
2020
- requestRender:请求渲染,请求异步线程进行渲染,调用后不会立即进行渲染。渲染会回调到Renderer接口的onDrawFrame()方法
2121
- queueEvent:插入一个Runnable任务到后台渲染线程上执行。相应的,渲染线程中可以通过Activity的runOnUIThread的方法来传递事件给主线程去执行
2222

2323
#### GLSurfaceView.Renderer(可控制该视图中绘制的图形)
2424

25-
此接口定义了在 `GLSurfaceView` 中绘制图形所需的方法。您必须将此接口的一个实现作为单独的类提供,并使用 `GLSurfaceView.setRenderer()` 将其附加到您的 `GLSurfaceView` 实例
25+
此接口定义了在GLSurfaceView中绘制图形所需的方法。您必须将此接口的一个实现作为单独的类提供,并使用GLSurfaceView.setRenderer()将其附加到您的GLSurfaceView实例
2626

27-
`GLSurfaceView.Renderer` 接口要求您实现以下方法:
27+
GLSurfaceView.Renderer接口要求您实现以下方法:
28+
- onSurfaceCreated():系统会在创建GLSurface时调用一次此方法。使用此方法可执行仅需发生一次的操作,例如设置OpenGL环境参数或初始化OpenGL图形对象。
29+
- onDrawFrame():完成绘制工作,每一帧图像的渲染都要在这里完成,系统会在每次重新绘制GLSurfaceView时调用此方法。请将此方法作为绘制(和重新绘制)图形对象的主要执行点。
30+
- onSurfaceChanged():系统会在GLSurfaceView几何图形发生变化(包括GLSurfaceView大小发生变化或设备屏幕方向发生变化)时调用此方法。例如,系统会在设备屏幕方向由纵向变为横向时调用此方法。使用此方法可响应GLSurfaceView容器中的更改。
2831

29-
- `onSurfaceCreated()`:系统会在创建 `GLSurfaceView` 时调用一次此方法。使用此方法可执行仅需发生一次的操作,例如设置 OpenGL 环境参数或初始化 OpenGL 图形对象。
30-
- `onDrawFrame()`:完成绘制工作,每一帧图像的渲染都要在这里完成,系统会在每次重新绘制 `GLSurfaceView` 时调用此方法。请将此方法作为绘制(和重新绘制)图形对象的主要执行点。
31-
- `onSurfaceChanged()`:系统会在 `GLSurfaceView` 几何图形发生变化(包括 `GLSurfaceView` 大小发生变化或设备屏幕方向发生变化)时调用此方法。例如,系统会在设备屏幕方向由纵向变为横向时调用此方法。使用此方法可响应 `GLSurfaceView` 容器中的更改。
32+
使用GLSurfaceView和GLSurfaceView.Renderer为OpenGL ES建立容器视图后,您便可以开始使用以下类调用 OpenGL API:
3233

33-
34-
35-
使用 `GLSurfaceView``GLSurfaceView.Renderer` 为 OpenGL ES 建立容器视图后,您便可以开始使用以下类调用 OpenGL API:
36-
37-
OpenGL ES 3.0/3.1 API 软件包
38-
39-
-
40-
android.opengl: 此软件包提供了 OpenGL ES 3.0/3.1 类的接口。
41-
版本 3.0 从 Android 4.3(API 级别 18)开始可用。
42-
版本 3.1 从 Android 5.0(API 级别 21)开始可用。
43-
34+
OpenGL ES 3.0/3.1 API 软件包:
35+
- android.opengl: 此软件包提供了 OpenGL ES 3.0/3.1 类的接口。
4436
- `GLES30`
4537
- `GLES31`
4638
- `GLES31Ext` ([Android Extension Pack](https://developer.android.google.cn/guide/topics/graphics/opengl#aep))
4739

48-
49-
50-
[SurfaceView与TextureView](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/SurfaceView%E4%B8%8ETextureView.md)
51-
40+
### GLSurfaceView类
5241
```java
5342
package android.opengl;
5443
/**
@@ -60,13 +49,9 @@ package android.opengl;
6049

6150
```
6251

63-
GPU加速:GLSurfaceView的效率是SurfaceView的30倍以上,SurfaceView使用画布进行绘制,GLSurfaceView利用GPU加速提高了绘制效率。
64-
View的绘制onDraw(Canvas canvas)使用Skia渲染引擎渲染,而GLSurfaceView的渲染器Renderer的onDrawFrame(GL10 gl)使用opengl绘制引擎进行渲染。
65-
66-
52+
GPU加速:GLSurfaceView的效率是SurfaceView的30倍以上,SurfaceView使用画布进行绘制,GLSurfaceView利用GPU加速提高了绘制效率。View的绘制onDraw(Canvas canvas)使用Skia渲染引擎渲染,而GLSurfaceView的渲染器Renderer的onDrawFrame(GL10 gl)使用OpenGL绘制引擎进行渲染。
6753

6854
GLSurfaceView的特性:
69-
7055
- 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。
7156
- 管理一个EGL Display,它能让OpenGL把内容渲染到surface上
7257
- 用户自定义渲染器render
@@ -82,13 +67,13 @@ GLSurfaceView的特性:
8267

8368
首选现在AndroidManifest.xml文件中声明使用OpenGL ES的版本:
8469

85-
```
70+
```xml
8671
<uses-feature android:glEsVersion="0x00030000" android:required="true" />
8772
```
8873

8974

9075

91-
```
76+
```java
9277
public class MainActivity extends AppCompatActivity {
9378
private GLSurfaceView mGlSurfaceView;
9479

@@ -140,7 +125,7 @@ Render接口重写的三个方法中调用了GLES31的API方法:
140125

141126
#### RenderMode
142127

143-
GLSurfaceView默认采用的是RENDERMODE_CONTINUOUSLY连续渲染的方式,刷新的帧率是60FPS,16ms就重绘一次,可以通过mGLView.setRenderMode()更改其渲染方式为RENDERMODE_WHEN_DIRTY,表示被动渲染,在surfaceCreate的时候会绘制一次,之后只有在调用requestRender或者onResume等方法主动请求重绘时才会进行渲染,如果你的界面不需要频繁的刷新最好使用RENDERMODE_WHEN_DIRTY,这样可以降低CPU和GPU的活动。
128+
GLSurfaceView默认采用的是RENDERMODE_CONTINUOUSLY连续渲染的方式,刷新的帧率是60FPS,16ms就重绘一次,可以通过mGLView.setRenderMode()更改其渲染方式为RENDERMODE_WHEN_DIRTY,表示按需渲染,在surfaceCreate的时候会绘制一次,之后只有在调用requestRender或者onResume等方法主动请求重绘时才会进行渲染,如果你的界面不需要频繁的刷新最好使用RENDERMODE_WHEN_DIRTY,这样可以降低CPU和GPU的活动。
144129

145130
#### 状态处理
146131

VideoDevelopment/OpenGL/3.GLSurfaceView源码解析.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,38 +8,38 @@
88

99
```java
1010
public interface Renderer {
11-
// surface创建的回调
11+
// surface创建的回调
1212
void onSurfaceCreated(GL10 gl, EGLConfig config);
13-
// surface大小改变的回调
13+
// surface大小改变的回调
1414
void onSurfaceChanged(GL10 gl, int width, int height);
15-
// 开始绘制每一帧的回调
15+
// 开始绘制每一帧的回调
1616
void onDrawFrame(GL10 gl);
1717
}
1818
```
1919

2020
- setRenderer()方法
2121

2222
```java
23-
public void setRenderer(Renderer renderer) {
24-
// 保证setRenderer方法只能被调用一次
25-
checkRenderThreadState();
26-
if (mEGLConfigChooser == null) {
27-
// 设置EGLConfgi,如果不设置就用默认的一个RGB_888的Surface选择器
28-
mEGLConfigChooser = new SimpleEGLConfigChooser(true);
29-
}
30-
if (mEGLContextFactory == null) {
31-
// 设置EGLContext工厂,如果不设置就用默认的EGLContext的工厂类,用他来创建EGLContext
32-
mEGLContextFactory = new DefaultContextFactory();
33-
}
34-
if (mEGLWindowSurfaceFactory == null) {
35-
// 设置EGLSurface工厂,如果不设置就用默认的EGLSurface的工厂类,我们可以通过这个方法来设置让图像渲染到其他地方的surface上,例如textureview上
36-
mEGLWindowSurfaceFactory = new DefaultWindowSurfaceFactory();
37-
}
38-
mRenderer = renderer;
39-
// 创建并开启GLThread,GL线程
40-
mGLThread = new GLThread(mThisWeakRef);
41-
mGLThread.start();
42-
}
23+
public void setRenderer(Renderer renderer) {
24+
// 保证setRenderer方法只能被调用一次
25+
checkRenderThreadState();
26+
if (mEGLConfigChooser == null) {
27+
// 设置EGLConfgi,如果不设置就用默认的一个RGB_888的Surface选择器
28+
mEGLConfigChooser = new SimpleEGLConfigChooser(true);
29+
}
30+
if (mEGLContextFactory == null) {
31+
// 设置EGLContext工厂,如果不设置就用默认的EGLContext的工厂类,用他来创建EGLContext
32+
mEGLContextFactory = new DefaultContextFactory();
33+
}
34+
if (mEGLWindowSurfaceFactory == null) {
35+
// 设置EGLSurface工厂,如果不设置就用默认的EGLSurface的工厂类,我们可以通过这个方法来设置让图像渲染到其他地方的surface上,例如textureview上
36+
mEGLWindowSurfaceFactory = new DefaultWindowSurfaceFactory();
37+
}
38+
mRenderer = renderer;
39+
// 创建并开启GLThread,GL线程
40+
mGLThread = new GLThread(mThisWeakRef);
41+
mGLThread.start();
42+
}
4343
```
4444

4545
- 接下来看一下GLThread的线程的实现,GLThread是GLSurfaceView自带的一个渲染线程,同步的,不会阻塞线程,主要用来执行OpenGL的绘制工作:
@@ -50,7 +50,7 @@ public interface Renderer {
5050
super();
5151
mWidth = 0;
5252
mHeight = 0;
53-
// 主动渲染模式下是true,如果是被动渲染模式就为false,然后通过requesetRender()方法来修改它的值
53+
// 连续渲染模式下是true,如果是按需渲染模式就为false,然后通过requesetRender()方法来修改它的值
5454
mRequestRender = true;
5555
// 默认的渲染模式
5656
mRenderMode = RENDERMODE_CONTINUOUSLY;
@@ -691,7 +691,7 @@ public interface Renderer {
691691

692692

693693

694-
[上一篇: 2.GLSurfaceView简介](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/2.GLSurfaceView%E7%AE%80%E4%BB%8B.md)
694+
[上一篇: 2.GLSurfaceView简介](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/2.GLSurfaceView%E7%AE%80%E4%BB%8B.md)
695695
[下一篇: 4.GLTextureView实现](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/4.GLTextureView%E5%AE%9E%E7%8E%B0.md)
696696

697697
---

VideoDevelopment/OpenGL/4.GLTextureView实现.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
### 4.GLTextureView
1+
### 4.GLTextureView实现
22

33
系统提供了GLSurfaceView,确没有提供GLTextureView,但是我们目前的项目灰常复杂庞大,我不想去封一层接口,然后动态去选择使用GLSurfaceView(实现一些纹理效果)或者TextureView(无OpenGL效果)来播放视频。我只想在目前的基础上去扩展,我想去实现一个GLTextureView。上面分析完GLSurfaceView的源码后我们也可以自己去实现GLTextureView的功能了。具体的实现就是和GLSurfaceView的源码一模一样。
44

@@ -1978,7 +1978,7 @@ public class GLTextureView extends TextureView implements TextureView.SurfaceTex
19781978

19791979

19801980

1981-
[上一篇: 3.GLSurfaceView源码解析](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/3.GLSurfaceView%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90.md)
1981+
[上一篇: 3.GLSurfaceView源码解析](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/3.GLSurfaceView%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90.md)
19821982
[下一篇: 5.OpenGL ES绘制三角形](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/5.OpenGL%20ES%E7%BB%98%E5%88%B6%E4%B8%89%E8%A7%92%E5%BD%A2.md)
19831983

19841984
---

0 commit comments

Comments
 (0)