SlideShare ist ein Scribd-Unternehmen logo
1 von 81
An Introduction to NV_path_rendering Mark J. Kilgard NVIDIA Corporation June 8, 2011
Purpose of this Presentation ,[object Object],[object Object],[object Object],[object Object],[object Object]
What is path rendering? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
3D Rendering vs. Path Rendering Characteristic GPU 3D rendering Path rendering Dimensionality Projective 3D 2D, typically affine Pixel mapping Resolution independent Resolution independent Occlusion Depth buffering Painter’s algorithm Rendering primitives Points, lines, triangles Paths Primitive constituents Vertices Control points Constituents per primitive 1, 2, or 3 respectively Unbounded Topology of filled primitives Always convex Can be concave, self-intersecting, and have holes Degree of primitives 1 st  order (linear) Up to 3 rd  order (cubic) Rendering modes Filled, wire-frame Filling, stroking Line properties Width, stipple pattern Width, dash pattern, capping, join style Color processing Programmable shading Painting + filter effects Text rendering No direct support (2 nd  class support) Omni-present (1 st  class support) Raster operations Blending Brushes, blend modes, compositing Color model RGB or sRGB RGB, sRGB, CYMK, or grayscale Clipping operations Clip planes, scissoring, stenciling Clipping to an arbitrary clip path Coverage determination Per-color sample Sub-color sample
CPU vs. GPU at Rendering Tasks over Time Pipelined 3D Interactive Rendering Path Rendering Goal of NV_path_rendering is to make path rendering a GPU task
What is NV_path_rendering? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Vertex assembly Primitive assembly Rasterization Fragment operations Display Vertex operations Application Primitive operations Texture memory Pixel assembly (unpack) Pixel operations Pixel pack Vertex pipeline Pixel pipeline Application transform feedback read back Framebuffer Raster operations Path pipeline Path specification Transform path Fill/Stroke Stenciling Fill/Stroke Covering
OpenGL Path Rendering API Structure ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Path Object Management ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Path Specification ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Enumeration of Path Commands ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Path Command Tokens 7 GL_RELATIVE_ARC_TO_NV GL_ARC_TO_NV 0 n/a GL_CLOSE_PATH_NV 5 n/a GL_CIRCULAR_TANGENT_ARC_TO_NV 5 n/a GL_CIRCULAR_CW_ARC_TO_NV 5 n/a GL_CIRCULAR_CCW_ARC_TO_NV 5 GL_RELATIVE_LARGE_CW_ARC_TO_NV GL_LARGE_CW_ARC_TO_NV 5 GL_RELATIVE_LARGE_CCW_ARC_TO_NV GL_LARGE_CCW_ARC_TO_NV 5 GL_RELATIVE_SMALL_CW_ARC_TO_NV GL_SMALL_CW_ARC_TO_NV 5 GL_RELATIVE_SMALL_CCW_ARC_TO_NV GL_SMALL_CCW_ARC_TO_NV 4 GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV GL_SMOOTH_CUBIC_CURVE_TO_NV 2 GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV GL_SMOOTH_QUADRATIC_CURVE_TO_NV 6 GL_RELATIVE_CUBIC_CURVE_TO_NV GL_CUBIC_CURVE_TO_NV 4 GL_RELATIVE_QUADRATIC_CURVE_TO_NV GL_QUADRATIC_CURVE_TO_NV 1 GL_RELATIVE_VERTICAL_LINE_TO_NV GL_VERTICAL_LINE_TO_NV 1 GL_RELATIVE_HORIZONTAL_LINE_TO_NV GL_HORIZONTAL_LINE_TO_NV 2 GL_RELATIVE_LINE_TO_NV GL_LINE_TO_NV 2 GL_RELATIVE_MOVE_TO_NV GL_MOVE_TO_NV Number  of Scalar Coordinates Relative version Command
Path String Format Grammars ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FYI: Complete SVG Grammar ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FYI: Complete PS Grammar (1) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FYI: Complete PS Grammar (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Settable Path Parameters ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],GL_MITER_NV GL_ROUND_NV GL_BEVEL_NV GL_FLAT GL_ROUND_NV GL_SQUARE_NV various dash styles
glPathParameter Parameters Parameter name Type Description PATH_STROKE_WIDTH_NV float Non-negative PATH_INITIAL_END_CAP_NV enum GL_FLAT ,  GL_SQUARE_NV ,  GL_ROUND_NV ,  GL_TRIANGULAR_NV PATH_TERMINAL_END_CAP_NV enum GL_FLAT ,  GL_SQUARE_NV ,  GL_ROUND_NV ,  GL_TRIANGULAR_NV PATH_INITIAL_DASH_CAP_NV  enum GL_FLAT ,  GL_SQUARE_NV ,  GL_ROUND_NV ,  GL_TRIANGULAR_NV PATH_TERMINAL_DASH_CAP_NV  enum GL_FLAT ,  GL_SQUARE_NV ,  GL_ROUND_NV ,  GL_TRIANGULAR_NV PATH_JOIN_STYLE_NV  enum GL_MITER_REVERT_NV ,  GL_MITER_TRUNCATE_NV ,  GL_BEVEL_NV ,  GL_ROUND_NV ,  GL_NONE PATH_MITER_LIMIT_NV  float Non-negative PATH_DASH_OFFSET_NV  float Any value PATH_DASH_OFFSET_RESET_NV  enum GL_MOVE_TO_RESET_NV ,  GL_MOVE_TO_CONTINUES_NV PATH_CLIENT_LENGTH_NV  float Non-negative PATH_SAMPLE_QUALITY_NV  float Clamped to [0,1] range PATH_STROKE_OVERSAMPLE_COUNT_NV  integer  Non-negative PATH_FILL_MODE_NV  enum  GL_COUNT_UP_NV, GL_COUNT_DOWN_NV, GL_INVERT PATH_FILL_MASK_NV  integer  Any value PATH_FILL_COVER_MODE_NV  enum GL_CONVEX_HULL_NV ,  GL_MULTI_HULLS_NV ,  GL_BOUNDING_BOX_NV PATH_STROKE_COVER_MODE_NV  enum GL_CONVEX_HULL_NV ,  GL_MULTI_HULLS_NV ,  GL_BOUNDING_BOX_NV
Dash Array State ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Dashing Content Examples Dashing character outlines for quilted look  Frosting on cake is dashed elliptical arcs with round end caps for “beaded” look; flowers are also dashing Same cake missing dashed stroking details Artist made windows with dashed line segment Technical diagrams and charts often employ dashing All content shown is fully GPU rendered
Rendering Path Objects ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Path Filling vs. Stroking just filling  just stroking  filling + stroke = intended content
Stencil, then Stroke Command Prototypes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Excellent Geometric Fidelity for Stroking ,[object Object],[object Object],[object Object],[object Object],GPU-accelerated OpenVG reference Cairo Qt     Stroking with tight end-point curve
Path Rendering Example (1 of 3) ,[object Object],[object Object],[object Object],even-odd fill style  non-zero fill style
Path Rendering Example (2 of 3) ,[object Object],[object Object],[object Object],[object Object]
Path Rendering Example (3 of 3) ,[object Object],[object Object],[object Object],[object Object],[object Object],non-zero fill style  even-odd fill style
“Stencil, then Cover” Path Fill Stenciling ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],path front-end projective transform clipping & scissoring window, depth & stencil tests path winding number computation stencil update: + ,  - , or  invert stencil buffer per-sample operations  per-path fill region operations path object stencil fill path command sample accessibility Fill stenciling specific
“Stencil, then Cover” Path Fill Covering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],path front-end projective transform clipping & scissoring window, depth & stencil tests programmable path shading stencil update typically zero color buffer per-sample operations  per-path fill region operations path object cover fill path command sample accessibility stencil buffer per-fragment or per-sample shading
Adding Stroking to the Star ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],non-zero fill style  even-odd fill style
“Stencil, then Cover” Path Stroke Stenciling ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],path front-end projective transform clipping & scissoring window, depth & stencil tests stroke point containment stencil update: replace stencil buffer per-sample operations  per-path fill region operations path object stencil stroke path command sample accessibility Stroke stenciling specific
“Stencil, then Cover” Path Stroke Covering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],path front-end projective transform clipping & scissoring window, depth & stencil tests programmable path shading stencil update typically zero color buffer per-sample operations  per-path fill region operations path object cover stroke path command sample accessibility stencil buffer per-fragment or per-sample shading
Path Object State ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Path Object Queries ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Supported Glyph Metrics ,[object Object],[object Object],Horizontal metrics  Vertical metrics  Image credit:  FreeType 2 Tutorial
Per-Glyph Metric Names Bit field name Glyph metric tag Bit number from LSB in bitmask Description GL_GLYPH_WIDTH_BIT_NV  width 0 Glyph's width GL_GLYPH_HEIGHT_BIT_NV height 1 Glyph's height GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV hBearingX 2 Left side bearing for horizontal layout GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV hBearingY 3 Top side bearing for horizontal layout GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV hAdvance 4 Advance width for horizontal layout GL_GLYPH_VERTICAL_BEARING_X_BIT_NV vBearingX 5 Left side bearing for vertical layout GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV vBearingY 6 Top side bearing for vertical layout GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV vAdvance 7 Advance height for vertical layout GL_GLYPH_HAS_KERNING_NV - 8 True if glyph has a kerning table
Per-Font Face Metric Names Bit field name Bit number from LSB in bitmask Description GL_FONT_X_MIN_BOUNDS_NV 16 Horizontal minimum (left-most) of the font bounding box.  The font bounding box (this metric and the next 3) is large enough to contain any glyph from the font face. GL_FONT_Y_MIN_BOUNDS_NV 17 Vertical minimum (bottom-most) of the font bounding box. GL_FONT_X_MAX_BOUNDS_NV 18 Horizontal maximum (right-most) of the font bounding box. GL_FONT_Y_MAX_BOUNDS_NV 29 Vertical maximum (top-most) of the font bounding box. GL_FONT_UNITS_PER_EM_NV 20 Number of units in path space (font units) per Em square for this font face.  This is typically 2048 for TrueType fonts, and 1000 for PostScript fonts. GL_FONT_ASCENDER_NV 21 Typographic ascender of the font face.  For font formats not supplying this information, this value is the same as GL_FONT_Y_MAX_BOUNDS_NV. GL_FONT_DESCENDER_NV 22 Typographic descender of the font face (always a positive value).  For font formats not supplying this information, this value is the same as GL_FONT_Y_MIN_BOUNDS_NV. GL_FONT_HEIGHT_NV 23 Vertical distance between two consecutive baselines in the font face (always a positive value). GL_FONT_MAX_ADVANCE_WIDTH_NV 24 Maximal advance width for all glyphs in this font face.  (Intended to make word wrapping computations easier.) GL_FONT_MAX_ADVANCE_HEIGHT_NV 25 Maximal advance height for all glyphs in this font face for vertical layout.  For font formats not supplying this information, this value is the same as GL_FONT_HEIGHT_NV. GL_FONT_UNDERLINE_POSITION_NV 26 Position of the underline line for this font face.  This position is the center of the underling stem. GL_FONT_UNDERLINE_THICKNESS_NV 27 Thickness of the underline of this font face. GL_FONT_HAS_KERNING_NV 28 True if font face provides a kerning table
Glyph Spacing, including Kerning ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Instanced Path Rendering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Instanced  Filling Function Prototypes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Filling specific parameters
Instanced  Stroking Function Prototypes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Stroking specific parameters
First-class, Resolution-independent Font Support ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Three Ways to Specify a Font ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Font API Example: Initialization ,[object Object],[object Object],[object Object]
Font API Example: Initialization ,[object Object],[object Object],[object Object]
Font API Example: Pre-rendering ,[object Object],[object Object],[object Object]
Path API Example: Rendering ,[object Object],[object Object],[object Object]
Font API Example: Loose Ends ,[object Object],[object Object]
Mapping Entire Font Character Set ,[object Object],[object Object],[object Object],[object Object]
Naming Sequences of Path Objects ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Handling Common Path Rendering Functionality: Filtering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],   GPU    Qt    Cairo Moiré artifacts
Handling Uncommon Path Rendering Functionality:  Projection ,[object Object],[object Object]
Projective Path Rendering Support Compared    GPU flawless    Skia yes, but bugs    Cairo unsupported    Qt unsupported correct wrong correct correct unsupported unsupported unsupported unsupported
Path Geometric Queries ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Accessible Samples of a Transformed Path ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mixing Depth Buffering and Path Rendering ,[object Object],[object Object],[object Object]
3D Path Rendering Details ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Without glPathStencilDepthOffset Bad Things Happen ,[object Object],[object Object],terrible z-fighting artifacts
Path Transformation Process Path object Modelview matrix Projection matrix User-defined clip planes View-frustum clip planes Object-space color/fog/tex generation Eye-space color/fog/tex generation to path stenciling or covering object-space coordinates  (x,y,0,1)  eye-space coordinates  (xe,ye,ze,we) + attributes  clipped eye-space coordinates  (xe,ye,ze,we) + attributes  clip-space coordinates  (xc,yc,zc,wc) + attributes  clipped clip-space  coordinates  (xc,yc,zc,wc) + attributes color/fog/tex coords. color/fog/tex coordinates
Clip Planes Work with Path Rendering ,[object Object]
Path Rendering Works with Scissoring and Stippling too ,[object Object],[object Object]
Rendering Paths Clipped to Some Other Arbitrary Path ,[object Object],unclipped tiger tiger with pink background clipped to heart
Complex Clipping Example cowboy clip is the union of 1,366 paths tiger is 240 paths result of clipping tiger to the union of all the cowboy paths
Arbitrary Programmable GPU Shading with Path Rendering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Example of Bump Mapping on Path Rendered Text ,[object Object],light source position
Antialiasing Discussion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Anti-aliasing Strategy Benefits ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],GPU rendered coverage NOT conflated with opacity Cairo, Qt, Skia, and Direct2D rendered shows dark cracks artifacts due to conflating coverage with opacity, notice background bleeding artifacts
GPU Advantages ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Improved Color Space: sRGB Path Rendering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],   linear RGB transition between saturated red and saturated blue has dark purple region    sRGB perceptually smooth transition from saturated red to saturated blue Radial color gradient example moving from saturated red to blue
Benchmark Scenes Tiger Dragon Round Dogs Butterfly Spikes Coat of Arms Cowboy Buonaparte Embrace Japanese Strokes
GPU-accelerated Path Rendering Speed Factor
Benchmark Test Configuration & Assumptions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Getting a Driver with NV_path_rendering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Learning NV_path_rendering ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
NV_path_rendering SDK Examples ,[object Object],[object Object],[object Object],[object Object],[object Object]
SDK Example Walkthrough (1) pr_basic : simplest example of path filling & stroking pr_hello_world:  kerned, underlined, stroked, and linear gradient filled text pr_gradient:  path with holes with texture applied pr_welsh_dragon:  filled layers
SDK Example Walkthrough (2) pr_font_file : loading glyphs from a font file with the GL_FONT_FILE_NV target pr_korean : rendering UTF-8 string of Korean characters pr_shaders:  use Cg shaders to bump map text with brick-wall texture
SDK Example Walkthrough (3) pr_text_wheel : render projected gradient text as spokes of a wheel pr_tiger : classic PostScript tiger rendered as filled & stroked path layers pr_warp_tiger:  warp the tiger with a free projective transform click & drag the bounding rectangle corners to change the projection
SDK Example Walkthrough (4) pr_tiger3d : multiple projected and depth tested tigers + 3D teapot + overlaid text pr_svg : GPU-accelerated SVG viewer pr_pick:  test points to determine if they are in the filled and/or stroked region of a complex path
Very close to fully functional but… Errata—a few things not working  yet ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resources, Feedback, and Contacts ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

