OpenGL ES 可用纹理单元数量与大量纹理的思考

OpenGL ES 可用纹理单元数量与大量纹理的思考

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生
-  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

2013-12-29更新:

写完下面这些,感觉思路有些清晰了,可是我的中心意思,还没表达出来。

这个情况,实际生活中也发生过,其实应该在跟别人说之前,先自已说出来,

要不然,你以为你明白了,但真正能找到适当的语言来表达出来,才能真正让别人明白。

没有这个人后的准备步骤,那么在人前,就会越说越乱,而自已还感觉很清晰的样子。

不过还有一种可能,

不是你的问题,而是听者,你再怎么用简炼、平实的话来说,都听不懂,

那这个还是你的问题,你为什么要找一个不专业的人,作为你的听众呢?

哈哈哈,有时侯,就是经常发生这样的事情,你还必须向不专业或根本就不粘边的人,说明白技术细节,

这时,最好的办法是别说技术本身,挑他关心的事情来说就好了,

虽然,到了,旁人听不懂你的胡邹什么,但你需要向其说明的人,确听得津津乐道,

因为他只关心他关心的事情,并不关心你和旁人所关心的事情,虽然你和旁人都是技术专家。

切忌,切忌!

切记,切记!

见人说人话,见鬼说鬼话,无论用中文,还是英文,最终解答清楚对方关心的是最重要的,

即对方心里的想法,而非他嘴上说的,因为他毕竟不专业,说出的问题,可能都是比萨斜塔......

纹理单元是 OpenGL ES 的一个状态,表示当前要处理的该单元目标;

简单地说,是个容器,它本身并没有内容,是需要装入其它内容的,即纹理对象。

一个纹理贴图,可以创建一个纹理对象,该纹理对象是缓存在 GPU 的内存中的,可以同时有很多个纹理对象缓存在 GPU 中,以减少 CPU 与 GPU 之间的数据交换,提高效率。

这么多个纹理对象,当前渲染引擎处理某个片元时,该用哪一个呢?

那要看你把它装入哪个纹理单元了。

而且创建了一个纹理对象后,要给该纹理对象填充贴图图片的数据,也得先把纹理对象绑到一个纹理单元上,再针对这个纹理单元来操作。

就像是你拿瓶子去打小烧酒一样,直接往你的瓶子里倒,这不合规矩,那样会洒,算谁的呀!

所以得先弄个漏斗插到瓶口上,然后往漏斗里倒酒。

一家店可能就那么两三个漏斗,但瓶子可就多了去了,不过记住,要操作纹理对象,一定要先绑到纹理单元上,或者简单地理解为,料要夹在机床上,才能加工。

从下面的声明中,可以看得出,一共有32个可用的漏斗,或者是32个机床,每个机床旁边堆了多少块料,这个就不知道了,而且一个机床旁的原料,可以放到另一个机床上加工。

看来机床和待加工的原料,这种比喻比较贴切一些。

自个儿理解去吧,我可以很肯定按这个比喻,我能很好的理解。

至于做到,还在进行时,希望在田野上!

    // 声明纹理对象句柄
    GLuint textureHandle = 0;
    // 生成纹理对象,并将句柄赋给 textureHandle
    glGenTextures(1, &textureHandle);
    // 激活当前 GL_TEXTURE_2D 纹理单元为 GL_TEXTURE1,32个同时只能有一个是在处理的
    glActiveTexture(GL_TEXTURE1);
    // 将纹理对象绑定到 GL_TEXTURE_2D 当前激活的纹理单元 GL_TEXTURE1 上
    // GL_TEXTURE_2D 当前操作台,GL_TEXTURE1 是当前用的漏斗子,textureHandle 是酒瓶子,绑定到当前操作台就是把当前选定的漏斗子插到这个瓶子上
    glBindTexture(GL_TEXTURE_2D, textureHandle);

    // 一堆不知道干什么的东西,据说可以用来解决锯齿,实际没看到有效果
    glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    // 把酒通过这个选定的漏斗 GL_TEXTURE1 灌到瓶子里:最终是图片存储到 GPU 上分配的纹理对象 textureHandle 上去
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 768, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
    // 生成 Mipmap 是针对操作台 GL_TEXTURE_2D 上的选定漏斗 GL_TEXTURE1 所插在的瓶子里的酒的,即处理图片
    glGenerateMipmap(GL_TEXTURE_2D);

OpenGLES/ES2/gl.h 中有如下定义

