OpenGL顶点规范和绘图命令:条件渲染 Conditional Rendering

  1. OpenGL顶点规范和绘图命令 Vertex Specification and Drawing Commands
  2. 图元类型 Primitive Types
  3. 当前顶点属性值 Current Vertex Attribute Values
  4. 顶点数组 Vertex Arrays
  5. 通用顶点属性的数组 Specifying Arrays for Generic Vertex Attributes
  6. 顶点属性除数 Vertex Attribute Divisors
  7. 使用顶点数组绘制命令 Drawing Commands Using Vertex Arrays
  8. 条件渲染 Conditional Rendering

条件渲染可用于根据遮挡查询的结果丢弃渲染命令。条件渲染使用以下命令启动和停止:

void BeginConditionalRender(uint id, enum mode);
void EndConditionalRender();

其中,id 指定一个遮挡查询对象的名称,其结果用于确定是否丢弃渲染命令。如果查询的结果(SAMPLES_PASSED)为零,或者查询的结果(ANY_SAMPLES_PASSEDANY_SAMPLES_PASSED_CONSERVATIVETRANSFORM_FEEDBACK_OVERFLOWTRANSFORM_FEEDBACK_STREAM_OVERFLOW)为 FALSE,则在 BeginConditionalRender 和相应的 EndConditionalRender 之间发出的所有渲染命令(如第 2.4 节所述)都将被丢弃且不产生任何效果。设置当前顶点状态的命令(如 VertexAttrib 等)的效果是未定义的。如果查询的结果(SAMPLES_PASSED)为非零,或者查询的结果(ANY_SAMPLES_PASSEDANY_SAMPLES_PASSED_CONSERVATIVETRANSFORM_FEEDBACK_OVERFLOWTRANSFORM_FEEDBACK_STREAM_OVERFLOW)为 TRUE,则这些命令不会被丢弃。

mode 参数指定了 BeginConditionalRender 如何解释由 id 给出的遮挡查询的结果:

  • 如果 modeQUERY_WAIT,则 GL 等待查询结果可用,然后使用结果来确定是否丢弃后续的渲染命令。
  • 如果 modeQUERY_NO_WAIT,则 GL 可能选择无条件地执行后续的渲染命令,而不必等待查询完成。
  • 如果 modeQUERY_BY_REGION_WAIT,则 GL 也会等待遮挡查询结果,并在遮挡查询的结果为零时丢弃渲染命令。如果查询结果为非零,则执行后续的渲染命令,但 GL 可能会丢弃任何未对指定遮挡查询的样本计数贡献的帧缓冲区区域的命令结果。任何这样的丢弃都是以实现相关的方式进行的,但不能丢弃对贡献到遮挡查询样本计数的任何样本的渲染命令结果。
  • 如果 modeQUERY_BY_REGION_NO_WAIT,则 GL 的行为类似于 QUERY_BY_REGION_WAIT,但可能选择无条件地执行后续的渲染命令,而不必等待查询完成。
  • 如果 modeQUERY_WAIT_INVERTEDQUERY_NO_WAIT_INVERTEDQUERY_BY_REGION_WAIT_INVERTEDQUERY_BY_REGION_NO_WAIT_INVERTED,则用于确定是否渲染后续绘图命令的条件与 QUERY_WAITQUERY_NO_WAITQUERY_BY_REGION_WAITQUERY_BY_REGION_NO_WAIT 相比被取反。
  • 如果 modeQUERY_NO_WAIT_INVERTEDQUERY_BY_REGION_NO_WAIT_INVERTED,则 GL 可能选择无条件地执行后续的渲染命令,而不必等待查询完成。

以下是一个简单的条件渲染示例,假设我们有一个遮挡查询对象 queryID

// 开始条件渲染
glBeginConditionalRender(queryID, GL_QUERY_WAIT);

// 渲染需要进行条件判断的对象
glDrawArrays(GL_TRIANGLES, 0, 6);

// 结束条件渲染
glEndConditionalRender();

在这个示例中,我们使用遮挡查询对象 queryID 来确定是否应该渲染三角形。如果遮挡查询对象的结果允许渲染,那么在 glDrawArrays 中指定的三角形将被渲染;否则,渲染命令将被忽略,不会对画布产生影响。

需要注意的是,遮挡查询对象的结果可以是零或非零,根据查询的类型和配置。在实际应用中,需要根据场景需求和性能优化目标来选择合适的条件渲染策略。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值