GPU-accelerated Path Rendering
GPU-accelerated Path RenderingGPU-accelerated Path Rendering
GPU-accelerated Path RenderingMark Kilgard
 
CS 354 Project 2 and Compression
CS 354 Project 2 and CompressionCS 354 Project 2 and Compression
CS 354 Project 2 and CompressionMark Kilgard
 
SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012Mark Kilgard
 
CS 354 Interaction
CS 354 InteractionCS 354 Interaction
CS 354 InteractionMark Kilgard
 
GTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path RenderingGTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path Rendering Mark Kilgard
 
GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012Mark Kilgard
 
OpenGL 3.2 and More
OpenGL 3.2 and MoreOpenGL 3.2 and More
OpenGL 3.2 and MoreMark Kilgard
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondMark Kilgard
 
CS 354 Introduction
CS 354 IntroductionCS 354 Introduction
CS 354 IntroductionMark Kilgard
 
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingSIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingMark Kilgard
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingMark Kilgard
 
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Mark Kilgard
 
CS 354 Final Exam Review
CS 354 Final Exam ReviewCS 354 Final Exam Review
CS 354 Final Exam ReviewMark Kilgard
 
CS 354 More Graphics Pipeline
CS 354 More Graphics PipelineCS 354 More Graphics Pipeline
CS 354 More Graphics PipelineMark Kilgard
 
