What is an EX9 Layer?

I’ve been working my way through most nodes/concepts in vvvv but there is still one that baffles me. What exactly is an EX9 Layer (the output of a shader or quad node for instance)? Is it a bunch of batched up DX9 DrawPrimitive codes and associated shaders/textures/renderstate or is it an already rendered framebuffer? Has the rendering already happened once it is created or only after it is passed to a renderer (I’m guessing/hoping the latter)?

Specifically why I would like to know is that I have a ton of rendering that gets passed via layers to a ton of split up render windows (for different devices/displays). I would prefer to have each device only rendering the content appropriate to it. If I pass down a giant layer containing my entire scene to a renderer, will it have had to render the entire scene or will it just render it’s cropped portion of it? Hoping that the system is smart enough to reject vertices not inside the cropped/transformed frustrum before doing any pixel shading.

Many thanks,


Layer is just an abstraction, so technnically it’s just a “Render” function that the renderer will call to any layer connected to it.

So when a renderer effectively renders is goes recursively trough all groups/layers and call that render function (Layer nodes generally set states/textures and call whatever draw function they assigned).

Technically all mesh vertices will go to the vertex shader and will be transformed into screen space. You can filter some faces using Cull (EX9.RenderState)

As far as i remember vertices are then discarded if they fail depth/scissor test. To check if a mesh subset should/not be drawn at all, you need to filter it before to pass to the shader, the node ViewFrustrumCulling (EX9.Geometry Mesh) does that for you.

Hope that helps.

you are right, a layer is just a draw call.
and pixelshaders run only for each visible pixel.
but each renderer has to render all vertex buffers/shaders to determine which part of the geometry is on their area. from what i read, using the multiscreen module is the best practice in your case…

edit: as vux said… :)