44
55### 纹理
66
7- 在OpenGL中简单理解就是一张图片。
7+ 在OpenGL中简单理解就是一张图片,在学习之前需要明白这几个概念,不然很容易迷糊,不知道为什么要这样去调用api,到底是什么意思.
88
9- - 纹理Id:纹理的直接饮用
9+ - 纹理Id:句柄,纹理的直接引用
1010
11- - 纹理单元:纹理的操作容器,有GL_TEXTURE0、GL_TEXTURE1、GL_TEXTURE2等,纹理单元的数量是有限的,最多16个。所以在最多只能同时操作16个纹理。在切换使用纹理单元的时候,使用glActiveTexture方法。
11+ - 纹理单元:纹理的操作容器,有GL_TEXTURE0、GL_TEXTURE1、GL_TEXTURE2等,纹理单元的数量是有限的,最多16个。所以在最多只能同时操作16个纹理。在切换使用纹理单元的时候,使用glActiveTexture方法。也就是说OpenGL ES中内置了很多个纹理单元,并且是连续的,我们在使用的时候要选择其中一个,一般默认选择第一个(GLES_TEXTURE0),并且如果不选的话OpenGL默认激活的也就是第一个纹理单元。激活纹理单元后需要把它和纹理Id绑定,然后再通过GLES30.glUniform1i()方法传递给着色器中。
1212
1313- 纹理目标:一个纹理单元中包含了多个类型的纹理目标,有GL_TEXTURE_1D、GL_TEXTURE_2D、CUBE_MAP等。本章中,将纹理ID绑定到纹理单元0的GL_TEXTURE_2D纹理目标上,之后对纹理目标的操作都是对纹理Id对应的数据进行操作。
1414
@@ -83,15 +83,15 @@ public class TextureHelper {
8383 Log . w(TAG , " Resource ID " + resourceId + " could not be decoded." );
8484 }
8585 // 加载Bitmap资源失败,删除纹理Id
86- GLES20 . glDeleteTextures(1 , textureObjectIds, 0 );
86+ GLES30 . glDeleteTextures(1 , textureObjectIds, 0 );
8787 return bean;
8888 }
8989 // 2. 将纹理绑定到OpenGL对象上
90- GLES20 . glBindTexture(GLES20. GL_TEXTURE_2D , textureObjectIds[0 ]);
90+ GLES30 . glBindTexture(GLES20. GL_TEXTURE_2D , textureObjectIds[0 ]);
9191
9292 // 3. 设置纹理过滤参数:解决纹理缩放过程中的锯齿问题。若不设置,则会导致纹理为黑色
93- GLES20 . glTexParameteri(GLES20. GL_TEXTURE_2D , GLES20. GL_TEXTURE_MIN_FILTER , GLES20. GL_LINEAR_MIPMAP_LINEAR );
94- GLES20 . glTexParameteri(GLES20. GL_TEXTURE_2D , GLES20. GL_TEXTURE_MAG_FILTER , GLES20. GL_LINEAR );
93+ GLES30 . glTexParameteri(GLES20. GL_TEXTURE_2D , GLES20. GL_TEXTURE_MIN_FILTER , GLES20. GL_LINEAR_MIPMAP_LINEAR );
94+ GLES30 . glTexParameteri(GLES20. GL_TEXTURE_2D , GLES20. GL_TEXTURE_MAG_FILTER , GLES20. GL_LINEAR );
9595 // 4. 通过OpenGL对象读取Bitmap数据,并且绑定到纹理对象上,之后就可以回收Bitmap对象
9696 GLUtils . texImage2D(GLES20. GL_TEXTURE_2D , 0 , bitmap, 0 );
9797
@@ -191,6 +191,7 @@ public class TextureHelper {
191191 in vec2 vTexCoord;
192192 out vec4 vFragColor;
193193 void main() {
194+ // 100 es版本中是texture2D
194195 vFragColor = texture(uTextureUnit,vTexCoord);
195196 }
196197 ```
@@ -278,7 +279,7 @@ public class TextureHelper {
278279 @Override
279280 public void onSurfaceCreated (GL10 gl , EGLConfig config ) {
280281 // 将背景设置为白色
281- GLES20 . glClearColor(1.0f , 1.0f , 1.0f , 1.0f );
282+ GLES30 . glClearColor(1.0f , 1.0f , 1.0f , 1.0f );
282283
283284 // 编译顶点着色程序
284285 String vertexShaderStr = ResReadUtils . readResource(R . raw. texture_vertex_simple_shade);
@@ -321,7 +322,7 @@ public class TextureHelper {
321322 GLES30 . glClear(GLES30. GL_COLOR_BUFFER_BIT );
322323
323324 // 将变换矩阵传入顶点渲染器
324- GLES20 . glUniformMatrix4fv(uMatrixLocation, 1 , false , mProjectionMatrix, 0 );
325+ GLES30 . glUniformMatrix4fv(uMatrixLocation, 1 , false , mProjectionMatrix, 0 );
325326 // 准备坐标数据
326327 GLES30 . glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT , GLES30. GL_FLOAT , false , 0 , vertexBuffer);
327328 // 启用顶点位置句柄
@@ -341,7 +342,7 @@ public class TextureHelper {
341342
342343
343344 // 开始绘制
344- GLES20 . glDrawArrays(GLES20. GL_TRIANGLE_STRIP , 0 , POINT_DATA . length / POSITION_COMPONENT_COUNT );
345+ GLES30 . glDrawArrays(GLES20. GL_TRIANGLE_STRIP , 0 , POINT_DATA . length / POSITION_COMPONENT_COUNT );
345346 // 禁止顶点数组的句柄
346347 GLES30 . glDisableVertexAttribArray(aPositionLocation);
347348 GLES30 . glDisableVertexAttribArray(aTextureLocation);
@@ -437,7 +438,7 @@ public class TextureHelper {
437438 @Override
438439 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
439440 //将背景设置为白色
440- GLES20 .glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
441+ GLES30 .glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
441442
442443 //编译顶点着色程序
443444 String vertexShaderStr = ResReadUtils.readResource(R.raw.texture_vertex_simple_shade);
@@ -480,7 +481,7 @@ public class TextureHelper {
480481 GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
481482
482483 //将变换矩阵传入顶点渲染器
483- GLES20 .glUniformMatrix4fv(uMatrixLocation, 1, false, mProjectionMatrix, 0);
484+ GLES30 .glUniformMatrix4fv(uMatrixLocation, 1, false, mProjectionMatrix, 0);
484485 //准备坐标数据
485486 GLES30.glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT, GLES30.GL_FLOAT,
486487 false, 0, vertexBuffer);
@@ -498,9 +499,9 @@ public class TextureHelper {
498499 //绑定纹理
499500 GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textureId);
500501 // 将纹理单元传递片段着色器的u_TextureUnit
501- GLES20 .glUniform1i(aTextureLocation, 0);
502+ GLES30 .glUniform1i(aTextureLocation, 0);
502503 // 开始绘制
503- GLES20 .glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, POINT_DATA.length / POSITION_COMPONENT_COUNT);
504+ GLES30 .glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, POINT_DATA.length / POSITION_COMPONENT_COUNT);
504505
505506
506507 //准备第二个纹理的坐标数据
0 commit comments