- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白这个命令结构是如何工作的。除了 firstIndex 之外,所有这些似乎都有意义(在文档中;我实际上还没有调用该函数)。实际上,在我看来文档中好像有错字。
这是我在查找相关文档时似乎在每个地方都看到的文本:
The parameters addressed by indirect are packed into a structure that takes the form (in C):
typedef struct {
uint count;
uint instanceCount;
uint firstIndex;
uint baseVertex;
uint baseInstance;
} DrawElementsIndirectCommand;A single call to glMultiDrawElementsIndirect is equivalent, assuming no errors are generated to:
GLsizei n;
for (n = 0; n < drawcount; n++) {
const DrawElementsIndirectCommand *cmd;
if (stride != 0) {
cmd = (const DrawElementsIndirectCommand *)((uintptr)indirect + n * stride);
} else {
cmd = (const DrawElementsIndirectCommand *)indirect + n;
}
glDrawElementsInstancedBaseVertexBaseInstance(mode,
cmd->count,
type,
cmd->firstIndex + size-of-type,
cmd->instanceCount,
cmd->baseVertex,
cmd->baseInstance);
}
但是这些页面并没有说明“类型大小”的含义,也没有说明为什么将它添加到 firstIndex,而不是乘以它。看起来 glDrawElementsInstancedBaseVertexBaseInstance 在那里需要一个字节偏移量,所以对我来说,firstIndex 是 GL_ELEMENT_ARRAY_BUFFER 顶点索引数组的索引——所以,一个索引的索引——并且类型的大小是顶点索引(例如 4)的字节大小,您需要在那里将“索引到索引数组”转换为该数组的字节偏移量。
但是...该转换将表示为乘法,他们说 + 而不是 *。 :(
我说的对吗? firstIndex 是顶点索引数组中条目的索引,size-of-type 是顶点索引的字节大小,+ 是错字吗?如果不是,我错过了什么?
最佳答案
这只是 man page 中的错字.虽然手册页在官方网站上,但它们不是官方文档。它们经常包含错误或遗漏。
官方文档是spec文档。它确实有乘法而不是那里的加法。来自 OpenGL 4.5 规范的第 353/354 页:
The command
void DrawElementsIndirect( enum mode, enum type, const void *indirect );
is equivalent to
typedef struct {
uint count;
uint instanceCount;
uint firstIndex;
int baseVertex;
uint baseInstance;
} DrawElementsIndirectCommand;
if (no element array buffer is bound) {
generate appropriate error
} else {
DrawElementsIndirectCommand *cmd =
(DrawElementsIndirectCommand *)indirect;
DrawElementsInstancedBaseVertexBaseInstance(mode,
cmd->count, type,
cmd->firstIndex * size-of-type,
cmd->instanceCount, cmd->baseVertex,
cmd->baseInstance);
}
所以 firstIndex
几乎就是您已经猜到的。它是索引缓冲区(也称为元素数组缓冲区)的偏移量,非常类似于 glDrawElements()
的最后一个元素。唯一的小问题是,在这种情况下,偏移量是以索引为单位测量的,而对于 glDrawElements()
,它是以字节为单位测量的。这就是乘以 size-of-type
的用武之地。
例如,假设您有一个包含 GL_UNSIGNED_SHORT
类型索引的元素数组缓冲区。您希望绘图命令从第 50 个索引开始使用此缓冲区中的索引。对于 glDrawElements()
,您将为最后一个参数传入 100,因为偏移量以字节为单位,并且每个索引为两个字节。对于 glDrawElementsIndirect()
中的 firstIndex
值,您将使用 50,因为它是按指数衡量的。与规范中的 size-of-type
相乘,在本例中为 2,解释了这种差异,表示如果设置 firstIndex
,字节偏移将为 100到 50,因此匹配用于 glDrawElements()
的偏移量。
关于opengl - 在给 glMultiDrawElementsIndirect 的命令结构中,firstIndex 参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29248249/
我有这门课: class ValueTimestamp { let value: Double let timestamp : Double init(value:Double, time
我看到了几个问题,但没有找到解决方案和原因 这里是结构体 struct MovementFormattedData { ... Other properties ... lazy var
FirstIndex 属性 返回在搜索字符串中匹配的位置。 object.FirstIndex object 参数总是一个 Match 对象。 说明 FirstIndex 属性使用从零起算
美好的一天 – 我有一个例行程序,它会搜索数万个文本文件以捕获相关文件名,从而剩下不到 10,000 个文件名。这些文件名为下一个例程提供了起点,以打开每个剩余的文本文件以搜索特定数据。每个文本文件可
从文档中它说 firstindex()查找集合的第一个索引。为什么不只使用 1?当它不是 1 时会出现什么情况? 最佳答案 第一个索引不一定是 1,因为 Julia 支持 custom indexin
我在 Xcode 10 上的 Swift 4 中有以下代码 var newCard = deck.randomElement()! deck.remove(at: de
当我在字典数组上使用 firstIndex 时,出现 Incorrect argument label in call (have 'where:', expected 'of:') 错误。 let
在遵循有关 SwiftUI 的 Apple 教程时,我发现了这一点: 1| var landmarkIndex: Int { 2| userData.landmarks.firstIndex(w
我不明白这个命令结构是如何工作的。除了 firstIndex 之外,所有这些似乎都有意义(在文档中;我实际上还没有调用该函数)。实际上,在我看来文档中好像有错字。 这是我在查找相关文档时似乎在每个地方
我试图将一个字符串拆分成一个字母数组,但将一些字母放在一起。 (例如,我试图将它们分成发音组)。因此,举例来说,所有“sh”组合将是数组中的一个值而不是两个。 使用 firstIndex 很容易在我知
我有两个 Book 数组 var tempArray = [Book]() var filteredArray = [Book]() 在哪里 struct Book: Codable, Equatab
摘自 Apple 的 The Swift Programming Language (Swift 4.2) 文档。 let greeting = "Hello, world!" let index =
这个问题在这里已经有了答案: Swift 4.2, String firstIndex() function error in Xcode playground (1 个回答) 关闭 4 年前。 您
我在读《The Swift Programming Language》Swift 4.2”和“子字符串”部分下的“字符串和字符”一章中,给出了以下代码作为示例: let greeting = "Hel
我是一名优秀的程序员,十分优秀!