Skip to content

Commit

Permalink
update opengl part
Browse files Browse the repository at this point in the history
  • Loading branch information
CharonChui committed May 8, 2024
1 parent 6d20d95 commit 30c5e78
Show file tree
Hide file tree
Showing 14 changed files with 83 additions and 92 deletions.
4 changes: 2 additions & 2 deletions VideoDevelopment/OpenGL/1.OpenGL简介.md
Original file line number Diff line number Diff line change
Expand Up @@ -645,9 +645,9 @@ Pbuffer最常用于生成纹理贴图。如果你想要做的是渲染到一个



---


[下一篇: 2.GLSurfaceView简介](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/2.GLSurfaceView%E7%AE%80%E4%BB%8B.md)
- [下一篇: 2.GLSurfaceView简介](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/2.GLSurfaceView%E7%AE%80%E4%BB%8B.md)

---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -325,9 +325,10 @@ public class VideoPlayerRender extends BaseGLSurfaceViewRenderer {



---
- [上一篇: 9.OpenGL ES纹理](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/9.OpenGL%20ES%E7%BA%B9%E7%90%86.md)

[上一篇: 9.OpenGL ES纹理](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/9.OpenGL%20ES%E7%BA%B9%E7%90%86.md)
[下一篇: 11.OpenGL ES滤镜](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/11.OpenGL%20ES%E6%BB%A4%E9%95%9C.md)
- [下一篇: 11.OpenGL ES滤镜](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/11.OpenGL%20ES%E6%BB%A4%E9%95%9C.md)

---

Expand Down
6 changes: 4 additions & 2 deletions VideoDevelopment/OpenGL/11.OpenGL ES滤镜.md
Original file line number Diff line number Diff line change
Expand Up @@ -401,8 +401,10 @@ public class BaseFilter {



[上一篇: 10.GLSurfaceView+MediaPlayer播放视频](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)
[下一篇: 12.FBO](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/12.FBO.md)
---
- [上一篇: 10.GLSurfaceView+MediaPlayer播放视频](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)

- [下一篇: 12.FBO](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/12.FBO.md)

---

Expand Down
5 changes: 3 additions & 2 deletions VideoDevelopment/OpenGL/12.FBO.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ Android OpenGL ES开发中,一般使用GLSurfaceView将绘制结果显示到



---
- [上一篇: 11.OpenGL ES滤镜](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/11.OpenGL%20ES%E6%BB%A4%E9%95%9C.md)

[上一篇: 11.OpenGL ES滤镜](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/11.OpenGL%20ES%E6%BB%A4%E9%95%9C.md)
[下一篇: 13.LUT滤镜](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/13.LUT%E6%BB%A4%E9%95%9C.md)
- [下一篇: 13.LUT滤镜](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/13.LUT%E6%BB%A4%E9%95%9C.md)

---

Expand Down
106 changes: 41 additions & 65 deletions VideoDevelopment/OpenGL/13.LUT滤镜.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ LUT从查找方式上可以分为1D LUT和3D LUT:

### 映射示例

以一个具体的颜色Color(r=30.0, g=30.0, b=25.4)为例子来说明是如何通过LUT来做映射的。

#### 1.1 寻找B值的两个格子

Expand All @@ -91,18 +90,20 @@ B值对应的是0 ~ 63,共64个格子,在计算时,并不一定会是一

- 首先是对原图进行像素采样

```glsl`
vec4 textureColor = texture2D(vTexture, v_TextureCoord);
```glsl
vec4 textureColor = texture(s_texture, v_texCoord);
```

textureColor.b是一个0 - 1之间的浮点数,乘以63用来确定B分量所在的格子.
textureColor.b是一个0 - 1之间的浮点数,乘以63用来确定B分量所在的格子.
因为会出现浮点误差,所以才需要取两个B分量,也就是下一步的取与B分量值最接近的2个小方格的坐标,最后根据小数点进行插值运算。


- 第一个小格子:

```python
float blueColor = textureColor.b * 63.0;
vec4 color = texture(s_texture, v_texCoord);
float blueColor = color.b * 63.0;

vec2 quad1;
// blueColor = 25.4, 第3行的第1个小格子
// floor:向下取整
Expand All @@ -120,7 +121,9 @@ quad2.y = floor(ceil(blueColor) / 8.0);
quad2.x = ceil(blueColor) - (quad2.y * 8.0);
```

##### 确定每个格子对应的R G值
##### 确定每个格子内具体点对应的色值

通过R和G分量的值确定小方格内目标映射的RGB组合的坐标,然后归一化,转化为纹理坐标。

每个B格子代表的纹理坐标长度是 1/8 = 0.125
63 * textureColor.r是将当前实际像素的r值映射到0 ~ 63,再除以512是转化为纹理坐标中实际的点,LUT图的分辨率为`512*512`
Expand All @@ -130,16 +133,15 @@ quad2.x = ceil(blueColor) - (quad2.y * 8.0);
```glsl
vec2 texPos1;
texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);
texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g);
texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);
texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);
vec2 texPos2;
texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);
texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g);
texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);
texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);
```

- 上面texPos1.x,texPos1.y代表的是在0-1的纹理坐标中改点(texPos1)的具体坐标。
- 上面texPos1.x,texPos1.y代表的是在0-1的纹理坐标中该点(texPos1)的具体坐标。
- `(quad1.x * 0.125)`指的是在纹理坐标中的左上角的归一化坐标
- quad1.x代表当前格子在`8*8`的格子中横坐标的第几个,这个`8*8`的格子构成了0-1的纹理空间,所以一个格子代表的纹理坐标长度就是 1/8 = 0.125
- 所以第几个格子就代表了具有几个0.125这样的纹理长度
Expand Down Expand Up @@ -169,9 +171,9 @@ texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.

##### 通过纹理坐标获取两个新的颜色

```python
vec4 newColor1 = texture2D(u_LookupTable, texPos1);
vec4 newColor2 = texture2D(u_LookupTable, texPos2);
```glsl
vec4 newColor1 = texture(textureLUT, texPos1);
vec4 newColor2 = texture(textureLUT, texPos2);
```

##### 然后根据蓝色值小数部分作为权重做线性混合,获取最终的颜色输出
Expand All @@ -182,71 +184,56 @@ vec4 newColor2 = texture2D(u_LookupTable, texPos2);
// 使用mix方法对2个边界像素值进行插值混合
// 根据浮点数到整点的距离来计算其对应的颜色值,fract函数是指小数部分。
vec4 newColor = mix(newColor1, newColor2, fract(blueColor));
// 将原图与映射后的图进行插值混合
// 这次的插值混合是实现我们常见的滤镜调节功能,adjust调节的范围是(0-1),取0时完全使用原图,取1时完全使用映射后的滤镜图
gl_FragColor = mix(textureColor, vec4(newColor.rgb, textureColor.w), adjust);
```


完整的顶点着色器:

```python
attribute vec4 a_Position;
attribute vec4 a_TextureCoordinate;

varying vec2 vTextureUnitCoordinate;

void main() {
gl_Position = a_Position;
vTextureUnitCoordinate = a_TextureCoordinate.xy;
}
```

片元着色器代码:

```python
```glsl
#version 300 es
precision mediump float;
uniform sampler2D u_TextureSampler;
uniform sampler2D u_LookupTable;
uniform float u_Intensity;
in vec2 v_texCoord;
out vec4 outColor;
uniform sampler2D s_texture;
uniform sampler2D textureLUT;
varying vec2 vTextureUnitCoordinate;
//查找表滤镜
vec4 lookupTable(vec4 color){
float blueColor = color.b * 63.0;
void main() {
vec4 textureColor = texture2D(u_TextureSampler, vTextureUnitCoordinate);
float blueColor = textureColor.b * 63.0;
vec2 quad1;
quad1.y = floor(floor(blueColor) / 8.0);
quad1.x = floor(blueColor) - (quad1.y * 8.0);

vec2 quad2;
quad2.y = floor(ceil(blueColor) / 8.0);
quad2.x = ceil(blueColor) - (quad2.y * 8.0);
vec2 texPos1;
texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);
texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g);

texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);
texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);
vec2 texPos2;
texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);
texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g);

