Implementation of CompositorPass This implementation will render a fullscreen triangle/quad to the RenderTarget using the parameters from definition (rectangle area, whether triangle or quad pass, whether to include frustum corners, etc)
More...
#include <OgreCompositorPassQuad.h>
|
| CompositorPassQuad (const CompositorPassQuadDef *definition, Camera *defaultCamera, CompositorNode *parentNode, const RenderTargetViewDef *rtv, Real horizonalTexelOffset, Real verticalTexelOffset) |
|
virtual void | _placeBarriersAndEmulateUavExecution (BoundUav boundUavs[64], ResourceAccessMap &uavsAccess, ResourceLayoutMap &resourcesLayout) |
| Emulates the execution of a UAV to understand memory dependencies, and adds a memory barrier / resource transition if we need to. More...
|
|
void | _removeAllBarriers (void) |
|
void | addResourceTransition (ResourceLayoutMap::iterator currentLayout, ResourceLayout::Layout newLayout, uint32 readBarrierBits) |
|
virtual void | execute (const Camera *lodCamera) |
|
Vector2 | getActualDimensions (void) const |
|
Camera * | getCamera (void) |
|
const CompositorPassDef * | getDefinition (void) const |
|
const CompositorNode * | getParentNode (void) const |
|
Pass * | getPass (void) |
| Don't make this const (useful for compile-time multithreading errors) Pointer can be null if using HLMS. More...
|
|
RenderPassDescriptor * | getRenderPassDesc (void) const |
|
const CompositorTextureVec & | getTextureDependencies (void) const |
|
CompositorPassType | getType () const |
|
virtual void | notifyCleared (void) |
| CompositorNode::_notifyCleared More...
|
|
virtual void | notifyDestroyed (TextureGpu *channel) |
| CompositorNode::notifyDestroyed More...
|
|
virtual void | notifyDestroyed (const UavBufferPacked *buffer) |
|
virtual bool | notifyRecreated (const TextureGpu *channel) |
| CompositorNode::notifyRecreated More...
|
|
virtual void | notifyRecreated (const UavBufferPacked *oldBuffer, UavBufferPacked *newBuffer) |
|
void | operator delete (void *ptr) |
|
void | operator delete (void *ptr, void *) |
|
void | operator delete (void *ptr, const char *, int, const char *) |
|
void | operator delete[] (void *ptr) |
|
void | operator delete[] (void *ptr, const char *, int, const char *) |
|
void * | operator new (size_t sz, const char *file, int line, const char *func) |
| operator new, with debug line info More...
|
|
void * | operator new (size_t sz) |
|
void * | operator new (size_t sz, void *ptr) |
| placement operator new More...
|
|
void * | operator new[] (size_t sz, const char *file, int line, const char *func) |
| array operator new, with debug line info More...
|
|
void * | operator new[] (size_t sz) |
|
void | profilingBegin (void) |
|
void | profilingEnd (void) |
|
virtual void | resetNumPassesLeft (void) |
|
Implementation of CompositorPass This implementation will render a fullscreen triangle/quad to the RenderTarget using the parameters from definition (rectangle area, whether triangle or quad pass, whether to include frustum corners, etc)
- A fullscreen quad are two triangles that form a rectangle, which cover the entire screen. This is however an inefficient way of harnessing the GPU's power. Modern GPUs iterate a whole bounding rect that encloses each triangle (it's highly more parallelizable & scalable than the scanline algorithm used by older Voodoo cards in the 90's). That means we're wasting 50% of GPU reasources in pixels that aren't drawn.
- A much faster approach made famous by Emil Persson (see max area triangulation http://www.humus.name/index.php?page=News&ID=228) is to render a single oversized triangle that covers the entire screen, which has it's UV scaled up; so that when interpolated at screen position, it appears it goes from the range [0; 1) like a regular quad pass. The difference is that pixels that go past the viewport are much better clipped/earlied-out by the GPU than those that fall inside the viewport but outside the triangle (like the rectangle approach)
- This faster technique only works for passes that cover the entire screen. When the viewport is not 0 0 1 1; the CompositorPassQuad automatically switches to a fullscreen quad.
- IMPORTANT: The texel-to-pixel adjustment offset is included in the world matrix passed to the vertex shader. This differs from Ogre 1.x which tried to embed the offset into the vertices.
- IMPORTANT: When the viewport is not 0 0 1 1; the scale & position factors are passed through the world matrix. This behavior differs from Ogre 1.x
- Author
- Matias N. Goldberg
- Version
- 1.0
◆ CompositorPassQuad()
◆ _placeBarriersAndEmulateUavExecution()
◆ _removeAllBarriers()
void Ogre::CompositorPass::_removeAllBarriers |
( |
void |
| ) |
|
|
inherited |
◆ addResourceTransition()
void Ogre::CompositorPass::addResourceTransition |
( |
ResourceLayoutMap::iterator |
currentLayout, |
|
|
ResourceLayout::Layout |
newLayout, |
|
|
uint32 |
readBarrierBits |
|
) |
| |
|
inherited |
◆ execute()
virtual void Ogre::CompositorPassQuad::execute |
( |
const Camera * |
lodCamera | ) |
|
|
virtual |
◆ getActualDimensions()
Vector2 Ogre::CompositorPass::getActualDimensions |
( |
void |
| ) |
const |
|
inherited |
◆ getCamera()
Camera* Ogre::CompositorPassQuad::getCamera |
( |
void |
| ) |
|
|
inline |
◆ getDefinition()
◆ getParentNode()
const CompositorNode* Ogre::CompositorPass::getParentNode |
( |
void |
| ) |
const |
|
inlineinherited |
◆ getPass()
Pass* Ogre::CompositorPassQuad::getPass |
( |
void |
| ) |
|
|
inline |
Don't make this const (useful for compile-time multithreading errors) Pointer can be null if using HLMS.
◆ getRenderPassDesc()
◆ getTextureDependencies()
◆ getType()
◆ notifyCleared()
virtual void Ogre::CompositorPass::notifyCleared |
( |
void |
| ) |
|
|
virtualinherited |
◆ notifyDestroyed() [1/2]
virtual void Ogre::CompositorPass::notifyDestroyed |
( |
TextureGpu * |
channel | ) |
|
|
virtualinherited |
◆ notifyDestroyed() [2/2]
virtual void Ogre::CompositorPass::notifyDestroyed |
( |
const UavBufferPacked * |
buffer | ) |
|
|
virtualinherited |
◆ notifyRecreated() [1/2]
virtual bool Ogre::CompositorPass::notifyRecreated |
( |
const TextureGpu * |
channel | ) |
|
|
virtualinherited |
◆ notifyRecreated() [2/2]
◆ operator delete() [1/3]
◆ operator delete() [2/3]
◆ operator delete() [3/3]
◆ operator delete[]() [1/2]
◆ operator delete[]() [2/2]
◆ operator new() [1/3]
template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new |
( |
size_t |
sz, |
|
|
const char * |
file, |
|
|
int |
line, |
|
|
const char * |
func |
|
) |
| |
|
inlineinherited |
operator new, with debug line info
◆ operator new() [2/3]
◆ operator new() [3/3]
◆ operator new[]() [1/2]
template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] |
( |
size_t |
sz, |
|
|
const char * |
file, |
|
|
int |
line, |
|
|
const char * |
func |
|
) |
| |
|
inlineinherited |
array operator new, with debug line info
◆ operator new[]() [2/2]
◆ profilingBegin()
void Ogre::CompositorPass::profilingBegin |
( |
void |
| ) |
|
|
inherited |
◆ profilingEnd()
void Ogre::CompositorPass::profilingEnd |
( |
void |
| ) |
|
|
inherited |
◆ resetNumPassesLeft()
virtual void Ogre::CompositorPass::resetNumPassesLeft |
( |
void |
| ) |
|
|
virtualinherited |
The documentation for this class was generated from the following file: