glTexSubImage
glTexSubImage
来来叔叔 发表于4个月前
glTexSubImage
  • 发表于 4个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

 

今天把一个使用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
×
来来叔叔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: