Difference between revisions of "Vertex Rendering"

From OpenGL.org
Jump to: navigation, search
(Drawing from user code: rename of section.)
(Conditional rendering: Clarification.)
Line 26: Line 26:
The commands that can be conditioned are:
The commands that can be conditioned are:
* All functions of the form {{code|glDraw*}}.
* Every function previously mentioned. IE, [[:Category:Core_API_Ref_Vertex_Rendering|all functions of the form {{code|glDraw*}} or {{code|glMultiDraw*}}]].
* {{apifunc|glClear}} and {{apifunc|glClearBuffer}}.
* {{apifunc|glClear}} and {{apifunc|glClearBuffer}}.
* {{apifunc|glDispatchCompute}} and {{apifunc|glDispatchComputeIndirect}}.
* {{apifunc|glDispatchCompute}} and {{apifunc|glDispatchComputeIndirect}}.

Revision as of 10:32, 1 September 2012

Vertex Rendering is the process of taking vertex data specified in arrays and rendering one or more Primitives with this vertex data.


Direct rendering

Transform feedback rendering

Indirect rendering

Conditional rendering

Conditional Rendering
Core in version 3.0
Vendor extension NV_conditional_render

Conditional rendering is a mechanism for making the execution of one or more rendering commands conditional on the result of an Occlusion Query operation. This is done with the following functions:

glBeginConditionalRender(GLuint id​, GLenum mode​);

All rendering commands issued within the boundaries of these two functions will only execute if the occlusion condition specified by id​ is tested to be true. For GL_SAMPLES_PASSED queries, it is considered true (and thus rendering commands are executed) if the number of samples is not zero.

The commands that can be conditioned are:

The mode​ parameter determines how the discarding of the rendering functions is performed. It can be one of the following:

  • GL_QUERY_WAIT​: OpenGL will wait until the query result is returned, then decide whether to execute the rendering command. This ensures that the rendering commands will only be executed if the query fails.
  • GL_QUERY_NO_WAIT​: OpenGL may execute the rendering commands anyway. It will not wait to see if the query test is true or not. This is used to prevent pipeline stalls if the time between the query test and the execution of the rendering commands is too short.
  • GL_QUERY_BY_REGION_WAIT: OpenGL will wait until the query result is returned, then decide whether to execute the rendering command. However, the rendered results will be clipped to the samples that were actually rasterized in the occlusion query. Thus, the rendered result can never appear outside of the occlusion query area.
  • GL_QUERY_BY_REGION_NO_WAIT: As above, except that it may not wait until the occlusion query is finished. The region clipping still holds.

Note that "wait" in this case does not mean that glEndConditionalRender itself will stall on the CPU. It means that the first command within the conditional rendering scope will not be executed by the GPU until the query has returned. So the CPU will continue processing, but the GPU itself may have a pipeline stall.

See Also