CS 354 Viewing Stuff
CS 354 Viewing StuffCS 354 Viewing Stuff
CS 354 Viewing StuffMark Kilgard
 
NVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityNVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityMark Kilgard
 
OpenGL Shading Language
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading LanguageJungsoo Nam
 
CS 354 Texture Mapping
CS 354 Texture MappingCS 354 Texture Mapping
CS 354 Texture MappingMark Kilgard
 
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsCS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsMark Kilgard
 

Was ist angesagt? (20)

GPU-accelerated Path Rendering
GPU-accelerated Path RenderingGPU-accelerated Path Rendering
GPU-accelerated Path Rendering
 
CS 354 Project 2 and Compression
CS 354 Project 2 and CompressionCS 354 Project 2 and Compression
CS 354 Project 2 and Compression
 
SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012
 
CS 354 Interaction
CS 354 InteractionCS 354 Interaction
CS 354 Interaction
 
GTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path RenderingGTC 2012: GPU-Accelerated Path Rendering
GTC 2012: GPU-Accelerated Path Rendering
 
GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012
 
OpenGL 3.2 and More
OpenGL 3.2 and MoreOpenGL 3.2 and More
OpenGL 3.2 and More
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
 
CS 354 Introduction
CS 354 IntroductionCS 354 Introduction
CS 354 Introduction
 
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingSIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
 
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
 
CS 354 Final Exam Review
CS 354 Final Exam ReviewCS 354 Final Exam Review
CS 354 Final Exam Review
 
CS 354 More Graphics Pipeline
CS 354 More Graphics PipelineCS 354 More Graphics Pipeline
CS 354 More Graphics Pipeline
 
CS 354 Viewing Stuff
CS 354 Viewing StuffCS 354 Viewing Stuff
CS 354 Viewing Stuff
 
NVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityNVIDIA's OpenGL Functionality
NVIDIA's OpenGL Functionality
 
OpenGL Shading Language
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading Language
 
CS 354 Texture Mapping
CS 354 Texture MappingCS 354 Texture Mapping
CS 354 Texture Mapping
 
CS 354 Typography
CS 354 TypographyCS 354 Typography
CS 354 Typography
 
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsCS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
 

Ähnlich wie An Introduction to NV_path_rendering

Getting Started with NV_path_rendering
Getting Started with NV_path_renderingGetting Started with NV_path_rendering
Getting Started with NV_path_renderingMark Kilgard
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsMark Kilgard
 
NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016Mark Kilgard
 
SVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generationSVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generationAnthony Starks
 
INAC Online Hazards Database App
INAC Online Hazards Database AppINAC Online Hazards Database App
INAC Online Hazards Database AppGerry James
 
