-
载入纹理的步骤:
-
GLES20.glGenTextures() : 生成纹理资源的句柄
-
GLES20.glBindTexture(): 绑定句柄
-
GLUtils.texImage2D() :将bitmap传递到已经绑定的纹理中
-
GLES20.glTexParameteri() :设置纹理属性,过滤方式,拉伸方式等
-
-
纹理的数据来源
-
将Bitmap以纹理的形式载入OpenGL中:
/** * @param textureTarget Texture类型。 * 1. 相机用 GLES11Ext.GL_TEXTURE_EXTERNAL_OES * 2. 图片用GLES20.GL_TEXTURE_2D * @param minFilter 缩小过滤类型 (1.GL_NEAREST ; 2.GL_LINEAR) * @param magFilter 放大过滤类型 * @param wrapS X方向边缘环绕 * @param wrapT Y方向边缘环绕 * @return 返回创建的 Texture ID */ public static int createTexture(int textureTarget, @Nullable Bitmap bitmap, int minFilter, int magFilter, int wrapS, int wrapT) { int[] textureHandle = new int[1]; GLES20.glGenTextures(1, textureHandle, 0); checkGlError("glGenTextures"); GLES20.glBindTexture(textureTarget, textureHandle[0]); checkGlError("glBindTexture " + textureHandle[0]); GLES20.glTexParameterf(textureTarget, GLES20.GL_TEXTURE_MIN_FILTER, minFilter); GLES20.glTexParameterf(textureTarget, GLES20.GL_TEXTURE_MAG_FILTER, magFilter); //线性插值 GLES20.glTexParameteri(textureTarget, GLES20.GL_TEXTURE_WRAP_S, wrapS); GLES20.glTexParameteri(textureTarget, GLES20.GL_TEXTURE_WRAP_T, wrapT); if (bitmap != null) { GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); } checkGlError("glTexParameter"); return textureHandle[0]; }
-
将 RGB 以纹理的形式载入OpenGL中:
/*** * 将 RGB 数据 转化 成纹理 ID * @param videoW 纹理宽 * @param videoH 纹理高 * @param rgbData 视频桢的 RGB 数据 * @param textureId 因为视频根据帧率刷新,频繁调用onDrawFrame, * 所以不适合多次创建纹理资源ID, * 所以最好在onCreate创建好,免得OOM * @return 绑定好 RGB 数据的纹理 ID */ public static int generateRGBTexture(int videoW, int videoH, byte[] rgbData, int textureId) { if (rgbData == null) { return -1; } ByteBuffer colorByteBuffer = null; if (colorByteBuffer == null) { colorByteBuffer = ByteBuffer.allocate(videoW * videoH * 4); } //生成纹理ID GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId); if (colorByteBuffer != null) { colorByteBuffer.clear(); colorByteBuffer.put(rgbData, 0, videoW * videoH * 4); } else { return -1; } colorByteBuffer.position(0); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, videoW, videoH, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, colorByteBuffer); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); return textureId; }
-
OpenGL进阶之关于生成纹理ID
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...