glTexSubImage

 

今天把一个使用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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值