Professional reports with SVG
Professional reports with SVGProfessional reports with SVG
Professional reports with SVGSpeedPartner GmbH
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)Filip Van Laenen
 
Introduction To Geometry Shaders
Introduction To Geometry ShadersIntroduction To Geometry Shaders
Introduction To Geometry Shaderspjcozzi
 
Introduction to GGVIS Visualization
Introduction to GGVIS VisualizationIntroduction to GGVIS Visualization
Introduction to GGVIS VisualizationHemantSingh311
 
Greg Hogan – To Petascale and Beyond- Apache Flink in the Clouds
Greg Hogan – To Petascale and Beyond- Apache Flink in the CloudsGreg Hogan – To Petascale and Beyond- Apache Flink in the Clouds
Greg Hogan – To Petascale and Beyond- Apache Flink in the CloudsFlink Forward
 
ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...
ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...
ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...Thejaka Amila Kanewala, Ph.D.
 
Fast & Energy-Efficient Breadth-First Search on a Single NUMA System
Fast & Energy-Efficient Breadth-First Search on a Single NUMA SystemFast & Energy-Efficient Breadth-First Search on a Single NUMA System
Fast & Energy-Efficient Breadth-First Search on a Single NUMA SystemYuichiro Yasui
 
Visualization of Big Data in Web Apps
Visualization of Big Data in Web AppsVisualization of Big Data in Web Apps
Visualization of Big Data in Web AppsEPAM
 
Rotoscope inthebrowserppt billy
Rotoscope inthebrowserppt billyRotoscope inthebrowserppt billy
Rotoscope inthebrowserppt billynimbleltd
 
Creating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsCreating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsDavid Keener
 

Ähnlich wie An Introduction to NV_path_rendering (20)

Getting Started with NV_path_rendering
Getting Started with NV_path_renderingGetting Started with NV_path_rendering
Getting Started with NV_path_rendering
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional Improvements
 
NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016
 
SVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generationSVGo: a Go Library for SVG generation
SVGo: a Go Library for SVG generation
 
INAC Online Hazards Database App
INAC Online Hazards Database AppINAC Online Hazards Database App
INAC Online Hazards Database App
 
Professional reports with SVG
Professional reports with SVGProfessional reports with SVG
Professional reports with SVG
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)
 
SVGD3Angular2React
SVGD3Angular2ReactSVGD3Angular2React
SVGD3Angular2React
 
Introduction To Geometry Shaders
Introduction To Geometry ShadersIntroduction To Geometry Shaders
Introduction To Geometry Shaders
 
Chapter-3.pdf
Chapter-3.pdfChapter-3.pdf
Chapter-3.pdf
 
Introduction to GGVIS Visualization
Introduction to GGVIS VisualizationIntroduction to GGVIS Visualization
Introduction to GGVIS Visualization
 