vec4 newColor1 = texture2D(u_LookupTable, texPos1);
vec4 newColor2 = texture2D(u_LookupTable, texPos2);

texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);
texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);
vec4 newColor1 = texture(textureLUT, texPos1);
vec4 newColor2 = texture(textureLUT, texPos2);
vec4 newColor = mix(newColor1, newColor2, fract(blueColor));
gl_FragColor = mix(textureColor, vec4(newColor.rgb, textureColor.w), u_Intensity);
return vec4(newColor.rgb, color.w);
}
```

void main(){
vec4 tmpColor = texture(s_texture, v_texCoord);
outColor = lookupTable(tmpColor);
}
```

[上一篇: 12.FBO](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/12.FBO.md)
[下一篇: 14.实例化](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/14.%E5%AE%9E%E4%BE%8B%E5%8C%96.md)
---

- [12.FBO](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/12.FBO.md)
- [14.实例化](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/14.%E5%AE%9E%E4%BE%8B%E5%8C%96.md)

---

Expand All @@ -263,17 +250,6 @@ void main() {

















Expand Down
3 changes: 2 additions & 1 deletion VideoDevelopment/OpenGL/14.实例化.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@



[上一篇: 10.GLSurfaceView+MediaPlayer播放视频](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)
---
[上一篇: 13.LUT滤镜](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/13.LUT%E6%BB%A4%E9%95%9C.md)

---

Expand Down
6 changes: 4 additions & 2 deletions VideoDevelopment/OpenGL/2.GLSurfaceView简介.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,11 @@ SurfaceTexture对象可以在任何线程上创建。
updateTexImage()只能在包含纹理对象的OpenGL ES上下文的线程上调用。 在任意线程上调用frame-available回调函数,不与updateTexImage()在同一线程上出现。


---

[上一篇: 1.OpenGL简介](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/1.OpenGL%E7%AE%80%E4%BB%8B.md)
[下一篇: 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)
- [上一篇: 1.OpenGL简介](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/1.OpenGL%E7%AE%80%E4%BB%8B.md)

- [下一篇: 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)

---

Expand Down
6 changes: 4 additions & 2 deletions VideoDevelopment/OpenGL/3.GLSurfaceView源码解析.md
Original file line number Diff line number Diff line change
Expand Up @@ -689,9 +689,11 @@ public void setRenderer(Renderer renderer) {



---

- [上一篇: 2.GLSurfaceView简介](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/2.GLSurfaceView%E7%AE%80%E4%BB%8B.md)

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

---

Expand Down
7 changes: 4 additions & 3 deletions VideoDevelopment/OpenGL/4.GLTextureView实现.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
### 4.GLTextureView实现
## 4.GLTextureView实现

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

Expand Down Expand Up @@ -1977,9 +1977,10 @@ public class GLTextureView extends TextureView implements TextureView.SurfaceTex



---
- [上一篇: 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)

[上一篇: 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)
[下一篇: 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)
- [下一篇: 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)

---

Expand Down
6 changes: 3 additions & 3 deletions VideoDevelopment/OpenGL/5.OpenGL ES绘制三角形.md
Original file line number Diff line number Diff line change
Expand Up @@ -1171,10 +1171,10 @@ public class IsoTriangleRender implements GLTextureView.Renderer {



---


[上一篇: 4.GLTextureView实现](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/4.GLTextureView%E5%AE%9E%E7%8E%B0.md)
[下一篇: 6.OpenGL ES绘制矩形及圆形](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)
- [上一篇: 4.GLTextureView实现](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/4.GLTextureView%E5%AE%9E%E7%8E%B0.md)
- [下一篇: 6.OpenGL ES绘制矩形及圆形](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)

---

Expand Down
5 changes: 3 additions & 2 deletions VideoDevelopment/OpenGL/6.OpenGL ES绘制矩形及圆形.md
Original file line number Diff line number Diff line change
Expand Up @@ -522,9 +522,10 @@ public class CircleRender extends BaseGLSurfaceViewRenderer {



---

[上一篇: 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)
[下一篇: 7.OpenGL ES着色器语言GLSL](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)
- [上一篇: 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)
- [下一篇: 7.OpenGL ES着色器语言GLSL](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)

---

Expand Down
5 changes: 3 additions & 2 deletions VideoDevelopment/OpenGL/7.OpenGL ES着色器语言GLSL.md
Original file line number Diff line number Diff line change
Expand Up @@ -513,9 +513,10 @@ void main(void)



---

[上一篇: 6.OpenGL ES绘制矩形及圆形](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)
[下一篇: 8.GLES类及Matrix类](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/8.GLES%E7%B1%BB%E5%8F%8AMatrix%E7%B1%BB.md)
- [上一篇: 6.OpenGL ES绘制矩形及圆形](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)
- [下一篇: 8.GLES类及Matrix类](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/8.GLES%E7%B1%BB%E5%8F%8AMatrix%E7%B1%BB.md)

---

Expand Down
6 changes: 4 additions & 2 deletions VideoDevelopment/OpenGL/8.GLES类及Matrix类.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,8 +253,10 @@ OpenGL有一个固定在原点(0,0,0)并朝向z轴负方向的相机,如下图



[上一篇: 7.OpenGL ES着色器语言GLSL](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)
[下一篇: 9.OpenGL ES纹理](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/9.OpenGL%20ES%E7%BA%B9%E7%90%86.md)
---

- [上一篇: 7.OpenGL ES着色器语言GLSL](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)
- [下一篇: 9.OpenGL ES纹理](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/9.OpenGL%20ES%E7%BA%B9%E7%90%86.md)

---

Expand Down
5 changes: 3 additions & 2 deletions VideoDevelopment/OpenGL/9.OpenGL ES纹理.md
Original file line number Diff line number Diff line change
Expand Up @@ -571,9 +571,10 @@ void main() {
顶点着色器允许一次操作一个顶点,而片段着色器一次可以操作一个片段(实际上是一个像素),但几何着色器却可以一次操作一个图元。


---
- [上一篇: 8.GLES类及Matrix类](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/8.GLES%E7%B1%BB%E5%8F%8AMatrix%E7%B1%BB.md)

[上一篇: 8.GLES类及Matrix类](https://github.com/CharonChui/AndroidNote/blob/master/VideoDevelopment/OpenGL/8.GLES%E7%B1%BB%E5%8F%8AMatrix%E7%B1%BB.md)
[下一篇: 10.GLSurfaceView+MediaPlayer播放视频](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播放视频](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)

---

Expand Down

0 comments on commit 30c5e78

Please sign in to comment.