/* TextureUnit */
#define GL_TEXTURE0                                      0x84C0
#define GL_TEXTURE1                                      0x84C1
#define GL_TEXTURE2                                      0x84C2
#define GL_TEXTURE3                                      0x84C3
#define GL_TEXTURE4                                      0x84C4
#define GL_TEXTURE5                                      0x84C5
#define GL_TEXTURE6                                      0x84C6
#define GL_TEXTURE7                                      0x84C7
#define GL_TEXTURE8                                      0x84C8
#define GL_TEXTURE9                                      0x84C9
#define GL_TEXTURE10                                     0x84CA
#define GL_TEXTURE11                                     0x84CB
#define GL_TEXTURE12                                     0x84CC
#define GL_TEXTURE13                                     0x84CD
#define GL_TEXTURE14                                     0x84CE
#define GL_TEXTURE15                                     0x84CF
#define GL_TEXTURE16                                     0x84D0
#define GL_TEXTURE17                                     0x84D1
#define GL_TEXTURE18                                     0x84D2
#define GL_TEXTURE19                                     0x84D3
#define GL_TEXTURE20                                     0x84D4
#define GL_TEXTURE21                                     0x84D5
#define GL_TEXTURE22                                     0x84D6
#define GL_TEXTURE23                                     0x84D7
#define GL_TEXTURE24                                     0x84D8
#define GL_TEXTURE25                                     0x84D9
#define GL_TEXTURE26                                     0x84DA
#define GL_TEXTURE27                                     0x84DB
#define GL_TEXTURE28                                     0x84DC
#define GL_TEXTURE29                                     0x84DD
#define GL_TEXTURE30                                     0x84DE
#define GL_TEXTURE31                                     0x84DF
#define GL_ACTIVE_TEXTURE                                0x84E0
时间: 2024-12-31 18:46:11

OpenGL ES 可用纹理单元数量与大量纹理的思考的相关文章

OpenGL ES 多个模型导入呈现的公共部分

OpenGL ES 多个模型导入呈现的公共部分 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 为什么要提这个话题呢,是因为多个模型文件obj导入到OpenGL ES中,会有多个纹理库,多个几何

OpenGL ES 中着色器变量 sampler2D 并不是在宿主语言中指定的数字 0...

OpenGL ES 中着色器变量 sampler2D 并不是在宿主语言中指定的数字 0... 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 如题,这部分只有看得懂的才能知道下面说的是什么. 在

ARKit & OpenGL ES - ARKit 原理及实现

原理篇 如果你想了解更多关于OpenGL ES的知识,请移步至 OpenGL ES相关文章目录 本文所用的代码在https://github.com/SquarePants1991/OpenGLESLearn.git的ARKit分支中. iOS11推出了新框架ARKit,通过ARKit和SceneKit可以很方便的制作AR App.苹果也提供了AR基本的应用框架,你可以直接从此开始你的AR App的开发. 不过本系列文章将使用OpenGL ES为ARKit提供渲染支持,接下来我们先去了解一下AR

OpenGLES - glBindTexture 绑定纹理缓存到纹理单元

OpenGLES - glBindTexture 绑定纹理缓存到纹理单元 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 名字 Name glBindTexture - 绑定一个命名的纹理到一个

从零开始学习OpenGL ES之六 – 纹理及纹理映射

转自:http://bbs.ityran.com/article-9-1.html [转载]从零开始学习OpenGL ES之六 – 纹理及纹理映射 2011-9-14 23:49| 发布者: Iven| 查看: 9206| 评论: 15 摘要: 图形图像, 编程,编程, OpenGL ES, 教程,OpenGL ES 3D 在OpenGL ES中另一种为多边形定义颜色创建材质的方法是将纹理映射到多边形.这是一种很实用的方法,它可以产生很漂亮的外观并节省大量的处理器时间.比如说,你想在游戏中造一个

OpenGL ES 纹理参数设置方法 glTexParameter

OpenGL ES 纹理参数设置方法 glTexParameter 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 以下译自官网. 最近几天,会针对该方法的每个参数,做相应的翻译.分析理解和测试

OpenGL ES 在 iOS 平台纹理贴图倒置的问题研究

OpenGL ES 在 iOS 平台纹理贴图倒置的问题研究 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. (一大疑惑,为什么android上关于OpenGL ES 开发的资料很多,确涉及该主题

OpenGL ES 纹理贴图的重复与嵌位概念理解

OpenGL ES 纹理贴图的重复与嵌位概念理解 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 以下有一篇转载的Android中关于纹理贴图规则的文章,很不多. 不过我这里是想要深入研究如果让

OpenGL ES教程VI之纹理贴图(原文对照)

注:又是一篇,是否有人能解释得清楚,2是重复两次,那么是否N就是重复N次呢?接近1.0的坐标值整数部分加上几就是重复几次吗?这个好像之前验证过不一定的. 转自:http://melord.iteye.com/blog/1126135 OpenGL ES教程VI之纹理贴图(原文对照) 博客分类:  J2ME,Android AndroidOpenGL ES  OpenGL ES Tutorial for Android – Part VI – Textures December 30th, 201