Greg Hogan – To Petascale and Beyond- Apache Flink in the Clouds
Greg Hogan – To Petascale and Beyond- Apache Flink in the CloudsGreg Hogan – To Petascale and Beyond- Apache Flink in the Clouds
Greg Hogan – To Petascale and Beyond- Apache Flink in the Clouds
 
ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...
ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...
ABSTRACT GRAPH MACHINE: MODELING ORDERINGS IN ASYNCHRONOUS DISTRIBUTED-MEMORY...
 
Fast & Energy-Efficient Breadth-First Search on a Single NUMA System
Fast & Energy-Efficient Breadth-First Search on a Single NUMA SystemFast & Energy-Efficient Breadth-First Search on a Single NUMA System
Fast & Energy-Efficient Breadth-First Search on a Single NUMA System
 
Visualization of Big Data in Web Apps
Visualization of Big Data in Web AppsVisualization of Big Data in Web Apps
Visualization of Big Data in Web Apps
 
Rotoscope inthebrowserppt billy
Rotoscope inthebrowserppt billyRotoscope inthebrowserppt billy
Rotoscope inthebrowserppt billy
 
Creating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector GraphicsCreating Custom Charts With Ruby Vector Graphics
Creating Custom Charts With Ruby Vector Graphics
 
HTML5 & SVG in Cartography - Workshop
HTML5 & SVG in Cartography - WorkshopHTML5 & SVG in Cartography - Workshop
HTML5 & SVG in Cartography - Workshop
 
pastel
pastelpastel
pastel
 
pastel
pastelpastel
pastel
 

Mehr von Mark Kilgard

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...Mark Kilgard
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsMark Kilgard
 
NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017Mark Kilgard
 
NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017Mark Kilgard
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsMark Kilgard
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMark Kilgard
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectanglesMark Kilgard
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineMark Kilgard
 
OpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsOpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsMark Kilgard
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardMark Kilgard
 
CS 354 Acceleration Structures
CS 354 Acceleration StructuresCS 354 Acceleration Structures
CS 354 Acceleration StructuresMark Kilgard
 
CS 354 Global Illumination
CS 354 Global IlluminationCS 354 Global Illumination
CS 354 Global IlluminationMark Kilgard
 

Mehr von Mark Kilgard (13)

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School Students
 
NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017
 
NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUs
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to Vulkan
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectangles
 
OpenGL for 2015
OpenGL for 2015OpenGL for 2015
OpenGL for 2015
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
 
OpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsOpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUs
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforward
 
CS 354 Acceleration Structures
CS 354 Acceleration StructuresCS 354 Acceleration Structures
CS 354 Acceleration Structures
 
CS 354 Global Illumination
CS 354 Global IlluminationCS 354 Global Illumination
CS 354 Global Illumination
 

Kürzlich hochgeladen

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 

Kürzlich hochgeladen (20)

Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

