文档章节

glTexSubImage

来来叔叔
 来来叔叔
发布于 2017/08/04 23:56
字数 350
阅读 1
收藏 0
点赞 0
评论 0
 

今天把一个使用OpenGL绘图的状态机搞定了。主要就是合并相同属性的图形,减少glDrawArrays的调用次数,以达到提高运行速度的目的。调试时,注意从简单到复杂。最简单的情形即是不合并图形,与原算法一致,如果这样都不正确,就先要查这个层次的问题。逐渐增加算法的复杂度,这样可以缩小每步中解决问题的难度。

使用glTexSubImage可以只更新一部分纹理数据,减少调用glTexImage2D所产生的创建纹理和更新全部纹理数据的开销。如果每次都只是更新一少部分纹理(包括第一次都不想提交所有数据),可以如下操作:

glBindTexture(GL_TEXTURE_2D, curTexID);
 if (used > 0)
 {
  glTexSubImage2D(GL_TEXTURE_2D, 0, xoff, yoff, 
   subw, subh,
   GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT,
   (void*)subbuf);
 }
 else
 {
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 
   w, h, 0,
   GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT,
   (void*)(NULL));   

  glTexSubImage2D(GL_TEXTURE_2D, 0, xoff, yoff, 
 subw, subh,
   GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT,
   (void*)subbuf);

used++;

}

 有个疑问:glTexSubImage中,data是一块连续的数据,不知OpenGL可否用一块矩形区域的缓存来更新纹理?即指定目标区域起始坐标和宽高的同时,在源数据中也可以指定起始坐标和宽高?

© 著作权归作者所有

共有 人打赏支持
来来叔叔
粉丝 0
博文 100
码字总数 55732
作品 0
广州
高级程序员
OpenGL超级宝典笔记——纹理映射(一)

纹理映射,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。 纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细...

Mario_Q ⋅ 2013/11/12 ⋅ 3

OpenGL常用API

glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形 glAlphaFunc允许设置alpha检测功能 glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中 glAr...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

SDL2源代码分析5:更新纹理(SDL_UpdateTexture())

===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDLInit()) SDL2源代码分析2:窗口(SDLWindow) SDL2源代码分析3:渲染器...

leixiaohua1020 ⋅ 2014/11/07 ⋅ 0

SDL2源代码分析8:视频显示总结

===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDLInit()) SDL2源代码分析2:窗口(SDLWindow) SDL2源代码分析3:渲染器...

leixiaohua1020 ⋅ 2014/11/18 ⋅ 0

OpenGL超级宝典笔记——纹理映射Mipmap

Mipmapping Mipmap是一个功能强大的纹理技术,它可以提高渲染的性能以及提升场景的视觉质量。它可以用来解决使用一般的纹理贴图会出现的两个常见的问题: 闪烁,当屏幕上被渲染物体的表面与它...

Mario_Q ⋅ 2013/11/20 ⋅ 0

关于opengl中多重纹理,离屏与渲染到屏幕切换,可编程管线有固定管线切换的理解

最近用opengl写项目时遇见几个问题,感觉比较通用写下啦分享; 一, opengl多重纹理的使用 二, opengl离屏渲染与渲染到屏幕切换使用 三, opengl可编程管线与固定管线切换使用 经过一个成功...

lixiaoguang20 ⋅ 04/23 ⋅ 0

OpenGL超级宝典笔记——纹理高级(一)

辅助颜色 一般情况下,我们设置纹理的环境为GL_MODULATE模式,在这种情况下,受到光照的几何图形会和纹理的颜色进行结合。正常情况下,OpenGL进行光照计算,并根据标准的光照模型进行单个片段...

Mario_Q ⋅ 2013/11/27 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多
Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 14分钟前 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 14分钟前 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 35分钟前 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 54分钟前 ⋅ 0

js模拟栈和队列

栈和队列 栈:LIFO(先进后出)一种数据结构 队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。 2....

LIAOJIN1 ⋅ 今天 ⋅ 0

180619-Yaml文件语法及读写小结

Yaml文件小结 Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在J...

小灰灰Blog ⋅ 今天 ⋅ 0

IEC60870-5-104规约传送原因

1:周期循环2:背景扫描3:自发4:初始化5:请求6:激活7:激活确认8:停止激活9:停止激活确认10:激活结束11:远程命令引起的返送信息12:当地命令引起的返送信息13:文件传送20:响应总召...

始终初心 ⋅ 今天 ⋅ 0

【图文经典版】冒泡排序

1、可视化排序过程 对{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的可视化动态过程如下 2、代码实现    public void contextLoads() {// 冒泡排序int[] a = { 6, 5, 3, 1, 8, 7, 2, ...

pocher ⋅ 今天 ⋅ 0

ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass ⋅ 今天 ⋅ 0

IDEA反向映射Mybatis

1.首先在pom文件的plugins中添加maven对mybatis-generator插件的支持 ` <!-- mybatis逆向工程 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-ma......

lichengyou20 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部