小编Pro*_*gun的帖子

NSURLSessionconfiguration.shouldUseExtendedBackgroundIdleMode:它做了什么?

找不到有关此实例变量的任何文档.

即使应用程序已移至后台,它是否能够处理对网络请求的响应?

ios nsurlsessionconfiguration

6
推荐指数
1
解决办法
1324
查看次数

OpenGL纹理和对象流

我需要流式处理纹理(本质上是摄影机提要)。

使用对象流,似乎会出现以下情况:

  1. 新对象的数据存储区是否与旧对象的数据存储区更大,更小或相同?
  2. 正在更新子集或整个纹理?
  3. 我们是在流缓冲对象还是纹理对象(有什么区别吗?)

以下是我遇到的以下方法:

  1. 分配对象数据存储(用于缓冲区的BufferData或用于纹理的TexImage2D),然后分配每个帧,使用BufferSubData或TexSubImage2D更新数据子集

  2. 在使用该对象的最后一次调用(例如绘制)之后,使对象无效/无效:

    • 空值化:glTexSubImage2D(...,NULL),glBufferSubData(...,NULL)
    • 无效:glBufferInvalidate(),glMapBufferRange?与GL_MAP_INVALIDATE_BUFFER_BIT ?, glDeleteTextures?
  3. 使用新数据简单地重新调用BufferData或TexImage2D

  4. 手动实现对象多缓冲/缓冲ping-ponging。

最直接的问题是,整个纹理被相同大小的新纹理替换。我该如何实施?(1)是否会隐式同步?(2)是否避免同步?(3)是否将同步对象或将为该对象分配新的数据存储,以便可以在不等待使用旧对象状态完成的所有绘图完成的情况下将更新上传到该对象?相信来自Red Book V4.3的这段话是这样的:

也可以使用glCopyBufferSubData()函数在缓冲区对象之间复制数据。不必使用glBufferSubData()在一个大的缓冲区对象中组装数据块,而是可以使用glBufferData()将数据上传到单独的缓冲区中,然后使用glCopyBufferSubData()将这些数据复制到较大的缓冲区中。根据OpenGL的实现,它可能能够重叠这些副本,因为每次您对缓冲区对象调用glBufferData()时,它会使之前可能存在的任何内容失效。因此,即使从前一个存储进行的复制操作尚未完成,OpenGL有时也可以为您的数据分配一个新的数据存储。然后,它将在以后的机会中释放旧存储。

但是如果是这样,为什么需要(2)[无效/无效]?

另外,请牢记以下问题,同时讨论上述方法以及其他方法,以及它们在各种情况下的有效性:

  1. 是否发生与对象的隐式同步(即,将更新与OpenGL的使用同步)
  2. 内存使用情况
  3. 速度

我已经阅读了http://www.opengl.org/wiki/Buffer_Object_Streaming,但是它没有提供明确的信息。

opengl streaming buffer textures

2
推荐指数
1
解决办法
3730
查看次数