An Introduction to NV_path_rendering

  • 1. An Introduction to NV_path_rendering Mark J. Kilgard NVIDIA Corporation June 8, 2011
  • 2.
  • 3.
  • 4. 3D Rendering vs. Path Rendering Characteristic GPU 3D rendering Path rendering Dimensionality Projective 3D 2D, typically affine Pixel mapping Resolution independent Resolution independent Occlusion Depth buffering Painter’s algorithm Rendering primitives Points, lines, triangles Paths Primitive constituents Vertices Control points Constituents per primitive 1, 2, or 3 respectively Unbounded Topology of filled primitives Always convex Can be concave, self-intersecting, and have holes Degree of primitives 1 st order (linear) Up to 3 rd order (cubic) Rendering modes Filled, wire-frame Filling, stroking Line properties Width, stipple pattern Width, dash pattern, capping, join style Color processing Programmable shading Painting + filter effects Text rendering No direct support (2 nd class support) Omni-present (1 st class support) Raster operations Blending Brushes, blend modes, compositing Color model RGB or sRGB RGB, sRGB, CYMK, or grayscale Clipping operations Clip planes, scissoring, stenciling Clipping to an arbitrary clip path Coverage determination Per-color sample Sub-color sample
  • 5. CPU vs. GPU at Rendering Tasks over Time Pipelined 3D Interactive Rendering Path Rendering Goal of NV_path_rendering is to make path rendering a GPU task
  • 6.
  • 7. Vertex assembly Primitive assembly Rasterization Fragment operations Display Vertex operations Application Primitive operations Texture memory Pixel assembly (unpack) Pixel operations Pixel pack Vertex pipeline Pixel pipeline Application transform feedback read back Framebuffer Raster operations Path pipeline Path specification Transform path Fill/Stroke Stenciling Fill/Stroke Covering
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. Path Command Tokens 7 GL_RELATIVE_ARC_TO_NV GL_ARC_TO_NV 0 n/a GL_CLOSE_PATH_NV 5 n/a GL_CIRCULAR_TANGENT_ARC_TO_NV 5 n/a GL_CIRCULAR_CW_ARC_TO_NV 5 n/a GL_CIRCULAR_CCW_ARC_TO_NV 5 GL_RELATIVE_LARGE_CW_ARC_TO_NV GL_LARGE_CW_ARC_TO_NV 5 GL_RELATIVE_LARGE_CCW_ARC_TO_NV GL_LARGE_CCW_ARC_TO_NV 5 GL_RELATIVE_SMALL_CW_ARC_TO_NV GL_SMALL_CW_ARC_TO_NV 5 GL_RELATIVE_SMALL_CCW_ARC_TO_NV GL_SMALL_CCW_ARC_TO_NV 4 GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV GL_SMOOTH_CUBIC_CURVE_TO_NV 2 GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV GL_SMOOTH_QUADRATIC_CURVE_TO_NV 6 GL_RELATIVE_CUBIC_CURVE_TO_NV GL_CUBIC_CURVE_TO_NV 4 GL_RELATIVE_QUADRATIC_CURVE_TO_NV GL_QUADRATIC_CURVE_TO_NV 1 GL_RELATIVE_VERTICAL_LINE_TO_NV GL_VERTICAL_LINE_TO_NV 1 GL_RELATIVE_HORIZONTAL_LINE_TO_NV GL_HORIZONTAL_LINE_TO_NV 2 GL_RELATIVE_LINE_TO_NV GL_LINE_TO_NV 2 GL_RELATIVE_MOVE_TO_NV GL_MOVE_TO_NV Number of Scalar Coordinates Relative version Command
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. glPathParameter Parameters Parameter name Type Description PATH_STROKE_WIDTH_NV float Non-negative PATH_INITIAL_END_CAP_NV enum GL_FLAT , GL_SQUARE_NV , GL_ROUND_NV , GL_TRIANGULAR_NV PATH_TERMINAL_END_CAP_NV enum GL_FLAT , GL_SQUARE_NV , GL_ROUND_NV , GL_TRIANGULAR_NV PATH_INITIAL_DASH_CAP_NV enum GL_FLAT , GL_SQUARE_NV , GL_ROUND_NV , GL_TRIANGULAR_NV PATH_TERMINAL_DASH_CAP_NV enum GL_FLAT , GL_SQUARE_NV , GL_ROUND_NV , GL_TRIANGULAR_NV PATH_JOIN_STYLE_NV enum GL_MITER_REVERT_NV , GL_MITER_TRUNCATE_NV , GL_BEVEL_NV , GL_ROUND_NV , GL_NONE PATH_MITER_LIMIT_NV float Non-negative PATH_DASH_OFFSET_NV float Any value PATH_DASH_OFFSET_RESET_NV enum GL_MOVE_TO_RESET_NV , GL_MOVE_TO_CONTINUES_NV PATH_CLIENT_LENGTH_NV float Non-negative PATH_SAMPLE_QUALITY_NV float Clamped to [0,1] range PATH_STROKE_OVERSAMPLE_COUNT_NV integer Non-negative PATH_FILL_MODE_NV enum GL_COUNT_UP_NV, GL_COUNT_DOWN_NV, GL_INVERT PATH_FILL_MASK_NV integer Any value PATH_FILL_COVER_MODE_NV enum GL_CONVEX_HULL_NV , GL_MULTI_HULLS_NV , GL_BOUNDING_BOX_NV PATH_STROKE_COVER_MODE_NV enum GL_CONVEX_HULL_NV , GL_MULTI_HULLS_NV , GL_BOUNDING_BOX_NV
  • 19.
  • 20. Dashing Content Examples Dashing character outlines for quilted look Frosting on cake is dashed elliptical arcs with round end caps for “beaded” look; flowers are also dashing Same cake missing dashed stroking details Artist made windows with dashed line segment Technical diagrams and charts often employ dashing All content shown is fully GPU rendered
  • 21.
  • 22. Path Filling vs. Stroking just filling just stroking filling + stroke = intended content
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36. Per-Glyph Metric Names Bit field name Glyph metric tag Bit number from LSB in bitmask Description GL_GLYPH_WIDTH_BIT_NV width 0 Glyph's width GL_GLYPH_HEIGHT_BIT_NV height 1 Glyph's height GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV hBearingX 2 Left side bearing for horizontal layout GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV hBearingY 3 Top side bearing for horizontal layout GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV hAdvance 4 Advance width for horizontal layout GL_GLYPH_VERTICAL_BEARING_X_BIT_NV vBearingX 5 Left side bearing for vertical layout GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV vBearingY 6 Top side bearing for vertical layout GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV vAdvance 7 Advance height for vertical layout GL_GLYPH_HAS_KERNING_NV - 8 True if glyph has a kerning table
  • 37. Per-Font Face Metric Names Bit field name Bit number from LSB in bitmask Description GL_FONT_X_MIN_BOUNDS_NV 16 Horizontal minimum (left-most) of the font bounding box. The font bounding box (this metric and the next 3) is large enough to contain any glyph from the font face. GL_FONT_Y_MIN_BOUNDS_NV 17 Vertical minimum (bottom-most) of the font bounding box. GL_FONT_X_MAX_BOUNDS_NV 18 Horizontal maximum (right-most) of the font bounding box. GL_FONT_Y_MAX_BOUNDS_NV 29 Vertical maximum (top-most) of the font bounding box. GL_FONT_UNITS_PER_EM_NV 20 Number of units in path space (font units) per Em square for this font face. This is typically 2048 for TrueType fonts, and 1000 for PostScript fonts. GL_FONT_ASCENDER_NV 21 Typographic ascender of the font face. For font formats not supplying this information, this value is the same as GL_FONT_Y_MAX_BOUNDS_NV. GL_FONT_DESCENDER_NV 22 Typographic descender of the font face (always a positive value). For font formats not supplying this information, this value is the same as GL_FONT_Y_MIN_BOUNDS_NV. GL_FONT_HEIGHT_NV 23 Vertical distance between two consecutive baselines in the font face (always a positive value). GL_FONT_MAX_ADVANCE_WIDTH_NV 24 Maximal advance width for all glyphs in this font face. (Intended to make word wrapping computations easier.) GL_FONT_MAX_ADVANCE_HEIGHT_NV 25 Maximal advance height for all glyphs in this font face for vertical layout. For font formats not supplying this information, this value is the same as GL_FONT_HEIGHT_NV. GL_FONT_UNDERLINE_POSITION_NV 26 Position of the underline line for this font face. This position is the center of the underling stem. GL_FONT_UNDERLINE_THICKNESS_NV 27 Thickness of the underline of this font face. GL_FONT_HAS_KERNING_NV 28 True if font face provides a kerning table
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53. Projective Path Rendering Support Compared  GPU flawless  Skia yes, but bugs  Cairo unsupported  Qt unsupported correct wrong correct correct unsupported unsupported unsupported unsupported
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59. Path Transformation Process Path object Modelview matrix Projection matrix User-defined clip planes View-frustum clip planes Object-space color/fog/tex generation Eye-space color/fog/tex generation to path stenciling or covering object-space coordinates (x,y,0,1) eye-space coordinates (xe,ye,ze,we) + attributes clipped eye-space coordinates (xe,ye,ze,we) + attributes clip-space coordinates (xc,yc,zc,wc) + attributes clipped clip-space coordinates (xc,yc,zc,wc) + attributes color/fog/tex coords. color/fog/tex coordinates
  • 60.
  • 61.
  • 62.
  • 63. Complex Clipping Example cowboy clip is the union of 1,366 paths tiger is 240 paths result of clipping tiger to the union of all the cowboy paths
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70. Benchmark Scenes Tiger Dragon Round Dogs Butterfly Spikes Coat of Arms Cowboy Buonaparte Embrace Japanese Strokes
  • 72.
  • 73.
  • 74.
  • 75.
  • 76. SDK Example Walkthrough (1) pr_basic : simplest example of path filling & stroking pr_hello_world: kerned, underlined, stroked, and linear gradient filled text pr_gradient: path with holes with texture applied pr_welsh_dragon: filled layers
  • 77. SDK Example Walkthrough (2) pr_font_file : loading glyphs from a font file with the GL_FONT_FILE_NV target pr_korean : rendering UTF-8 string of Korean characters pr_shaders: use Cg shaders to bump map text with brick-wall texture
  • 78. SDK Example Walkthrough (3) pr_text_wheel : render projected gradient text as spokes of a wheel pr_tiger : classic PostScript tiger rendered as filled & stroked path layers pr_warp_tiger: warp the tiger with a free projective transform click & drag the bounding rectangle corners to change the projection
  • 79. SDK Example Walkthrough (4) pr_tiger3d : multiple projected and depth tested tigers + 3D teapot + overlaid text pr_svg : GPU-accelerated SVG viewer pr_pick: test points to determine if they are in the filled and/or stroked region of a complex path
  • 80.
  • 81.

Hinweis der Redaktion

  1. NV_path_rendering provides a new third pipeline—in addition to the vertex and pixel pipelines—for rendering pixels