package com.xiaxl.oes2texture.gl;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLES11Ext;
import android.opengl.GLES30;
import android.opengl.GLUtils;
import com.xiaxl.oes2texture.utils.LogUtils;
import java.io.IOException;
import java.io.InputStream;
public class TextureUtil {
private static final String TAG = "TextureUtil";
public static void createFramebuffers(int[] frameBuffer) {
// 创建帧缓冲区
GLES30.glGenFramebuffers(frameBuffer.length, frameBuffer, 0);
}
/**
* 创建空白纹理
*
* @param texPixWidth 要生成的纹理的宽高
* @param texPixHeight 要生成的纹理的宽高
* @return
*/
public static int createEmptyTexture2D(int texPixWidth, int texPixHeight, int texSampleType) {
// 生成纹理ID
int[] textures = new int[1];
GLES30.glGenTextures(1, textures, 0);
// 绑定纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textures[0]);
// 纹理采样方式:最近点采样
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, texSampleType);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, texSampleType);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE);
// 创建一个空的2D纹理对象,指定其基本参数,并绑定到对应的纹理ID上
GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_RGBA, texPixWidth, texPixHeight,
0, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, null);
// 取消绑定纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, GLES30.GL_NONE);
return textures[0];
}
/**
* @param texSampleType
* @return
*/
public static int createTextureOES(int texSampleType) {
int[] textures = new int[1];
GLES30.glGenTextures(1, textures, 0);
TextureUtil.checkGlError("glGenTextures");
int texId = textures[0];
GLES30.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, texId);
TextureUtil.checkGlError("glBindTexture " + texId);
// OES纹理采样
GLES30.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES30.GL_TEXTURE_MIN_FILTER, texSampleType);
GLES30.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES30.GL_TEXTURE_MAG_FILTER, texSampleType);
GLES30.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE);
GLES30.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE);
TextureUtil.checkGlError("glTexParameter");
return texId;
}
/**
* 创建一个绑定 Bitmap 资源的纹理
*
* @param context
* @param drawableId R.drawable.xxx.jpg
* @return
*/
public static int createDrawableTexture2D(Context context, int drawableId) {
// 生成纹理ID
int[] textures = new int[1];
GLES30.glGenTextures(1, textures, 0);
// 绑定纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textures[0]);
// 纹理采样方式
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_NEAREST);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE);
// 通过输入流加载Bitmap
InputStream is = context.getResources().openRawResource(drawableId);
Bitmap bitmapTmp;
try {
bitmapTmp = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 使用GLES30.GL_COLOR_ATTACHMENT0将纹理作为颜色附着点附加到帧缓冲对象上
GLUtils.texImage2D(GLES30.GL_TEXTURE_2D, // 纹理类型
0, GLUtils.getInternalFormat(bitmapTmp), bitmapTmp, // 纹理图像
GLUtils.getType(bitmapTmp), 0 // 纹理边框尺寸
);
bitmapTmp.recycle();
// 取消绑定纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, GLES30.GL_NONE);
return textures[0];
}
/**
* 创建空白纹理,并绑定帧缓冲区
*
* @param frameBuffer 要绑定的帧缓冲区
* @param texPixWidth 要生成的纹理的宽高
* @param texPixHeight 要生成的纹理的宽高
* @return
*/
public static int createEmptyTexture2DBindFrameBuffer(int[] frameBuffer, int texPixWidth, int texPixHeight, int texSampleType) {
// 生成纹理ID
int[] textures = new int[1];
GLES30.glGenTextures(1, textures, 0);
// 绑定纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textures[0]);
// 纹理采样方式:线性采样
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, texSampleType);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, texSampleType);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE);
// 创建一个空的2D纹理对象,指定其基本参数,并绑定到对应的纹理ID上
GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_RGBA, texPixWidth, texPixHeight,
0, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, null);
// 取消绑定纹理
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, GLES30.GL_NONE);
/**
* 帧缓冲区
*/
// 创建帧缓冲区
GLES30.glGenFramebuffers(1, frameBuffer, 0);
// 将帧缓冲对象绑定到OpenGL ES上下文的帧缓冲目标上
GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, frameBuffer[0]);
// 使用GLES30.GL_COLOR_ATTACHMENT0将纹理作为颜色附着点附加到帧缓冲对象上
GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_COLOR_ATTACHMENT0, GLES30.GL_TEXTURE_2D, textures[0], 0);
// 取消绑定缓冲区
GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, GLES30.GL_NONE);
return textures[0];
}
/**
* Checks to see if a GLES error has been raised.
*/
public static void checkGlError(String op) {
int error = GLES30.glGetError();
if (error != GLES30.GL_NO_ERROR) {
String msg = op + ": glError 0x" + Integer.toHexString(error);
LogUtils.e(TAG, msg);
throw new RuntimeException(msg);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
ExternalOES纹理数据 转换为 TEXTURE-2D纹理数据 工程代码
共69个文件
xml:19个
ds_store:11个
webp:10个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 189 浏览量
2023-12-21
19:10:08
上传
评论
收藏 768KB ZIP 举报
温馨提示
图形开发中,通常将TEXTURE_2D和TEXTURE_EXTERNAL_OES纹理分开使用,这种情况占据了80%的场景。然而,有时候也需要将TEXTURE_EXTERNAL_OES纹理转化为TEXTURE_2D纹理进行视频处理。这种情况,我们可以通过 如离屏渲染或FrameBuffer帧缓冲区对象,完成纹理数据的转化。 1. 首先,需创建一个OES纹理ID; 2. 完成OES纹理ID创建后,通过oesTexId创建一个图像消费者SurfaceTexture; 3. 通过SurfaceTexture创建Surface,将Surface对象传递给MediaPlayer,获取Sdcard中对应路径的视频帧数据获取; 4. 创建FRAMEBUFFER帧缓冲区,并绑定TEXTURE_2D空白纹理对象; 5. 将EXTERNAL_OES纹理渲染到FRAMEBUFFER帧缓冲区中; 6. 绘制渲染TEXTURE_2D纹理,完成纹理图像的显示; 文档介绍地址如下: https://xiaxl.blog.csdn.net/article/details/135137815
资源推荐
资源详情
资源评论
收起资源包目录
GLES3_Oes2Texture.zip (69个子文件)
GLES3_Oes2Texture
gradle.properties 1KB
.DS_Store 6KB
gradle
.DS_Store 6KB
wrapper
gradle-wrapper.jar 58KB
gradle-wrapper.properties 230B
app
.DS_Store 6KB
src
.DS_Store 6KB
main
.DS_Store 10KB
assets
tex_oes_vertex.glsl 202B
tex_2d_vertex.glsl 202B
tex_2d_frag.glsl 162B
tex_oes_frag.glsl 218B
java
.DS_Store 6KB
com
.DS_Store 6KB
xiaxl
.DS_Store 6KB
oes2texture
.DS_Store 6KB
media
MediaPlayerVideoManager.java 6KB
utils
SdCardUtil.java 2KB
LogUtils.java 4KB
MyActivity.java 1KB
MyGLSurfaceView.java 5KB
gl
.DS_Store 6KB
Texture2DRect.java 5KB
TextureStatus.java 196B
TextureOESRect.java 5KB
ShaderUtil.java 4KB
TextureUtil.java 7KB
res
mipmap-xxhdpi
ic_launcher_round.webp 6KB
ic_launcher.webp 3KB
mipmap-hdpi
ic_launcher_round.webp 3KB
ic_launcher.webp 1KB
drawable-nodpi
rect_pic.png 519KB
icon.png 3KB
navigation
nav_graph.xml 1KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
values-land
dimens.xml 66B
menu
menu_main.xml 411B
values-w600dp
dimens.xml 66B
values-night
themes.xml 814B
mipmap-mdpi
ic_launcher_round.webp 2KB
ic_launcher.webp 982B
mipmap-xxxhdpi
ic_launcher_round.webp 8KB
ic_launcher.webp 4KB
mipmap-xhdpi
ic_launcher_round.webp 4KB
ic_launcher.webp 2KB
mipmap-anydpi-v33
ic_launcher.xml 343B
xml
data_extraction_rules.xml 551B
backup_rules.xml 478B
values
dimens.xml 66B
colors.xml 378B
strings.xml 554B
themes.xml 1KB
layout
activity_main.xml 480B
drawable
ic_launcher_background.xml 5KB
ic_jn.jpg 127KB
values-w1240dp
dimens.xml 67B
AndroidManifest.xml 1015B
proguard-rules.pro 750B
libs
build.gradle 1KB
build
.DS_Store 6KB
.gitignore 6B
gradlew.bat 3KB
build.gradle 229B
settings.gradle 295B
local.properties 351B
gradlew 6KB
.gitignore 225B
共 69 条
- 1
资源评论
- JiangHengA2024-05-06这个资源内容超赞,对我来说很有价值,很实用,感谢大佬分享~
- 2301_771407632024-08-01总算找到了想要的资源,搞定遇到的大问题,赞赞赞!
bjxiaxueliang
- 粉丝: 1w+
- 资源: 50
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功