CINXE.COM

OpenGL 4.5 Update for NVIDIA GPUs | PPT | Free Download

<!DOCTYPE html><html lang="en"><script id="gtm"> performance.mark('gtm.start'); (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; j.onload = function () { performance.mark('gtm.end'); performance.measure('gtm', 'gtm.start', 'gtm.end'); }; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-M36RG8PT'); </script><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="shortcut icon" href="https://public.slidesharecdn.com/_next/static/media/favicon.7bc3d920.ico"/><script> window.eventsToSend = window.eventsToSend || [] window.eventsToSend.push({ name: "page_rendering", timestamp: new Date().toISOString(), value: JSON.stringify({ time: performance?.now() }) }) </script><script type="speculationrules">{"prerender":[{"where":{"and":[{"href_matches":"/slideshow/*"}]},"eagerness":"moderate"}]}</script><title>OpenGL 4.5 Update for NVIDIA GPUs | PPT | Free Download</title><meta name="robots" content="index, follow"/><meta name="title" content="OpenGL 4.5 Update for NVIDIA GPUs"/><meta name="description" content="OpenGL 4.5 Update for NVIDIA GPUs - Download as a PDF or view online for free"/><link rel="canonical" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750"/><link rel="alternate" hrefLang="en" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750"/><link rel="alternate" hrefLang="x-default" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750"/><link rel="preconnect" href="https://a.pub.network/" crossorigin="anonymous"/><link rel="preconnect" href="https://b.pub.network/" crossorigin="anonymous"/><link rel="preconnect" href="https://c.pub.network/" crossorigin="anonymous"/><link rel="preconnect" href="https://d.pub.network/" crossorigin="anonymous"/><link rel="preconnect" href="https://c.amazon-adsystem.com" crossorigin="anonymous"/><link rel="preconnect" href="https://s.amazon-adsystem.com" crossorigin="anonymous"/><link rel="preconnect" href="https://secure.quantserve.com/" crossorigin="anonymous"/><link rel="preconnect" href="https://rules.quantcount.com/" crossorigin="anonymous"/><link rel="preconnect" href="https://pixel.quantserve.com/" crossorigin="anonymous"/><link rel="preconnect" href="https://btloader.com/" crossorigin="anonymous"/><link rel="preconnect" href="https://api.btloader.com/" crossorigin="anonymous"/><link rel="preconnect" href="https://confiant-integrations.global.ssl.fastly.net" crossorigin="anonymous"/><link rel="preload" href="https://a.pub.network/slideshare-net/pubfig.min.js" as="script"/><script> window.freestarReactCompontentLoaded = true; // Prevents Freestar from appending the script a second time; typo is theirs window.freestar = window.freestar || { queue: [] }; window.freestar.config = freestar.config || {}; window.freestar.config.disabledProducts = { googleInterstitial: false, }; window.eventsToSend = window.eventsToSend || []; window.freestar.queue.push(function () { window.eventsToSend.push({ name: "freestar_queue_start", timestamp: new Date().toISOString() }) }); </script><meta name="twitter:site" content="@SlideShare"/><meta name="twitter:card" content="player"/><meta name="twitter:title" content="OpenGL 4.5 Update for NVIDIA GPUs"/><meta name="twitter:description" content="OpenGL 4.5 Update for NVIDIA GPUs - Download as a PDF or view online for free"/><meta name="twitter:image" content="https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2014-opengl-4-140812133653-phpapp01-thumbnail.jpg?width=640&amp;height=640&amp;fit=bounds"/><meta name="twitter:image:alt" content="OpenGL 4.5 Update for NVIDIA GPUs"/><meta name="twitter:player" content="https://www.slideshare.net/slideshow/embed_code/key/3TwMAztPPZiShG"/><meta name="twitter:player:width" content="597"/><meta name="twitter:player:height" content="486"/><meta name="twitter:app:name:googleplay" content="SlideShare Android"/><meta name="twitter:app:id:googleplay" content="net.slideshare.mobile"/><meta name="twitter:app:name:iphone" content="SlideShare iOS"/><meta name="twitter:app:id:iphone" content="917418728"/><meta name="twitter:app:url:iphone" content="slideshare-app://ss/165952101"/><meta name="twitter:app:name:ipad" content="SlideShare iOS"/><meta name="twitter:app:id:ipad" content="917418728"/><meta name="twitter:app:url:ipad" content="slideshare-app://ss/165952101"/><meta property="og:site_name" content="SlideShare"/><meta property="og:type" content="website"/><meta property="og:url" content="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750"/><meta property="og:title" content="OpenGL 4.5 Update for NVIDIA GPUs"/><meta property="og:description" content="OpenGL 4.5 Update for NVIDIA GPUs - Download as a PDF or view online for free"/><meta property="og:image" content="https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2014-opengl-4-140812133653-phpapp01-thumbnail.jpg?width=640&amp;height=640&amp;fit=bounds"/><meta property="og:image:alt" content="OpenGL 4.5 Update for NVIDIA GPUs"/><meta property="og:image:type" content="image/webp"/><meta property="og:image:width" content="640"/><meta property="og:image:height" content="360"/><script type="application/ld+json">{"@context":"http://schema.org","@type":"CreativeWork","name":"OpenGL 4.5 Update for NVIDIA GPUs","description":"presented at SIGGRAPH 2014 in Vancouver during NVIDIA's \"Best of GTC\" sponsored sessions\r\n\r\n http://www.nvidia.com/object/siggraph2014-best-gtc.html\r\n\r\nWatch the replay that includes a demo of GPU-accelerated Illustrator and several OpenGL 4 demos running on NVIDIA's Tegra Shield tablet.\r\n\r\n http://www.ustream.tv/recorded/51255959\r\n\r\nFind out more about the OpenGL examples for GameWorks:\r\n\r\n https://developer.nvidia.com/gameworks-opengl-samples","url":"https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750","datePublished":"2014-08-12 13:36:53 UTC","publisher":{"@type":"Organization","name":"Slideshare","url":"https://www.slideshare.net/"},"encodingFormat":"application/pdf","fileFormat":"pdf","inLanguage":"en","mainEntityOfPage":{"@type":"WebPage","@id":"https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750"}}</script><script type="application/ld+json">{"@context":"https://schema.org/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.slideshare.net"},{"@type":"ListItem","position":2,"name":"Technology","item":"https://www.slideshare.net/category/technology"},{"@type":"ListItem","position":3,"name":"OpenGL 4.5 Update for NVIDIA GPUs","item":"https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750"}]}</script><script> freestar.queue.push(function() { googletag.pubads().setTargeting('test', []); }); </script><meta name="next-head-count" content="56"/><link rel="preload" href="https://public.slidesharecdn.com/_next/static/media/9c20d643cc03e499-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="https://public.slidesharecdn.com/_next/static/media/a9b61b60c2d733b4-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><noscript data-n-css=""></noscript><link rel="preload" href="https://cmp.osano.com/AzZdHGSGtpxCq1Cpt/079b27eb-bb3f-48dd-9bd9-3feb8aec3c38/osano.js" as="script"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/webpack-fca657b2df1193b1.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/framework-0dfcca9a5dec51b3.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/main-4b9e5138f827276f.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/pages/_app-11440cd5307a400e.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/5121-c12bfd4bed7c2139.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/5581-c31338dd77890eb2.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/4740-639dc16ecd764905.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/6229-23a3a93a4fd8bda9.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/chunks/pages/slideshow/%5Btitle%5D/%5Bid%5D-451dcf877ad69f2b.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/24d6d1951e60542c5d6ed68398963595c0cca34b/_buildManifest.js"/><link rel="preload" as="script" href="https://public.slidesharecdn.com/_next/static/24d6d1951e60542c5d6ed68398963595c0cca34b/_ssgManifest.js"/><style>:root{--black:#000;--white:#fff;--alice-blue-100:#f5fcff;--alice-blue-200:#f2faff;--alice-blue-600:#ddf1f9;--celadon-blue:#027eb0;--celadon-blue-dark:#026c97;--midnight-green-dark:#002e3c;--light-gray:#e9edf8;--pale-gray:#fdfdfd;--snow-gray:#f3f6fd;--snow-gray-100:#f9faff;--blue-gray-100:#f5f6fa;--blue-gray-200:#e3e6f0;--blue-gray-300:#d0d6e6;--blue-gray-400:#b4bbd1;--blue-gray-500:#989fbc;--blue-gray-600:#636c8b;--blue-gray-700:#424766;--blue-gray-800:#212240;--blue-gray-900:#0e0f25;--blue-300:#005e93;--blue-200:#0076b9;--blue-100:#e7f5fc;--gray-500:#303133;--tangerine-100:#fbedd8;--color-info:#3aa7ea;--color-error:#bf3131;--color-success:#337c41;--color-warning:#cd5308;--color-error-red-100:#f2dede;--celadon-blue-rgb:2,126,176;--blue-gray-600-rgb:99,108,139;--color-twitter:#1da1f2;--color-twitter-hover:#1a91da;--color-facebook:#3b5998;--color-facebook-hover:#3c5586;--color-linkedin:#337ab1;--color-linkedin-hover:#2e6e9f;--color-scribd:#1e7b85;--color-scribd-hover:#1d7680;--color-sms:#3b3835;--color-email:#bbc4c8;color-scheme:only light;--header-height:64px;--toolbar-height:54px;--progress-bar-height:8px;--pushdown-height:90px;--adhesion-height:0px;--key-moments-size:140px;--sidebar-size:404px;--metadata-toolbar-height:100px;--metadata-toolbar-offset:0px;--metadata-toolbar-shadow-opacity:0;--actions-menu-height:74px;--max-content-width:1688px;--border-radius:8px;--sticky-index:8;--header-index:11;--dropdown-index:99;--freestar-index:999;--progress-bar-index:9999;--popup-index:9999;--toast-index:99999;--pointly-index:2;--slide-actions-index:3;--font-weight-light:300;--font-weight-regular:400;--font-weight-medium:600;--font-weight-bold:700;--font-weight-black:900;--font-size-large:16px;--font-size-medium:14px;--font-size-small:12px;--font-size-xsmall:10px;--line-height-relax:1.5;--line-height-compact:1.15;--line-height-tight:1;--ease:cubic-bezier(0.2,0,0,1)}@media screen and (max-width:1249px){:root{--sidebar-size:364px}}@media screen and (max-width:1024px){:root{--header-height:75px}}@media screen and (max-width:767px){:root{--pushdown-height:50px}}@media only screen and (min-width:929px){:root{--actions-menu-height:0}}*,:after,:before{box-sizing:border-box}*{margin:0}:focus-visible{outline:2px solid rgba(2,126,176,.7);outline-offset:2px}body,html{min-height:100%}html{scroll-behavior:smooth;scrollbar-gutter:stable}body{background-color:var(--white);font-family:var(--font-family);font-size:var(--font-size-medium);line-height:var(--line-height-relax);overflow:clip scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}canvas,img,picture,video{display:block;max-width:100%}button,input,select,textarea{font-family:var(--font-family)}h1,h2,h3,h4,h5,h6,p{overflow-wrap:break-word}#__next,#root{isolation:isolate;min-height:100%;height:-moz-max-content;height:max-content}::-moz-selection{color:var(--blue-gray-900);background-color:var(--blue-gray-200)}::selection{color:var(--blue-gray-900);background-color:var(--blue-gray-200)}body:has(dialog[open]){overflow:clip}header:has(+aside.visible){box-shadow:none}header:has(+aside:not(.visible)){box-shadow:0 1px 0 0 var(--blue-gray-200)}.content-wrapper{width:100%;max-width:var(--max-content-width);margin-inline:auto}.clamp-lines{-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;display:-webkit-box}.clamp-lines,.ellipsis{text-overflow:ellipsis;overflow:hidden}.ellipsis{white-space:nowrap}.seo-only,.sr-only{position:absolute!important;width:1px;height:1px;border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);padding:0;margin:-1px;overflow:hidden;white-space:nowrap}.no-scroll,body[class^=no-scroll-for-]{overflow:hidden;touch-action:none}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none}.unstyled-button{background:none;border:none;padding:0}body:has(#slideshare_pushdown-pushdown-cls iframe){--pushdown-height:90px}body:has(.fs-pushdown-sticky:empty){--pushdown-height:0px}@media only screen and (max-width:928px){#fs-sticky-footer{bottom:var(--actions-menu-height)}}@media only screen and (min-width:1051px){body:has(#slideshare_pushdown-pushdown-cls.fs-pushdown-sticky){--metadata-toolbar-offset:0px!important}}.metadata-toolbar{top:var(--metadata-toolbar-offset)}body:has(#fs-sticky-footer iframe) #fixed-download-container{bottom:var(--adhesion-height,0)}body:not(:has(#fs-sticky-footer iframe)) #fs-sticky-footer{min-height:0!important}dialog[open]{display:grid;opacity:1}dialog[open]::backdrop{opacity:.6}dialog{width:auto;height:auto;max-width:100dvw;max-height:100dvh;box-shadow:0 0 0 1px rgba(9,30,66,.08),0 2px 1px rgba(9,30,66,.08),0 0 20px -6px rgba(9,30,66,.3);border:0;padding:0;overflow:clip}dialog,dialog::backdrop{opacity:0;transition:opacity .3s ease-out,transform .3s ease-out,translate .3s ease-out,display allow-discrete .3s,overlay allow-discrete .3s}dialog::backdrop{background-color:#000}@starting-style{dialog[open],dialog[open]::backdrop{opacity:0}}.popover.open,[popover]:popover-open{opacity:1;scale:1}[popover]:popover-open::backdrop{opacity:0}.popover{display:none;z-index:var(--popup-index)}.popover.open{display:block;opacity:1}.popover,[popover]{position:absolute;inset:auto;color:var(--blue-gray-800);background-color:canvas;border:0;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.05),0 4px 12px rgba(0,0,0,.2);overscroll-behavior:contain;overflow:clip auto;padding:0;margin-block:1ch;scale:.96}.popover,[popover],[popover]::backdrop{transition:opacity .3s,scale .3s,display allow-discrete .2s,overlay allow-discrete .2s;opacity:0}@starting-style{.popover.open,[popover]:popover-open,[popover]:popover-open::backdrop{opacity:0}.popover.open,[popover]:popover-open{scale:.96}}.popover [data-popover-list],[popover] [data-popover-list]{display:flex;flex-direction:column;list-style:none;padding-inline:0;padding-block:8px}.popover [data-popover-item],[popover] [data-popover-item]{width:100%;display:flex;align-items:center;gap:8px;padding-block:12px;padding-inline:16px;color:inherit;text-decoration:none}.popover [data-popover-item]:hover,[popover] [data-popover-item]:hover{background-color:var(--blue-gray-100)}.popover [role=separator],[popover] [role=separator]{margin-block:8px;margin-inline:16px}@supports (anchor-name:--foo-bar){[popover]{position-try-order:most-height;position-visibility:anchors-visible}[popover][data-popover-position=bottom]{top:anchor(bottom);left:anchor(center);translate:-50% 0;transform-origin:top center;position-try:flip-block}[popover][data-popover-position=bottom-start]{top:anchor(bottom);left:anchor(start);transform-origin:top left;position-try:flip-block,flip-inline}[popover][data-popover-position=bottom-end]{top:anchor(bottom);right:anchor(end);transform-origin:top right;position-try:flip-block,flip-inline}[popover][data-popover-position=top]{bottom:anchor(top);left:anchor(center);transform-origin:bottom center;position-try:flip-block}[popover][data-popover-position=top-start]{bottom:anchor(top);left:anchor(start);transform-origin:bottom left;position-try:flip-block,flip-inline}[popover][data-popover-position=top-end]{bottom:anchor(top);right:anchor(end);transform-origin:bottom right;position-try:flip-block,flip-inline}}#fs-sticky-footer,.orp-player-wrapper{z-index:var(--freestar-index)!important}.fs-sticky-parent{position:static!important}.fs-sticky-wrapper{padding-right:0!important;display:block!important}#slideshare_pushdown-pushdown-cls.fs-pushdown-sticky{position:static!important}body.no-scroll-mobile #slideshare_pushdown-pushdown-cls{height:auto}body.gallery-view #slideshare_pushdown-pushdown-cls{display:none}#pushdown-ad-large{display:grid;justify-content:center;align-items:center}#above-recs-desktop-ad-sm,#above-recs-mobile,#below-reader-ad,#between-recs-ad-1,#between-recs-ad-2{height:280px}@media screen and (min-width:929px){#below-reader-ad,#between-recs-ad-1,#between-recs-ad-2{height:250px}#above-recs-desktop-ad-sm,#above-recs-desktop-ad-sm-2{aspect-ratio:336/280;height:280px;margin-bottom:32px}#above-recs-desktop-ad-sm_container{justify-content:left!important}}@media only screen and (min-width:1051px){body{--padding-x-offset:clamp(1rem,-1.6rem + 8vw,8rem);--margin-x-offset:0px;--end:calc(var(--padding-x-offset) + var(--sidebar-size) + var(--margin-x-offset))}#fs-sticky-footer:has(#slideshare_adhesion){left:0;width:calc(100% - var(--end))}#fs-sticky-footer:has(#slideshare_adhesion2){width:var(--end);left:unset;right:0}}@media only screen and (min-width:1689px){body{--margin-x-offset:calc(calc(100% - var(--max-content-width)) / 2)}}div:has(>#between-recs-ad-1),div:has(>#between-recs-ad-2),div:has(>#interstitial-ad-1),div:has(>[id^=slideshare_docs_incontent]){display:grid;justify-content:center}div:has(>#interstitial-ad-1.video-interstitial-ad){display:block}@media screen and (max-width:928px){div:has(>#above-recs-mobile),div:has(>#below-reader-ad){display:grid;justify-content:center}}#fs-sticky-footer.hidden,.orp-player-wrapper.hidden{display:none!important}@media only screen and (max-width:928px){#fs-sticky-footer.hidden-on-mobile,.orp-player-wrapper.hidden-on-mobile{display:none!important}}div[id^=FreeStarVideoAdContainer_]{width:100%}#freestar-video-child:not(:empty){margin-bottom:24px}div[id^=FreeStarVideoAdContainer_FloatingOnly]{width:auto;aspect-ratio:auto}:root{--shadow-color:rgba(122,61,143,.15);--osano-dialog-shadow:drop-shadow(var(--shadow-color) 0.5px 1px 1px) drop-shadow(var(--shadow-color) 1px 2px 2px) drop-shadow(var(--shadow-color) 2px 4px 4px) drop-shadow(var(--shadow-color) 4px 8px 8px) drop-shadow(var(--shadow-color) 8px 16px 16px)}.osano-cm-dialog{background-color:#212240;color:var(--white)}.osano-cm-dialog__close{color:inherit;stroke:var(--white)}.osano-cm-dialog--eu{display:grid;grid-template-columns:1fr 200px;grid-column-gap:48px;-moz-column-gap:48px;column-gap:48px;max-height:95dvh;font-family:Source Sans Pro,sans-serif;color:var(--blue-gray-600,#636c8b);background-color:var(--white,#fff);border-top-left-radius:var(--border-radius,8px);border-top-right-radius:var(--border-radius,8px);filter:var(--osano-dialog-shadow);padding-block-start:32px;padding-block-end:20px;padding-inline:5%;.osano-cm-dialog__content{max-height:calc(95dvh - 52px)}.osano-cm-dialog__close{display:none}.osano-cm-dialog__title{font-size:24px;font-weight:700;color:var(--blue-gray-900,#0e0f25);margin-block-end:16px}.osano-cm-content__usage-list{font-size:16px}.osano-cm-usage-list__list{margin-block-start:8px;margin-block-end:16px;margin-inline-start:8px;.osano-cm-list__list-item{font-size:16px}}.osano-cm-link,.osano-cm-message{font-size:16px}.osano-cm-message{display:flex}.osano-cm-drawer-links,.osano-cm-link{display:inline}.osano-cm-link{color:var(--celadon-blue,#027eb0);font-weight:600;text-decoration:none;&:hover{color:var(--celadon-blue-dark,#026c97)}&:after{content:"|";padding-inline:12px}&:last-child:after{content:""}}.osano-cm-dialog__list{line-height:normal;margin-block-start:24px;.osano-cm-list__list-item{display:inline-flex;align-items:center;&:after{content:"|";padding-inline:16px;color:var(--blue-gray-200,#e3e6f0);font-size:28px}&:last-child:after{content:""}}}.osano-cm-toggle__switch{display:none}.osano-cm-toggle__input{width:16px;height:16px;margin:unset;overflow:unset;accent-color:var(--blue-gray-900,#0e0f25);position:static;opacity:1}.osano-cm-toggle__label.osano-cm-label{color:var(--blue-gray-600,#636c8b);font-size:18px;font-weight:600;margin-left:8px;margin-inline-end:0}.osano-cm-dialog__buttons{min-width:unset;align-self:flex-end;display:grid;grid-row-gap:8px;row-gap:8px;justify-content:stretch;align-items:center;margin:unset;.osano-cm-buttons__button{height:-moz-max-content;height:max-content;min-height:40px;font-size:16px;font-weight:600;margin:unset}.osano-cm-accept-all{order:-1}.osano-cm-accept-all,.osano-cm-manage{background-color:var(--celadon-blue,#027eb0)}.osano-cm-deny,.osano-cm-denyAll,.osano-cm-save{background-color:transparent;color:var(--celadon-blue,#027eb0);border:1px solid var(--celadon-blue,#027eb0)}}}.osano-cm-dialog--eu.osano-cm-dialog--br{.osano-cm-dialog__title{font-size:26px;font-weight:600}.osano-cm-dialog__buttons{row-gap:12px}}.osano-cm-window:has(>.osano-cm-dialog--br-overlay):before{content:"";position:fixed;inset:0;background-color:rgba(0,0,0,.6);z-index:-1}@media screen and (max-width:768px){.osano-cm-dialog--eu{-moz-column-gap:24px;column-gap:24px;grid-template-columns:1fr;padding-block-end:32px;padding-inline:16px;.osano-cm-dialog__buttons{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:16px;.osano-cm-buttons__button{width:-moz-max-content;width:max-content}}}.osano-cm-dialog--eu.osano-cm-dialog--br{.osano-cm-link,.osano-cm-message{font-size:16px;width:auto}.osano-cm-dialog__buttons{margin-block-start:24px;row-gap:16px}}}@media screen and (max-width:520px){.osano-cm-dialog--eu{font-size:14px;padding-block-start:16px;padding-block-end:16px;.osano-cm-dialog__title{font-size:20px;margin-block-end:8px}.osano-cm-link,.osano-cm-message{font-size:inherit}.osano-cm-usage-list__list{font-size:12px;.osano-cm-list__list-item{font-size:inherit}}.osano-cm-toggle__label.osano-cm-label{font-size:15px}.osano-cm-dialog__list{width:100%;display:flex;flex-direction:column;margin-block-start:8px;.osano-cm-list__list-item{display:grid;border-bottom:1px solid var(--blue-gray-200,#e3e6f0);padding-block:4px;&:last-child{border-bottom:unset}}.osano-cm-list__list-item:after{content:unset}.osano-cm-list-item__toggle{align-self:baseline;justify-content:space-between;.osano-cm-toggle__label{order:-1;margin:unset}}}.osano-cm-dialog__buttons{display:grid;grid-template-columns:1fr 1fr;grid-column-gap:16px;-moz-column-gap:16px;column-gap:16px;grid-row-gap:12px;row-gap:12px;margin-block-start:0;.osano-cm-buttons__button{min-width:-moz-max-content;min-width:max-content;width:unset;justify-self:stretch}.osano-cm-accept-all{grid-column:1/span 2}}}.osano-cm-dialog--eu.osano-cm-dialog--br{padding-block-start:32px;padding-block-end:32px;.osano-cm-dialog__title{font-size:26px;margin-block-end:16px}.osano-cm-link,.osano-cm-message{font-size:16px;width:auto}.osano-cm-dialog__buttons{margin-block-start:24px;row-gap:16px}}}@media screen and (min-width:929px){.osano-cm-widget{display:none}.osano-cm-content__message{margin-bottom:8px;padding-bottom:0;width:90%}.osano-cm-message{font-size:12px}.osano-cm-drawer-links{margin:0}.osano-cm-link{color:var(--celadon-blue);font-size:12px}.osano-cm-list__list-item{font-size:12px}.osano-cm-dialog__buttons{display:flex;align-items:center;gap:6px}.osano-cm-button{height:44px;font-size:14px;background-color:var(--celadon-blue);border-color:var(--celadon-blue);color:var(--white);padding:10px;margin:3px 0}.osano-cm-denyAll{background-color:var(--blue-gray-800);border-color:var(--white);color:var(--white)}}.osano-cm-widget{display:none}.osano-cm-content__message{margin-bottom:8px;padding-bottom:0;width:90%}.osano-cm-message{font-size:12px}.osano-cm-drawer-links{margin:0}.osano-cm-link{color:var(--celadon-blue);font-size:12px}.osano-cm-list__list-item{font-size:12px}.osano-cm-dialog__buttons{display:flex;align-items:center;gap:6px}.osano-cm-button{height:44px;font-size:14px;background-color:var(--celadon-blue);border-color:var(--celadon-blue);color:var(--white);padding:10px;margin:3px 0}.osano-cm-denyAll{background-color:var(--blue-gray-800);border-color:var(--white);color:var(--white)}@font-face{font-family:__Source_Sans_3_4d9a39;font-style:normal;font-weight:200 900;font-display:swap;src:url(https://public.slidesharecdn.com/_next/static/media/bccb245ee3362e85-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:__Source_Sans_3_4d9a39;font-style:normal;font-weight:200 900;font-display:swap;src:url(https://public.slidesharecdn.com/_next/static/media/4117e16a89310b23-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:__Source_Sans_3_4d9a39;font-style:normal;font-weight:200 900;font-display:swap;src:url(https://public.slidesharecdn.com/_next/static/media/2a041df68de43fa6-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:__Source_Sans_3_4d9a39;font-style:normal;font-weight:200 900;font-display:swap;src:url(https://public.slidesharecdn.com/_next/static/media/17c5807503b61094-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:__Source_Sans_3_4d9a39;font-style:normal;font-weight:200 900;font-display:swap;src:url(https://public.slidesharecdn.com/_next/static/media/7572a3f8628c1f19-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__Source_Sans_3_4d9a39;font-style:normal;font-weight:200 900;font-display:swap;src:url(https://public.slidesharecdn.com/_next/static/media/9c20d643cc03e499-s.p.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Source_Sans_3_4d9a39;font-style:normal;font-weight:200 900;font-display:swap;src:url(https://public.slidesharecdn.com/_next/static/media/a9b61b60c2d733b4-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Source_Sans_3_Fallback_4d9a39;src:local("Arial");ascent-override:109.21%;descent-override:42.66%;line-gap-override:0.00%;size-adjust:93.76%}.__className_4d9a39{font-family:__Source_Sans_3_4d9a39,__Source_Sans_3_Fallback_4d9a39,Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-style:normal}.__variable_4d9a39{--font-family:"__Source_Sans_3_4d9a39","__Source_Sans_3_Fallback_4d9a39",Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.PageProgressBar_root__1y_Q3{position:fixed;top:0;left:0;width:100%;z-index:var(--progress-bar-index);pointer-events:none}.PageProgressBar_bar__Kyoem{width:100%;height:3px;background-color:var(--celadon-blue);transform:scaleX(0);transform-origin:left;transition:transform .4s cubic-bezier(.4,0,.2,1),opacity .5s ease;opacity:1}.PageProgressBar_complete__KhJy3{opacity:0}.ErrorShell_root__zYUH8{min-height:100vh;display:flex;flex-direction:column}.Header_root__8A86O{--fluid-16-24:clamp(1rem,0.7373rem + 1.3136vi,1.5rem);position:relative;height:var(--header-height);display:grid;grid-template-columns:auto 1fr;align-items:center;grid-gap:24px;gap:24px;background-color:var(--white);font-family:inherit;padding-inline:var(--fluid-16-24)}.Header_root__8A86O.Header_sticky__NGNE7{position:sticky;top:0;transition:box-shadow .3s ease-in-out;z-index:var(--header-index)}.Header_root__8A86O button{font-size:14px;white-space:nowrap}.Header_wrapper___zBfP{display:flex;align-items:center;flex-shrink:0;gap:12px}@media screen and (min-width:768px){.Header_root__8A86O{grid-template-columns:repeat(3,minmax(min-content,1fr))}}.Hamburger_root__tHlgC{display:grid;place-content:center;background:transparent;border:0;border-radius:2px;color:var(--blue-gray-600);padding:0;margin:0;cursor:pointer}@media screen and (min-width:768px){.Hamburger_root__tHlgC{display:none}}.SidebarFallback_loggedOutRoot__oKMfe{display:grid;grid-template-rows:170px 1fr}.SidebarFallback_loggedOutContainer__Tpr_u{display:flex;flex-direction:column;padding:16px}.SidebarFallback_loggedInRoot__r1CEd{display:grid;grid-template-rows:64px 1fr}.SidebarFallback_loggedInContainer__dw_ML{display:flex;flex-direction:column;gap:16px;padding:16px}.SidebarFallback_loggedInLinks__C2NaL{display:grid;grid-gap:24px;gap:24px}.SidebarFallback_loggedInUser__b8i41{display:flex;align-items:center;gap:8px;margin-block-start:12px;margin-block-end:auto}.Skeleton_root__U4QqL{--skeleton-bg:rgba(0,0,0,.1);--shimmer-bg:linear-gradient(90deg,transparent,rgba(0,0,0,.04),transparent);position:relative;display:block;height:1.2rem;flex-shrink:0;background:var(--skeleton-bg);overflow:hidden}.Skeleton_root__U4QqL:after{content:"";position:absolute;inset:0;translate:-100% 0;background:var(--shimmer-bg);animation:Skeleton_shimmer__hGst9 2s ease-in-out .5s infinite}.Skeleton_circle___fxTG{aspect-ratio:1/1;border-radius:100vmax;height:unset}.Skeleton_rectangle__UY3OD{border-radius:0}.Skeleton_rounded__BLBq2{border-radius:4px}.Skeleton_text___JusF{border-radius:4px;font-size:1rem;scale:1 .6}.Skeleton_text___JusF:before{content:"\00a0"}.Skeleton_list__xNehW{display:flex;flex-direction:column;gap:6px;padding-inline:8px;padding-block:10px}.Skeleton_copy__qgw2R{display:flex;flex-direction:column;padding-block:12px;padding-inline:16px}.Skeleton_copy__qgw2R .skeleton:first-child{margin-block-end:8px}@keyframes Skeleton_shimmer__hGst9{0%{translate:-100% 0}50%{translate:100% 0}to{translate:100% 0}}.Icon_root__AjZyv{--size:24px;position:relative;display:flex;align-items:center;justify-content:center}.Icon_icon__4zzsG{flex-shrink:0;display:inline-block;width:var(--size);height:var(--size);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:cover;mask-size:cover;vertical-align:middle}.Drawer_root__ob4ZM[open]{translate:0 0}.Drawer_root__ob4ZM{position:fixed;inset:0;border-radius:0;translate:var(--slide-from)}@starting-style{.Drawer_root__ob4ZM[open]{translate:var(--slide-from)}}.Drawer_root__ob4ZM[data-placement=left]{--slide-from:-100% 0;inset-inline-end:auto;border-top-right-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.Drawer_root__ob4ZM[data-placement=right]{--slide-from:100% 0;inset-inline-start:unset;border-top-left-radius:var(--border-radius);border-bottom-left-radius:var(--border-radius)}.Drawer_root__ob4ZM[data-placement=bottom]{--slide-from:0 100%;inset-block-start:unset;border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius)}.Drawer_content__ye6ZB{display:grid;overflow:auto}.Drawer_root__ob4ZM[data-placement=left],.Drawer_root__ob4ZM[data-placement=right]{width:min(280px,80vw);height:100dvh}.Drawer_root__ob4ZM[data-placement=bottom]{width:100dvw;max-height:80dvh}.CloseButton_root__JCTRm{position:absolute;right:16px;top:16px;width:40px;height:40px;display:grid;place-content:center;color:var(--blue-gray-600);border-radius:100vmax;background-color:transparent;border:0;padding:0;margin:0;transition:background-color .2s ease-in-out;cursor:pointer}.CloseButton_root__JCTRm:hover{background-color:rgba(var(--blue-gray-600-rgb),.05)}.Logo_root__Qba3h{flex-shrink:0}.SearchForm_root__usp4s{position:relative;justify-self:center;width:min(100%,440px)}.SearchForm_root__usp4s form{display:grid}.SearchForm_root__usp4s input{height:40px;border-radius:100vmax;border:1px solid var(--blue-gray-600);margin:0;padding:0 40px 0 16px;color:var(--blue-gray-900);background-color:var(--white);width:100%}.SearchForm_root__usp4s input::-moz-placeholder{color:var(--blue-gray-600)}.SearchForm_root__usp4s input::placeholder{color:var(--blue-gray-600)}.SearchForm_submit__U8kPR{width:32px;height:32px;position:absolute;right:14px;top:50%;display:grid;place-content:center;border:none;background:transparent;border-radius:100vmax;color:var(--blue-gray-400);padding:0;margin:0;translate:0 -50%;cursor:pointer}@media screen and (max-width:768px){.SearchForm_root__usp4s{justify-self:flex-end}}.HeaderActions_root__11_ai{display:flex;align-items:center;justify-self:flex-end;gap:16px}@media screen and (max-width:768px){.HeaderActions_root__11_ai{display:none}}.Footer_footer__N3WmV{width:100%;display:flex;flex-direction:column;background-color:var(--midnight-green-dark);color:var(--blue-gray-400);padding:24px;margin-top:auto}.Footer_separator__Qa1tj{border:1px solid var(--white);opacity:.2;margin:24px 0}.FooterTop_wrapper__RuYz5{display:flex;justify-content:space-between;align-items:center;gap:24px}.FooterTop_links__9J65v{color:inherit;display:flex;align-items:center;flex-wrap:wrap;-moz-column-gap:40px;column-gap:40px;row-gap:12px;padding:0;margin:0}.FooterTop_cookiePreferenceButton__xmSox{background-color:transparent;border:none;color:inherit;font-size:inherit;font-weight:800;cursor:pointer}@media screen and (max-width:768px){.FooterTop_links__9J65v{-moz-column-gap:24px;column-gap:24px}}.Link_root__vn3ab{display:inline-flex;align-items:center;gap:4px;border-radius:2px;color:inherit;font-size:inherit;font-weight:inherit;text-decoration:none;-webkit-text-decoration-color:transparent;text-decoration-color:transparent;transition:color .2s ease-in-out,-webkit-text-decoration-color .2s ease-in-out .2s;transition:color .2s ease-in-out,text-decoration-color .2s ease-in-out .2s;transition:color .2s ease-in-out,text-decoration-color .2s ease-in-out .2s,-webkit-text-decoration-color .2s ease-in-out .2s}.Link_primary__Iq4CI{color:var(--celadon-blue-dark)}.Link_primary__Iq4CI:focus,.Link_primary__Iq4CI:focus-visible,.Link_primary__Iq4CI:hover{color:var(--celadon-blue)}.Link_gray__Efpxa{color:var(--blue-gray-600)}.Link_gray__Efpxa:focus,.Link_gray__Efpxa:focus-visible,.Link_gray__Efpxa:hover{color:var(--blue-gray-700)}.Link_light__mcUPh{color:var(--blue-gray-400)}.Link_light__mcUPh:focus,.Link_light__mcUPh:focus-visible,.Link_light__mcUPh:hover{color:var(--blue-gray-100)}.Link_dark__Ql4LW{color:var(--blue-gray-800)}.Link_dark__Ql4LW:focus,.Link_dark__Ql4LW:focus-visible,.Link_dark__Ql4LW:hover{color:var(--celadon-blue)}.Link_weight-regular__yPpnB{font-weight:400}.Link_weight-medium__h0ic3{font-weight:600}.Link_weight-bold__me4nt{font-weight:700}.Link_size-small__wSSrC{font-size:12px}.Link_size-medium__ZLo12{font-size:14px}.Link_size-large__W0PAv{font-size:16px}.Link_size-xLarge__Dq0j8{font-size:18px}.Link_hoverUnderline__QMNau:hover,.Link_underline__RoQbh{text-decoration:underline;-webkit-text-decoration-color:inherit;text-decoration-color:inherit}.Link_hoverUnderline__QMNau:hover{text-decoration-thickness:1.5px;text-underline-offset:2px}.FooterBottom_wrapper__Gj9p_{height:51px;display:flex;align-items:center;gap:24px}.FooterBottom_copyright__xltkG{font-size:14px;line-height:24px;margin-right:auto}.FooterBottom_icons__wEEhc{display:flex;align-items:center;gap:16px}.FooterBottom_separator__181dN{width:2px;height:22px;background-color:var(--white);opacity:.2}.PrivateContentMessage_root__IEx17{flex-grow:1;width:100%;height:100%;display:flex;align-items:flex-start}.PrivateContentMessage_box__YG0Bp{width:100%;max-width:960px;background-color:#f2dede;border-color:#eed3d7;border-radius:8px;color:#b94a48;font-size:14px;font-weight:400;padding:16px 24px;margin:100px auto}@media screen and (max-width:960px){.PrivateContentMessage_box__YG0Bp{margin-left:16px;margin-right:16px}}.RemovedContentMessage_root__rtN5X{flex-grow:1;width:100%;display:flex;align-items:flex-start}.RemovedContentMessage_box__pw1z3{width:100%;max-width:960px;background-color:#fcf8e3;border:1px solid #fbeed5;border-radius:4px;color:#c09853;font-size:14px;font-weight:400;text-shadow:0 1px 0 hsla(0,0%,100%,.5);padding:16px 24px;margin:100px auto}.RemovedContentMessage_title__vwHjN{color:#504c48;font-size:25px;font-weight:300;line-height:35px;margin-bottom:4px}@media screen and (max-width:960px){.RemovedContentMessage_box__pw1z3{margin-left:16px;margin-right:16px}}.ErrorDisplay_root__bY_Qo{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--white);font-family:-system-ui,sans-serif;color:var(--blue-gray-800)}.ErrorDisplay_smiley__o9HSN{width:129px;height:122px;margin:60px auto 30px}.ErrorDisplay_errorBox__jL_9h{max-width:800px;width:100%;height:290px;background:var(--white) url(/images/fadedlogo.jpg) no-repeat left top;background-position:14px 20px;margin:0 auto 120px}.ErrorDisplay_errorCode__AlZal{border-right:1px solid var(--blue-gray-100);color:var(--blue-gray-500);float:left;font-size:1.3em;height:290px;line-height:370px;margin:0 25px 0 0;vertical-align:bottom;text-align:center;width:200px}.ErrorDisplay_errorBox__jL_9h h1{font-weight:400;margin-bottom:0}.ErrorDisplay_errorBox__jL_9h h2{font-size:.9em;font-weight:400;margin-top:0}.ErrorDisplay_errorBox__jL_9h h3{font-size:1em;font-weight:700;margin:10px 0}.ErrorDisplay_errorBox__jL_9h ul{list-style-type:none}.ErrorDisplay_errorBox__jL_9h ul li{background:transparent url(/images/arrow.png) no-repeat left 6px;float:left;font-size:.813em;font-weight:400;list-style-type:none;margin:.313em;padding-left:20px;width:110px}.ErrorDisplay_middle__espDJ{padding-right:3.5em}.ErrorDisplay_searchSection__1J_EK{background:var(--blue-gray-100) url(/images/searchbg.jpg) repeat-x left top;border:1px solid var(--blue-gray-300);float:left;padding:10px;margin-top:20px}.ErrorDisplay_searchSection__1J_EK form{display:flex}.ErrorDisplay_searchSection__1J_EK button{background:url(/images/searchbutton.jpg) repeat-x scroll 0 0 #ffb762;border:1px solid #db9b51;color:var(--blue-gray-800);cursor:pointer;float:left;font-size:1em;margin:0 0 0 .8px;padding:9px 15px;outline:0 none;text-decoration:none;text-shadow:1px 1px 1px var(--white);vertical-align:top}.ErrorDisplay_searchSection__1J_EK button span{background:#ffb762 url(/images/magnifier.jpg) no-repeat 0 0;padding:0 8px;margin-left:5px;text-decoration:none}.ErrorDisplay_errorSearchBox__Uglib{border-color:var(--blue-gray-500) var(--blue-gray-400) var(--blue-gray-400) var(--blue-gray-500);border-width:1px;color:var(--blue-gray-600);float:left;font-size:13px;margin-left:2px;padding:9px;vertical-align:top;width:350px}@media screen and (max-width:768px){.ErrorDisplay_searchSection__1J_EK{width:calc(100% - 240px)}.ErrorDisplay_errorSearchBox__Uglib{width:calc(100% - 128px);margin:0 auto}}.ToastManager_root__mVUMQ{position:fixed;inset-block-end:0;inset-inline:0;display:grid;justify-items:flex-end;justify-content:flex-end;grid-gap:1vh;gap:1vh;padding-block-end:5vh;padding-right:1rem;pointer-events:none;z-index:var(--toast-index)}@media only screen and (max-width:928px){.ToastManager_root__mVUMQ{justify-items:center;justify-content:center;padding-right:0;top:0;padding-block-start:2vh;inset-block-end:unset}}.Toast_root__ZhPa4{min-width:360px;max-width:360px;display:grid;grid-template-columns:max-content 1fr repeat(2,max-content);grid-gap:4px;gap:4px;background-color:var(--background);border-radius:8px;color:var(--white);padding-block:28px;padding-inline:24px;pointer-events:all;opacity:1;transition:opacity .3s ease-in-out}@starting-style{.Toast_root__ZhPa4{opacity:0}}.Toast_info__g9NV8{--background:var(--midnight-green-dark)}.Toast_success__sWJ1E{--background:var(--color-success)}.Toast_error__SQpXK{--background:var(--color-error)}.Toast_warning__7GyxY{--background:var(--color-warning)}.Toast_root__ZhPa4>svg{flex-shrink:0;margin-top:2px}.Toast_content__whMkq{font-weight:400;font-size:16px;line-height:24px;word-wrap:break-word}.Toast_separator__dUZVN{width:1px;background-color:var(--blue-gray-500);opacity:.3;margin-inline:8px}.Toast_dismiss___YbdO{color:var(--blue-gray-300);cursor:pointer}.Toast_dismiss___YbdO:hover{color:var(--white)}.PortalsContainer_drawerRoot__esMLC{position:fixed;top:0;left:0}.PortalsContainer_bannerRoot__Q_sNw{position:relative}.PortalsContainer_drawerRoot__esMLC{z-index:101} /*# sourceMappingURL=72ab5910a3b55ae9.css.map*/</style><style>.SlideshowScreen_root__k9j1_{width:100%;max-width:var(--max-content-width);position:relative;display:grid;place-content:flex-start;grid-template-columns:minmax(0,1fr) var(--sidebar-size);grid-template-rows:auto auto 1fr;background-color:var(--white);padding-block:1px;padding-inline:clamp(1rem,-1.6rem + 8vw,8rem);margin-inline:auto}.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe{grid-template-columns:var(--key-moments-size) minmax(0,1fr) var(--sidebar-size)}.SlideshowScreen_root__k9j1_.SlideshowScreen_withAdSidebar__iVE05{--sidebar-size:calc(1px + 300px + 56px)}.SlideshowScreen_root__k9j1_:before{content:"";position:absolute;inset:0 0 auto;height:1px;background-color:var(--blue-gray-200);margin-inline:-50vw}.SlideshowScreen_root__k9j1_ .sidebar{border-left:1px solid var(--blue-gray-200);grid-row:1/-1;grid-column:2}.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe .sidebar{grid-column:3}.SlideshowScreen_root__k9j1_ .metadata{grid-column:1/-2;grid-row:1}.SlideshowScreen_root__k9j1_ .metadata-toolbar{grid-column:1/-2;grid-row:2}.SlideshowScreen_root__k9j1_ .player{grid-column:1}@media screen and (min-width:929px){.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe .player{grid-column:2;grid-row:3}}.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe .key-moments{grid-column:1;grid-row:3}@media screen and (min-width:929px){.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe .player{border-left:1px solid var(--blue-gray-200)}.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe .metadata{padding-inline-end:24px}}@media screen and (min-width:929px) and (max-width:1050px){.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe{grid-template-columns:var(--key-moments-size) minmax(0,1fr);padding-inline:0}.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe .metadata,.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe .metadata-toolbar{grid-column:1/-1;padding-inline:16px}}@media screen and (max-width:928px){.SlideshowScreen_root__k9j1_:before{display:none}.SlideshowScreen_root__k9j1_.SlideshowScreen_withKeyMoments__RbHLe{grid-template-columns:minmax(0,1fr)!important}.SlideshowScreen_root__k9j1_ .metadata,.SlideshowScreen_root__k9j1_ .metadata-toolbar,.SlideshowScreen_root__k9j1_ .player{grid-column:1/-1}}.PrivateContentScreen_root__qdfD9{gap:30px}.PasswordForm_root__Pnyoo,.PrivateContentScreen_root__qdfD9{min-height:calc(100svh - 2 * var(--header-height));background-color:var(--blue-gray-100);display:flex;flex-direction:column;align-items:center;justify-content:center}.PasswordForm_root__Pnyoo{gap:20px}.Form_root__NTbyO{display:flex;flex-direction:column;gap:10px}.Form_root__NTbyO button[type=submit]{align-self:flex-start}.Button_root__i1yp0{--size:44px;--foreground:var(--white);--background:var(--celadon-blue);--border:var(--celadon-blue);--fontSize:16px;--padding-x:14px;position:relative;min-width:48px;min-height:var(--size);display:flex;align-items:center;border-radius:4px;border:none;background-color:var(--background);color:var(--foreground);font-size:var(--fontSize);font-weight:var(--font-weight-medium);padding-inline:var(--padding-x);transition:color .2s ease-in-out,background-color .2s ease-in-out;cursor:pointer}.Button_root__i1yp0 span{display:flex;align-items:center;gap:4px;opacity:1;transition:opacity .2s ease-in-out}.Button_large__Yv_oe{--fontSize:18px;--size:48px;--padding-x:20px}.Button_regular__i28NX{--fontSize:18px;--size:44px}.Button_medium__H8pKi{--size:40px}.Button_small__sqsEx{--size:32px;--padding-x:12px}.Button_xsmall__jBPCG{--fontSize:14px;--size:24px;--padding-x:8px}.Button_root__i1yp0.Button_icon__1C4qi{justify-content:center;min-width:24px;padding:0}.Button_icon__1C4qi{width:var(--size);height:var(--size)}.Button_spinner__iLPXf{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);opacity:0;visibility:hidden;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.Button_loading__ZYqeE .Button_spinner__iLPXf{opacity:1;visibility:visible;transition-delay:0s}.Button_loading__ZYqeE span{opacity:0}.Button_fullWidth__dRbM6{width:100%;justify-content:center}.Button_fullWidth__dRbM6 span{justify-content:center}.Button_disabled__M5jJf{opacity:.8;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Button_primary__K25Gq.Button_contained__gyjai{--foreground:var(--white);--background:var(--celadon-blue);--border:var(--celadon-blue)}.Button_primary__K25Gq.Button_contained__gyjai:active,.Button_primary__K25Gq.Button_contained__gyjai:hover{--background:var(--celadon-blue-dark);--border:var(--celadon-blue-dark)}.Button_primary__K25Gq.Button_outlined__oZHqK{border:1px solid var(--border);--foreground:var(--celadon-blue-dark);--background:transparent;--border:var(--celadon-blue-dark)}.Button_primary__K25Gq.Button_outlined__oZHqK:hover{--foreground:var(--blue-gray-800);--background:rgba(var(--celadon-blue-rgb),0.05);--border:var(--blue-gray-800)}.Button_primary__K25Gq.Button_outlined__oZHqK:active{--foreground:var(--celadon-blue-dark);--background:rgba(var(--celadon-blue-rgb),0.1);--border:var(--celadon-blue)}.Button_primary__K25Gq.Button_text__ZT_3O{--foreground:var(--celadon-blue-dark);--background:transparent;--border:transparent}.Button_primary__K25Gq.Button_text__ZT_3O:hover{--foreground:var(--celadon-blue-dark);--background:rgba(var(--celadon-blue-rgb),0.05);--border:transparent}.Button_primary__K25Gq.Button_text__ZT_3O:active{--foreground:var(--celadon-blue);--background:rgba(var(--celadon-blue-rgb),0.1);--border:transparent}.Button_secondary__hHiHI.Button_contained__gyjai{--foreground:var(--white);--background:var(--blue-gray-600);--border:var(--blue-gray-600)}.Button_secondary__hHiHI.Button_contained__gyjai:hover{--background:var(--blue-gray-700);--border:var(--blue-gray-700)}.Button_secondary__hHiHI.Button_contained__gyjai:active{--background:var(--blue-gray-500);--border:var(--blue-gray-500)}.Button_secondary__hHiHI.Button_outlined__oZHqK{border:1px solid var(--border);--foreground:var(--blue-gray-600);--background:transparent;--border:var(--blue-gray-600)}.Button_secondary__hHiHI.Button_outlined__oZHqK:hover{--foreground:var(--blue-gray-700);--background:rgba(var(--blue-gray-600-rgb),0.05);--border:var(--blue-gray-700)}.Button_secondary__hHiHI.Button_outlined__oZHqK:active{--foreground:var(--blue-gray-600);--background:rgba(var(--blue-gray-600-rgb),0.1);--border:var(--blue-gray-500)}.Button_secondary__hHiHI.Button_regular__i28NX{border:1px solid var(--border);--foreground:var(--blue-gray-700);--background:var(--white);--border:var(--blue-gray-200)}.Button_secondary__hHiHI.Button_regular__i28NX:hover{--background:var(--blue-gray-100)}.Button_secondary__hHiHI.Button_text__ZT_3O{--foreground:var(--blue-gray-600);--background:transparent;--border:transparent}.Button_secondary__hHiHI.Button_text__ZT_3O:hover{--foreground:var(--blue-gray-700);--background:rgba(var(--blue-gray-600-rgb),0.05);--border:transparent}.Button_secondary__hHiHI.Button_text__ZT_3O:active{--foreground:var(--blue-gray-600);--background:rgba(var(--blue-gray-600-rgb),0.1);--border:transparent}.Button_tertiary__ae6C5{--foreground:var(--blue-gray-700);--background:var(--white);border:1px solid var(--blue-gray-200)}.Button_tertiary__ae6C5:hover{--background:var(--blue-gray-100)}.Button_tertiary__ae6C5.Button_active__YNf7E,.Button_tertiary__ae6C5:active{--background:var(--blue-gray-200)}.Dropdown_container__NBOZ_{display:flex;flex-direction:column;gap:8px;font-family:var(--font-family);width:100%;max-width:280px}.Dropdown_select__8pQOA{border:1px solid var(--blue-gray-500);border-radius:4px;font-size:16px;font-weight:400;color:var(--blue-gray-900);margin:0;padding:8px 20px 8px 8px;background:transparent}.Dropdown_select__8pQOA:hover{border:1px solid var(--blue-gray-600);background:transparent}.Dropdown_select__8pQOA:focus{outline:none;border:1px solid var(--celadon-blue)}.Dropdown_footerText__NChWz{color:var(--blue-gray-600);font-size:11px;font-weight:400}.Dropdown_error__QI4FY{border:1px solid var(--color-error)}.Label_label__KH246{font-weight:600;font-size:14px;font-family:var(--font-family);color:var(--blue-gray-600);margin:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Label_error__jqh1I{color:var(--color-error)}.RequiredNotice_required___q_RJ{display:flex;align-items:center;gap:8px;color:var(--blue-gray-600);font-size:11px;font-weight:400}.RequiredNotice_error__eBy3b{color:var(--color-error)}.Input_container__QSkRF{display:flex;flex-direction:column;gap:8px;font-family:var(--font-family);width:100%;max-width:280px}.Input_input__Q0qP2{padding:8px;border:1px solid var(--blue-gray-500);border-radius:4px;font-size:16px;font-weight:400;color:var(--blue-gray-900);margin:0;height:46px}.Input_input__Q0qP2:hover{border:1px solid var(--blue-gray-600)}.Input_input__Q0qP2:focus{outline:none;border:1px solid var(--celadon-blue)}.Input_error__l9OaT{border:1px solid var(--color-error)}.Input_characterLimit__4NkYE{color:var(--blue-gray-600);font-size:11px;font-weight:400}.Input_characterLimitError__ZByP3{color:var(--color-error)}.Input_footer__55AdV{display:flex;justify-content:space-between}.Input_footerAlignRight__DG8UZ{justify-content:flex-end}.Text_root__is73U{display:inline-block;padding:0;margin:0}.Text_primary__rZf7F{color:var(--blue-gray-900)}.Text_secondary__EPWj0{color:var(--blue-gray-600)}.Text_success__Mcw5I{color:var(--color-success)}.Text_error__pdEO6{color:var(--color-error)}.Text_warning__xCiZk{color:var(--color-warning)}.Text_white__Sb1IU{color:#fff}.Text_rowTitle__U1gB1{font-size:28px;line-height:35px}.Text_xlarge__X3NtK{font-size:20px;line-height:26px}.Text_large__c_Tar{font-size:18px;line-height:26px}.Text_medium__rk8Tn{font-size:16px;line-height:22px}.Text_small__S0zKm{font-size:14px;line-height:18px}.Text_xsmall__vYp9p{font-size:12px;line-height:15px}.Text_xxsmall__kOJdm{font-size:11px;line-height:14px}.Text_disabled___vAZA{color:var(--blue-gray-500)}.Text_italic__ZZFbJ{font-style:italic}.Text_weight-light__Rh8tc{font-weight:300}.Text_weight-regular__gWC16{font-weight:400}.Text_weight-medium__oIdYz{font-weight:500}.Text_weight-strong__yEO2S{font-weight:600}.Text_weight-bold__xnsIS{font-weight:700}.Text_ellipsis__QNjvO{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Text_lineClamp__SO_Pl{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.TextArea_container__oc_q4{display:flex;flex-direction:column;gap:8px;font-family:var(--font-family);width:100%;max-width:280px}.TextArea_textarea__VyrNQ{padding:8px;border:1px solid var(--blue-gray-500);border-radius:4px;font-size:16px;font-weight:400;color:var(--blue-gray-900);font-family:var(--font-family);min-height:150px;margin:0}.TextArea_textarea__VyrNQ:hover{border:1px solid var(--blue-gray-600)}.TextArea_textarea__VyrNQ:focus{outline:none;border:1px solid var(--celadon-blue);background:transparent}.TextArea_error__o_XpL{border:1px solid var(--color-error)}.TextArea_characterLimit__hm9El{color:var(--blue-gray-600);font-size:11px;font-weight:400}.TextArea_characterLimitError__UbPM9{color:var(--color-error)}.TextArea_footer__EG4wA{display:flex;justify-content:space-between}.TextArea_footerAlignRight__PmO7Z{justify-content:flex-end}.TagInput_container__4lPGD{display:flex;flex-direction:column;gap:8px;font-family:var(--font-family);width:100%;max-width:280px}.TagInput_input__lsGqa{border:none;flex:1 1;min-width:100px;height:30px}.TagInput_tag__9BE6f{border-radius:20px;padding:4px 8px;border:1px solid var(--blue-gray-300);display:flex;gap:8px;font-size:14px;color:var(--blue-gray-600);font-weight:600;align-items:center}.TagInput_closeTag__oeDgn{border:none;background-color:transparent;padding:0;color:var(--blue-gray-500);font-size:10px;margin:0}.TagInput_closeTag__oeDgn:hover{opacity:.75;cursor:pointer}.TagInput_inputContainer__dl2dW{box-sizing:border-box;padding:8px;border:1px solid var(--blue-gray-500);border-radius:4px;font-size:16px;font-weight:400;color:var(--blue-gray-900);width:100%;display:flex;gap:8px}.TagInput_inputContainer__dl2dW:hover{border:1px solid var(--blue-gray-600)}.TagInput_input__lsGqa:focus{outline:none;border-radius:4px;border:1px solid var(--celadon-blue)}.TagInput_error__INAMJ{border:1px solid var(--color-error)}.TagInput_errorText__Dq2QW{display:flex;align-items:center;gap:8px;color:var(--color-error);font-size:11px;font-weight:400}.TagInput_autocompleteContainer__RgOvw{position:relative}.TagInput_autocomplete__nGD9D{background-color:var(--white);display:flex;flex-direction:column;width:100%;position:absolute;left:0;right:0;top:-8px;box-shadow:0 .5px 5px rgba(0,0,0,.039),0 3.75px 11px rgba(0,0,0,.19);border-radius:4px;overflow-y:scroll;z-index:3}.TagInput_suggestion__k4kfh{padding:8px;color:var(--blue-gray-600);font-weight:600;text-decoration:underline;text-underline-offset:1.5px}.TagInput_suggestion__k4kfh:hover{cursor:pointer;color:var(--blue-gray-600)}.TagInput_focusedSuggestion__QnSXo,.TagInput_suggestion__k4kfh:hover{background-color:var(--blue-gray-200)}.TagInput_tagContainer__LflB5{display:flex;gap:8px;flex-wrap:wrap;width:100%}.TagInput_footerText__O_1t4{color:var(--blue-gray-600);font-size:11px;font-weight:400}.Selector_container__v2jVr{display:flex;flex-direction:column;gap:8px;font-family:var(--font-family);width:100%;max-width:280px}.Selector_selector__U2foh{border-radius:4px;display:flex;width:100%}.Selector_selector__U2foh button{border:1px solid var(--blue-gray-500);padding:6px 0;flex:1 1;margin:0;background-color:transparent}.Selector_selector__U2foh button:enabled:hover{cursor:pointer;background-color:var(--blue-gray-300)}.Selector_selector__U2foh button:first-child{border-radius:4px 0 0 4px}.Selector_selector__U2foh button:last-child{border-radius:0 4px 4px 0}.Selector_selector__U2foh button.Selector_selected__nyxjH{border:1px solid var(--celadon-blue);background-color:var(--celadon-blue)}.Selector_selector__U2foh button.Selector_selected__nyxjH .Selector_text__Rs7F7{color:var(--white)}.Selector_selector__U2foh button.Selector_selected__nyxjH:focus{outline-offset:4px}.Selector_selectorContainer__h4Mg1{display:flex;align-items:center;gap:4px}.Selector_icon__Y9S90{color:var(--blue-gray-500)}.Selector_text__Rs7F7{margin:0;font-weight:400;font-size:16px;font-family:Source Sans Pro,sans-serif}.IconWithExplanation_container__21T3S{position:relative;display:inline-flex}.IconWithExplanation_explanation___qwbw{position:absolute;top:50%;transform:translateY(-50%);left:120%;background-color:#fff;border-radius:4px;box-shadow:0 .5px 5px rgba(0,0,0,.039),0 3.75px 11px rgba(0,0,0,.19);z-index:3;padding:8px;width:150px}.IconWithExplanation_container__21T3S:hover .IconWithExplanation_explanation___qwbw{display:block}.IconWithExplanation_arrow__fCL_Y{content:"";position:absolute;left:-10px;margin-left:-5px;top:50%;transform:translateY(-50%);border:10px solid transparent;border-right-color:#fff}@media (max-width:768px){.IconWithExplanation_arrow__fCL_Y{margin-right:-5px;margin-left:0;border-color:transparent transparent transparent #fff;left:auto;right:-10px}.IconWithExplanation_explanation___qwbw{left:auto;right:120%}}.Checkbox_wrapper__HI5JR{display:flex;gap:10px;align-items:center}.Checkbox_input__RZSBL:hover,.Checkbox_label__7BF2Y:hover,.Checkbox_wrapper__HI5JR:hover{cursor:pointer}.Checkbox_wrapper__HI5JR .Checkbox_label__7BF2Y{font-weight:400;color:var(--blue-gray-900);margin:0}.Checkbox_wrapper__HI5JR .Checkbox_input__RZSBL{width:20px;height:20px;accent-color:var(--celadon-blue);margin:0}.Checkbox_wrapper__HI5JR:hover .Checkbox_input__RZSBL{accent-color:var(--celadon-blue-dark)}.Checkbox_wrapper__HI5JR:hover .Checkbox_label__7BF2Y{color:var(--celadon-blue-dark)}.RadioButton_root__592m2{--size:16px;--borderSize:2px;display:inline-flex;align-items:center;justify-content:flex-start;gap:12px;padding-block:8px;cursor:pointer}.RadioButton_root__592m2.RadioButton_large__K_9NI{--size:24px}.RadioButton_root__592m2.RadioButton_rtl__rAcql{font-size:16px;justify-content:space-between}.RadioButton_root__592m2:hover:not(.RadioButton_labelOnLeft__nb96s){font-weight:600}.RadioButton_root__592m2 input[type=radio]{position:relative;width:var(--size);height:var(--size);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;margin:0;border:var(--borderSize) solid var(--blue-gray-500);border-radius:100vmax}.RadioButton_root__592m2 input[type=radio]:before{content:"";position:absolute;top:50%;left:50%;display:block;width:calc(var(--size) / 2);height:calc(var(--size) / 2);background-color:var(--celadon-blue);border-radius:100vmax;translate:-50% -50%;transition:scale .2s;scale:0}.RadioButton_root__592m2.RadioButton_checked__dJL5R input[type=radio]{border-color:var(--celadon-blue)}.RadioButton_root__592m2.RadioButton_checked__dJL5R input[type=radio]:before{scale:1}.Banner_root__pOnAN{--background:var(--celadon-blue-dark);width:100vw;height:40px;display:flex;align-items:center;justify-content:center;background-color:var(--background);color:var(--white);font-size:var(--font-size-medium);font-weight:var(--font-weight-medium);opacity:0;visibility:hidden;transition:opacity .2s ease-in-out,visibility .2s ease-in-out;z-index:1}.Banner_visible__q1NMx{opacity:1;visibility:visible;transition-delay:0s}.Banner_aboveHeader__hC_i_{position:static;top:0}.Banner_belowHeader__Mcfew{position:absolute;top:var(--header-height)}.Banner_info__7SXSI{--background:var(--color-info)}.Banner_success__wveEs{--background:var(--color-success)}.Banner_error__lW5NB{--background:var(--color-error)}.Banner_warning__pEEt7{--background:var(--color-warning)}.Metadata_root__oCstk{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));place-content:flex-start;padding-inline-end:20px;padding-block-start:32px}.Metadata_root__oCstk .author{grid-column:1;grid-row:3;align-content:flex-start}.Metadata_root__oCstk .description,.Metadata_root__oCstk .pills-list,.Metadata_root__oCstk .stats,.Metadata_root__oCstk .title{grid-column:1/span 2}.Metadata_root__oCstk .title{margin-bottom:8px}.Metadata_root__oCstk .stats{margin-bottom:12px}.Metadata_root__oCstk .description{margin-top:12px}.Metadata_root__oCstk .pills-list{margin-block-start:20px;margin-block-end:18px}.Metadata_root__oCstk .actions{display:none}@media screen and (max-width:928px){.Metadata_root__oCstk{margin-block:8px 20px}.Metadata_root__oCstk .stats{margin-bottom:16px}.Metadata_root__oCstk .description{margin-top:0}.Metadata_root__oCstk .author{grid-column:2;grid-row:5;margin-block-start:12px;margin-block-end:6px;justify-content:end}.Metadata_root__oCstk.Metadata_authorInDescription__hW1wb:not(.Metadata_expanded__uLdy4) .author{display:none}.Metadata_root__oCstk.Metadata_authorInDescription__hW1wb.Metadata_expanded__uLdy4 .author{display:flex;grid-column:1/span 2;grid-row:5;justify-content:flex-start;margin-block-start:12px}.Metadata_root__oCstk .actions{display:none}.Metadata_root__oCstk .pills-list{margin-block-start:16px;margin-block-end:0}}.Metadata_root__oCstk .metadata-recs{grid-column:1/-1}.Title_root__svkHQ{font-size:clamp(26px,1vw + 1rem,28px);font-weight:600;line-height:1.25;min-width:0;word-break:break-word}.Heading_heading__3MAvZ,.Title_root__svkHQ{color:var(--blue-gray-900)}.Heading_h1__3k7S2{font-size:32px;font-weight:700}.Heading_h2__f9yvs{font-size:28px;font-weight:600}.Heading_h3__f1djd{font-size:24px}.Heading_h4__7tfLE{font-size:20px}.Heading_h5__jVM0l{font-size:16px;font-weight:400}.Heading_h6__uUTrd{font-size:14px;font-weight:400}.Stats_root__p_BoZ{flex-wrap:wrap;display:flex;align-items:center;-moz-column-gap:6px;column-gap:6px;color:var(--blue-gray-600);font-size:16px}.Stats_leftContent__588PR,.Stats_rightContent__8d0AF{display:flex;gap:6px}@media screen and (max-width:928px){.Stats_root__p_BoZ.Stats_extendedMetadata__wb62p .Stats_leftContent__588PR{width:100%}.Stats_root__p_BoZ.Stats_extendedMetadata__wb62p .Stats_formatTypesBullet__xDv0L{display:none}}.Likes_root__WVQ1_{cursor:pointer;transition:color .2s ease-in-out;border-radius:4px}.Likes_root__WVQ1_:hover{color:var(--blue-gray-700)}.Author_root___6Bx5{--link-color:var(--blue-gray-800);position:relative;display:flex;align-items:center;gap:8px}.Author_link___lVxw{z-index:1;color:var(--link-color);font-weight:600;display:block}.Author_link___lVxw:before{content:"";position:absolute;inset:0}.Author_follow__Lw4TS{z-index:1}@media screen and (max-width:928px){.Author_link___lVxw:hover{color:var(--blue-gray-800)}}.Avatar_root__GNWHY{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;background-color:var(--white);color:var(--blue-gray-300);border-radius:50%;font-size:16px;font-weight:600;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden}.Avatar_initials__EJfVt{color:var(--white);transition:background-color .2s ease-in-out}.Avatar_initials__EJfVt,.Avatar_initials__EJfVt:hover{background-color:var(--blue-gray-600)}.Avatar_image__Bbtll{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.FollowButton_root__FxpBi{display:inline-flex;background-color:transparent;border:1px solid transparent;border-radius:4px;font-size:12px;padding:1px 6px;transition:background-color .2s ease-in-out,border-color .2s ease-in-out;cursor:pointer}.FollowButton_following__xKCww{border-color:#bf5905;color:#bf5905}.FollowButton_following__xKCww:hover{background-color:#ffead7;border-color:rgba(191,89,5,.5)}.FollowButton_follow__d_6u5{border-color:var(--celadon-blue-dark);color:var(--celadon-blue-dark)}.FollowButton_follow__d_6u5:hover{background-color:#eaf7ff;border-color:rgba(2,126,176,.5)}@media screen and (max-width:928px){.FollowButton_root__FxpBi{display:none}}.Description_root__kt4uq{--line-height:26px;position:relative}.Description_root__kt4uq.Description_clamped__PaV_1{padding-bottom:25px}.Description_root__kt4uq.Description_clamped__PaV_1 .Description_wrapper__hYE9_{mask-image:linear-gradient(to bottom,var(--white),transparent);-webkit-mask-image:linear-gradient(to bottom,var(--white),transparent)}.Description_wrapper__hYE9_{min-height:var(--line-height);display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:2}.Description_noClamp__1z7c5,.Description_wrapper__hYE9_.Description_expanded__lRamt{-webkit-line-clamp:unset;-webkit-mask-image:none;mask-image:none}.Description_wrapper__hYE9_.Description_expanded__lRamt{height:auto}.Description_wrapper__hYE9_ p{color:var(--blue-gray-600);font-size:18px;line-height:var(--line-height);white-space:pre-wrap;word-break:break-word}.Description_root__kt4uq button{padding-inline:0}.Description_root__kt4uq .Description_more__ChrRK{position:absolute;padding:0;bottom:0;height:26px}.Description_root__kt4uq .Description_less__BvWbY{display:none}@media screen and (max-width:928px){.Description_root__kt4uq .Description_more__ChrRK{right:0;background-color:#fff}.Description_root__kt4uq.Description_clamped__PaV_1{padding-bottom:0}.Description_root__kt4uq .Description_less__BvWbY,.Description_root__kt4uq .Description_more__ChrRK{display:flex;height:var(--line-height)}}.Description_root__kt4uq .Description_less__BvWbY.Description_hidden__a9QZJ,.Description_root__kt4uq .Description_more__ChrRK.Description_hidden__a9QZJ{display:none}.PillsList_root__2EydN{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.Pill_root__IqOYH{--bg:color-mix(in srgb,var(--celadon-blue-dark),90% transparent);--color:var(--blue-gray-800);height:40px;display:inline-flex;align-items:center;gap:6px;background-color:var(--bg);border-radius:100vmax;color:var(--color);font-size:16px;font-weight:600;padding-inline:16px;transition:color .2s ease-in-out,background-color .2s ease-in-out,filter .2s ease-in-out;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;white-space:nowrap}.Pill_root__IqOYH:not(.Pill_selected__VPtHm):hover{filter:brightness(.6)}.Pill_root__IqOYH.Pill_selected__VPtHm{--bg:var(--blue-gray-900);--color:var(--white)}@media screen and (max-width:520px){.Pill_root__IqOYH{height:28px;padding-inline:12px;gap:4px;font-size:12px}.Pill_icon__xE_Cg{--size:18px!important}}.Actions_root__00yIC{display:flex;gap:6px;align-items:baseline;min-height:44px}@media screen and (max-width:928px){.Actions_root__00yIC{min-height:35px}.Actions_root__00yIC .gallery-view-button{padding-inline:0;margin-inline-end:auto}}@media (min-width:929px){.Actions_root__00yIC .fullscreen-button,.Actions_root__00yIC .like-button,.Actions_root__00yIC .more-button,.Actions_root__00yIC .save-button{--size:44px;border:1px solid var(--blue-gray-200)}}button.GalleryViewButton_root__s4Nw4{--size:32px;color:var(--blue-gray-700)}button.GalleryViewButton_root__s4Nw4:hover{background-color:transparent}@media only screen and (min-width:929px){button.GalleryViewButton_root__s4Nw4{display:none}}.Tooltip_root__7FS0Y{background:var(--midnight-green-dark);border-radius:4px;box-shadow:0 .5px 5px rgba(0,0,0,.04),0 4px 11px rgba(0,0,0,.2);color:var(--white);font-weight:400;font-size:12px;line-height:15px;padding:6px 8px;opacity:0;visibility:hidden;animation:Tooltip_show__qVG5k .2s ease-in-out forwards;z-index:var(--popup-index)}.Tooltip_triggerWrapper___S2HG{flex-shrink:0;position:relative;align-items:center;justify-content:center}@keyframes Tooltip_show__qVG5k{to{opacity:1;visibility:visible}}.Tooltip_large__J4Fvl{padding:16px;display:flex;flex-direction:column;background:#fff;color:var(--black)}.SaveLoggedIn_icon__lk74r{color:var(--blue-gray-700)}.SaveOptionsDrawer_drawerTrigger__Gb7nK{box-shadow:none;border:none;border-radius:4px;position:relative;z-index:7}.SaveOptionsDrawer_drawerTrigger__Gb7nK:active,.SaveOptionsDrawer_drawerTrigger__Gb7nK:active:focus,.SaveOptionsDrawer_drawerTrigger__Gb7nK:hover{border:none;box-shadow:none;background-color:transparent}.SaveOptionsDrawer_drawerTrigger__Gb7nK:focus{background:transparent}.SaveOptionsDrawerContent_drawerContent__J5JTL{margin:16px}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_separator__UW5Rz{margin:8px 0}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_itemsContainer__tCXw5{display:flex;flex-direction:column;margin-top:0;max-height:144px;overflow-y:auto}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_drawerActionSecondary__7cq8j{font-weight:400;line-height:24px;padding:0 8px;margin:8px 0;width:100%}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_drawerActionSecondary__7cq8j span{color:var(--blue-gray-800);justify-content:space-between;gap:30px}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_drawerActionPrimary____QuR span{gap:14px}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_drawerActionPrimary____QuR{color:var(--blue-gray-800);display:flex;font-weight:400;line-height:24px;align-items:center;justify-content:flex-start;padding:8px 4px;margin:14px 0}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_drawerActionPrimary____QuR.SaveOptionsDrawerContent_newListButton__VzhfD{font-size:16px;font-weight:600}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_addIcon__Wb2cq{color:var(--blue-gray-800)}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_drawerActionSecondary__7cq8j span.SaveOptionsDrawerContent_clampLines__zfkfI{display:inline-block;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:calc(100vw - 115px)}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_listIcon__5dcfC{color:var(--blue-gray-900)}.SaveOptionsDrawerContent_drawerContent__J5JTL .SaveOptionsDrawerContent_noSavedLists__cpUBY{color:var(--blue-gray-600);font-weight:400;font-size:16px;line-height:24px;padding:12px 16px;text-align:center}.Separator_root__70Ime{--orientationMargin:0;background-color:var(--blue-gray-200);flex-shrink:0}.Separator_horizontal__czVEa{width:calc(100% - var(--orientationMargin) * 2);height:1px}.Separator_vertical__JYCCK{width:1px;height:calc(100% - var(--orientationMargin) * 2)}.SaveLoggedOut_icon__ny9X2{color:var(--blue-gray-700)}.MoreDropdownButton_root__ciXL6{width:100%;padding:0 16px}.MoreDropdownButton_list__VI5Ah{list-style-type:none;padding:0;margin:0}.MoreDropdownButton_item__t4HmI{margin:8px 0}.MoreDropdownButton_actionButton__gJ41E{color:var(--black);display:flex;align-items:center;font-size:16px;height:48px;gap:12px}.MoreDropdownButton_actionButton__gJ41E:focus{outline:none}.MoreDropdownButton_drawerHeading__chh4X{margin:24px 0;display:flex;align-items:center}.MoreDropdownButton_moreOptionsIcon__TpJLA{color:var(--blue-gray-700)}.MoreDropdownButton_icon__DxfY4{color:var(--blue-gray-800)}.MoreDropdownButton_tooltip__az4od{white-space:nowrap}.MoreDropdownButton_trigger__x7wGs{width:44px;height:44px;border-radius:4px}@media (max-width:928px){.MoreDropdownButton_trigger__x7wGs{width:32px;height:32px}}.ReportForm_root__REyLj{display:grid;grid-gap:12px;gap:12px;font-size:1rem;color:var(--blue-gray-800)}.ReportForm_root__REyLj label,.ReportForm_row__dXO5W{display:flex;align-items:center;gap:12px}.ReportForm_root__REyLj label{gap:8px}.ReportForm_root__REyLj label:has(input[type=radio]:checked){font-weight:600;color:var(--blue-gray-900)}.ReportForm_root__REyLj input[type=radio]{accent-color:var(--celadon-blue)}.ReportForm_root__REyLj select{width:100%;display:block;height:40px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:url('data:image/svg+xml;utf8,<svg fill="lightgray" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px"><path d="M7 10l5 5 5-5z"/></svg>') no-repeat right 8px center;border:1px solid var(--blue-gray-300);border-radius:4px;color:var(--blue-gray-600);font-size:1rem;padding-block:4px;padding-inline:16px;margin-block-start:8px}.ReportForm_root__REyLj select.changed{background-image:url('data:image/svg+xml;utf8,<svg fill="lightgray" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24px" height="24px"><path d="M7 10l5 5 5-5z"/></svg>');color:var(--blue-gray-900)}.ReportForm_root__REyLj a{color:var(--celadon-blue);font-weight:600;text-decoration:none}.ReportForm_root__REyLj p{color:var(--blue-gray-700)}.ReportForm_actions__LPSXn{display:flex;gap:12px;justify-content:flex-end;margin-block-start:8px}.ReportForm_copyrightPolicy__z8QMf{display:unset}.ReportForm_info__2Xs_1{max-width:200px;padding-inline:16px;padding-block:20px}.ReportForm_error__bC3zN{display:flex;align-items:center;gap:8px;border-radius:8px;background-color:#f2dede;color:var(--blue-gray-800);padding-inline:16px;padding-block:12px;margin-block-end:16px}.Modal_root__TYkzh[open]{transform:translateY(0)}.Modal_root__TYkzh{--max-height:calc(100dvb - var(--header-height));--title-size:80px;width:-moz-max-content;width:max-content;max-height:var(--max-height);place-self:center;border-radius:var(--border-radius);transform:translateY(8px)}@starting-style{.Modal_root__TYkzh[open]{transform:translateY(8px)}}.Modal_root__TYkzh.Modal_small__hupRE{width:400px}.Modal_root__TYkzh.Modal_medium__j8NOV{width:600px}.Modal_root__TYkzh.Modal_large__ygVmr{width:800px}.Modal_root__TYkzh.Modal_xlarge__HeXWk{width:960px}.Modal_wrapper__4UTGq{position:relative;display:grid}.Modal_wrapper__4UTGq .modal-content{flex:1 1;max-height:calc(var(--max-height) - var(--title-size));overflow:clip auto}@media screen and (max-width:520px){.Modal_root__TYkzh,.Modal_root__TYkzh.Modal_large__ygVmr,.Modal_root__TYkzh.Modal_medium__j8NOV,.Modal_root__TYkzh.Modal_small__hupRE,.Modal_root__TYkzh.Modal_xlarge__HeXWk{width:100vw}}@media screen and (max-width:928px){.Modal_root__TYkzh.Modal_bottomPlacement__BUbfp{width:100vw;top:unset;bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}}.Modal_title__xhSfl{height:var(--title-size);display:flex;align-items:center;color:var(--blue-gray-900);font-size:20px;font-weight:600;border-bottom:1px solid var(--blue-gray-200);padding-inline-start:20px;padding-inline-end:60px}.Modal_title__xhSfl:first-letter{text-transform:capitalize}.Modal_content__R1F4d{padding-inline:20px;padding-block:24px}.Modal_root__TYkzh:has(.Modal_actions__t63hZ) .Modal_content__R1F4d{padding-block-end:96px}.Modal_actions__t63hZ{position:absolute;inset-inline:0;bottom:0;display:flex;align-items:center;justify-content:flex-end;gap:24px;background-color:var(--white);padding-inline:20px;padding-block:16px}.MetadataToolbar_root__c03ao{--shadow-opacity:0;position:sticky;display:grid;height:var(--metadata-toolbar-height);background-color:var(--white);z-index:var(--header-index)}.MetadataToolbar_wrapper__r7XEc{position:relative;display:grid;grid-template-columns:minmax(0,1fr) max-content 1fr;align-items:center;padding-inline-end:20px;padding-block:16px}.MetadataToolbar_underline__QQn0C{grid-column:1/-1;grid-row:2;height:1px;position:absolute;bottom:0;right:-20px;left:-30vw;background-color:var(--blue-gray-200);box-shadow:0 2px 4px 0 rgba(0 0 0/var(--shadow-opacity));animation:MetadataToolbar_reveal-shadow__5yBxP linear both;animation-timeline:scroll(block);animation-range:150px 450px}.MetadataToolbar_title__jfTWv{font-size:18px;font-weight:600}.MetadataToolbar_actions__FB33C{width:-moz-max-content;width:max-content;justify-self:flex-end;align-self:flex-start;display:flex;grid-column-end:-1}.MetadataToolbar_pageNumber__i6Bhj{display:inline-flex;align-items:center;margin-inline:1em;height:44px}@media screen and (max-width:928px){.MetadataToolbar_root__c03ao{display:none}}@keyframes MetadataToolbar_reveal-shadow__5yBxP{to{--shadow-opacity:0.122}}.DownloadButton_root__adY00{margin-left:auto;display:inline-grid;gap:6px;justify-items:center;flex-shrink:0;text-align:center}.DownloadButton_savedStyling__k18od{font-weight:600;font-size:18px}.DownloadMultipleFormatDrawer_root__CWFxX{width:100%;padding:0 24px}.DownloadMultipleFormatDrawer_drawerHeading__8LnFw{margin:16px 0}.DownloadMultipleFormatDrawer_drawerContent__y815X{width:100%;padding:24px 0}.DownloadMultipleFormatDrawer_drawerRadioButtons__I_lQ4 label{margin-bottom:20px}.DownloadMultipleFormatDrawer_drawerRadioButtons__I_lQ4{margin-bottom:4px}.Fieldset_root__L2NQU{display:grid;padding:0;border:0}.Fieldset_root__L2NQU legend{display:none}.DownloadMultipleFormatPopover_popoverContent__IJudF{min-width:185px}.PopoverMenuContent_root__MsRtR{background:var(--white);box-shadow:0 .5px 5px rgba(0,0,0,.04),0 4px 11px rgba(0,0,0,.2);border-radius:4px;opacity:0;visibility:hidden;transition:opacity .2s ease-in-out,visibility .2s ease-in-out;z-index:1000}.PopoverMenuContent_root__MsRtR.PopoverMenuContent_visible__O86I_{opacity:1;visibility:visible;transition-delay:0s}.PopoverMenuItem_item__iazpP{width:100%;display:flex;align-items:center;background-color:transparent;color:inherit;cursor:pointer;font-size:inherit;line-height:24px;padding:12px 16px;white-space:nowrap}.PopoverMenuItem_item__iazpP.PopoverMenuItem_highlight__inbqK,.PopoverMenuItem_item__iazpP:hover{background-color:var(--blue-gray-100)}.PopoverMenuSeparator_separator__UpSGw{width:calc(100% - 32px);height:1px;background-color:var(--blue-gray-300);margin:8px 16px}.Player_root__L1AmF{position:relative;min-width:0;background-color:var(--snow-gray);padding:20px}.Player_root__L1AmF.Player_isInfographic__iQpvH{background-color:unset;padding-inline-start:1px;padding-inline-end:20px}@media (max-width:928px){.Player_root__L1AmF,.Player_root__L1AmF.Player_isInfographic__iQpvH{background-color:unset;padding-inline:2px}}.VerticalPlayer_root__K8_YS{position:relative;display:grid;grid-template-columns:minmax(0,1fr);grid-gap:24px;gap:24px}@media screen and (max-width:928px){.VerticalPlayer_root__K8_YS{gap:8px}}.VerticalSlide_root__jU_9r{position:relative}.VerticalSlide_root__jU_9r .vertical-slide-image{position:absolute;inset:0}.VerticalSlide_root__jU_9r>.save-slide{position:absolute;top:12px;right:12px}@media only screen and (max-width:928px){.VerticalSlide_root__jU_9r .save-slide-button{--size:32px;background-color:var(--blue-gray-100)}}.VerticalSlideImage_root__64KSA{position:relative;width:100%;height:100%;box-shadow:0 0 0 1px var(--blue-gray-200);border-radius:8px;overflow:clip}.VerticalSlideImage_image__VtE4p{-o-object-fit:contain;object-fit:contain;opacity:0;transition:opacity .3s var(--ease)}.VerticalSlideImage_image__VtE4p.VerticalSlideImage_loaded__Q7FLb{opacity:1}.VerticalSlideActions_root__azvaH{display:flex;flex-direction:column;gap:12px;position:absolute;top:12px;right:12px;bottom:12px;opacity:1;transition:opacity .3s ease-in .1s;z-index:1}@starting-style{.VerticalSlideActions_root__azvaH{opacity:0}}button.VerticalSlideActions_downloadButton__ancDu{border-radius:4px;color:var(--blue-gray-700);background-color:var(--blue-gray-100)}button.VerticalSlideActions_fullscreen__5CkK_{background-color:var(--blue-gray-100);color:var(--blue-gray-700);margin-block-start:auto}@media (max-width:928px){.VerticalSlideActions_root__azvaH>div:first-child{display:none}}.SaveSlide_root__k6Uis{color:var(--blue-gray-700)}.SaveSlide_root__k6Uis button.SaveSlide_button__w0PF7{background-color:var(--blue-gray-100);font-size:18px;line-height:24px;color:var(--blue-gray-700);padding:0 8px;min-width:32px;transition:min-width .2s ease-in-out}.FreestarVideoAd_root__KDWgl{min-width:0;flex-shrink:0;aspect-ratio:16/9}.SlideRecs_root__likA5{--card-hover-background:var(--blue-gray-200);display:flex;flex-direction:column;gap:20px}.SlideRecs_root__likA5 h2{font-size:24px;font-weight:600}@media (max-width:1050px){.SlideRecs_root__likA5{display:none}}.SlideRecs_root__likA5 .SlideRecs_cards__Lbxtt{display:grid;grid-gap:16px;gap:16px}.SlideRecs_root__likA5 .SlideRecs_card__txc2D{position:relative;grid-template-columns:180px 1fr;grid-template-rows:auto;gap:16px}.SlideRecs_root__likA5 .slideshow-thumbnail{box-shadow:0 0 0 1px var(--blue-gray-200)}.SlideRecs_root__likA5 .slideshow-card-content{padding-block:0;padding-inline-end:36px;gap:8px}.SlideRecs_root__likA5 .slideshow-title{line-height:1;margin-block-end:0}.SlideRecs_root__likA5 .SlideRecs_wrapper__21j_w{display:flex;gap:8px;align-items:center}.SlideRecs_root__likA5 .SlideRecs_wrapper__21j_w a,.SlideRecs_root__likA5 .SlideRecs_wrapper__21j_w span{font-size:12px}.SlideRecs_root__likA5 .SlideRecs_save__RR8dD{position:absolute;top:8px;right:8px}.SlideRecs_root__likA5 .SlideRecs_author__zlhWO{color:var(--blue-gray-700);font-weight:600;text-decoration:none;z-index:2}.SlideRecs_root__likA5 .SlideRecs_author__zlhWO:first-letter{text-transform:uppercase}.SlideRecs_root__likA5 .SlideRecs_card__txc2D .slideshow-title{font-size:16px}.SlideRecs_root__likA5 .SlideRecs_description__0bGsx{color:var(--blue-gray-700);font-size:14px;display:-webkit-box;overflow:hidden;line-clamp:1;-webkit-line-clamp:1;-webkit-box-orient:vertical}.SlideRecs_root__likA5 .SlideRecs_dot__Db7HR{font-size:16px}.SlideRecs_root__likA5 .SlideRecs_tags__RCA1q{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.SlideRecs_root__likA5 .SlideRecs_tags__RCA1q span{display:grid;place-content:center;height:20px;background-color:var(--alice-blue-600);border-radius:100vmax;color:var(--blue-gray-700);font-size:11px;font-weight:600;padding-inline:12px;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;text-transform:capitalize;z-index:2}.SlideshowCard_root__pD8t4{position:relative;display:grid;grid-template-rows:max-content minmax(0,1fr);grid-template-columns:minmax(0,1fr);align-content:flex-start;color:var(--blue-gray-600)}.SlideshowCard_root__pD8t4:hover .SlideshowCard_thumb__86aJk{scale:1.02}.SlideshowCard_content__xh7kV{display:grid;padding:16px 0;grid-template-columns:1fr 32px;grid-template-rows:auto;grid-row-gap:4px;row-gap:4px}.SlideshowCard_content__xh7kV .slideshow-right-side{grid-column-start:2;grid-row-start:1;grid-row-end:span 3}.SlideshowCard_content__xh7kV .slideshow-author,.SlideshowCard_content__xh7kV .slideshow-stats,.SlideshowCard_content__xh7kV .slideshow-title,.SlideshowCard_content__xh7kV .slideshow-type{grid-column-start:1}.SlideshowCard_content__xh7kV .slideshow-author,.SlideshowCard_content__xh7kV .slideshow-stats{margin-block-start:auto}.SlideshowCardLink_root__p8KI7{position:absolute;inset:0;z-index:1;margin:4px}.Thumbnail_root__qLW0K{--ease:cubic-bezier(0.2,0,0,1);position:relative;background-color:var(--blue-gray-100);border:1px solid var(--blue-gray-100);border-radius:8px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);scale:1;transition:scale .2s var(--ease);overflow:hidden}.Thumbnail_thumb__UXO3a{--reveal-delay:calc(30ms * var(--index));position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity .3s var(--ease);transition-delay:var(--reveal-delay)}.Thumbnail_loaded__XOJ5p{opacity:1}.Thumbnail_blur__opK6A{filter:blur(8px)}.Thumbnail_cover__1zsIi{-o-object-fit:cover;object-fit:cover}.Thumbnail_contain__K6M0d{-o-object-fit:contain;object-fit:contain}.SlideshowTitle_root__2VccW{display:-webkit-box;color:var(--blue-gray-900);font-size:18px;font-weight:600;line-height:1.2;margin-bottom:8px;white-space:break-spaces;word-break:break-word;-webkit-box-orient:vertical}.RecSaveButton_icon__btwCp{color:var(--blue-gray-700);z-index:2}.SlideshowStats_root__EQOR1{display:flex;align-items:center;gap:6px}.SlideshowStats_text___WD7l{color:var(--blue-gray-600)}.SlideshowAuthor_root__IkT1_{color:var(--celadon-blue);font-weight:600;text-decoration:underline;-webkit-text-decoration-color:transparent;text-decoration-color:transparent;text-decoration-thickness:1.5px;text-underline-offset:2px;transition:-webkit-text-decoration-color .2s ease-out;transition:text-decoration-color .2s ease-out;transition:text-decoration-color .2s ease-out,-webkit-text-decoration-color .2s ease-out;z-index:2}.SlideshowAuthor_root__IkT1_:hover{-webkit-text-decoration-color:var(--celadon-blue);text-decoration-color:var(--celadon-blue)}.CountTag_root__y1hE1,.SplitDot_root__lTZDc{color:var(--blue-gray-600);font-weight:400}.VerticalInterstitialAdWrapper_root__LxQh8{container-type:inline-size;position:relative;display:grid;min-height:280px;overflow-x:clip}.VerticalInterstitialAdWrapper_root__LxQh8:has(.interstitial-ad-container.has-fetched):not(:has(.interstitial-ad-container.has-fetched .freestar-ad-container:not(.unfilled))){display:none}.VerticalInterstitialAdWrapper_root__LxQh8:has(div.interstitial-ad-container.has-fetched div.freestar-ad-container.filled div),.VerticalInterstitialAdWrapper_root__LxQh8:has(div.interstitial-ad-container.has-fetched div.freestar-ad-container.unfilled iframe){display:grid!important}.VerticalInterstitial_root__Dunl7{display:none}@container (max-width: 480px){.VerticalInterstitial_root__Dunl7{display:block;justify-self:center;align-self:center}}.FreestarAdContainer_root__qPPC_{position:relative;display:grid;place-content:center}.FreestarAdContainer_root__qPPC_.FreestarAdContainer_withFallback__A4lgm{aspect-ratio:var(--fallback-aspect-ratio)}.FreestarAdContainer_fallback__WreT9{position:absolute;inset:0;grid-template-columns:unset;place-content:center}.AdFallback_root__uAXsl{display:grid;justify-items:center;grid-template-columns:1fr;z-index:0}.MultipleIncontentSmall_root__x58Hs{display:none;grid-template-columns:repeat(auto-fit,minmax(max-content,300px));place-content:center;gap:16px}@container (min-width: 616px) and (max-width: 688px){.MultipleIncontentSmall_root__x58Hs{display:grid}}.MultipleIncontentWide_root__4WD8U{display:none;place-content:center}@container (min-width: 480px) and (max-width: 616px){.MultipleIncontentWide_root__4WD8U{display:grid}}.MultipleIncontentLarge_root__pGIAn{display:none;grid-template-columns:repeat(auto-fit,minmax(max-content,336px));place-content:center;gap:16px}@container (min-width: 688px){.MultipleIncontentLarge_root__pGIAn{display:grid}}.BelowReaderAd_root__NKeGg{margin-top:16px;margin-bottom:60px}.BelowReaderAd_root__NKeGg.BelowReaderAd_desktop__7_JN7{display:block;justify-items:flex-start}.BelowReaderAd_root__NKeGg.BelowReaderAd_mobile__08T3d{display:none}.BelowReaderAd_root__NKeGg .fallback-ad{justify-self:flex-start}@media screen and (max-width:928px){.BelowReaderAd_root__NKeGg.BelowReaderAd_desktop__7_JN7{display:none}.BelowReaderAd_root__NKeGg.BelowReaderAd_mobile__08T3d{display:block;justify-items:center}}.Sidebar_root__1BbNu{width:var(--sidebar-size);max-height:100dvh;overflow:clip scroll;position:sticky;top:var(--metadata-toolbar-offset,0);display:flex;flex-direction:column;padding-inline-start:28px;padding-block-start:32px;padding-block-end:430px}.Sidebar_root__1BbNu.Sidebar_withSidebarAds__0w0dT{max-height:unset;overflow:unset;position:static;top:unset;display:grid;grid-template-rows:repeat(var(--slots),1fr);padding-inline:28px}@media (max-width:1050px){.Sidebar_root__1BbNu,.Sidebar_root__1BbNu.Sidebar_withSidebarAds__0w0dT{display:none}}.AboveRecsAd_root__iTmTR{min-height:280px;margin-block-end:32px}.AboveRecsAd_root__iTmTR .freestar-ad-container{place-content:flex-start}@media (max-width:1050px){.AboveRecsAd_root__iTmTR .freestar-ad-container{place-content:center}}.AboveRecsAd_mobileAd__LYgqf{display:none}.AboveRecsAd_desktopAd__ymykj{display:block}@media (max-width:1050px){.AboveRecsAd_mobileAd__LYgqf{display:block}.AboveRecsAd_desktopAd__ymykj{display:none}}.RailRecommendations_root__zqtZQ{display:flex;flex-direction:column;gap:8px;padding-block-end:24px}.RailRecommendations_title__kt1D2{font-size:24px;color:var(--blue-gray-900);font-weight:600;margin-block-end:20px}.RailCard_root__rZUGY{--card-hover-background:var(--blue-gray-100);width:100%;position:relative;padding-block:12px}.RailCard_root__rZUGY.slideshow-card{grid-template-columns:160px minmax(0,1fr);grid-template-rows:auto;gap:12px}.RailCard_root__rZUGY .slideshow-card-content{padding:0}.RailCard_link__d3BBm{z-index:1}.RailCard_root__rZUGY .RailCard_title__Tvfiv{font-size:16px}.RailCard_stats__ZvZms .text{font-size:12px}.RailCard_root__rZUGY .RailCard_author__JYeYZ{color:var(--blue-gray-700);text-decoration:none}@media screen and (min-width:929px){.RailCard_root__rZUGY:hover{background-color:var(--blue-gray-100)}}.RelatedContent_root__29Np1{background-color:var(--blue-gray-100);border-top:1px solid var(--blue-gray-200);border-bottom:1px solid var(--blue-gray-200);padding-block:32px;position:relative}.RelatedContent_wrapper__riU7l{display:grid;grid-template-columns:minmax(0,1fr);grid-gap:32px;gap:32px;max-width:var(--max-content-width);margin-inline:auto}.RelatedContent_title__QUhpL{text-align:center;font-size:32px;font-weight:700}@media screen and (max-width:520px){.RelatedContent_wrapper__riU7l{padding-inline:16px}}.BottomRecommendation_root__7aU9w{display:grid;grid-gap:4px;gap:4px;padding-inline:24px}.BottomRecommendation_title__SRj68{font-size:22px;font-weight:600}.BottomRecommendation_count__4HpLo{font-size:16px;font-weight:400}@media screen and (max-width:520px){.BottomRecommendation_root__7aU9w{padding-inline:0}}.BottomRecommendationContent_root__2qm4_{display:grid}.BottomRecommendationContent_hidden__CUlxl{display:none}.BottomRecommendationContent_root__2qm4_ .mobile-recs{display:grid}.BottomRecommendationContent_root__2qm4_ .desktop-recs{display:none}@media screen and (min-width:520px){.BottomRecommendationContent_root__2qm4_ .mobile-recs{display:none}.BottomRecommendationContent_root__2qm4_ .desktop-recs{display:flex}}.Slider_root__c0Jo8{position:relative;display:grid}.Slider_scroller__KHjw4{display:flex;gap:20px;overflow:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;max-inline-size:100%;min-block-size:100%;touch-action:pan-x;-ms-overflow-style:none;scrollbar-width:none}.Slider_scroller__KHjw4::-webkit-scrollbar{display:none}.Slider_scroller__KHjw4>*{flex-grow:1;flex-shrink:0;scroll-snap-align:start}.Slider_scroller__KHjw4>:last-child{scroll-snap-align:end}.Slider_arrow__8LCca{display:grid;place-content:center;width:36px;height:36px;position:absolute;top:50%;background:var(--white);border:1px solid var(--blue-gray-200);border-radius:100vmax;box-shadow:0 2px 4px 0 rgba(0,0,0,.25);color:var(--blue-gray-800);padding:0;opacity:1;visibility:visible;pointer-events:all;transition:opacity .2s ease-in-out,visibility .2s ease-in-out;transition-delay:0s;cursor:pointer;z-index:1}.Slider_prev__YMssa{left:0;translate:-50% -50%}.Slider_next__fa9IO{right:0;translate:50% -50%}.Slider_hidden__rs7nK{opacity:0;visibility:hidden;pointer-events:none}.BottomRecommendationCard_root__gffTk{inline-size:clamp(220px,12.63rem + 3.45vw,260px);position:relative;background-color:none}.BottomRecommendationCard_root__gffTk .slideshow-thumbnail{border:1px solid var(--blue-gray-200)}.ScribdRecommendation_root__t3ezS{display:grid;grid-gap:16px;gap:16px;padding:0 24px}.ScribdRecommendation_header__Jw_M1{display:grid;grid-template-columns:1fr max-content}.ScribdRecommendation_title__JZ5p7{font-size:22px;font-weight:600}.ScribdRecommendation_link__4DVQz{align-self:end;grid-column:2;grid-row:1/span 2;color:var(--celadon-blue-dark)}.ScribdRecommendation_link__4DVQz:hover{color:var(--celadon-blue)}.ScribdRecommendationCard_root__ef2Y_{--rec-bg-1:#f1e3e3;--rec-bg-2:#f6f4e3;--rec-bg-3:#e1eaec;--rec-bg-4:#efebef;--rec-bg-5:#f1f0f0;--rec-bg-6:#f4eadb;--rec-bg-7:#eaeee7;--rec-bg-8:#e3e8ef;--rec-bg-9:#f1eee6;max-width:172px;position:relative;height:100%;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:max-content minmax(0,1fr);align-content:flex-start;background-color:var(--white);border:1px solid var(--blue-gray-200);box-shadow:none;transition:box-shadow .2s ease-in-out;text-decoration:none}.ScribdRecommendationCard_root__ef2Y_:hover{box-shadow:0 2px 10px rgba(0,0,0,.1)}.ScribdRecommendationCard_thumb__5VVNh{position:relative;display:flex;background-color:var(--blue-gray-200);margin-block-start:24px;margin-inline:20px}.ScribdRecommendationCard_root__ef2Y_:before{position:absolute;inset:0;aspect-ratio:19/16;content:"";background-color:var(--block-color)}.ScribdRecommendationCard_thumb__5VVNh img{--reveal-delay:calc(30ms * var(--card-index));aspect-ratio:inherit;box-shadow:0 4px 6px rgba(0,0,0,.2);-o-object-fit:cover;object-fit:cover;opacity:0;visibility:hidden;transition:opacity .3s var(--ease);transition-delay:var(--reveal-delay)}.ScribdRecommendationCard_loaded__FTN_f img{opacity:1;visibility:visible}.ScribdRecommendationCard_content__ObcvL{display:flex;flex-direction:column;padding-block:20px;padding-inline:16px}.ScribdRecommendationCard_content__ObcvL .rating{padding-block-start:8px;margin-block-start:auto}@media (max-width:928px){.ScribdRecommendationCard_content__ObcvL .rating{flex-direction:column;align-items:flex-start}}.Rating_root__fgZQJ{display:flex;align-items:center;-moz-column-gap:6px;column-gap:6px;white-space:nowrap}.Rating_root__fgZQJ :first-child{color:#e47b01;font-size:16px;line-height:1}.Rating_root__fgZQJ :last-child{color:var(--blue-gray-600);font-size:14px;letter-spacing:-.25px}.Transcript_root__Vrf6Q{width:100%;max-width:var(--max-content-width);display:grid;grid-gap:8px;gap:8px;padding:32px 16px;margin-inline:auto;position:relative;background:#fff}.Transcript_title__YgAka{display:flex;align-items:center;gap:4px;font-weight:300;word-break:break-word}.Transcript_list__faItj{list-style-type:none;padding-inline-start:0;word-break:break-word}.Transcript_link__MLbGS{color:var(--celadon-blue);font-weight:700;line-height:22px;text-decoration:none;cursor:pointer}.EditorsNotes_root__3PcDF{padding:32px 16px;margin:0 auto}.EditorsNotes_heading__XR9E6{font-weight:700;font-size:22px}.EditorsNotes_list__NcG5Y{padding-left:30px;font-size:18px;font-style:italic;color:var(--blue-gray-600)}.EditorsNotes_item__ebBbj{word-break:break-word}@media screen and (min-width:1696px){.EditorsNotes_root__3PcDF{max-width:1688px}}.ActionsMenu_root__4k507{display:flex;gap:12px;align-items:center;justify-content:flex-start;min-height:44px;position:sticky;bottom:0;z-index:var(--sticky-index);height:var(--actions-menu-height);padding:0 15px;background-color:#fff;box-shadow:0 1.85px 6.25px 0 #00000030}.ActionsMenu_root__4k507 .ActionsMenu_downloadButton__s7Iqj{justify-self:flex-end}@media (min-width:929px){.ActionsMenu_root__4k507{display:none}}.LikeModal_more__R9uAk{justify-self:center;color:var(--celadon-blue);font-weight:500;opacity:0;visibility:hidden;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.LikeModal_more__R9uAk.LikeModal_visible__t1vr4{opacity:1;visibility:visible;transition-delay:0s}.LikesUserList_root__RMFUk{list-style:none;padding:0 0 16px;margin:0}.LikesUserList_root__RMFUk>li{display:grid}.LikesUserList_root__RMFUk>li:last-child .LikesUserList_link__NeMA0{border-bottom:none}.LikesUserList_link__NeMA0{display:grid;grid-template-columns:repeat(2,max-content) 1fr;grid-template-rows:repeat(2,min-content);grid-template-areas:"avatar username summary" "avatar title title";grid-column-gap:12px;-moz-column-gap:12px;column-gap:12px;grid-row-gap:0;row-gap:0;border-bottom:1px solid var(--blue-gray-200);padding:8px 0;text-decoration:none}.LikesUserList_avatar__VRXz2{grid-area:avatar}.LikesUserList_username__c84om{grid-area:username}.LikesUserList_summary___gbSG{grid-area:summary}.LikesUserList_title__UF0V6{grid-area:title}.ViewModal_content__GPKXy{padding-block:0}.ViewModal_row__xLxnz{display:flex;justify-content:space-between;border-bottom:1px dashed var(--blue-gray-300);color:var(--blue-gray-800);padding:16px 0}.ViewModal_row__xLxnz:last-child{border-bottom:none}.ConfirmRemoveSavedModal_description__2EAEu{color:var(--blue-gray-800);font-weight:400;font-size:16px;line-height:20px;padding:24px 0}div.SaveToNewListModal_input__Fi90k{max-width:unset;margin-bottom:24px}.SaveToNewListModal_checkboxWrapper__y_w0m .SaveToNewListModal_checkboxLabel__lMiU9:hover,.SaveToNewListModal_checkboxWrapper__y_w0m:hover .SaveToNewListModal_checkboxLabel__lMiU9,.SaveToNewListModal_checkboxWrapper__y_w0m:hover .SaveToNewListModal_input__Fi90k{color:var(--blue-gray-800)}.SaveToNewListModal_checkboxWrapper__y_w0m .SaveToNewListModal_checkboxLabel__lMiU9{color:var(--blue-gray-800);font-weight:400;font-size:14px;flex-direction:column;display:flex;line-height:18px}.SaveToNewListModal_imageContainer__Dx4nD{display:flex;flex-direction:column;justify-content:center;align-items:center;width:178px;margin:0 auto 24px}.SaveToNewListModal_imageContainer__Dx4nD img{height:100px}.SaveToNewListModal_errorContainer__FBZPH{margin:16px 0}dialog.FullscreenModal_root__efM9m[open]{animation:none;opacity:1;scale:1}dialog.FullscreenModal_root__efM9m{--max-height:100dvh;width:100dvw;height:100dvh;border-radius:0;opacity:0;scale:.96}dialog.FullscreenModal_root__efM9m .FullscreenModal_content__bQ6mt{width:100svw;height:100svh;display:grid;padding:0;max-height:100svh}@starting-style{dialog.FullscreenModal_root__efM9m[open]{opacity:0;scale:.96}} /*# sourceMappingURL=f2d403b314115c89.css.map*/</style></head><body><noscript><iframe title="gtm-noscript" src="https://www.googletagmanager.com/ns.html?id=GTM-M36RG8PT" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="__next"><div class="__variable_4d9a39 __className_4d9a39" style="overflow:clip"><div class="PageProgressBar_root__1y_Q3"><div class="PageProgressBar_bar__Kyoem" style="transform:scaleX(0)"></div></div><div data-freestar-ad="__320x50 __1140x90" id="slideshare_pushdown-pushdown-cls" style="height:var(--pushdown-height)"></div><header class="Header_root__8A86O"><div class="Header_wrapper___zBfP"><button aria-label="Open navigation menu" class="Hamburger_root__tHlgC" data-cy="mobile-header-menu" type="button"><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/hamburger.5a525941.svg);background-color:currentColor"></span><span class="sr-only"></span></span></button><dialog id=":R9am:" class="drawer Drawer_root__ob4ZM" data-placement="left"><div class="Drawer_content__ye6ZB"></div><button autofocus="" type="button" aria-label="Close" class="close-button CloseButton_root__JCTRm" data-cy="drawer-close-button"><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/close.393923c4.svg);background-color:currentColor"></span><span class="sr-only"></span></span></button></dialog><a aria-label="SlideShare a Scribd company logo" class="Logo_root__Qba3h" data-cy="slideshare-logo" title="Return to the homepage" href="https://www.slideshare.net/"><img alt="SlideShare a Scribd company logo" loading="lazy" width="120" height="30" decoding="async" data-nimg="1" style="color:transparent" srcSet="https://public.slidesharecdn.com/images/next/svg/logo/slideshare-scribd-company.svg?w=128&amp;q=75 1x, https://public.slidesharecdn.com/images/next/svg/logo/slideshare-scribd-company.svg?w=256&amp;q=75 2x" src="https://public.slidesharecdn.com/images/next/svg/logo/slideshare-scribd-company.svg?w=256&amp;q=75"/></a></div><div class="SearchForm_root__usp4s"><form data-testid="search-form" role="search"><input name="searchfrom" type="hidden" value="header"/><input type="text" autoComplete="off" aria-label="Search SlideShare" id="nav-search-query" data-cy="search-field" name="q" placeholder="Search" value=""/><button type="submit" class="SearchForm_submit__U8kPR" id="search-submit" data-cy="search-submit"><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/search.844a289d.svg);background-color:currentColor"></span><span class="sr-only">Submit Search</span></span></button></form></div><div class="HeaderActions_root__11_ai undefined"></div></header><div class="SlideshowScreen_root__k9j1_ SlideshowScreen_withKeyMoments__RbHLe"><!--$--><div class="metadata Metadata_root__oCstk" data-cy="metadata"><h1 class="Heading_heading__3MAvZ Heading_h1__3k7S2 title Title_root__svkHQ">OpenGL 4.5 Update for NVIDIA GPUs</h1><div class="stats Stats_root__p_BoZ Stats_extendedMetadata__wb62p"><div class="Stats_leftContent__588PR"><time dateTime="2014-08-12 13:36:53 UTC"><span class="skeleton Skeleton_root__U4QqL Skeleton_rounded__BLBq2" style="width:75px;height:24px"></span></time><span class="Text_root__is73U Text_medium__rk8Tn text" style="-webkit-line-clamp:0">•</span><span class="Text_root__is73U Text_medium__rk8Tn text" style="-webkit-line-clamp:0">Download as PPTX, PDF</span><span class="Text_root__is73U Text_medium__rk8Tn Stats_formatTypesBullet__xDv0L text" style="-webkit-line-clamp:0">•</span></div><div class="Stats_rightContent__8d0AF"><span class="Text_root__is73U Text_weight-strong__yEO2S Text_secondary__EPWj0 Text_medium__rk8Tn Likes_root__WVQ1_ text" style="-webkit-line-clamp:0" tabindex="0">46 likes</span><span class="Text_root__is73U Text_medium__rk8Tn text" style="-webkit-line-clamp:0">•</span><span class="Text_root__is73U Text_weight-strong__yEO2S Text_secondary__EPWj0 Text_medium__rk8Tn Likes_root__WVQ1_ text" style="-webkit-line-clamp:0" tabindex="0">36,377<!-- --> <!-- -->views</span></div></div><div class="author Author_root___6Bx5"><div class="Avatar_root__GNWHY" style="width:24px;height:24px;line-height:24px"><img class="Avatar_image__Bbtll" src="https://cdn.slidesharecdn.com/profile-photo-Mark_Kilgard-48x48.jpg?cb=1648161688" alt="Mark Kilgard" loading="lazy" decoding="sync"/></div><a class="Link_root__vn3ab Author_link___lVxw ellipsis Link_primary__Iq4CI Link_size-large__W0PAv Link_weight-regular__yPpnB" data-cy="author-link" title="Mark Kilgard" href="https://www.slideshare.net/Mark_Kilgard">Mark Kilgard</a><button type="button" class="FollowButton_root__FxpBi Author_follow__Lw4TS FollowButton_follow__d_6u5">Follow</button></div><div class="description Description_root__kt4uq Description_clamped__PaV_1"><div class="Description_wrapper__hYE9_" data-cy="document-description"><p>presented at SIGGRAPH 2014 in Vancouver during NVIDIA&#x27;s &quot;Best of GTC&quot; sponsored sessions http://www.nvidia.com/object/siggraph2014-best-gtc.html Watch the replay that includes a demo of GPU-accelerated Illustrator and several OpenGL 4 demos running on NVIDIA&#x27;s Tegra Shield tablet. http://www.ustream.tv/recorded/51255959 Find out more about the OpenGL examples for GameWorks: https://developer.nvidia.com/gameworks-opengl-samples<button type="button" class="Button_root__i1yp0 Button_primary__K25Gq Button_text__ZT_3O Button_small__sqsEx Description_less__BvWbY Description_hidden__a9QZJ" data-testid="button" aria-label="Read less"><span>Read less</span></button></p></div><button type="button" class="Button_root__i1yp0 Button_primary__K25Gq Button_text__ZT_3O Button_small__sqsEx Description_more__ChrRK" data-testid="button" aria-label="Read more" data-cy="read-more-button"><span>Read more</span></button></div><div class="actions Actions_root__00yIC"><div class="Tooltip_triggerWrapper___S2HG"><button type="button" class="Button_root__i1yp0 Button_secondary__hHiHI Button_text__ZT_3O Button_small__sqsEx Button_icon__1C4qi like-button unliked" data-testid="button" aria-label="Like" data-favorited="false" data-cy="like-button"><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/like.3870b074.svg);background-color:#424766"></span><span class="sr-only"></span></span></button></div><div class="Tooltip_triggerWrapper___S2HG"><button type="button" class="Button_root__i1yp0 Button_secondary__hHiHI Button_text__ZT_3O Button_small__sqsEx Button_icon__1C4qi save-button" data-testid="button" aria-label="actions.save" data-saved="false" data-cy="loggedout-save-slideshow-button"><span class="Icon_root__AjZyv SaveLoggedOut_icon__ny9X2" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/save.ef1812e2.svg);background-color:currentColor"></span><span class="sr-only"></span></span></button></div><button type="button" class="unstyled-button more-button MoreDropdownButton_trigger__x7wGs" aria-label="More options" data-cy="more-options-icon" data-testid="ellipsis"><div class="Tooltip_triggerWrapper___S2HG"><span class="Icon_root__AjZyv MoreDropdownButton_moreOptionsIcon__TpJLA" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/more-horizontal.f69be1b8.svg);background-color:currentColor"></span><span class="sr-only"></span></span></div></button></div></div><div class="MetadataToolbar_root__c03ao metadata-toolbar" data-cy="slideshow-toolbar"><div class="MetadataToolbar_wrapper__r7XEc"><div class="actions Actions_root__00yIC"><div class="Tooltip_triggerWrapper___S2HG"><button type="button" class="Button_root__i1yp0 Button_secondary__hHiHI Button_text__ZT_3O Button_small__sqsEx Button_icon__1C4qi like-button unliked" data-testid="button" aria-label="Like" data-favorited="false" data-cy="like-button"><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/like.3870b074.svg);background-color:#424766"></span><span class="sr-only"></span></span></button></div><div class="Tooltip_triggerWrapper___S2HG"><button type="button" class="Button_root__i1yp0 Button_secondary__hHiHI Button_text__ZT_3O Button_small__sqsEx Button_icon__1C4qi save-button" data-testid="button" aria-label="actions.save" data-saved="false" data-cy="loggedout-save-slideshow-button"><span class="Icon_root__AjZyv SaveLoggedOut_icon__ny9X2" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/save.ef1812e2.svg);background-color:currentColor"></span><span class="sr-only"></span></span></button></div><button type="button" class="unstyled-button more-button MoreDropdownButton_trigger__x7wGs" aria-label="More options" data-cy="more-options-icon" data-testid="ellipsis"><div class="Tooltip_triggerWrapper___S2HG"><span class="Icon_root__AjZyv MoreDropdownButton_moreOptionsIcon__TpJLA" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/more-horizontal.f69be1b8.svg);background-color:currentColor"></span><span class="sr-only"></span></span></div></button></div><span data-cy="page-number" class="MetadataToolbar_pageNumber__i6Bhj">1<!-- --> <!-- -->of<!-- --> <!-- -->81</span><div class="MetadataToolbar_actions__FB33C"><div class="DownloadButton_root__adY00"><div><button type="button" class="Button_root__i1yp0 Button_primary__K25Gq Button_contained__gyjai Button_large__Yv_oe" data-testid="download-button" role="button" id=":R3h936:-trigger" tabindex="0" aria-haspopup="listbox" aria-controls=":R3h936:" data-cy="download-button-toolbar" label="Download now" aria-label="Download now"><span><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/download.b1b2622c.svg);background-color:currentColor"></span><span class="sr-only"></span></span>Download now</span></button></div><span class="sr-only" aria-live="polite"></span></div></div><div class="MetadataToolbar_underline__QQn0C"></div></div></div><!--/$--><!--$--><!--/$--><div class="player Player_root__L1AmF"><div id="new-player" class="vertical-player VerticalPlayer_root__K8_YS" data-slideshow-id="37922750"><div><div id="slide1" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-0" alt="SG4121: OPENGL 4.5 UPDATE FOR NVIDIA GPUS Mark Kilgard Principal System Software Engineer, NVIDIA Piers Daniell Senior Graphics Software Engineer, NVIDIA " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="eager" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-1-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-1-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-1-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-1-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide2" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-1" alt="Mark Kilgard • Principal System Software Engineer – OpenGL driver and API evolution – Cg (“C for graphics”) shading language – GPU-accelerated path rendering • OpenGL Utility Toolkit (GLUT) implementer • Author of OpenGL for the X Window System • Co-author of Cg Tutorial • Worked on OpenGL for 20+ years " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-2-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-2-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-2-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-2-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide3" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-2" alt="Piers Daniell • Senior Graphics Software Engineer • NVIDIA’s Khronos OpenGL representative – Since 2010 – Authored numerous OpenGL extension specifications now core • Leads OpenGL version updates – Since OpenGL 4.1 • 10+ years with NVIDIA " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-3-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-3-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-3-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-3-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide4" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-3" alt="NVIDIA’s OpenGL Leverage Debugging with Nsight Programmable Graphics Tegra Quadro OptiX GeForce Adobe Creative Cloud " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-4-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-4-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-4-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-4-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide5" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-4" alt="Single 3D API for Every Platform OS X Linux FreeBSD Solaris Android Windows " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-5-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-5-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-5-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-5-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide6" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-5" alt="Adobe Creative Cloud: GPU-accelerated Illustrator • 27 year old application – World’s leading graphics design application • 6 million users – Never used the GPU • Until this June 2014 • Adobe and NVIDIA worked to integrate NV_path_rendering into Illustrator CC 2014 " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-6-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-6-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-6-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-6-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide7" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-6" alt="OpenGL 4.5 Update for NVIDIA GPUs" class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-7-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-7-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-7-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-7-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide8" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-7" alt="OpenGL 4.x Evolution  Major revision of OpenGL every year since OpenGL 3.0, 2008  Maintained full backwards compatibility 2010 2011 2012 2013 2014 OpenGL 4.0: Tessellation OpenGL 4.1: Shader mix-and-match, ES2 compatibility OpenGL 4.2: GLSL upgrades and shader image load store OpenGL 4.3: Compute shaders, SSBO, ES3 compatibility OpenGL 4.4: Persistently mapped buffers, multi bind ??? " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-8-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-8-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-8-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-8-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide9" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-8" alt="Big News: OpenGL 4.5 Released Today!  Direct State Access (DSA) finally!  Robustness  OpenGL ES 3.1 compatibility  Faster MakeCurrent  DirectX 11 features for porting and emulation  SubImage variant of GetTexImage  Texture barriers  Sparse buffers (ARB extension) " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-9-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-9-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-9-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-9-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide10" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-9" alt="So OpenGL Evolution Through 4.5  Major revision of OpenGL every year since 2008  Maintained full backwards compatibility 2010 2011 2012 2013 2014 OpenGL 4.0: Tessellation OpenGL 4.1: Shader mix-and-match, ES2 compatibility OpenGL 4.2: GLSL upgrades and shader image load store OpenGL 4.3: Compute shaders, SSBO, ES3 compatibility OpenGL 4.4: Persistently mapped buffers, multi bind OpenGL 4.5: Direct state access, robustness, ES3.1 " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-10-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-10-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-10-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-10-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide11" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-10" alt="OpenGL Evolves Modularly • Each core revision is specified as a set of extensions – Example: ARB_ES3_1_compatibility • Puts together all the functionality for ES 3.1 compatibility • Describe in its own text file – May have dependencies on other extensions • Dependencies are stated explicitly • A core OpenGL revision (such as OpenGL 4.5) “bundles” a set of agreed extensions — and mandates their mutual support – Note: implementations can also “unbundle” ARB extensions for hardware unable to support the latest core revision • So easiest to describe OpenGL 4.5 based on its bundled extensions… 4.5 ARB_direct_state_access ARB_clip_control many more … " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-11-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-11-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-11-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-11-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide12" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-11" alt="OpenGL 4.5 as extensions  All new features to OpenGL 4.5 can be used with GL contexts 4.0 through 4.4 via extensions: — ARB_clip_control — ARB_conditional_render_inverted — ARB_cull_distance — ARB_shader_texture_image_samples — ARB_ES3_1_compatibility — ARB_direct_state_access — KHR_context_flush_control — ARB_get_texture_subimage — KHR_robustness — ARB_texture_barrier API Compatibility (Direct3D, OpenGL ES) API Improvements Browser security (WebGL) Texture &amp; framebuffer memory consistency " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-12-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-12-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-12-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-12-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide13" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-12" alt="Additional ARB extensions  Along with OpenGL 4.5, Khronos has released ARB extensions  ARB_sparse_buffer  DirectX 11 features — ARB_pipeline_statistics_query — ARB_transform_feedback_overflow_query  NVIDIA supports the above on all OpenGL 4.x hardware — Fermi, Kepler and Maxwell — GeForce, Quadro and Tegra K1 " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-13-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-13-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-13-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-13-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide14" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-13" alt="NVIDIA OpenGL 4.5 beta Driver  Available today!  https://developer.nvidia.com/opengl-driver — Or just Google “opengl driver” – it’s the first hit! — Windows and Linux  Supports all OpenGL 4.5 features and all ARB/KHR extensions  Available on Fermi, Kepler and Maxwell GPUs — GeForce and Quadro — Desktop and Laptop " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-14-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-14-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-14-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-14-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide15" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-14" alt="Using OpenGL 4.5  OpenGL 4.5 has 118 New functions. Eek.  How do you deal with all that? The easy way…  Use the OpenGL Extension Wrangler (GLEW) — Release 1.11.0 already has OpenGL 4.5 support — http://glew.sourceforge.net/ " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-15-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-15-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-15-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-15-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide16" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-15" alt="Direct State Access (DSA)  Read and modify object state directly without bind-to-edit  Performance benefit in many cases  Context binding state unmodified — Convenient for tools and middleware — Avoids redundant state changes  Derived from EXT_direct_state_access " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-16-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-16-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-16-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-16-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide17" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-16" alt="More Efficient Middleware void Texture2D::SetMagFilter(Glenum filter) { GLuint oldTex; glGetIntegerv(GL_TEXTURE_BINDING_2D, &amp;oldTex); glBindTexture(GL_TEXTURE_2D, m_tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); glBindTexture(GL_TEXTURE_2D, oldTex); }  Before DSA  After DSA void Texture2D::SetMagFilter(Glenum filter) { glTextureParameteri(m_tex, GL_TEXTURE_MAG_FILTER, filter); } " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-17-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-17-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-17-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-17-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide18" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-17" alt="Simplified Code  Before DSA GLuint tex[2]; glGenTextures(2, tex); glActiveTexture(GL_TEXTURE0 + 0); glBindTexture(GL_TEXTURE_2D, tex[0]); glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 8); glActiveTexture(GL_TEXTURE0 + 1); glBindTexture(GL_TEXTURE_2D, tex[1]); glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 4);  After DSA GLuint tex[2]; glCreateTextures(GL_TEXTURE_2D, 2, tex); glTextureStorage2D(tex[0], 1, GL_RGBA8, 8, 8); glTextureStorage2D(tex[1], 1, GL_RGBA8, 4, 4); glBindTextures(0, 2, tex); " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-18-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-18-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-18-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-18-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide19" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-18" alt="More Direct Framebuffer Access  Before DSA glBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO); DrawStuff(); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, nonMsFBO); glBindFramebuffer(GL_READ_FRAMEBUFFER, msFBO); glBlitFramebuffer(...); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO);  After DSA glBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO); DrawStuff(); glBlitNamedFramebuffer(msFBO, nonMsFBO, ...); " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-19-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-19-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-19-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-19-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide20" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-19" alt="DSA Create Functions glCreate Creates glCreateBuffers Buffer Objects glCreateRenderbuffers Renderbuffer Objects glCreateTextures(&lt;target&gt;) Texture Objects of specific target glCreateFramebuffers Framebuffer Objects glCreateVertexArrays Vertex Array Objects glCreateProgramPipelines Program Pipeline Objects glCreateSamplers Sampler Objects glCreateQueries(&lt;target&gt;) Query Objects of a specific target  Generates name AND creates object  Bind-to-create not needed " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-20-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-20-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-20-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-20-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide21" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-20" alt="DSA Texture Functions Non-DSA DSA glGenTextures + glBindTexture glCreateTextures glTexStorage* glTextureStroage* glTexSubImage* glTextureSubImage* glCopyTexSubImage* glCopyTextureSubImage* glGetTexImage glGetTextureImage glCompressedTexSubImage* glCompressedTextureSubImage* glGetCompressedTexImage glGetCompressedTextureImage glActiveTexture + glBindTexture glBindTextureUnit glTexBuffer[Range] glTextureBuffer[Range] glGenerateMipmap glGenerateTextureMipmap gl[Get]TexParameter* gl[Get]TextureParameter* " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-21-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-21-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-21-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-21-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide22" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-21" alt="DSA Renderbuffer Functions Non-DSA DSA glGenRenderbuffers + glBindRenderbuffer glCreateRenderbuffers glRenderbufferStorage* glNamedRenderbufferStorage* glGetRenderbufferParameteriv glGetNamedRenderbufferParameteriv " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-22-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-22-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-22-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-22-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide23" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-22" alt="DSA Framebuffer Functions Non-DSA DSA glGenFramebuffers + glBindFramebuffer glCreateFramebuffers glFramebufferRenderbuffer glNamedFramebufferRenderbuffer glFramebufferTexture[Layer] glNamedFramebufferTexture[Layer] glDrawBuffer[s] glNamedFramebufferDrawBuffer[s] glReadBuffer glNamedFramebufferReadBuffer glInvalidateFramebuffer[Sub]Data glInvalidateNamedFramebuffer[Sub]Data glClearBuffer* glClearNamedFramebuffer* glBlitFramebuffer glBlitNamedFramebuffer glCheckFramebufferStatus glCheckNamedFramebufferStatus glFramebufferParameteri glNamedFramebufferParameteri glGetFramebuffer*Parameter* glGetNamedFramebuffer*Parameter* " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-23-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-23-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-23-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-23-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide24" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-23" alt="DSA Buffer Object Functions Non-DSA DSA glGenBuffers + glBindBuffer glCreateBuffers glBufferStorage glNamedBufferStorage glBuffer[Sub]Data glNamedBuffer[Sub]Data glCopyBufferSubData glCopyNamedBufferSubData glClearBuffer[Sub]Data glClearNamedBuffer[Sub]Data glMapBuffer[Range] glMapNamedBuffer[Range] glUnmapBuffer glUnmapNamedBuffer glFlushMappedBufferRange glFlushMappedNamedBufferRange glGetBufferParameteri* glGetNamedBufferParameteri* glGetBufferPointerv glGetNamedBufferPointerv glGetBufferSubData glGetNamedBufferSubData " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-24-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-24-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-24-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-24-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide25" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-24" alt="DSA Transform Feedback Functions Non-DSA DSA glGenTransformFeedbacks + glBind glCreateTransformFeedbacks glBindBuffer{Base|Range} glTransformFeedbackBuffer{Base|Range} glGetInteger* glGetTransformFeedbacki* " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-25-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-25-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-25-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-25-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide26" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-25" alt="DSA Vertex Array Object (VAO) Functions Non-DSA DSA glGenVertexArrays + glBindVertexArray glCreateVertexArrays glEnableVertexAttribArray glEnableVertexArrayAttrib glDisableVertexAttribArray glDisableVertexArrayAttrib glBindBuffer(ELEMENT_ARRAY_BUFFER) glVertexArrayElementBuffer glBindVertexBuffer[s] glVertexArrayVertexBuffer[s] glVertexAttrib*Format glVertexArrayAttrib*Format glVertexBindingDivisor glVertexArrayBindingDivisor glGetInteger* glGetVertexArray* " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-26-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-26-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-26-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-26-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide27" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-26" alt="EXT_direct_state_access Differences  Only OpenGL 4.5 core functionality supported  Some minor name changes to some functions — Mostly the same, but drops EXT suffix  TextureParameterfEXT -&gt; TextureParameterf — VAO function names shortened  glVertexArrayVertexBindingDivisorEXT -&gt; glVertexArrayBindingDivisor — Texture functions no longer require a target parameter  Target comes from glCreateTextures(&lt;target&gt;,)  Use “3D” functions with CUBE_MAP where z specifies the face  DSA functions can no longer create objects — Use glCreate* functions to create name and object at once " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-27-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-27-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-27-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-27-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide28" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-27" alt="Robustness  ARB_robustness functionality now part of OpenGL 4.5 — Called KHR_robustness for use with OpenGL ES too — Does not include compatibility functions  Adds “safe” APIs for queries that return data to user pointers  Adds mechanism for app to learn about GPU resets — Due to my app or some other misbehaving app  Stronger out-of-bounds behavior — No more undefined behavior  Used by WebGL implementations to deal with Denial of Service (DOS) attacks " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-28-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-28-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-28-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-28-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide29" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-28" alt="Robustness API  Before Robustness GLubyte tooSmall[NOT_BIG_ENOUGH]; glReadPixels(0, 0, H, W, GL_RGBA, GL_UNSIGNED_BYTE, tooSmall); // CRASH!!  After Robustness GLubyte tooSmall[NOT_BIG_ENOUGH]; glReadnPixels(0, 0, H, W, GL_RGBA, GL_UNSIGNED_BYTE, sizeof tooSmall, tooSmall); // No CRASH, glGetError() returns INVALID_OPERATION " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-29-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-29-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-29-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-29-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide30" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-29" alt="Robustness Reset Notification  Typical render loop with reset check while (!quit) { DrawStuff(); SwapBuffers(); if (glGetGraphicsResetStatus() != GL_NO_ERROR) { quit = true; } } DestroyContext(glrc);  Reset is asynchronous — GL will behave as normal after a reset event but rendering commands may not produce the right results — The GL context should be destroyed — Notify the user " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-30-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-30-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-30-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-30-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide31" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-30" alt="OpenGL ES 3.1 Compatibility  Adds new ES 3.1 features not already in GL  Also adds #version 310 es GLSL shader support  Compatibility profile required for full superset — ES 3.1 allows client-side vertex arrays — Allows application generated object names — Has default Vertex Array Object (VAO)  Desktop provides great development platform for ES 3.1 content " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-31-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-31-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-31-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-31-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide32" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-31" alt="Desktop features in an ES profile  NVIDA GPUs provide all ANDROID_extension_pack_es31a features in an ES profile — Geometry, Tessellation, Advanced blending, etc.  Scene from Epic’s “Rivarly” OpenGL ES 3.1 + AEP demo running on Tegra K1 " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-32-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-32-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-32-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-32-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide33" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-32" alt="Using OpenGL ES 3.1 on Desktop  The Windows WGL way int attribList[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 1, WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_ES_PROFILE_BIT_EXT, 0 }; HGLRC hglrc = wglCreateContextAttribsARB(wglGetCurrentDC(), NULL, attribList); wglMakeCurrent(wglGetCurrentDC(), hglrc);  On NVIDIA GPUs this is a fully conformant OpenGL ES 3.1 implementation — http://www.khronos.org/conformance/adopters/conformant-products " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-33-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-33-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-33-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-33-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide34" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-33" alt="New OpenGL ES 3.1 features  glMemoryBarrierByRegion — Like glMemoryBarrier, but potentially more efficient on tillers  GLSL functionality — imageAtomicExchange() support for float32 — gl_HelperInvocation fragment shader input  Know which pixels won’t get output  Skip useless cycles or unwanted side-effects — mix() function now supports int, uint and bool — gl_MaxSamples  Implementation maximum sample count " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-34-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-34-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-34-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-34-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide35" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-34" alt="Faster MakeCurrent  An implicit glFlush is called on MakeCurrent — Makes switching contexts slow  New WGL and GLX extensions allow glFlush to be skipped — Commands wait in context queue — App has more control over flush  Provides 2x MakeCurrent performance boost StartTimer(); for (int i = 0; i &lt; iterations; ++i) { DrawSimpleTriangle(); wglMakeCurrent(context[i % 2]); } StopTimer(); " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-35-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-35-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-35-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-35-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide36" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-35" alt="Disable Implicit glFlush on MakeCurrent  The Windows way with WGL int attribList[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 4, WGL_CONTEXT_MINOR_VERSION_ARB, 5, WGL_CONTEXT_RELEASE_BEHAVIOR_ARB, WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB, 0 }; HGLRC hglrc = wglCreateContextAttribsARB(wglGetCurrentDC(), NULL, attribList); wglMakeCurrent(wglGetCurrentDC(), hglrc); " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-36-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-36-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-36-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-36-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide37" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-36" alt="DirectX 11 Features  ARB_clip_control  ARB_conditional_render_inverted  ARB_cull_distance  ARB_derivative_control  ARB_shader_texture_image_samples  ARB_pipeline_statistics_query (ARB extension)  ARB_transform_feedback_overflow_query (ARB extension) " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-37-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-37-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-37-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-37-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide38" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-37" alt="ARB_clip_control  glClipControl(origin, depthMode); — y-origin can be flipped during viewport transformation — Depth clip range can be [0,1] instead of [-1,1]  depthMode = GL_NEGATIVE_ONE_TO_ONE: Zw = ((f-n)/2) * Zd + (n+f)/2  depthMode = GL_ZERO_TO_ONE: Zw = (f-n) * Zd + n — Provides direct mapping of [0,1] depth clip coordinates to [0,1] depth buffer values when f=1 and n=0  No precision loss origin=GL_LOWER_LEFT origin=GL_UPPER_LEFT " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-38-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-38-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-38-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-38-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide39" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-38" alt="ARB_conditional_render_inverted  Allow conditional render to use the negated query result  Matches the DX11 ::SetPredication(, PredicateValue) option  Query result negation only happens to landed result — Otherwise rendering takes place GLuint predicate; glCreateQueries(GL_SAMPLES_PASSED, 1, &amp; predicate); glBeginQuery(GL_SAMPLES_PASSED, predicate); DrawNothing(); // Draws nothing glEndQuery(GL_SAMPLES_PASSED); glBeginConditionalRender(predicate, GL_QUERY_WAIT_INVERTED); DrawStuff(); // Scene is rendered since SAMPLES_PASSED==0 glEndConditionalRender();  More useful with other query targets like GL_TRANSFORM_FEEDBACK_OVERFLOW " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-39-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-39-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-39-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-39-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide40" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-39" alt="ARB_cull_distance  Adds new gl_CullDistance[n] to Vertex, Tessellation, and Geometry shaders (VS, TCS, TES and GS)  Like gl_ClipDistance except when any vertex has negative distance whole primitive is culled  Matches DX11 SV_CullDistance[n] Clipping Plane Negative gl_ClipDistance Positive gl_ClipDistance Clipped Clipping Plane Negative gl_CullDistance Positive gl_CullDistance Culled " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-40-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-40-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-40-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-40-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide41" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-40" alt="ARB_derivative_control  Adds “coarse” and “fine” variant of GLSL derivative functions  dFdxCoarse, dFdyCoarse — Potentially faster performance  dFdxFine, dFdyFine — More correct — Default behavior of old dFdx and dFdy functions  fwidthCoarse and fwidthFine are also added 2x2 Quad Fragment dFdxCoarse = = 2x2 Quad Fragment dFdxFine= = dFdxFine " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-41-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-41-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-41-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-41-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide42" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-41" alt="ARB_shader_texture_image_samples  New GLSL built-ins to query the sample count of multi-sample texture and image resources — textureSamples — imageSamples  Equivalent to the NumberOfSamples return with the GetDimensions query in HLSL #version 450 core uniform sample2DMS tex; out vec4 color; void main() { if (textureSamples(tex) &gt; 2) { color = DoFancyDownsample(tex); } else { color = DoSimpleDownsample(tex); } } " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-42-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-42-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-42-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-42-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide43" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-42" alt="ARB_pipeline_statistics_query  New queries for profiling and DX11 compatibility — GL_VERTICES_SUBMITTED  Number of vertices submitted to the GL — GL_PRIMITIVES_SUBMITTED  Number of primitives submitted to the GL — GL_VERTEX_SHADER_INVOCATIONS  Number of times the vertex shader has been invoked — GL_TESS_CONTROL_SHADER_PATCHES  Number of patches processed by the tessellation control shader — GL_TESS_EVALUATION_SHADER_INVOCATIONS  Number of times the tessellation control shader has been invoked " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-43-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-43-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-43-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-43-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide44" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-43" alt="ARB_pipeline_statistics_query cont.  More queries — GL_GEOMETRY_SHADER_INVOCATIONS  Number of times the geometry shader has been invoked — GL_GEOMETRY_SHEDER_PRIMITIVES_EMITTED  Total number of primitives emitted by geometry shader — GL_FRAGMENT_SHADER_INVOCATIONS  Number of times the fragment shader has been invoked — GL_COMPUTE_SHADER_INVOCATIONS  Number of time the compute shader has been invoked — GL_CLIPPING_INPUT_PRIMITIVES — GL_CLIPPINT_OUTPUT_PRIMITIVES  Input and output primitives of the clipping stage " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-44-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-44-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-44-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-44-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide45" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-44" alt="ARB_transform_feedback_overflow_query  Target queries to indicate Transform Feedback Buffer overflow — GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB — GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB  Use glBeginQueryIndex to specify specific stream  The result of which can be used with conditional render GLuint predicate; glCreateQueries(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB, 1, &amp; predicate); glBeginQuery(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB, predicate); glBeginTransformFeedback(GL_TRIANGLES); DrawLotsOfStuff(); glEndTransformFeedback(); glEndQuery(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB); glBeginConditionalRender(predicate, GL_QUERY_NO_WAIT_INVERTED); DrawStuff(); // Scene not rendered if XFB overflowed buffers glEndConditionalRender(); " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-45-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-45-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-45-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-45-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide46" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-45" alt="… glEnd() // DX11 Features " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-46-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-46-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-46-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-46-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide47" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-46" alt="Texture Barrier  Allows rendering to a bound texture — Use glTextureBarrier() to safely read previously written texels — Behavior is now defined with use of texture barriers  Allows render-to-texture algorithms to ping-pong without expensive Framebuffer Object (FBO) changes — Bind 2D texture array for texturing and as a layered FBO attachment Draw gl_Layer=0 glTextureBarrier() texture Draw gl_Layer=1 texture " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-47-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-47-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-47-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-47-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide48" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-47" alt="Programmable Blending  Limited form of programmable blending with non-self- overlapping draw calls — Bind texture as a render target and for texturing glBindTexture(GL_TEXTURE_2D, tex); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0); dirtybbox.empty(); foreach (object in scene) { if (dirtybbox.overlaps(object.bbox())) { glTextureBarrier(); dirtybbox.empty(); } object.draw(); dirtybbox = bound(dirtybbox, object.bbox()); } " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-48-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-48-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-48-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-48-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide49" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-48" alt="Advanced Blending  KHR_blend_equation_advanced created from NV_blend_equation_advanced  Supported by NVIDIA since r340 – June, 2014 — GL and ES profiles  Supported natively on Maxwell and Tegra K1 GPUs — Otherwise implemented seamlessly with shaders on Fermi and Kepler  Implements a subset of NV_blend_equation_advanced modes  Maxwell and Tegra K1 also provide KHR_blend_equation_advanced_coherent — Doesn’t require glBlendBarrierKHR between primitives that double-hit color samples " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-49-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-49-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-49-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-49-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide50" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-49" alt="KHR_blend_equation_advanced Modes  GL_MULTIPLY_KHR  GL_SCREEN_KHR  GL_OVERLAY_KHR  GL_SOFTLIGHT_KHR  GL_HARDLIGHT_KHR  GL_COLORDODGE_KHR  GL_COLORBURN_KHR  GL_DARKEN_KHR  GL_LIGHTEN_KHR  GL_DIFFERENCE_KHR  GL_EXCLUSION_KHR  GL_HSL_HUE_KHR  GL_HSL_SATURATION_KHR  GL_HSL_COLOR_KHR  GL_HSL_LUMINOSITY_KHR " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-50-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-50-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-50-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-50-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide51" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-50" alt="Get Texture Sub Image  Like glGetTexImage, but now you can read a sub-region  glGetTextureSubImage — DSA only variant void GetTextureSubImage(uint texture, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, enum type, sizei bufSize, void * pixels); Direct State Access Robustness pixels yoffset xoffset width height  For GL_TEXTURE_CUBE_MAP targets zoffset specifies face " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-51-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-51-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-51-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-51-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide52" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-51" alt="ARB_sparse_buffer  Ability to have large buffer objects without the whole buffer being resident — Analogous to ARB_sparse_texture for buffer objects  Application controls page residency 1) Create uncommitted buffer: glBufferStorage(,SPARSE_STORAGE_BIT_ARB) 2) Make pages resident: glBufferPageCommitmentARB(, offset, size, GL_TRUE); GL_SPARSE_BUFFER_PAGE_SIZE_ARB offset size " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-52-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-52-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-52-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-52-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide53" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-52" alt="Summary of GLSL 450 additions  dFdxFine, dFdxCoarse, dFxyFine, dFdyCoarse  textureSamples, imageSamples  gl_CullDistance[gl_MaxCullDistances];  #version 310 es  imageAtomicExchange on float  gl_HelperInvocation  gl_MaxSamples  mix() on int, uint and bool " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-53-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-53-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-53-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-53-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide54" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-53" alt="OpenGL Demos on K1 Shield Tablet • Tegra K1 runs Android • Kepler GPU hardware in K1 supports the full OpenGL 4.5 feature set – Today 4.4, expect 4.5 support – OpenGL 4.5 is all the new stuff, plus tons of proven features • Tessellation, compute, instancing – Plus latest features: bindless, path rendering, blend modes • Demos use GameWorks framework – Write Android-ready OpenGL code that runs on Windows and Linux too " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-54-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-54-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-54-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-54-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide55" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-54" alt="Programmable Tessellation Demo on Android " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-55-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-55-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-55-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-55-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide56" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-55" alt="Programmable Tessellation Demo on Windows " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-56-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-56-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-56-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-56-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide57" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-56" alt="Build, Deploy, and Debug Android Native OpenGL Code Right in Visual Studio " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-57-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-57-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-57-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-57-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide58" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-57" alt="GameWorks Compute Shader Example layout (local_size_x =16, local_size_y = 16) in; layout(binding=0, rgba8) uniform mediump image2D inputImage; layout(binding=1, rgba8) uniform mediump image2D resultImage; void main() { float u = float(gl_GlobalInvocationID.x); float v = float(gl_GlobalInvocationID.y); vec4 inv = 1.0 - imageLoad(inputImage, ivec2(u,v)); imageStore(resultImage, ivec2(u,v), inv); } GLSL Compute Shader to invert an image " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-58-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-58-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-58-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-58-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide59" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-58" alt="Massive Compute Shader Particle Simulation " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-59-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-59-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-59-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-59-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide60" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-59" alt="Mega Geometry with Instancing glDrawElementsInstanced + glVertexAttribDivisor " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-60-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-60-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-60-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-60-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide61" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-60" alt="Getting GameWorks • Get Tegra Android Development Pack (TADP) – All the tools you need for Android development • Windows or Linux – Includes GameWorks samples • Samples also available on Github https://github.com/NVIDIAGameWorks/OpenGLSamples " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-61-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-61-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-61-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-61-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide62" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-61" alt="OpenGL Debug Features  KHR_debug added to OpenGL 4.3  App has access to driver “stderr” message stream — Via Callback function or — Query of message queue  Any object can have a meaningful “label”  Driver can tell app about — Errors — Performance warnings — Hazards — Usage hints  App can insert own events into stream for marking " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-62-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-62-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-62-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-62-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide63" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-62" alt="Why is my screen blank? void DrawTexture() { GLuint tex; glGenTextures(1, &amp;tex); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(tex, 0, GL_R8, 32, 32, 0, GL_RED, GL_UNSIGNED_BYTE, pixels); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); { glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f); } glEnd(); SwapBuffers(); } Oops – Texture is incomplete! " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-63-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-63-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-63-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-63-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide64" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-63" alt="Enable Debug  Can be done on-the-fly void GLAPIENTRY DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) { printf(“0x%X: %sn&quot;, id, message); } void DebugDrawTexture() { glDebugMessageCallback(DebugCallback, NULL); glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE); glEnable(GL_DEBUG_OUTPUT); DrawTexture(); }  The callback function outputs: 0x20084: Texture state usage warning: Texture 1 has no mipmaps, while its min filter requires mipmap. Works in non-debug context! " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-64-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-64-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-64-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-64-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide65" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-64" alt="Give the texture a name  Instead of “texture 1” – give it a name void DrawTexture() { GLuint tex; glGenTextures(1, &amp;tex); glBindTexture(GL_TEXTURE_2D, tex); GLchar texName[] = &quot;Sky&quot;; glObjectLabel(GL_TEXTURE, tex, sizeof texName, texName); ... }  The callback function outputs: 0x20084: Texture state usage warning: Texture Sky has no mipmaps, while its min filter requires mipmap. " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-65-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-65-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-65-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-65-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide66" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-65" alt="Organize your debug trace  Lots of text can get unwieldy — What parts of my code does this error apply?  Use synchronous debug output: — glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); — Effectively disables dual-core driver — So your callback goes to your calling application thread — Instead of a driver internal thread  Use groups and markers — App injects markers to notate debug output — Push/pop groups to easily control volume " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-66-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-66-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-66-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-66-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide67" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-66" alt="Notating debug with groups  Use a group void DebugDrawTexture() { ... GLchar groupName[] = &quot;DrawTexture&quot;; glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0x1234, sizeof groupName, groupName); glDebugOutputControl(...); // Can change volume if needed DrawTexture(); glPopDebugGroup(); // Old debug volume restored }  Improved output 0x1234: DrawTexture PUSH 0x20084: Texture state usage warning: Texture Sky has no mipmaps, while its min filter requires mipmap. 0x1234: DrawTexture POP " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-67-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-67-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-67-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-67-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide68" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-67" alt="Debug the easy way " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-68-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-68-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-68-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-68-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide69" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-68" alt="Nsight: Interactive OpenGL debugging  Frame Debugging and Profiling  Shader Debugging and Pixel History  Frame Debugging and Dynamic Shader Editing  OpenGL API &amp; Hardware Trace  Supports up to OpenGL 4.2 Core — And a bunch of useful extensions  https://developer.nvidia.com/nvidia-nsight-visual-studio-edition " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-69-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-69-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-69-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-69-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide70" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-69" alt="OpenGL related Linux improvements  Support for EGL on desktop Linux within X11 (r331)  OpenGL-based Framebuffer Capture (NvFBC), for remote graphics (r331)  Support for Quad-Buffered stereo + Composite X extension (GLX_EXT_stereo_tree) (r337)  Support for G-SYNC (Variable Refresh Rate) (r340)  Support for Tegra K1: NVIDIA SOC with Kepler graphics core — Linux Tegra K1 (Jetson) support leverages same X driver, OpenGL implementation as desktop NVIDIA GPUs — NVIDIA also contributing to Nouveau for K1 support  Coming soon: Framebuffer Object creation dramatically faster! " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-70-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-70-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-70-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-70-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide71" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-70" alt="Beyond OpenGL 4.5  Path Rendering Path rendering and blend modes  Resolution-independent 2D rendering  Not your classic 3D hardware rendering Earlier Illustrator demo showed this  NV_path_rendering + NV_blend_equation_advanced " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-71-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-71-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-71-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-71-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide72" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-71" alt="PostScript Tiger with Perspective Warping No textures! Paths rendered from resolution-independent 2D paths (outlines) " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-72-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-72-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-72-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-72-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide73" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-72" alt="Render Fancy Text from Outlines " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-73-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-73-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-73-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-73-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide74" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-73" alt="Paths + Text + 3D all at once " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-74-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-74-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-74-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-74-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide75" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-74" alt="Web Page Rendering every glyph from its outlines! " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-75-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-75-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-75-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-75-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide76" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-75" alt="Zoom in and visualize glyph outline control points " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-76-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-76-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-76-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-76-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide77" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-76" alt="Beyond OpenGL 4.5  Advanced scene rendering with ARB_multi_draw_indirect — Added to OpenGL 4.3  Bring even more processing onto the GPU with NV_bindless_multi_draw_indirect — Even less work for the CPU – no Vertex Buffer Object (VBO) binds between draws  Covered in depth by Christoph Kubisch yesterday — SG4117: OpenGL Scene Rendering Techniques " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-77-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-77-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-77-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-77-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide78" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-77" alt="NV_bindless_multi_draw_indirect  DrawIndirect combined with Bindless struct DrawElementsIndirect { GLuint count; GLuint instanceCount; GLuint firstIndex; GLint baseVertex; GLuint baseInstance; } struct BindlessPtr { Gluint index; Gluint reserved; GLuint64 address; GLuint64 length; } struct DrawElementsIndirectBindlessCommandNV { DrawElementsIndirect cmd; GLuint reserved; BindlessPtr index; BindlessPtr vertex[]; } Change vertex buffers per draw iteration! Change index buffer per draw iteration! MultiDrawElementsIndirectBindlessNV(enum mode, enum type, const void *indirect, sizei drawCount, sizei stride, int vertexBufferCount); Caveat: Does the CPU know the drawCount? The GL_BUFFER_GPU_ADDRESS_NV of the buffer object " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-78-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-78-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-78-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-78-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide79" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-78" alt="NV_bindless_multi_draw_indirect_count  Source the drawCount from a buffer object void MultiDrawElementsIndirectBindlessCountNV( enum mode, enum type, const void * indirect, intptr drawCount, sizei maxDrawCount, sizei stride, int vertexBufferCount ); drawCount now an offset into the bound GL_PARAMETER_BUFFER_ARB buffer range. " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-79-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-79-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-79-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-79-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide80" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-79" alt="Khronos OpenGL BOF at SIGGRAPH  Date: Wednesday, August 13 2014  Venue: Marriott Pinnacle Hotel, next to the Convention Center  Website: http://s2014.siggraph.org  Times: 5pm-7pm OpenGL and OpenGL ES Track  BOF After-Party: 7:30pm until late — Rumor: Free beer and door prizes " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-80-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-80-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-80-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-80-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div><div><div id="slide81" class="VerticalSlide_root__jU_9r slide-item" style="aspect-ratio:864 / 486" data-cy="slide-container"><div class="VerticalSlideImage_root__64KSA"><img id="slide-image-80" alt="Questions? " class="vertical-slide-image VerticalSlideImage_image__VtE4p" data-testid="vertical-slide-image" loading="lazy" srcSet="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-81-320.jpg 320w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-81-638.jpg 638w, https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/75/OpenGL-4-5-Update-for-NVIDIA-GPUs-81-2048.jpg 2048w" src="https://image.slidesharecdn.com/siggraph2014-opengl-4-140812133653-phpapp01/85/OpenGL-4-5-Update-for-NVIDIA-GPUs-81-320.jpg" sizes="100vw"/></div><!--$--><!--/$--></div></div></div></div></div><!--$--><div class="RelatedContent_root__29Np1"><div class="RelatedContent_wrapper__riU7l"><h2 class="Heading_heading__3MAvZ Heading_h2__f9yvs RelatedContent_title__QUhpL">More Related Content</h2><div></div><div></div><div id="between-recs-ad-1-container" class="freestar-ad-container FreestarAdContainer_root__qPPC_" style="--fallback-aspect-ratio:undefined / undefined"><div><div class="" id="between-recs-ad-1"></div></div></div><div></div><div id="between-recs-ad-2-container" class="freestar-ad-container FreestarAdContainer_root__qPPC_" style="--fallback-aspect-ratio:undefined / undefined"><div><div class="" id="between-recs-ad-2"></div></div></div><div></div><div></div></div></div><!--/$--><div class="Transcript_root__Vrf6Q"><h2 class="Transcript_title__YgAka"><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/file.5db1ba24.svg);background-color:currentColor"></span><span class="sr-only"></span></span>OpenGL 4.5 Update for NVIDIA GPUs</h2><div><ul class="Transcript_list__faItj"><div><li>1. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#1">SG4121: OPENGL 4.5 </a> UPDATE FOR NVIDIA GPUS Mark Kilgard Principal System Software Engineer, NVIDIA Piers Daniell Senior Graphics Software Engineer, NVIDIA </li></div><div><li>2. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#2">Mark Kilgard • Principal </a> System Software Engineer – OpenGL driver and API evolution – Cg (“C for graphics”) shading language – GPU-accelerated path rendering • OpenGL Utility Toolkit (GLUT) implementer • Author of OpenGL for the X Window System • Co-author of Cg Tutorial • Worked on OpenGL for 20+ years </li></div><div><li>3. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#3">Piers Daniell • Senior </a> Graphics Software Engineer • NVIDIA’s Khronos OpenGL representative – Since 2010 – Authored numerous OpenGL extension specifications now core • Leads OpenGL version updates – Since OpenGL 4.1 • 10+ years with NVIDIA </li></div><div><li>4. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#4">NVIDIA’s OpenGL Leverage Debugging </a> with Nsight Programmable Graphics Tegra Quadro OptiX GeForce Adobe Creative Cloud </li></div><div><li>5. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#5">Single 3D API </a> for Every Platform OS X Linux FreeBSD Solaris Android Windows </li></div><div><li>6. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#6">Adobe Creative Cloud: GPU-accelerated </a> Illustrator • 27 year old application – World’s leading graphics design application • 6 million users – Never used the GPU • Until this June 2014 • Adobe and NVIDIA worked to integrate NV_path_rendering into Illustrator CC 2014 </li></div><div></div><div><li>8. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#8">OpenGL 4.x Evolution  </a> Major revision of OpenGL every year since OpenGL 3.0, 2008  Maintained full backwards compatibility 2010 2011 2012 2013 2014 OpenGL 4.0: Tessellation OpenGL 4.1: Shader mix-and-match, ES2 compatibility OpenGL 4.2: GLSL upgrades and shader image load store OpenGL 4.3: Compute shaders, SSBO, ES3 compatibility OpenGL 4.4: Persistently mapped buffers, multi bind ??? </li></div><div><li>9. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#9">Big News: OpenGL </a> 4.5 Released Today!  Direct State Access (DSA) finally!  Robustness  OpenGL ES 3.1 compatibility  Faster MakeCurrent  DirectX 11 features for porting and emulation  SubImage variant of GetTexImage  Texture barriers  Sparse buffers (ARB extension) </li></div><div><li>10. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#10">So OpenGL Evolution </a> Through 4.5  Major revision of OpenGL every year since 2008  Maintained full backwards compatibility 2010 2011 2012 2013 2014 OpenGL 4.0: Tessellation OpenGL 4.1: Shader mix-and-match, ES2 compatibility OpenGL 4.2: GLSL upgrades and shader image load store OpenGL 4.3: Compute shaders, SSBO, ES3 compatibility OpenGL 4.4: Persistently mapped buffers, multi bind OpenGL 4.5: Direct state access, robustness, ES3.1 </li></div><div><li>11. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#11">OpenGL Evolves Modularly • </a> Each core revision is specified as a set of extensions – Example: ARB_ES3_1_compatibility • Puts together all the functionality for ES 3.1 compatibility • Describe in its own text file – May have dependencies on other extensions • Dependencies are stated explicitly • A core OpenGL revision (such as OpenGL 4.5) “bundles” a set of agreed extensions — and mandates their mutual support – Note: implementations can also “unbundle” ARB extensions for hardware unable to support the latest core revision • So easiest to describe OpenGL 4.5 based on its bundled extensions… 4.5 ARB_direct_state_access ARB_clip_control many more … </li></div><div><li>12. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#12">OpenGL 4.5 as </a> extensions  All new features to OpenGL 4.5 can be used with GL contexts 4.0 through 4.4 via extensions: — ARB_clip_control — ARB_conditional_render_inverted — ARB_cull_distance — ARB_shader_texture_image_samples — ARB_ES3_1_compatibility — ARB_direct_state_access — KHR_context_flush_control — ARB_get_texture_subimage — KHR_robustness — ARB_texture_barrier API Compatibility (Direct3D, OpenGL ES) API Improvements Browser security (WebGL) Texture &amp; framebuffer memory consistency </li></div><div><li>13. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#13">Additional ARB extensions  </a> Along with OpenGL 4.5, Khronos has released ARB extensions  ARB_sparse_buffer  DirectX 11 features — ARB_pipeline_statistics_query — ARB_transform_feedback_overflow_query  NVIDIA supports the above on all OpenGL 4.x hardware — Fermi, Kepler and Maxwell — GeForce, Quadro and Tegra K1 </li></div><div><li>14. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#14">NVIDIA OpenGL 4.5 </a> beta Driver  Available today!  https://developer.nvidia.com/opengl-driver — Or just Google “opengl driver” – it’s the first hit! — Windows and Linux  Supports all OpenGL 4.5 features and all ARB/KHR extensions  Available on Fermi, Kepler and Maxwell GPUs — GeForce and Quadro — Desktop and Laptop </li></div><div><li>15. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#15">Using OpenGL 4.5  </a> OpenGL 4.5 has 118 New functions. Eek.  How do you deal with all that? The easy way…  Use the OpenGL Extension Wrangler (GLEW) — Release 1.11.0 already has OpenGL 4.5 support — http://glew.sourceforge.net/ </li></div><div><li>16. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#16">Direct State Access </a> (DSA)  Read and modify object state directly without bind-to-edit  Performance benefit in many cases  Context binding state unmodified — Convenient for tools and middleware — Avoids redundant state changes  Derived from EXT_direct_state_access </li></div><div><li>17. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#17">More Efficient Middleware void </a> Texture2D::SetMagFilter(Glenum filter) { GLuint oldTex; glGetIntegerv(GL_TEXTURE_BINDING_2D, &amp;oldTex); glBindTexture(GL_TEXTURE_2D, m_tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); glBindTexture(GL_TEXTURE_2D, oldTex); }  Before DSA  After DSA void Texture2D::SetMagFilter(Glenum filter) { glTextureParameteri(m_tex, GL_TEXTURE_MAG_FILTER, filter); } </li></div><div><li>18. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#18">Simplified Code  Before </a> DSA GLuint tex[2]; glGenTextures(2, tex); glActiveTexture(GL_TEXTURE0 + 0); glBindTexture(GL_TEXTURE_2D, tex[0]); glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 8); glActiveTexture(GL_TEXTURE0 + 1); glBindTexture(GL_TEXTURE_2D, tex[1]); glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 4);  After DSA GLuint tex[2]; glCreateTextures(GL_TEXTURE_2D, 2, tex); glTextureStorage2D(tex[0], 1, GL_RGBA8, 8, 8); glTextureStorage2D(tex[1], 1, GL_RGBA8, 4, 4); glBindTextures(0, 2, tex); </li></div><div><li>19. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#19">More Direct Framebuffer </a> Access  Before DSA glBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO); DrawStuff(); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, nonMsFBO); glBindFramebuffer(GL_READ_FRAMEBUFFER, msFBO); glBlitFramebuffer(...); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO);  After DSA glBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO); DrawStuff(); glBlitNamedFramebuffer(msFBO, nonMsFBO, ...); </li></div><div><li>20. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#20">DSA Create Functions glCreate </a> Creates glCreateBuffers Buffer Objects glCreateRenderbuffers Renderbuffer Objects glCreateTextures(&lt;target&gt;) Texture Objects of specific target glCreateFramebuffers Framebuffer Objects glCreateVertexArrays Vertex Array Objects glCreateProgramPipelines Program Pipeline Objects glCreateSamplers Sampler Objects glCreateQueries(&lt;target&gt;) Query Objects of a specific target  Generates name AND creates object  Bind-to-create not needed </li></div><div><li>21. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#21">DSA Texture Functions Non-DSA </a> DSA glGenTextures + glBindTexture glCreateTextures glTexStorage* glTextureStroage* glTexSubImage* glTextureSubImage* glCopyTexSubImage* glCopyTextureSubImage* glGetTexImage glGetTextureImage glCompressedTexSubImage* glCompressedTextureSubImage* glGetCompressedTexImage glGetCompressedTextureImage glActiveTexture + glBindTexture glBindTextureUnit glTexBuffer[Range] glTextureBuffer[Range] glGenerateMipmap glGenerateTextureMipmap gl[Get]TexParameter* gl[Get]TextureParameter* </li></div><div><li>22. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#22">DSA Renderbuffer Functions Non-DSA </a> DSA glGenRenderbuffers + glBindRenderbuffer glCreateRenderbuffers glRenderbufferStorage* glNamedRenderbufferStorage* glGetRenderbufferParameteriv glGetNamedRenderbufferParameteriv </li></div><div><li>23. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#23">DSA Framebuffer Functions Non-DSA </a> DSA glGenFramebuffers + glBindFramebuffer glCreateFramebuffers glFramebufferRenderbuffer glNamedFramebufferRenderbuffer glFramebufferTexture[Layer] glNamedFramebufferTexture[Layer] glDrawBuffer[s] glNamedFramebufferDrawBuffer[s] glReadBuffer glNamedFramebufferReadBuffer glInvalidateFramebuffer[Sub]Data glInvalidateNamedFramebuffer[Sub]Data glClearBuffer* glClearNamedFramebuffer* glBlitFramebuffer glBlitNamedFramebuffer glCheckFramebufferStatus glCheckNamedFramebufferStatus glFramebufferParameteri glNamedFramebufferParameteri glGetFramebuffer*Parameter* glGetNamedFramebuffer*Parameter* </li></div><div><li>24. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#24">DSA Buffer Object </a> Functions Non-DSA DSA glGenBuffers + glBindBuffer glCreateBuffers glBufferStorage glNamedBufferStorage glBuffer[Sub]Data glNamedBuffer[Sub]Data glCopyBufferSubData glCopyNamedBufferSubData glClearBuffer[Sub]Data glClearNamedBuffer[Sub]Data glMapBuffer[Range] glMapNamedBuffer[Range] glUnmapBuffer glUnmapNamedBuffer glFlushMappedBufferRange glFlushMappedNamedBufferRange glGetBufferParameteri* glGetNamedBufferParameteri* glGetBufferPointerv glGetNamedBufferPointerv glGetBufferSubData glGetNamedBufferSubData </li></div><div><li>25. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#25">DSA Transform Feedback </a> Functions Non-DSA DSA glGenTransformFeedbacks + glBind glCreateTransformFeedbacks glBindBuffer{Base|Range} glTransformFeedbackBuffer{Base|Range} glGetInteger* glGetTransformFeedbacki* </li></div><div><li>26. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#26">DSA Vertex Array </a> Object (VAO) Functions Non-DSA DSA glGenVertexArrays + glBindVertexArray glCreateVertexArrays glEnableVertexAttribArray glEnableVertexArrayAttrib glDisableVertexAttribArray glDisableVertexArrayAttrib glBindBuffer(ELEMENT_ARRAY_BUFFER) glVertexArrayElementBuffer glBindVertexBuffer[s] glVertexArrayVertexBuffer[s] glVertexAttrib*Format glVertexArrayAttrib*Format glVertexBindingDivisor glVertexArrayBindingDivisor glGetInteger* glGetVertexArray* </li></div><div><li>27. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#27">EXT_direct_state_access Differences  Only </a> OpenGL 4.5 core functionality supported  Some minor name changes to some functions — Mostly the same, but drops EXT suffix  TextureParameterfEXT -&gt; TextureParameterf — VAO function names shortened  glVertexArrayVertexBindingDivisorEXT -&gt; glVertexArrayBindingDivisor — Texture functions no longer require a target parameter  Target comes from glCreateTextures(&lt;target&gt;,)  Use “3D” functions with CUBE_MAP where z specifies the face  DSA functions can no longer create objects — Use glCreate* functions to create name and object at once </li></div><div><li>28. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#28">Robustness  ARB_robustness functionality </a> now part of OpenGL 4.5 — Called KHR_robustness for use with OpenGL ES too — Does not include compatibility functions  Adds “safe” APIs for queries that return data to user pointers  Adds mechanism for app to learn about GPU resets — Due to my app or some other misbehaving app  Stronger out-of-bounds behavior — No more undefined behavior  Used by WebGL implementations to deal with Denial of Service (DOS) attacks </li></div><div><li>29. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#29">Robustness API  Before </a> Robustness GLubyte tooSmall[NOT_BIG_ENOUGH]; glReadPixels(0, 0, H, W, GL_RGBA, GL_UNSIGNED_BYTE, tooSmall); // CRASH!!  After Robustness GLubyte tooSmall[NOT_BIG_ENOUGH]; glReadnPixels(0, 0, H, W, GL_RGBA, GL_UNSIGNED_BYTE, sizeof tooSmall, tooSmall); // No CRASH, glGetError() returns INVALID_OPERATION </li></div><div><li>30. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#30">Robustness Reset Notification  </a> Typical render loop with reset check while (!quit) { DrawStuff(); SwapBuffers(); if (glGetGraphicsResetStatus() != GL_NO_ERROR) { quit = true; } } DestroyContext(glrc);  Reset is asynchronous — GL will behave as normal after a reset event but rendering commands may not produce the right results — The GL context should be destroyed — Notify the user </li></div><div><li>31. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#31">OpenGL ES 3.1 </a> Compatibility  Adds new ES 3.1 features not already in GL  Also adds #version 310 es GLSL shader support  Compatibility profile required for full superset — ES 3.1 allows client-side vertex arrays — Allows application generated object names — Has default Vertex Array Object (VAO)  Desktop provides great development platform for ES 3.1 content </li></div><div><li>32. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#32">Desktop features in </a> an ES profile  NVIDA GPUs provide all ANDROID_extension_pack_es31a features in an ES profile — Geometry, Tessellation, Advanced blending, etc.  Scene from Epic’s “Rivarly” OpenGL ES 3.1 + AEP demo running on Tegra K1 </li></div><div><li>33. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#33">Using OpenGL ES </a> 3.1 on Desktop  The Windows WGL way int attribList[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 1, WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_ES_PROFILE_BIT_EXT, 0 }; HGLRC hglrc = wglCreateContextAttribsARB(wglGetCurrentDC(), NULL, attribList); wglMakeCurrent(wglGetCurrentDC(), hglrc);  On NVIDIA GPUs this is a fully conformant OpenGL ES 3.1 implementation — http://www.khronos.org/conformance/adopters/conformant-products </li></div><div><li>34. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#34">New OpenGL ES </a> 3.1 features  glMemoryBarrierByRegion — Like glMemoryBarrier, but potentially more efficient on tillers  GLSL functionality — imageAtomicExchange() support for float32 — gl_HelperInvocation fragment shader input  Know which pixels won’t get output  Skip useless cycles or unwanted side-effects — mix() function now supports int, uint and bool — gl_MaxSamples  Implementation maximum sample count </li></div><div><li>35. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#35">Faster MakeCurrent  An </a> implicit glFlush is called on MakeCurrent — Makes switching contexts slow  New WGL and GLX extensions allow glFlush to be skipped — Commands wait in context queue — App has more control over flush  Provides 2x MakeCurrent performance boost StartTimer(); for (int i = 0; i &lt; iterations; ++i) { DrawSimpleTriangle(); wglMakeCurrent(context[i % 2]); } StopTimer(); </li></div><div><li>36. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#36">Disable Implicit glFlush </a> on MakeCurrent  The Windows way with WGL int attribList[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 4, WGL_CONTEXT_MINOR_VERSION_ARB, 5, WGL_CONTEXT_RELEASE_BEHAVIOR_ARB, WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB, 0 }; HGLRC hglrc = wglCreateContextAttribsARB(wglGetCurrentDC(), NULL, attribList); wglMakeCurrent(wglGetCurrentDC(), hglrc); </li></div><div><li>37. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#37">DirectX 11 Features  </a> ARB_clip_control  ARB_conditional_render_inverted  ARB_cull_distance  ARB_derivative_control  ARB_shader_texture_image_samples  ARB_pipeline_statistics_query (ARB extension)  ARB_transform_feedback_overflow_query (ARB extension) </li></div><div><li>38. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#38">ARB_clip_control  glClipControl(origin, depthMode); — </a> y-origin can be flipped during viewport transformation — Depth clip range can be [0,1] instead of [-1,1]  depthMode = GL_NEGATIVE_ONE_TO_ONE: Zw = ((f-n)/2) * Zd + (n+f)/2  depthMode = GL_ZERO_TO_ONE: Zw = (f-n) * Zd + n — Provides direct mapping of [0,1] depth clip coordinates to [0,1] depth buffer values when f=1 and n=0  No precision loss origin=GL_LOWER_LEFT origin=GL_UPPER_LEFT </li></div><div><li>39. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#39">ARB_conditional_render_inverted  Allow conditional </a> render to use the negated query result  Matches the DX11 ::SetPredication(, PredicateValue) option  Query result negation only happens to landed result — Otherwise rendering takes place GLuint predicate; glCreateQueries(GL_SAMPLES_PASSED, 1, &amp; predicate); glBeginQuery(GL_SAMPLES_PASSED, predicate); DrawNothing(); // Draws nothing glEndQuery(GL_SAMPLES_PASSED); glBeginConditionalRender(predicate, GL_QUERY_WAIT_INVERTED); DrawStuff(); // Scene is rendered since SAMPLES_PASSED==0 glEndConditionalRender();  More useful with other query targets like GL_TRANSFORM_FEEDBACK_OVERFLOW </li></div><div><li>40. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#40">ARB_cull_distance  Adds new </a> gl_CullDistance[n] to Vertex, Tessellation, and Geometry shaders (VS, TCS, TES and GS)  Like gl_ClipDistance except when any vertex has negative distance whole primitive is culled  Matches DX11 SV_CullDistance[n] Clipping Plane Negative gl_ClipDistance Positive gl_ClipDistance Clipped Clipping Plane Negative gl_CullDistance Positive gl_CullDistance Culled </li></div><div><li>41. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#41">ARB_derivative_control  Adds “coarse” </a> and “fine” variant of GLSL derivative functions  dFdxCoarse, dFdyCoarse — Potentially faster performance  dFdxFine, dFdyFine — More correct — Default behavior of old dFdx and dFdy functions  fwidthCoarse and fwidthFine are also added 2x2 Quad Fragment dFdxCoarse = = 2x2 Quad Fragment dFdxFine= = dFdxFine </li></div><div><li>42. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#42">ARB_shader_texture_image_samples  New GLSL </a> built-ins to query the sample count of multi-sample texture and image resources — textureSamples — imageSamples  Equivalent to the NumberOfSamples return with the GetDimensions query in HLSL #version 450 core uniform sample2DMS tex; out vec4 color; void main() { if (textureSamples(tex) &gt; 2) { color = DoFancyDownsample(tex); } else { color = DoSimpleDownsample(tex); } } </li></div><div><li>43. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#43">ARB_pipeline_statistics_query  New queries </a> for profiling and DX11 compatibility — GL_VERTICES_SUBMITTED  Number of vertices submitted to the GL — GL_PRIMITIVES_SUBMITTED  Number of primitives submitted to the GL — GL_VERTEX_SHADER_INVOCATIONS  Number of times the vertex shader has been invoked — GL_TESS_CONTROL_SHADER_PATCHES  Number of patches processed by the tessellation control shader — GL_TESS_EVALUATION_SHADER_INVOCATIONS  Number of times the tessellation control shader has been invoked </li></div><div><li>44. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#44">ARB_pipeline_statistics_query cont.  More </a> queries — GL_GEOMETRY_SHADER_INVOCATIONS  Number of times the geometry shader has been invoked — GL_GEOMETRY_SHEDER_PRIMITIVES_EMITTED  Total number of primitives emitted by geometry shader — GL_FRAGMENT_SHADER_INVOCATIONS  Number of times the fragment shader has been invoked — GL_COMPUTE_SHADER_INVOCATIONS  Number of time the compute shader has been invoked — GL_CLIPPING_INPUT_PRIMITIVES — GL_CLIPPINT_OUTPUT_PRIMITIVES  Input and output primitives of the clipping stage </li></div><div><li>45. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#45">ARB_transform_feedback_overflow_query  Target queries </a> to indicate Transform Feedback Buffer overflow — GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB — GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB  Use glBeginQueryIndex to specify specific stream  The result of which can be used with conditional render GLuint predicate; glCreateQueries(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB, 1, &amp; predicate); glBeginQuery(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB, predicate); glBeginTransformFeedback(GL_TRIANGLES); DrawLotsOfStuff(); glEndTransformFeedback(); glEndQuery(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB); glBeginConditionalRender(predicate, GL_QUERY_NO_WAIT_INVERTED); DrawStuff(); // Scene not rendered if XFB overflowed buffers glEndConditionalRender(); </li></div><div><li>46. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#46">… glEnd() // </a> DX11 Features </li></div><div><li>47. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#47">Texture Barrier  Allows </a> rendering to a bound texture — Use glTextureBarrier() to safely read previously written texels — Behavior is now defined with use of texture barriers  Allows render-to-texture algorithms to ping-pong without expensive Framebuffer Object (FBO) changes — Bind 2D texture array for texturing and as a layered FBO attachment Draw gl_Layer=0 glTextureBarrier() texture Draw gl_Layer=1 texture </li></div><div><li>48. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#48">Programmable Blending  Limited </a> form of programmable blending with non-self- overlapping draw calls — Bind texture as a render target and for texturing glBindTexture(GL_TEXTURE_2D, tex); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0); dirtybbox.empty(); foreach (object in scene) { if (dirtybbox.overlaps(object.bbox())) { glTextureBarrier(); dirtybbox.empty(); } object.draw(); dirtybbox = bound(dirtybbox, object.bbox()); } </li></div><div><li>49. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#49">Advanced Blending  KHR_blend_equation_advanced </a> created from NV_blend_equation_advanced  Supported by NVIDIA since r340 – June, 2014 — GL and ES profiles  Supported natively on Maxwell and Tegra K1 GPUs — Otherwise implemented seamlessly with shaders on Fermi and Kepler  Implements a subset of NV_blend_equation_advanced modes  Maxwell and Tegra K1 also provide KHR_blend_equation_advanced_coherent — Doesn’t require glBlendBarrierKHR between primitives that double-hit color samples </li></div><div><li>50. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#50">KHR_blend_equation_advanced Modes  GL_MULTIPLY_KHR  </a> GL_SCREEN_KHR  GL_OVERLAY_KHR  GL_SOFTLIGHT_KHR  GL_HARDLIGHT_KHR  GL_COLORDODGE_KHR  GL_COLORBURN_KHR  GL_DARKEN_KHR  GL_LIGHTEN_KHR  GL_DIFFERENCE_KHR  GL_EXCLUSION_KHR  GL_HSL_HUE_KHR  GL_HSL_SATURATION_KHR  GL_HSL_COLOR_KHR  GL_HSL_LUMINOSITY_KHR </li></div><div><li>51. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#51">Get Texture Sub </a> Image  Like glGetTexImage, but now you can read a sub-region  glGetTextureSubImage — DSA only variant void GetTextureSubImage(uint texture, int level, int xoffset, int yoffset, int zoffset, sizei width, sizei height, sizei depth, enum format, enum type, sizei bufSize, void * pixels); Direct State Access Robustness pixels yoffset xoffset width height  For GL_TEXTURE_CUBE_MAP targets zoffset specifies face </li></div><div><li>52. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#52">ARB_sparse_buffer  Ability to </a> have large buffer objects without the whole buffer being resident — Analogous to ARB_sparse_texture for buffer objects  Application controls page residency 1) Create uncommitted buffer: glBufferStorage(,SPARSE_STORAGE_BIT_ARB) 2) Make pages resident: glBufferPageCommitmentARB(, offset, size, GL_TRUE); GL_SPARSE_BUFFER_PAGE_SIZE_ARB offset size </li></div><div><li>53. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#53">Summary of GLSL </a> 450 additions  dFdxFine, dFdxCoarse, dFxyFine, dFdyCoarse  textureSamples, imageSamples  gl_CullDistance[gl_MaxCullDistances];  #version 310 es  imageAtomicExchange on float  gl_HelperInvocation  gl_MaxSamples  mix() on int, uint and bool </li></div><div><li>54. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#54">OpenGL Demos on </a> K1 Shield Tablet • Tegra K1 runs Android • Kepler GPU hardware in K1 supports the full OpenGL 4.5 feature set – Today 4.4, expect 4.5 support – OpenGL 4.5 is all the new stuff, plus tons of proven features • Tessellation, compute, instancing – Plus latest features: bindless, path rendering, blend modes • Demos use GameWorks framework – Write Android-ready OpenGL code that runs on Windows and Linux too </li></div><div><li>55. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#55">Programmable Tessellation Demo on </a> Android </li></div><div><li>56. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#56">Programmable Tessellation Demo on </a> Windows </li></div><div><li>57. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#57">Build, Deploy, and </a> Debug Android Native OpenGL Code Right in Visual Studio </li></div><div><li>58. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#58">GameWorks Compute Shader </a> Example layout (local_size_x =16, local_size_y = 16) in; layout(binding=0, rgba8) uniform mediump image2D inputImage; layout(binding=1, rgba8) uniform mediump image2D resultImage; void main() { float u = float(gl_GlobalInvocationID.x); float v = float(gl_GlobalInvocationID.y); vec4 inv = 1.0 - imageLoad(inputImage, ivec2(u,v)); imageStore(resultImage, ivec2(u,v), inv); } GLSL Compute Shader to invert an image </li></div><div><li>59. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#59">Massive Compute Shader </a> Particle Simulation </li></div><div><li>60. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#60">Mega Geometry with </a> Instancing glDrawElementsInstanced + glVertexAttribDivisor </li></div><div><li>61. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#61">Getting GameWorks • Get </a> Tegra Android Development Pack (TADP) – All the tools you need for Android development • Windows or Linux – Includes GameWorks samples • Samples also available on Github https://github.com/NVIDIAGameWorks/OpenGLSamples </li></div><div><li>62. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#62">OpenGL Debug Features  </a> KHR_debug added to OpenGL 4.3  App has access to driver “stderr” message stream — Via Callback function or — Query of message queue  Any object can have a meaningful “label”  Driver can tell app about — Errors — Performance warnings — Hazards — Usage hints  App can insert own events into stream for marking </li></div><div><li>63. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#63">Why is my </a> screen blank? void DrawTexture() { GLuint tex; glGenTextures(1, &amp;tex); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(tex, 0, GL_R8, 32, 32, 0, GL_RED, GL_UNSIGNED_BYTE, pixels); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); { glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f); } glEnd(); SwapBuffers(); } Oops – Texture is incomplete! </li></div><div><li>64. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#64">Enable Debug  Can </a> be done on-the-fly void GLAPIENTRY DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) { printf(“0x%X: %sn&quot;, id, message); } void DebugDrawTexture() { glDebugMessageCallback(DebugCallback, NULL); glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE); glEnable(GL_DEBUG_OUTPUT); DrawTexture(); }  The callback function outputs: 0x20084: Texture state usage warning: Texture 1 has no mipmaps, while its min filter requires mipmap. Works in non-debug context! </li></div><div><li>65. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#65">Give the texture </a> a name  Instead of “texture 1” – give it a name void DrawTexture() { GLuint tex; glGenTextures(1, &amp;tex); glBindTexture(GL_TEXTURE_2D, tex); GLchar texName[] = &quot;Sky&quot;; glObjectLabel(GL_TEXTURE, tex, sizeof texName, texName); ... }  The callback function outputs: 0x20084: Texture state usage warning: Texture Sky has no mipmaps, while its min filter requires mipmap. </li></div><div><li>66. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#66">Organize your debug </a> trace  Lots of text can get unwieldy — What parts of my code does this error apply?  Use synchronous debug output: — glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); — Effectively disables dual-core driver — So your callback goes to your calling application thread — Instead of a driver internal thread  Use groups and markers — App injects markers to notate debug output — Push/pop groups to easily control volume </li></div><div><li>67. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#67">Notating debug with </a> groups  Use a group void DebugDrawTexture() { ... GLchar groupName[] = &quot;DrawTexture&quot;; glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0x1234, sizeof groupName, groupName); glDebugOutputControl(...); // Can change volume if needed DrawTexture(); glPopDebugGroup(); // Old debug volume restored }  Improved output 0x1234: DrawTexture PUSH 0x20084: Texture state usage warning: Texture Sky has no mipmaps, while its min filter requires mipmap. 0x1234: DrawTexture POP </li></div><div><li>68. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#68">Debug the easy </a> way </li></div><div><li>69. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#69">Nsight: Interactive OpenGL </a> debugging  Frame Debugging and Profiling  Shader Debugging and Pixel History  Frame Debugging and Dynamic Shader Editing  OpenGL API &amp; Hardware Trace  Supports up to OpenGL 4.2 Core — And a bunch of useful extensions  https://developer.nvidia.com/nvidia-nsight-visual-studio-edition </li></div><div><li>70. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#70">OpenGL related Linux </a> improvements  Support for EGL on desktop Linux within X11 (r331)  OpenGL-based Framebuffer Capture (NvFBC), for remote graphics (r331)  Support for Quad-Buffered stereo + Composite X extension (GLX_EXT_stereo_tree) (r337)  Support for G-SYNC (Variable Refresh Rate) (r340)  Support for Tegra K1: NVIDIA SOC with Kepler graphics core — Linux Tegra K1 (Jetson) support leverages same X driver, OpenGL implementation as desktop NVIDIA GPUs — NVIDIA also contributing to Nouveau for K1 support  Coming soon: Framebuffer Object creation dramatically faster! </li></div><div><li>71. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#71">Beyond OpenGL 4.5 </a>  Path Rendering Path rendering and blend modes  Resolution-independent 2D rendering  Not your classic 3D hardware rendering Earlier Illustrator demo showed this  NV_path_rendering + NV_blend_equation_advanced </li></div><div><li>72. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#72">PostScript Tiger with </a> Perspective Warping No textures! Paths rendered from resolution-independent 2D paths (outlines) </li></div><div><li>73. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#73">Render Fancy Text </a> from Outlines </li></div><div><li>74. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#74">Paths + Text </a> + 3D all at once </li></div><div><li>75. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#75">Web Page Rendering every </a> glyph from its outlines! </li></div><div><li>76. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#76">Zoom in and visualize glyph </a> outline control points </li></div><div><li>77. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#77">Beyond OpenGL 4.5  </a> Advanced scene rendering with ARB_multi_draw_indirect — Added to OpenGL 4.3  Bring even more processing onto the GPU with NV_bindless_multi_draw_indirect — Even less work for the CPU – no Vertex Buffer Object (VBO) binds between draws  Covered in depth by Christoph Kubisch yesterday — SG4117: OpenGL Scene Rendering Techniques </li></div><div><li>78. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#78">NV_bindless_multi_draw_indirect  DrawIndirect combined </a> with Bindless struct DrawElementsIndirect { GLuint count; GLuint instanceCount; GLuint firstIndex; GLint baseVertex; GLuint baseInstance; } struct BindlessPtr { Gluint index; Gluint reserved; GLuint64 address; GLuint64 length; } struct DrawElementsIndirectBindlessCommandNV { DrawElementsIndirect cmd; GLuint reserved; BindlessPtr index; BindlessPtr vertex[]; } Change vertex buffers per draw iteration! Change index buffer per draw iteration! MultiDrawElementsIndirectBindlessNV(enum mode, enum type, const void *indirect, sizei drawCount, sizei stride, int vertexBufferCount); Caveat: Does the CPU know the drawCount? The GL_BUFFER_GPU_ADDRESS_NV of the buffer object </li></div><div><li>79. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#79">NV_bindless_multi_draw_indirect_count  Source the </a> drawCount from a buffer object void MultiDrawElementsIndirectBindlessCountNV( enum mode, enum type, const void * indirect, intptr drawCount, sizei maxDrawCount, sizei stride, int vertexBufferCount ); drawCount now an offset into the bound GL_PARAMETER_BUFFER_ARB buffer range. </li></div><div><li>80. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#80">Khronos OpenGL BOF </a> at SIGGRAPH  Date: Wednesday, August 13 2014  Venue: Marriott Pinnacle Hotel, next to the Convention Center  Website: http://s2014.siggraph.org  Times: 5pm-7pm OpenGL and OpenGL ES Track  BOF After-Party: 7:30pm until late — Rumor: Free beer and door prizes </li></div><div><li>81. <a class="Transcript_link__MLbGS" href="https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750#81">Questions? </a></li></div></ul></div></div><div class="EditorsNotes_root__3PcDF"><h3 class="Heading_heading__3MAvZ Heading_h3__f1djd EditorsNotes_heading__XR9E6">Editor&#x27;s Notes</h3><ol class="EditorsNotes_list__NcG5Y"><li class="EditorsNotes_item__ebBbj">2009 2 versions OpenGL 3.1 and 3.2 2010 3 versions OpenGL 3.3, 4.0 and 4.1 Can incrementally use new features without breaking your app What about 2014?</li><li class="EditorsNotes_item__ebBbj">I’ll go through all of these in more detail</li><li class="EditorsNotes_item__ebBbj">This is how the picture looks now… move on. Still </li><li class="EditorsNotes_item__ebBbj">OpenGL is made up of extensions…</li><li class="EditorsNotes_item__ebBbj">Here are all the extensions – grouped.</li><li class="EditorsNotes_item__ebBbj">Some OpenGL 4.x hardware can’t support these, so they aren’t in 4.5 core spec.</li><li class="EditorsNotes_item__ebBbj">Can I play with it today? Yes you can. GeForce 400 Series and up.</li><li class="EditorsNotes_item__ebBbj">GLEW with OpenGL 4.5 released today.</li><li class="EditorsNotes_item__ebBbj">First and biggest new feature of OpenGL 4.5 is DSA. Finally. Some binding is slow, especially things like framebuffer object. </li><li class="EditorsNotes_item__ebBbj">GetInteger may cause a stall – a client/server sync. The Bind has cost. </li><li class="EditorsNotes_item__ebBbj">Shorter, more concise code. No longer need to use an active texture selector. </li><li class="EditorsNotes_item__ebBbj">Just easier and nicer programmer. </li><li class="EditorsNotes_item__ebBbj">The new DSA commands don’t create objects. They only work on created objects. Convenient way to generate name and create object in one shot. </li><li class="EditorsNotes_item__ebBbj">The new texture functions don’t require a target parameter. All covered; texture creation, compressed textures, texture update and readback, state sets and gets, texbo and mipmap generation. Can all be done without binding. </li><li class="EditorsNotes_item__ebBbj">New to DSA. Can also manipulate framebuffer objects. Modify attachments. You can even clear the framebuffer and copy from one to another. </li><li class="EditorsNotes_item__ebBbj">All the buffer objects functions have DSA equivalents. </li><li class="EditorsNotes_item__ebBbj">All functions that operate on a vertex array object are now available in DSA. You can even modify the element array binding. </li><li class="EditorsNotes_item__ebBbj">Functions that dealt with compatibility like the ARB_image and matrix functions were left out. EXT_DSA functions can create objects. 4.5 DSA functions can’t. </li><li class="EditorsNotes_item__ebBbj">Accesses to out-of-bounds data is no longer undefined. GL termination is no longer and option. Writes are discarded and reads contained undefined data. WEB BROWER </li><li class="EditorsNotes_item__ebBbj">Example of a safe API. </li><li class="EditorsNotes_item__ebBbj">Example of polling for a reset notification. Provide some user feedback if the GPU got reset. </li><li class="EditorsNotes_item__ebBbj">OpenGL ES 3.1 released in March. OpenGL 4.5 includes the new functionality. </li><li class="EditorsNotes_item__ebBbj">NVIDIA GPUs support OpenGL ES 3.1 and all the recent extensions. </li><li class="EditorsNotes_item__ebBbj">OpenGL 4.5 is a super-set of OpenGL ES 3.1. But if you want to only use OpenGL ES 3.1 and the ES extensions, then create an ES profile. Our OpenGL ES 3.1 is fully conformance and listed at Khronos. </li><li class="EditorsNotes_item__ebBbj">We measured a 2x performance boost in MakeCurrent time with this simple implementation.</li><li class="EditorsNotes_item__ebBbj">Disabling implicit flush requires a new context. </li><li class="EditorsNotes_item__ebBbj">DX zero y-coordinate is left left – GL is bottom left. If you can’t modify the transform matrices in the shader simply flip the y-origin with glClipControl. Most useful when rendering to a texture when you want to keep the texcoords DX like. The depth scale when transforming device normalized coordinates to window coordinates is modified from [-1,-1] to [0,1]. Can provide direct mapping of you near/far planes. So there is no potential for numerical loss. </li><li class="EditorsNotes_item__ebBbj">Doesn’t make much sense for SAMPLES_PASSED. But good for some of the new query targets like GL_TRANSFORM_FEEDBACK_OVERFLOW. </li><li class="EditorsNotes_item__ebBbj">Using coarse may take less cycles than fine on some implementations. </li><li class="EditorsNotes_item__ebBbj">In shader query of the number of samples in a texture or image. </li><li class="EditorsNotes_item__ebBbj">New ARB extension.</li><li class="EditorsNotes_item__ebBbj">Compute invocations includes both dispatch and indirect dispatching. </li><li class="EditorsNotes_item__ebBbj">New ARB extension. REHEARSE </li><li class="EditorsNotes_item__ebBbj">Texture can be bound to both FBO and for texturing. Before this was an error. Rehearse </li><li class="EditorsNotes_item__ebBbj">Object must not self-intersect. Keep drawing objects until you hit an overlap. Issue the texture barrier and continue. </li><li class="EditorsNotes_item__ebBbj">Supported for a couple of months. Subset of NV_blend_equation_advanced which can be supported by more vendors. Maxwell and TK1 allow intersecting draws without having to use glBlendBarrier since it’s implemented native. We expose the _coherent extension for this. </li><li class="EditorsNotes_item__ebBbj">Not sure how this escaped GL for so long. Now you can finally read a sub image of a texture without having to read the whole thing. </li><li class="EditorsNotes_item__ebBbj">Sparse buffer, similar to sparse texture. Not whole buffer has to be resident. Writes to uncommitted pages are discarded and reads return undefined data. </li><li class="EditorsNotes_item__ebBbj">Flash slide. For your reference. </li><li class="EditorsNotes_item__ebBbj">Mark </li><li class="EditorsNotes_item__ebBbj">How do you debug GL in a platform agnostic way? KHR_debug Shipped for a couple of years now, but some folks haven’t heard of this. Got a question yesterday that can be answered by KHR_debug. All kinds of useful data. Like buffer placement and eviction, performance warnings.</li><li class="EditorsNotes_item__ebBbj">THIS ONE ANIMATES. – What’s wrong with this code? Uses compatibility is not the right answer! </li><li class="EditorsNotes_item__ebBbj">You don’t need a debug context to do this. </li><li class="EditorsNotes_item__ebBbj">Hard to tie debug output with the app. Use labels, markers and groups. </li><li class="EditorsNotes_item__ebBbj">Step frame by frame. Inspect pixels – where did the come from, what shaders were involved. Breakpoints and inspection of shaders. Interactive debugging. </li><li class="EditorsNotes_item__ebBbj">Linux improvements over the last year. EGL, Framebuffer capture, quad-buffered stereo, G-Sync monitors and Linux for Tegra K1. Order your Jetson development kit today! </li><li class="EditorsNotes_item__ebBbj">Finally one last feature we released recently. First – we already support this. Code on next page. </li><li class="EditorsNotes_item__ebBbj">What if you don’t know the drawCount – doing culling in the GPU for example? </li><li class="EditorsNotes_item__ebBbj">drawCount comes from a buffer object. </li></ol></div><div class="actions-menu-container ActionsMenu_root__4k507" data-cy="actions-menu-mobile"><div class="Tooltip_triggerWrapper___S2HG"><button type="button" class="Button_root__i1yp0 Button_secondary__hHiHI Button_text__ZT_3O Button_small__sqsEx Button_icon__1C4qi save-button" data-testid="button" aria-label="actions.save" data-saved="false" data-cy="loggedout-save-slideshow-button"><span class="Icon_root__AjZyv SaveLoggedOut_icon__ny9X2" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/save.ef1812e2.svg);background-color:currentColor"></span><span class="sr-only"></span></span></button></div><button type="button" class="unstyled-button more-button MoreDropdownButton_trigger__x7wGs" aria-label="More options" data-cy="more-options-icon" data-testid="ellipsis"><div class="Tooltip_triggerWrapper___S2HG"><span class="Icon_root__AjZyv MoreDropdownButton_moreOptionsIcon__TpJLA" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/more-horizontal.f69be1b8.svg);background-color:currentColor"></span><span class="sr-only"></span></span></div></button><div class="DownloadButton_root__adY00 ActionsMenu_downloadButton__s7Iqj"><div><button type="button" class="Button_root__i1yp0 Button_primary__K25Gq Button_contained__gyjai Button_large__Yv_oe" data-testid="download-button" role="button" id=":R4j36:-trigger" tabindex="0" aria-haspopup="listbox" aria-controls=":R4j36:" data-cy="download-button-actions-menu" label="Download" aria-label="Download"><span><span class="Icon_root__AjZyv" style="--size:24px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/download.b1b2622c.svg);background-color:currentColor"></span><span class="sr-only"></span></span>Download</span></button></div><span class="sr-only" aria-live="polite"></span></div></div><dialog class="Modal_root__TYkzh FullscreenModal_root__efM9m" id=":Rn36:"><div class="Modal_wrapper__4UTGq"><div class="modal-content Modal_content__R1F4d FullscreenModal_content__bQ6mt"></div></div></dialog><div class="ad textads banner-ads banner_ads ad-unit ad-zone ad-space adsbox ads prebid" style="position:absolute;height:1px"></div><footer class="Footer_footer__N3WmV"><div class="FooterTop_wrapper__RuYz5" data-testid="footer-top"><div class="FooterTop_links__9J65v"><a class="Link_root__vn3ab Link_light__mcUPh Link_size-medium__ZLo12 Link_weight-bold__me4nt" href="/about">About</a><a class="Link_root__vn3ab Link_light__mcUPh Link_size-medium__ZLo12 Link_weight-bold__me4nt" href="https://support.scribd.com/hc/en/categories/360004792932-SlideShare?userType=SlideShare">Support</a><a class="Link_root__vn3ab Link_light__mcUPh Link_size-medium__ZLo12 Link_weight-bold__me4nt" href="https://support.scribd.com/hc/en/articles/210129326-General-Terms-of-Use">Terms</a><a class="Link_root__vn3ab Link_light__mcUPh Link_size-medium__ZLo12 Link_weight-bold__me4nt" href="https://support.scribd.com/hc/en/articles/210129366-Privacy-policy">Privacy</a><a class="Link_root__vn3ab Link_light__mcUPh Link_size-medium__ZLo12 Link_weight-bold__me4nt" href="/copyright-policy">Copyright</a><button class="FooterTop_cookiePreferenceButton__xmSox" type="button">Cookie Preferences</button><a class="Link_root__vn3ab Link_light__mcUPh Link_size-medium__ZLo12 Link_weight-bold__me4nt" href="https://support.scribd.com/hc/en-us/articles/360038016931-Privacy-Rights-Request-Form">Do not sell or share my personal information</a><a class="Link_root__vn3ab Link_light__mcUPh Link_size-medium__ZLo12 Link_weight-bold__me4nt" href="https://www.everand.com">Everand</a></div></div><hr class="Footer_separator__Qa1tj"/><div class="FooterBottom_wrapper__Gj9p_" data-testid="footer-bottom"><span class="FooterBottom_copyright__xltkG">© 2024 SlideShare from Scribd </span><div class="FooterBottom_icons__wEEhc"><a class="Link_root__vn3ab Link_light__mcUPh Link_size-large__W0PAv Link_weight-regular__yPpnB" aria-label="Slideshare on Twitter" href="https://twitter.com/slideshare"><span class="Icon_root__AjZyv" style="--size:18px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/twitter.89a06630.svg);background-color:currentColor"></span><span class="sr-only"></span></span></a><span class="FooterBottom_separator__181dN"></span><a class="Link_root__vn3ab Link_light__mcUPh Link_size-large__W0PAv Link_weight-regular__yPpnB" aria-label="Slideshare on RSS Feed" href="https://www.slideshare.net/rss/latest"><span class="Icon_root__AjZyv" style="--size:16px"><span class="Icon_icon__4zzsG" style="mask-image:url(https://public.slidesharecdn.com/_next/static/media/rss.5c914539.svg);background-color:currentColor"></span><span class="sr-only"></span></span></a></div></div></footer><div id="portals-container" style="z-index:1"><div id="banner-portal" class="PortalsContainer_bannerRoot__Q_sNw"></div></div></div></div><script src="https://cmp.osano.com/AzZdHGSGtpxCq1Cpt/079b27eb-bb3f-48dd-9bd9-3feb8aec3c38/osano.js"></script><script> // This script assumes the Osano script is synchronously loaded window.eventsToSend = window.eventsToSend || [] if (window.Osano) { window.eventsToSend.push({ name: "osano_loaded", timestamp: new Date().toISOString(), value: JSON.stringify({ time: performance?.now() }) }) } </script><script defer="" nomodule="" src="https://public.slidesharecdn.com/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="https://public.slidesharecdn.com/_next/static/chunks/webpack-fca657b2df1193b1.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/framework-0dfcca9a5dec51b3.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/main-4b9e5138f827276f.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/pages/_app-11440cd5307a400e.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/5121-c12bfd4bed7c2139.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/5581-c31338dd77890eb2.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/4740-639dc16ecd764905.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/6229-23a3a93a4fd8bda9.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/chunks/pages/slideshow/%5Btitle%5D/%5Bid%5D-451dcf877ad69f2b.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/24d6d1951e60542c5d6ed68398963595c0cca34b/_buildManifest.js" defer=""></script><script src="https://public.slidesharecdn.com/_next/static/24d6d1951e60542c5d6ed68398963595c0cca34b/_ssgManifest.js" defer=""></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"name":"slideshow","edgeTestAssignments":[{"name":"example","variant":"A"},{"name":"fullscreen_view","variant":"A"},{"name":"gallery_view","variant":"B"},{"name":"nextjs_profile","variant":"B"},{"name":"reading_modes","variant":"A"},{"name":"recs_placement","variant":"A"},{"name":"recs_placement_v2","variant":"A"},{"name":"single_slide_view_v2","variant":"A"}],"layout":{"currentUser":null,"fullPath":"https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750","osanoId":"079b27eb-bb3f-48dd-9bd9-3feb8aec3c38","featureFlags":[{"name":"disable_facebook","enabled":true},{"name":"document_interstitials_flag","enabled":true},{"name":"recommendation_impression_tracking","enabled":true},{"name":"search_results_tracking","enabled":true},{"name":"view_restriction_without_subscription_after_five","enabled":true},{"name":"disable_lazy_hydration","enabled":false}]},"countryCodeFromFastly":"HK","slideshow":{"username":"Mark_Kilgard","allowDownloads":true,"allowDownloadOriginalFile":true,"allowEmbeds":true,"canonicalUrl":"https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750","categories":[{"id":"16","name":"Technology","url":"technology"}],"createdAt":"2014-08-12 13:36:53 UTC","description":"presented at SIGGRAPH 2014 in Vancouver during NVIDIA's \"Best of GTC\" sponsored sessions\r\n\r\n http://www.nvidia.com/object/siggraph2014-best-gtc.html\r\n\r\nWatch the replay that includes a demo of GPU-accelerated Illustrator and several OpenGL 4 demos running on NVIDIA's Tegra Shield tablet.\r\n\r\n http://www.ustream.tv/recorded/51255959\r\n\r\nFind out more about the OpenGL examples for GameWorks:\r\n\r\n https://developer.nvidia.com/gameworks-opengl-samples","downloadKey":"541759de822b836d81f206cf9ff5daeab0663750994339bfd1e76258dc302bfd","editorsNotes":["2009 2 versions OpenGL 3.1 and 3.2\r2010 3 versions OpenGL 3.3, 4.0 and 4.1\rCan incrementally use new features without breaking your app\rWhat about 2014?","I’ll go through all of these in more detail","This is how the picture looks now… move on.\rStill \u000b","OpenGL is made up of extensions…","Here are all the extensions – grouped.","Some OpenGL 4.x hardware can’t support these, so they aren’t in 4.5 core spec.","Can I play with it today? Yes you can.\rGeForce 400 Series and up.","GLEW with OpenGL 4.5 released today.","First and biggest new feature of OpenGL 4.5 is DSA. Finally.\rSome binding is slow, especially things like framebuffer object.\r","GetInteger may cause a stall – a client/server sync.\rThe Bind has cost.\r","Shorter, more concise code.\rNo longer need to use an active texture selector.\r","Just easier and nicer programmer.\r","The new DSA commands don’t create objects.\rThey only work on created objects.\rConvenient way to generate name and create object in one shot.\r","The new texture functions don’t require a target parameter.\rAll covered; texture creation, compressed textures, texture update and readback, state sets and gets, texbo and mipmap generation. Can all be done without binding.\r","New to DSA.\rCan also manipulate framebuffer objects. Modify attachments. You can even clear the framebuffer and copy from one to another.\r","All the buffer objects functions have DSA equivalents.\r","All functions that operate on a vertex array object are now available in DSA.\rYou can even modify the element array binding.\r","Functions that dealt with compatibility like the ARB_image and matrix functions were left out.\rEXT_DSA functions can create objects. 4.5 DSA functions can’t.\r","Accesses to out-of-bounds data is no longer undefined. GL termination is no longer and option.\rWrites are discarded and reads contained undefined data.\r\rWEB BROWER\r","Example of a safe API.\r","Example of polling for a reset notification.\rProvide some user feedback if the GPU got reset.\r","OpenGL ES 3.1 released in March.\rOpenGL 4.5 includes the new functionality.\r","NVIDIA GPUs support OpenGL ES 3.1 and all the recent extensions.\r","OpenGL 4.5 is a super-set of OpenGL ES 3.1.\rBut if you want to only use OpenGL ES 3.1 and the ES extensions, then create an ES profile.\u000bOur OpenGL ES 3.1 is fully conformance and listed at Khronos.\r","We measured a 2x performance boost in MakeCurrent time with this simple implementation.","Disabling implicit flush requires a new context.\r","DX zero y-coordinate is left left – GL is bottom left.\rIf you can’t modify the transform matrices in the shader simply flip the y-origin with glClipControl.\rMost useful when rendering to a texture when you want to keep the texcoords DX like.\rThe depth scale when transforming device normalized coordinates to window coordinates is modified from [-1,-1] to [0,1]. Can provide direct mapping of you near/far planes. So there is no potential for numerical loss.\r","Doesn’t make much sense for SAMPLES_PASSED. But good for some of the new query targets like GL_TRANSFORM_FEEDBACK_OVERFLOW.\r","Using coarse may take less cycles than fine on some implementations.\r","In shader query of the number of samples in a texture or image.\r","New ARB extension.","Compute invocations includes both dispatch and indirect dispatching.\r","New ARB extension.\r\rREHEARSE\r","Texture can be bound to both FBO and for texturing. Before this was an error.\r\rRehearse\r","Object must not self-intersect.\rKeep drawing objects until you hit an overlap.\rIssue the texture barrier and continue.\r","Supported for a couple of months.\rSubset of NV_blend_equation_advanced which can be supported by more vendors.\rMaxwell and TK1 allow intersecting draws without having to use glBlendBarrier since it’s implemented native.\rWe expose the _coherent extension for this.\u000b","Not sure how this escaped GL for so long.\rNow you can finally read a sub image of a texture without having to read the whole thing.\r","Sparse buffer, similar to sparse texture.\rNot whole buffer has to be resident.\rWrites to uncommitted pages are discarded and reads return undefined data.\r","Flash slide. For your reference.\u000b","Mark\r","How do you debug GL in a platform agnostic way? KHR_debug\rShipped for a couple of years now, but some folks haven’t heard of this. Got a question yesterday that can be answered by KHR_debug.\rAll kinds of useful data. Like buffer placement and eviction, performance warnings.","THIS ONE ANIMATES. – What’s wrong with this code?\rUses compatibility is not the right answer!\r","You don’t need a debug context to do this.\r","Hard to tie debug output with the app.\rUse labels, markers and groups.\r","Step frame by frame. Inspect pixels – where did the come from, what shaders were involved.\rBreakpoints and inspection of shaders. Interactive debugging.\r","Linux improvements over the last year.\rEGL, Framebuffer capture, quad-buffered stereo, G-Sync monitors and Linux for Tegra K1.\rOrder your Jetson development kit today!\r","Finally one last feature we released recently.\rFirst – we already support this.\rCode on next page.\r","What if you don’t know the drawCount – doing culling in the GPU for example?\r","drawCount comes from a buffer object.\r"],"emailShareUrl":"mailto:?subject=Check out this SlideShare presentation\u0026body=https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750","extension":"pptx","facebookShareUrl":"https://facebook.com/sharer.php?u=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fopengl-45-update-for-nvidia-gpus%2F37922750\u0026t=OpenGL+4.5+Update+for+NVIDIA+GPUs","genaiDescriptionCreatedAt":null,"genaiTest":"control","id":"37922750","iframeEmbed":{"url":"https://www.slideshare.net/slideshow/embed_code/key/3TwMAztPPZiShG","height":486,"width":597},"isIndexable":true,"isLikedByCurrentUser":false,"isPrivate":false,"isSeoTitleTestVariant":true,"isViewable":true,"language":"en","likes":46,"linkedinShareUrl":"https://www.linkedin.com/cws/share?url=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fopengl-45-update-for-nvidia-gpus%2F37922750\u0026trk=SLIDESHARE","downloadCount":490,"recommendationsByLocation":{"rightRail":[{"algorithmId":"5","displayTitle":"NVIDIA OpenGL 4.6 in 2017","isSavedByCurrentUser":false,"pageCount":112,"score":0.82764,"slideshowId":"78426422","sourceName":"cm_interact","strippedTitle":"nvgl17","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraphkilgardnvidiaopenglin2017-170731201008-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes Mark Kilgard's presentation on NVIDIA's OpenGL support in 2017. It discusses key points including the announcement of OpenGL 4.6 with SPIR-V support, NVIDIA's OpenGL driver updates, and recent advancements in OpenGL such as new extensions in 2014-2016 and the introduction of OpenGL 4.6 which bundles several new extensions. It also provides an overview of NVIDIA's leverage of the OpenGL codebase and shading compiler across multiple APIs.","tags":["spir-v","opengl","spirv"],"url":"https://www.slideshare.net/slideshow/nvgl17/78426422","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":16798},{"algorithmId":"5","displayTitle":"OpenGL 4.4 - Scene Rendering Techniques","isSavedByCurrentUser":false,"pageCount":56,"score":0.811516,"slideshowId":"43492203","sourceName":"cm_interact","strippedTitle":"s4379-opengl44scenerenderingtechniques","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/tuq9luulsosocsjbihx7-signature-3a2a87be8e63e1de55b788f7f79aaa7579735627c4872928bfa368ed8b08f16a-poli-150113234003-conversion-gate02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"OpenGL 4.4 provides new features for accelerating scenes with many objects, which are typically found in professional visualization markets. This talk will provide details on the usage of the features and their effect on real-life models. Furthermore we will showcase how more work for rendering a scene can be off-loaded to the GPU, such as efficient occlusion culling or matrix calculations.\r\n\r\nVideo presentation here: http://on-demand.gputechconf.com/gtc/2014/video/S4379-opengl-44-scene-rendering-techniques.mp4","tags":["opengl","optimization","scene"],"url":"https://www.slideshare.net/slideshow/s4379-opengl44scenerenderingtechniques/43492203","userLogin":"Narann29","userName":"Narann29","viewCount":2457},{"algorithmId":"5","displayTitle":"Gl efficiency","isSavedByCurrentUser":false,"pageCount":19,"score":0.768989,"slideshowId":"32590355","sourceName":"cm_interact","strippedTitle":"gl-efficiency","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/glefficiency-140321133455-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The document discusses Approaching Zero Driver Overhead (AZDO) in OpenGL. It notes that driver overhead costs CPU cycles, cache, power, and GPU throughput. While OpenGL is often seen as old and inefficient, modern OpenGL features like bindless textures and indirect drawing allow decoupling the CPU and GPU, with the CPU writing commands to memory and the GPU reading them. This efficient model can provide speedups of 5-15x on driver-limited cases while working on existing drivers and hardware. It also enables scalable multi-threading without new APIs and GPU work creation through compute jobs.","tags":[],"url":"https://www.slideshare.net/slideshow/gl-efficiency/32590355","userLogin":"CassEveritt","userName":"Cass Everitt","viewCount":3296},{"algorithmId":"5","displayTitle":"OpenGL NVIDIA Command-List:\u000b Approaching Zero Driver Overhead","isSavedByCurrentUser":false,"pageCount":42,"score":0.745441,"slideshowId":"42337523","sourceName":"cm_interact","strippedTitle":"opengl-nvidia-commandlistapproaching-zerodriveroverhead","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/commandlistsiggraphasia2014-141204005310-conversion-gate02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This presentation introduces a new NVIDIA extension called Command-list.\r\nThe purpose of this presentation is to explain the basic concepts on how to use it and show what are the benefits.\r\n\r\nThe sample I used for the talk is here: https://github.com/nvpro-samples/gl_commandlist_bk3d_models\r\n\r\nThe driver for trying should be PreRelease 347.09\r\nhttp://www.nvidia.com/download/driverResults.aspx/80913/en-us","tags":["opengl","gpu","computergraphics"],"url":"https://www.slideshare.net/slideshow/opengl-nvidia-commandlistapproaching-zerodriveroverhead/42337523","userLogin":"tlorach","userName":"Tristan Lorach","viewCount":242667},{"algorithmId":"5","displayTitle":"NVIDIA OpenGL and Vulkan Support for 2017","isSavedByCurrentUser":false,"pageCount":61,"score":0.743048,"slideshowId":"78476639","sourceName":"cm_interact","strippedTitle":"nvidia-opengl-and-vulkan-support-for-2017","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraphkilgardopenglandvulkansupportfor2017-170802024747-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Learn how NVIDIA continues improving both Vulkan and OpenGL for cross-platform graphics and compute development. This high-level talk is intended for anyone wanting to understand the state of Vulkan and OpenGL in 2017 on NVIDIA GPUs. For OpenGL, the latest standard update maintains the compatibility and feature-richness you expect. For Vulkan, NVIDIA has enabled the latest NVIDIA GPU hardware features and now provides explicit support for multiple GPUs. And for either API, NVIDIA's SDKs and Nsight tools help you develop and debug your application faster.\r\n\r\nNVIDIA booth theater presentation at SIGGRAPH in Los Angeles, August 1, 2017.\r\n\r\nhttp://www.nvidia.com/object/siggraph2017-schedule.html?id=sig1732\r\n\r\nGet your SIGGRAPH driver release with OpenGL 4.6 and the latest Vulkan functionality from\r\nhttps://developer.nvidia.com/opengl-driver","tags":["opengl","khronos","spir-v"],"url":"https://www.slideshare.net/Mark_Kilgard/nvidia-opengl-and-vulkan-support-for-2017","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":5210},{"algorithmId":"5","displayTitle":"Approaching zero driver overhead","isSavedByCurrentUser":false,"pageCount":130,"score":0.714171,"slideshowId":"32554457","sourceName":"cm_interact","strippedTitle":"approaching-zero-driver-overhead","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/approachingzerodriveroverhead-140320164055-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The document discusses approaches for reducing driver overhead in OpenGL applications. It introduces several OpenGL APIs that can be used to achieve this, including persistent mapped buffers for dynamic geometry, multi-draw indirect for batching draw calls, and packing 2D textures into arrays. Speakers then provide details on implementing these techniques and the performance improvements they provide, such as reducing overhead by 5-10x and allowing an order of magnitude more unique objects per frame. Bindless textures and sparse textures are also covered as advanced methods for further optimizing texture handling and memory usage.","tags":[],"url":"https://www.slideshare.net/slideshow/approaching-zero-driver-overhead/32554457","userLogin":"CassEveritt","userName":"Cass Everitt","viewCount":373572},{"algorithmId":"5","displayTitle":"Optimizing the Graphics Pipeline with Compute, GDC 2016","isSavedByCurrentUser":false,"pageCount":99,"score":0.713909,"slideshowId":"59747720","sourceName":"cm_interact","strippedTitle":"optimizing-the-graphics-pipeline-with-compute-gdc-2016","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gdc2016compute-160318234955-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"With further advancement in the current console cycle, new tricks are being learned to squeeze the maximum performance out of the hardware. This talk will present how the compute power of the console and PC GPUs can be used to improve the triangle throughput beyond the limits of the fixed function hardware. The discussed method shows a way to perform efficient \"just-in-time\" optimization of geometry, and opens the way for per-primitive filtering kernels and procedural geometry processing.\r\n\r\nTakeaway:\r\nAttendees will learn how to preprocess geometry on-the-fly per frame to improve rendering performance and efficiency.\r\n\r\nIntended Audience:\r\nThis presentation is targeting seasoned graphics developers. Experience with DirectX 12 and GCN is recommended, but not required.","tags":["2016","gdc","graphics pipeline"],"url":"https://www.slideshare.net/slideshow/optimizing-the-graphics-pipeline-with-compute-gdc-2016/59747720","userLogin":"gwihlidal","userName":"Graham Wihlidal","viewCount":136574},{"algorithmId":"5","displayTitle":"Beyond porting","isSavedByCurrentUser":false,"pageCount":74,"score":0.697958,"slideshowId":"30219704","sourceName":"cm_interact","strippedTitle":"beyond-porting","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/beyondporting-140120112136-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Ever wondered how to use modern OpenGL in a way that radically reduces driver overhead? Then this talk is for you.\r\nJohn McDonald and Cass Everitt gave this talk at Steam Dev Days in Seattle on Jan 16, 2014.","tags":["opengl","steam","nvidia"],"url":"https://www.slideshare.net/slideshow/beyond-porting/30219704","userLogin":"CassEveritt","userName":"Cass Everitt","viewCount":69982}],"whatsHot":[{"algorithmId":"5","displayTitle":"Dissecting the Rendering of The Surge","isSavedByCurrentUser":false,"pageCount":32,"score":0.693996,"slideshowId":"95078384","sourceName":"cm_interact","strippedTitle":"dissecting-the-rendering-of-the-surge","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/quovadistalk2018-180426080123-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Philip Hammer of DECK13 Interactive GmbH presented techniques used in rendering The Surge. Key points included: using physically based rendering with GGX BRDF; clustered deferred rendering with lighting computed on GPU; deferred decals for details; and optimizing shaders for AMD GCN occupancy. Future work focuses on new deferred approaches like bindless decals, improved materials, and migrating to Vulkan and DX12.","tags":["rendering","deferred rendering","deferred decals"],"url":"https://www.slideshare.net/slideshow/dissecting-the-rendering-of-the-surge/95078384","userLogin":"philiphammer","userName":"Philip Hammer","viewCount":3549},{"algorithmId":"5","displayTitle":"NVIDIA's OpenGL Functionality","isSavedByCurrentUser":false,"pageCount":113,"score":0.688202,"slideshowId":"5279137","sourceName":"cm_interact","strippedTitle":"gtc-2010-opengl","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gtc2010opengl-100924140333-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Presented as a pre-conference tutorial at the GPU Technology Conference in San Jose on September 20, 2010.\r\n\r\nLearn about NVIDIA's OpenGL 4.1 functionality available now on Fermi-based GPUs.","tags":["gtc","nvidia","opengl"],"url":"https://www.slideshare.net/slideshow/gtc-2010-opengl/5279137","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":9190},{"algorithmId":"5","displayTitle":"Siggraph2016 - The Devil is in the Details: idTech 666","isSavedByCurrentUser":false,"pageCount":58,"score":0.687538,"slideshowId":"64714659","sourceName":"cm_interact","strippedTitle":"siggraph2016-the-devil-is-in-the-details-idtech-666","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2016idtech6-final-160804225349-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"A behind-the-scenes look into the latest renderer technology powering the critically acclaimed DOOM. The lecture will cover how technology was designed for balancing a good visual quality and performance ratio. Numerous topics will be covered, among them details about the lighting solution, techniques for decoupling costs frequency and GCN specific approaches.","tags":[],"url":"https://www.slideshare.net/TiagoAlexSousa/siggraph2016-the-devil-is-in-the-details-idtech-666","userLogin":"TiagoAlexSousa","userName":"Tiago Sousa","viewCount":7585},{"algorithmId":"5","displayTitle":"Advanced Scenegraph Rendering Pipeline","isSavedByCurrentUser":false,"pageCount":42,"score":0.685015,"slideshowId":"43492403","sourceName":"cm_interact","strippedTitle":"advanced-scenegraph-rendering-pipeline","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/dituu22tms0ujubzipgm-signature-3a2a87be8e63e1de55b788f7f79aaa7579735627c4872928bfa368ed8b08f16a-poli-150113235132-conversion-gate02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The goal of this session is to demonstrate techniques that improve GPU scalability when rendering complex scenes. This is achieved through a modular design that separates the scene graph representation from the rendering backend. We will explain how the modules in this pipeline are designed and give insights to implementation details, which leverage GPU''s compute capabilities for scene graph processing. Our modules cover topics such as shader generation for improved parameter management, synchronizing updates between scenegraph and rendering backend, as well as efficient data structures inside the renderer.\r\n\r\nVideo here: http://on-demand.gputechconf.com/gtc/2013/video/S3032-Advanced-Scenegraph-Rendering-Pipeline.mp4","tags":["optimization","rendering","scene"],"url":"https://www.slideshare.net/slideshow/advanced-scenegraph-rendering-pipeline/43492403","userLogin":"Narann29","userName":"Narann29","viewCount":1620},{"algorithmId":"5","displayTitle":"Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14","isSavedByCurrentUser":false,"pageCount":33,"score":0.681507,"slideshowId":"33085509","sourceName":"cm_interact","strippedTitle":"vertex-shader-tricks-bill-bilodeau","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/vertexshadertricks-billbilodeau-140403092257-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Bill explains some of the ways that the Vertex Shader can be used to improve performance by taking a fast path through the Vertex Shader rather than generating vertices with other parts of the pipeline in this AMD technology presentation from the 2014 Game Developers Conference in San Francisco March 17-21. Check out more technical presentations at http://developer.amd.com/resources/documentation-articles/conference-presentations/","tags":["gdc14","developers","amd"],"url":"https://www.slideshare.net/DevCentralAMD/vertex-shader-tricks-bill-bilodeau","userLogin":"DevCentralAMD","userName":"AMD Developer Central ","viewCount":32038},{"algorithmId":"5","displayTitle":"Five Rendering Ideas from Battlefield 3 \u0026 Need For Speed: The Run","isSavedByCurrentUser":false,"pageCount":96,"score":0.672624,"slideshowId":"8907879","sourceName":"cm_interact","strippedTitle":"five-rendering-ideas-from-battlefield-3-need-for-speed-the-run","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/bf3nfswhitebarrebriseboissiggraph2011-110818153837-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Siggraph 2011 talk by John White (NFS) \u0026 Colin Barre-Brisebois (BF3) at EA about rendering \u0026 performance","tags":["rendering","bf3","nfs"],"url":"https://www.slideshare.net/DICEStudio/five-rendering-ideas-from-battlefield-3-need-for-speed-the-run","userLogin":"DICEStudio","userName":"Electronic Arts / DICE","viewCount":32693},{"algorithmId":"5","displayTitle":"Crysis Next-Gen Effects (GDC 2008)","isSavedByCurrentUser":false,"pageCount":78,"score":0.6655,"slideshowId":"25051981","sourceName":"cm_interact","strippedTitle":"crysis-nextgen-effects-gdc-2008","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gdc08sousatcrysiseffects-130808042549-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes techniques for rendering water and frozen surfaces in CryEngine 2. It discusses procedural shaders for simulating water waves, caustics, god rays, shore foam, and frozen surface effects. It also covers techniques for water reflection, refraction, physics interaction, and camera interaction with water surfaces. Optimization strategies are discussed for minimizing draw calls and rendering costs.","tags":["graphics","rendering","crysis"],"url":"https://www.slideshare.net/slideshow/crysis-nextgen-effects-gdc-2008/25051981","userLogin":"TiagoAlexSousa","userName":"Tiago Sousa","viewCount":11033},{"algorithmId":"5","displayTitle":"Calibrating Lighting and Materials in Far Cry 3","isSavedByCurrentUser":false,"pageCount":67,"score":0.657284,"slideshowId":"14222623","sourceName":"cm_interact","strippedTitle":"calibrating-lighting-and-materials-in-far-cry-3","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/s2012pbsfarcry3slidesv2-120909084220-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"A talk given as part of the Practical Physically Based Shading in Film and Game Production course at SIGGRAPH 2012.","tags":["far cry 3","based","shading"],"url":"https://www.slideshare.net/slideshow/calibrating-lighting-and-materials-in-far-cry-3/14222623","userLogin":"stevemcauley","userName":"stevemcauley","viewCount":13044},{"algorithmId":"5","displayTitle":"Z Buffer Optimizations","isSavedByCurrentUser":false,"pageCount":41,"score":0.651565,"slideshowId":"1923660","sourceName":"cm_interact","strippedTitle":"z-buffer-optimizations","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/zbufferoptimizations-090829081736-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document discusses various optimizations for the z-buffer algorithm used in 3D graphics rendering. It covers hardware optimizations like early-z testing and double-speed z-only rendering. It also discusses software techniques like front-to-back sorting, early-z rendering passes, and deferred shading. Other topics include z-buffer compression, fast clears, z-culling, and potential future optimizations like programmable culling units. A variety of resources are provided for further reading.","tags":["buffer","z","optimizations"],"url":"https://www.slideshare.net/slideshow/z-buffer-optimizations/1923660","userLogin":"pjcozzi","userName":"pjcozzi","viewCount":18473},{"algorithmId":"5","displayTitle":"The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)","isSavedByCurrentUser":false,"pageCount":53,"score":0.650088,"slideshowId":"41050602","sourceName":"cm_interact","strippedTitle":"the-rendering-technology-of-lords-of-the-fallen-game-connection-europe-2014","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/phammergameconnection2014lotfrendertechfinal2-141103074453-conversion-gate02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"My talk from Game Connection Europe 2014 (updated version with slightly different focus that my previous talk from Digital Dragons)","tags":["lords of the fallen","rendering","computer graphics"],"url":"https://www.slideshare.net/slideshow/the-rendering-technology-of-lords-of-the-fallen-game-connection-europe-2014/41050602","userLogin":"philiphammer","userName":"Philip Hammer","viewCount":7658},{"algorithmId":"5","displayTitle":"The Rendering Pipeline - Challenges \u0026 Next Steps","isSavedByCurrentUser":false,"pageCount":45,"score":0.649981,"slideshowId":"51840664","sourceName":"cm_interact","strippedTitle":"the-rendering-pipeline-challenges-next-steps","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/renderingpipelinejohan-150820013555-lva1-app6892-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Talk by Johan Andersson @ Electronic Arts in the SIGGRAPH 2015 course \"Open Problems in Real-time Rendering\"","tags":["rendering","challenges"],"url":"https://www.slideshare.net/slideshow/the-rendering-pipeline-challenges-next-steps/51840664","userLogin":"repii","userName":"Johan Andersson","viewCount":101218},{"algorithmId":"5","displayTitle":"Past, Present and Future Challenges of Global Illumination in Games","isSavedByCurrentUser":false,"pageCount":58,"score":0.648542,"slideshowId":"79170381","sourceName":"cm_interact","strippedTitle":"past-present-and-future-challenges-of-global-illumination-in-games","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2017acertainslantoflightweb-170826091925-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Global illumination (GI) has been an ongoing quest in games. The perpetual tug-of-war between visual quality and performance often forces developers to take the latest and greatest from academia and tailor it to push the boundaries of what has been realized in a game product. Many elements need to align for success, including image quality, performance, scalability, interactivity, ease of use, as well as game-specific and production challenges.\r\n\r\nFirst we will paint a picture of the current state of global illumination in games, addressing how the state of the union compares to the latest and greatest research. We will then explore various GI challenges that game teams face from the art, engineering, pipelines and production perspective. The games industry lacks an ideal solution, so the goal here is to raise awareness by being transparent about the real problems in the field. Finally, we will talk about the future. This will be a call to arms, with the objective of uniting game developers and researchers on the same quest to evolve global illumination in games from being mostly static, or sometimes perceptually real-time, to fully real-time.","tags":["computer graphics","electronic arts","global illumination"],"url":"https://www.slideshare.net/slideshow/past-present-and-future-challenges-of-global-illumination-in-games/79170381","userLogin":"colinbb","userName":"Colin Barré-Brisebois","viewCount":25228},{"algorithmId":"5","displayTitle":"Physically Based and Unified Volumetric Rendering in Frostbite","isSavedByCurrentUser":false,"pageCount":56,"score":0.64713,"slideshowId":"51840934","sourceName":"cm_interact","strippedTitle":"physically-based-and-unified-volumetric-rendering-in-frostbite","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/frostbitepbandunifiedvolumetrics-150820015056-lva1-app6891-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Talk by Sebastien Hillaire at Electronic Arts for SIGGRAPH 2015 in the Advances in Real-time Rendering course.","tags":["rendering","frostbite","volumetric"],"url":"https://www.slideshare.net/slideshow/physically-based-and-unified-volumetric-rendering-in-frostbite/51840934","userLogin":"DICEStudio","userName":"Electronic Arts / DICE","viewCount":165384},{"algorithmId":"5","displayTitle":"Bindless Deferred Decals in The Surge 2","isSavedByCurrentUser":false,"pageCount":58,"score":0.64322,"slideshowId":"148105513","sourceName":"cm_interact","strippedTitle":"bindless-deferred-decals-in-the-surge-2","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/dd2019philiphammerfinal-190529094302-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"These are the slides for my talk at Digital Dragons 2019 in Krakow.\r\nUpdate: The recordings are online on youtube now:\r\nhttps://www.youtube.com/watch?v=e2wPMqWETj8\r\n","tags":["rendering","deferred rendering","deferred decals"],"url":"https://www.slideshare.net/slideshow/bindless-deferred-decals-in-the-surge-2/148105513","userLogin":"philiphammer","userName":"Philip Hammer","viewCount":9675},{"algorithmId":"5","displayTitle":"Checkerboard Rendering in Dark Souls: Remastered by QLOC","isSavedByCurrentUser":false,"pageCount":88,"score":0.642908,"slideshowId":"148444255","sourceName":"cm_interact","strippedTitle":"checkerboardrendering-in-dark-souls-remastered","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/quickpresentationtemplate1-190531161437-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This is a talk on checkerboard rendering Markus \u0026 Andreas held at Digital Dragons 2019. \r\nIn it they quickly go through the history of Checkerboard Rendering before taking a deep dive into how it works and how it is implemented in Dark Souls: Remastered. Lastly, they present the quality and performance improvements they got from using it and their conclusion.\r\n\r\nPS: The PDF. file includes useful in-depth notes from both authors. ","tags":["dark souls","qloc","remaster"],"url":"https://www.slideshare.net/slideshow/checkerboardrendering-in-dark-souls-remastered/148444255","userLogin":"QLOC","userName":"QLOC","viewCount":1545},{"algorithmId":"5","displayTitle":"Frostbite Rendering Architecture and Real-time Procedural Shading \u0026 Texturing...","isSavedByCurrentUser":false,"pageCount":74,"score":0.641896,"slideshowId":"916077","sourceName":"cm_interact","strippedTitle":"frostbite-rendering-architecture-and-realtime-procedural-shading-texturing-techniques-presentation","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/anderssontatarchukfrostbiterenderingarchitecturegdc07amdsession-1231934138412433-1-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The document discusses procedural shading and texturing techniques used in game engines. It describes the Frostbite game engine which uses procedural generation to create terrain, foliage and other game assets in real-time. Surface shaders are created as graphs and allow procedural definition of material properties. The world renderer handles multi-threaded rendering of game worlds using procedural techniques.","tags":["amd","dice","gdc"],"url":"https://www.slideshare.net/slideshow/frostbite-rendering-architecture-and-realtime-procedural-shading-texturing-techniques-presentation/916077","userLogin":"repii","userName":"Johan Andersson","viewCount":20324},{"algorithmId":"5","displayTitle":"A Bit More Deferred Cry Engine3","isSavedByCurrentUser":false,"pageCount":27,"score":0.639949,"slideshowId":"1432657","sourceName":"cm_interact","strippedTitle":"a-bit-more-deferred-cry-engine3","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/abitmoredeferred-cryengine3-090514000908-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"CryEngine 3 uses a deferred lighting approach that generates lighting information in screen space textures for efficient rendering of complex scenes on consoles and PC. Key features include storing normals, depth, and material properties in G-buffers, accumulating light contributions from multiple light types into textures, and supporting techniques like image-based lighting, shadow mapping, and real-time global illumination. Deferred rendering helps address shader combination issues and provides more predictable performance.","tags":[],"url":"https://www.slideshare.net/slideshow/a-bit-more-deferred-cry-engine3/1432657","userLogin":"guest11b095","userName":"guest11b095","viewCount":12348},{"algorithmId":"5","displayTitle":"Advancements in-tiled-rendering","isSavedByCurrentUser":false,"pageCount":61,"score":0.637922,"slideshowId":"46162853","sourceName":"cm_interact","strippedTitle":"advancements-intiledrendering","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/advancements-in-tiled-rendering-150323053848-conversion-gate01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document discusses advancements in tiled-based compute rendering. It describes current proven tiled rendering techniques used in games. It then discusses opportunities for improvement like using parallel reduction to calculate depth bounds more efficiently than atomics, improved light culling techniques like modified Half-Z, and clustered rendering which divides the screen into tiles and slices to reduce lighting workloads. The document concludes clustered shading has potential savings on culling and offers benefits over traditional 2D tiling.","tags":[],"url":"https://www.slideshare.net/slideshow/advancements-intiledrendering/46162853","userLogin":"mistercteam","userName":"mistercteam","viewCount":2296},{"algorithmId":"5","displayTitle":"Taking Killzone Shadow Fall Image Quality Into The Next Generation","isSavedByCurrentUser":false,"pageCount":112,"score":0.635724,"slideshowId":"35308676","sourceName":"cm_interact","strippedTitle":"killzone-shadow-fall-gdc2014-valient-killzonegraphics","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gdc2014valientkillzonegraphics-140530111801-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This talk focuses on the technical side of Killzone Shadow Fall, the platform exclusive launch title for PlayStation 4. \r\nWe present the details of several new techniques that were developed in the quest for next generation image quality, and the talk uses key locations from the game as examples. We discuss interesting aspects of the new content pipeline, next-gen lighting engine, usage of indirect lighting and various shadow rendering optimizations. We also describe the details of volumetric lighting, the real-time reflections system, and the new anti-aliasing solution, and include some details about the image-quality driven streaming system. A common, very important, theme of the talk is the temporal coherency and how it was utilized to reduce aliasing, and improve the rendering quality and image stability above the baseline 1080p resolution seen in other games.","tags":["killzone shadowfall valient guerrilla ps4"],"url":"https://www.slideshare.net/slideshow/killzone-shadow-fall-gdc2014-valient-killzonegraphics/35308676","userLogin":"guerrillagames","userName":"Guerrilla","viewCount":15329},{"algorithmId":"5","displayTitle":"Terrain in Battlefield 3: A Modern, Complete and Scalable System","isSavedByCurrentUser":false,"pageCount":69,"score":0.634352,"slideshowId":"11989404","sourceName":"cm_interact","strippedTitle":"terrain-in-battlefield-3-a-modern-complete-and-scalable-system","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gdc2012terraininbattlefield3-120313104037-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"In the session from Game Developers Conference 2011, we'll take a complete look at the terrain system in Frostbite 2 as it was applied in Battlefield 3. The session is partitioned into three parts. We begin with the scalability aspects and discuss how consistent use of hierarchies allowed us to combine high resolutions with high view distances. We then turn towards workflow aspects and describe how we achieved full in-game realtime editing. A fair amount of time is spent describing how issues were addressed.\n\nFinally, we look at the runtime side. We describe usage of CPU, GPU and memory resources and how it was kept to a minimum. We discuss how the GPU is offloaded by caching intermediate results in a procedural virtual texture and how prioritization was done to allow for work throttling without sacrificing quality. We also go into depth about the flexible streaming system that work with both FPS and driving games.","tags":["terrain","battlefield","bf3"],"url":"https://www.slideshare.net/slideshow/terrain-in-battlefield-3-a-modern-complete-and-scalable-system/11989404","userLogin":"DICEStudio","userName":"Electronic Arts / DICE","viewCount":147126}],"alsoLiked":[{"algorithmId":"21","displayTitle":"NVIDIA OpenGL in 2016","isSavedByCurrentUser":false,"pageCount":123,"score":0,"slideshowId":"66696151","sourceName":"li_interact","strippedTitle":"nvidia-opengl-in-2016","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/tz1z7aomq7awcfmdvqcg-signature-2116a99f130611e1d920f73a25e85ccaa3981fd57edb2917daa913d8104eb9ea-poli-161004030516-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Presented at SIGGRAPH 2016 in Anaheim at NVIDIA's \"Best of GTC\" sessions on Sunday, July 24, 2016 by Mark Kilgard and Jeffrey Kiel.","tags":["nvidia","nsight","conservative rasterization"],"url":"https://www.slideshare.net/slideshow/nvidia-opengl-in-2016/66696151","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":4856},{"algorithmId":"21","displayTitle":"Migrating from OpenGL to Vulkan","isSavedByCurrentUser":false,"pageCount":37,"score":0,"slideshowId":"62920657","sourceName":"li_interact","strippedTitle":"migrating-from-opengl-to-vulkan","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/kilgardmigratingfromopengltovulkan-160610062941-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"1. The document discusses migrating from OpenGL to Vulkan, providing analogies comparing the APIs to fixed-function toys, programmable LEGO kits, and raw materials pine wood derby kits. \n2. It outlines scenarios that are likely and unlikely to benefit from Vulkan, such as applications with parallelizable CPU-bound graphics work. \n3. Key differences between OpenGL and Vulkan are explained, such as Vulkan requiring explicit management of graphics resources, synchronization, and command buffer queuing. The document emphasizes that transitioning to Vulkan truly rethinks the entire graphics rendering approach.","tags":["vulkan","azdo","opengl"],"url":"https://www.slideshare.net/slideshow/migrating-from-opengl-to-vulkan/62920657","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":5553},{"algorithmId":"21","displayTitle":"OpenGL for 2015","isSavedByCurrentUser":false,"pageCount":47,"score":0,"slideshowId":"52329356","sourceName":"li_interact","strippedTitle":"opengl-for-2015-52329356","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/openglfor2015-150902085548-lva1-app6891-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Barthold Lichtenbelt presented an abbreviated version of these slides at Khronos BOF at SIGGRAPH on Wednesday, August 12, 2015 in Los Angeles","tags":["opengl","khronos","nvidia"],"url":"https://www.slideshare.net/slideshow/opengl-for-2015-52329356/52329356","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":29402},{"algorithmId":"21","displayTitle":"SIGGRAPH 2012: NVIDIA OpenGL for 2012","isSavedByCurrentUser":false,"pageCount":124,"score":0,"slideshowId":"14019812","sourceName":"li_interact","strippedTitle":"siggraph-2012-nvidia-opengl-for-2012","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2012nvidiaopenglfor2012-120820103157-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Video replay: http://nvidia.fullviewmedia.com/siggraph2012/ondemand/SS104.html\r\n\r\nDate: Wednesday, August 8, 2012\r\nTime: 11:50 AM - 12:50 PM\r\nLocation: SIGGRAPH 2012, Los Angeles\r\n\r\nAttend this session to get the most out of OpenGL on NVIDIA Quadro and GeForce GPUs. Learn about the new features in OpenGL 4.3, particularly Compute Shaders. Other topics include bindless graphics; Linux improvements; and how to best use the modern OpenGL graphics pipeline. Learn how your application can benefit from NVIDIA's leadership driving OpenGL as a cross-platform, open industry standard.\r\n\r\nGet OpenGL 4.3 beta drivers for NVIDIA GPUs from http://www.nvidia.com/content/devzone/opengl-driver-4.3.html","tags":["opengl","compute shaders","linux"],"url":"https://www.slideshare.net/slideshow/siggraph-2012-nvidia-opengl-for-2012/14019812","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":13134},{"algorithmId":"21","displayTitle":"OpenGL 3.2 and More","isSavedByCurrentUser":false,"pageCount":84,"score":0,"slideshowId":"2172343","sourceName":"li_interact","strippedTitle":"opengl-32-and-more","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gtc2009openglkilgard-091008215235-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Presented September 30, 2009 in San Jose, California at GPU Technology Conference.\n\nDescribes the new features of OpenGL 3.2 and NVIDIA's extensions beyond 3.2 such as bindless graphics, direct state access, separate shader objects, copy image, texture barrier, and Cg 2.2.","tags":["bindless graphics","direct3disms","cg"],"url":"https://www.slideshare.net/slideshow/opengl-32-and-more/2172343","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":54364},{"algorithmId":"21","displayTitle":"Modern OpenGL Usage: Using Vertex Buffer Objects Well ","isSavedByCurrentUser":false,"pageCount":19,"score":0,"slideshowId":"5337851","sourceName":"li_interact","strippedTitle":"using-vertex-bufferobjectswell","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/usingvertexbufferobjectswell-101001231340-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This tutorial explains how to use OpenGL vertex buffer objects (VBOs) well.\r\n\r\nWritten in September 2008.","tags":["immediate mode","opengl","vetex buffer objects"],"url":"https://www.slideshare.net/slideshow/using-vertex-bufferobjectswell/5337851","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":36691},{"algorithmId":"21","displayTitle":"OpenGL 4 for 2010","isSavedByCurrentUser":false,"pageCount":94,"score":0,"slideshowId":"4918124","sourceName":"li_interact","strippedTitle":"opengl-4-for-2010","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2010opengl4-100806183916-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"\"OpenGL 4 for 2010\" presented at NVIDIA Sponsored Session at SIGGRAPH 2010 in Los Angeles on July 28.\n\nBarthold Lichtenbelt \u0026 Mark Kilgard","tags":["geforce","tessellation","quadro"],"url":"https://www.slideshare.net/slideshow/opengl-4-for-2010/4918124","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":1251},{"algorithmId":"21","displayTitle":"Getting Started with NV_path_rendering","isSavedByCurrentUser":false,"pageCount":9,"score":0,"slideshowId":"9663939","sourceName":"li_interact","strippedTitle":"getting-started-with-nvpathrendering","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gettingstartedwithnvpathrendering-111012152239-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"In this tutorial, you will learn how to GPU-accelerate path rendering within your OpenGL program with NVIDIA's NV_path_rendering extension. This tutorial assumes you are familiar with OpenGL programming in general and how to use OpenGL extensions.","tags":["path rendering","opengl","nv_path_rendering"],"url":"https://www.slideshare.net/Mark_Kilgard/getting-started-with-nvpathrendering","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":784},{"algorithmId":"21","displayTitle":"CS 354 Blending, Compositing, Anti-aliasing","isSavedByCurrentUser":false,"pageCount":50,"score":0,"slideshowId":"11594607","sourceName":"li_interact","strippedTitle":"08blend","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/08blend-120215155211-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The document summarizes a lecture on blending, compositing, and anti-aliasing in computer graphics. It discusses how colors are combined during rendering using blending operations, and how compositing operates on entire images rather than individual pixels. Porter-Duff models for digital image compositing are explained, along with how they relate to OpenGL blending functions.","tags":["blending","porter-duff","compositing"],"url":"https://www.slideshare.net/slideshow/08blend/11594607","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":6666},{"algorithmId":"21","displayTitle":"Haskell Accelerate","isSavedByCurrentUser":false,"pageCount":27,"score":0,"slideshowId":"40381329","sourceName":"li_interact","strippedTitle":"haskell-accelerate","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/haskell-accelerate-141016234218-conversion-gate01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document provides an introduction and overview of GPU programming with Haskell using the Accelerate library. It discusses GPU architecture, when GPUs are suitable compared to CPUs, and demonstrates pricing financial options on a GPU using Accelerate. The document outlines the talk, introduces key GPU concepts, demonstrates basic Accelerate usage including arrays and computations, and provides references for further reading on GPU programming in Haskell.","tags":["haskell accelerate cuda gpgpu"],"url":"https://www.slideshare.net/sseveran/haskell-accelerate","userLogin":"sseveran","userName":"Steve Severance","viewCount":5991},{"algorithmId":"21","displayTitle":"Notes2StudyGST-160511","isSavedByCurrentUser":false,"pageCount":71,"score":0,"slideshowId":"61912830","sourceName":"li_interact","strippedTitle":"notes2studygst160511","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/1ff12b77-513b-4fb9-b811-b929bd8869e5-160511160255-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"1. The document summarizes the key steps taken by GStreamer when playing a media file using the playbin element. It initializes plugins and elements, creates the playbin pipeline, handles state changes, analyzes the stream to determine the decoder, and connects decoded pads to sinks.\n\n2. When playbin is launched with a URI, it loads required plugins, creates the playbin element, decodes the stream with uridecodebin and decodebin, and connects decoded elements like video and audio to playback sinks. It handles state changes and uses typefind to analyze the stream format. \n\n3. Decodebin emits signals as new pads are detected to determine the appropriate decoder element. It connects the decoded pad","tags":[],"url":"https://www.slideshare.net/slideshow/notes2studygst160511/61912830","userLogin":"xiaozhonghua","userName":"xiaozhong hua","viewCount":520},{"algorithmId":"21","displayTitle":"Gallium3D - Mesa's New Driver Model","isSavedByCurrentUser":false,"pageCount":28,"score":0,"slideshowId":"7410814","sourceName":"li_interact","strippedTitle":"gallium3d-mesas-new-driver-model","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/olv-gallium-3d-osdc-110328012029-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Gallium3D is Mesa's new driver model that addresses issues with the classic model. It separates driver responsibilities into reusable components: a state tracker handles APIs like OpenGL, a pipe driver abstracts the hardware, and a pipe winsys interfaces with the operating system. This makes drivers more portable and easier to develop while supporting multiple graphics APIs on a single hardware driver.","tags":["osdctw2011"],"url":"https://www.slideshare.net/slideshow/gallium3d-mesas-new-driver-model/7410814","userLogin":"olvaffe","userName":"Chia-I Wu","viewCount":4581},{"algorithmId":"21","displayTitle":"Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...","isSavedByCurrentUser":false,"pageCount":60,"score":0,"slideshowId":"52326637","sourceName":"li_interact","strippedTitle":"slides-accelerating-vector-graphics-rendering-using-the-graphics-hardware-pipeline-52326637","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/acceleratingvectorgraphicsrenderingusingtgraphicshardwarepipeline-150902072859-lva1-app6891-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Slides for SIGGRAPH paper presentation of \"Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline\".\r\n\r\nPresented by Vineet Batra (Adobe) on Thursday, August 13, 2015 at 2:00 pm - 3:30 pm, Los Angeles Convention Center, Room 150/151. ","tags":["siggraph","cmyk","nvidia"],"url":"https://www.slideshare.net/slideshow/slides-accelerating-vector-graphics-rendering-using-the-graphics-hardware-pipeline-52326637/52326637","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":2851},{"algorithmId":"21","displayTitle":"gtkgst video in your widgets!","isSavedByCurrentUser":false,"pageCount":20,"score":0,"slideshowId":"48128403","sourceName":"li_interact","strippedTitle":"gtkgst-video-in-your-widgets","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gtkgst-150514032657-lva1-app6891-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"A look into the current ways of displaying GStreamer videos in Gtk+ applications.\r\n\r\nPresented at GNOME Asia 2015","tags":["gnome","gtk","gstreamer"],"url":"https://www.slideshare.net/slideshow/gtkgst-video-in-your-widgets/48128403","userLogin":"ystreet00","userName":"ystreet00","viewCount":1449},{"algorithmId":"21","displayTitle":"[Harvard CS264] 03 - Introduction to GPU Computing, CUDA Basics","isSavedByCurrentUser":false,"pageCount":258,"score":0,"slideshowId":"6859031","sourceName":"li_interact","strippedTitle":"harvard-cs264-03-introduction-to-gpu-computing-cuda-basics","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/cs264201103-cudabasicsshare-110209024624-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"1. GPUs have many more cores than CPUs and are very good at processing large blocks of data in parallel. \n2. GPUs can provide a significant speedup over CPUs for applications that map well to a data-parallel programming model by harnessing the power of many cores. \n3. The throughput-oriented nature of GPUs makes them well-suited for algorithms where the same operation can be performed on many data elements independently.","tags":["computing","parallel","gpu"],"url":"https://www.slideshare.net/slideshow/harvard-cs264-03-introduction-to-gpu-computing-cuda-basics/6859031","userLogin":"npinto","userName":"npinto","viewCount":1971},{"algorithmId":"21","displayTitle":"SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond","isSavedByCurrentUser":false,"pageCount":95,"score":0,"slideshowId":"15469799","sourceName":"li_interact","strippedTitle":"siggraphasia2012opengl43andbeyond","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraphasia2012opengl43andbeyond-121203121150-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Location: Conference Hall K, Singapore EXPO\r\nDate: Thursday, November 29, 2012\r\nTime: 11:00 AM - 11:50 PM\u000b\r\nPresenter: Mark Kilgard (Principal Software Engineer, NVIDIA, Austin, Texas) \u000b\r\n\r\nAbstract: Attend this session to get the most out of OpenGL on NVIDIA Quadro and GeForce GPUs. Learn about the new features in OpenGL 4.3, particularly Compute Shaders. Other topics include bindless graphics; Linux improvements; and how to best use the modern OpenGL graphics pipeline. Learn how your application can benefit from NVIDIA's leadership driving OpenGL as a cross-platform, open industry standard.\r\n\r\nTopic Areas: Computer Graphics; Development Tools \u0026 Libraries; Visualization; Image and Video Processing\u000b\r\n\r\nLevel: Intermediate","tags":["opengl","compute shaders","siggrah asia"],"url":"https://www.slideshare.net/Mark_Kilgard/siggraphasia2012opengl43andbeyond","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":2925},{"algorithmId":"21","displayTitle":"Understaing Android EGL","isSavedByCurrentUser":false,"pageCount":50,"score":0,"slideshowId":"68896158","sourceName":"li_interact","strippedTitle":"understaing-android-egl","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/egl1-161114104521-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"EGL is an interface between Khronos rendering APIs (such as OpenGL and OpenGL ES) and the underlying native platform windowing system. It handles graphics context management, surface/buffer creation and binding, and rendering synchronization. EGL provides mechanisms for creating on-screen and off-screen rendering surfaces and graphics contexts that store OpenGL state. Key EGL functions include eglGetDisplay(), eglInitialize(), eglChooseConfig(), eglCreateWindowSurface(), and eglCreatePbufferSurface().","tags":["android","anatomy","aosp"],"url":"https://www.slideshare.net/slideshow/understaing-android-egl/68896158","userLogin":"SuhanLee2","userName":"Suhan Lee","viewCount":10389},{"algorithmId":"21","displayTitle":"GPU Computing","isSavedByCurrentUser":false,"pageCount":55,"score":0,"slideshowId":"6859310","sourceName":"li_interact","strippedTitle":"gpu-computing","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gpgpu-110209032556-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document discusses parallel computing on GPUs using OpenCL. It provides an overview of basics of parallel computing, a brief history of SIMD and MIMD architectures, and details of OpenCL. It then describes a case study of using OpenCL and OpenMP to perform a Monte Carlo study of a spring-mass system. The study models the system, uses the Euler method for numerical integration, develops SIMD approaches for GPUs, implements OpenMP, analyzes results and speedup, and provides conclusions on parallelization.","tags":[],"url":"https://www.slideshare.net/slideshow/gpu-computing/6859310","userLogin":"MultimediaLabWismar","userName":"Christian Kehl","viewCount":1476},{"algorithmId":"21","displayTitle":"Siggraph 2016 - Vulkan and nvidia : the essentials","isSavedByCurrentUser":false,"pageCount":73,"score":0,"slideshowId":"64446229","sourceName":"li_interact","strippedTitle":"siggraph-2016-vulkan-and-nvidia-the-essentials","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2016tlorachvulkanandnvidiatheessentials-160727173601-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Vulkan is a modern, low-level graphics API designed for high performance. It is closer to the hardware than OpenGL and allows for explicit control and management of resources. Vulkan is multi-threading friendly and supports parallel graphics and compute workloads. It has a large number of components that must be explicitly created, managed, and synchronized by the application compared to higher-level APIs. These include devices, queues, command buffers, pipelines, descriptors, and memory. NVIDIA provides full support for Vulkan capabilities on its GPUs.","tags":["gpu","glsl","nvidia"],"url":"https://www.slideshare.net/tlorach/siggraph-2016-vulkan-and-nvidia-the-essentials","userLogin":"tlorach","userName":"Tristan Lorach","viewCount":8352},{"algorithmId":"21","displayTitle":"CS 354 Introduction","isSavedByCurrentUser":false,"pageCount":43,"score":0,"slideshowId":"11137338","sourceName":"li_interact","strippedTitle":"cs-354-introduction","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/01intro-120118100327-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document provides an overview of the CS 354 Computer Graphics course taught by Mark Kilgard at the University of Texas. The key points are:\n\n- Mark Kilgard and Randall Smith will teach the course using lectures and programming assignments in OpenGL. \n\n- Grading will be based on tests, quizzes, homework assignments, and software projects implementing simple 3D graphics concepts in OpenGL.\n\n- Students will learn fundamental 3D graphics concepts like transformations, lighting, and shading by programming in OpenGL and GLSL shaders.\n\n- The goal is to teach practical graphics programming skills for applications like games, visualizations, and more.","tags":["graphics","cs354","opengl"],"url":"https://www.slideshare.net/slideshow/cs-354-introduction/11137338","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":3511}],"similarTo":[{"algorithmId":"3","displayTitle":"Porting the Source Engine to Linux: Valve's Lessons Learned","isSavedByCurrentUser":false,"pageCount":90,"score":0.5455,"slideshowId":"32722590","sourceName":"cm_text","strippedTitle":"porting-the-source-engine-to-linux-valves-lessons-learned","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/portingsourcetolinux-gdc-140325130333-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"These slides discuss the techniques applied to porting a large, commercial AAA engine from Windows to Linux. It includes the lessons learned along the way, and pitfalls we ran into to help serve as a warning to other developers.","tags":["linux","programming","porting"],"url":"https://www.slideshare.net/slideshow/porting-the-source-engine-to-linux-valves-lessons-learned/32722590","userLogin":"basisspace","userName":"basisspace","viewCount":2981},{"algorithmId":"3","displayTitle":"Advanced Graphics Workshop - GFX2011","isSavedByCurrentUser":false,"pageCount":80,"score":0.5315,"slideshowId":"10671567","sourceName":"cm_text","strippedTitle":"gfx2011-public","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gfx2011public-111222222304-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The document outlines the agenda for an Advanced Graphics Workshop being held by Texas Instruments. The workshop will include an introduction to graphics hardware architectures and the OpenGL rendering pipeline. It will provide a detailed walkthrough of the OpenGL ES 2.0 specification and APIs. Participants will work through several hands-on labs covering texturing, transformations, shaders and more. The goal is to help developers optimize graphics performance on embedded platforms.","tags":["graphics","gfx2011","opengl es"],"url":"https://www.slideshare.net/slideshow/gfx2011-public/10671567","userLogin":"prabindh","userName":"Prabindh Sundareson","viewCount":2396},{"algorithmId":"3","displayTitle":"Android native gl","isSavedByCurrentUser":false,"pageCount":25,"score":0.5171,"slideshowId":"48475502","sourceName":"cm_text","strippedTitle":"android-native-gl","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/androidnativegl-150522102800-lva1-app6892-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document discusses drawing 2D and 3D graphics with OpenGL ES 1.x and 2.x APIs in Android NDK. It covers drawing 2D shapes and applying transforms using OpenGL ES 1.x, including translating, scaling and rotating shapes. It also discusses the graphics rendering pipeline in OpenGL and differences between the fixed pipeline in OpenGL ES 1.x versus the programmable pipeline in OpenGL ES 2.0. The document provides code samples for drawing 2D triangles and squares in Android NDK and applying common transforms.","tags":[],"url":"https://www.slideshare.net/slideshow/android-native-gl/48475502","userLogin":"miguelwasabi","userName":"Miguel Angel Alcalde Velado","viewCount":817},{"algorithmId":"3","displayTitle":"State of GeoServer 2.10","isSavedByCurrentUser":false,"pageCount":65,"score":0.4985,"slideshowId":"69121192","sourceName":"cm_text","strippedTitle":"state-of-geoserver-210","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/stateofgeoserver2-161116231530-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"- GeoServer is an open source Java web application for sharing geospatial data. It publishes data from any major spatial data source using open standards like WMS, WFS, WCS, and WPS. \n- The GeoServer team has 13 releases in 2016 with a focus on maintenance and technical debt. New features include improved raster data support, styling enhancements, and configuration changes. \n- Looking ahead, focus areas include vector data improvements, raster optimizations, maintenance, and improving support for newer Java versions and standards.","tags":["geoserver","locationtech","osgeo"],"url":"https://www.slideshare.net/slideshow/state-of-geoserver-210/69121192","userLogin":"jgarnett","userName":"Jody Garnett","viewCount":765},{"algorithmId":"3","displayTitle":"State of GeoServer - FOSS4G 2016","isSavedByCurrentUser":false,"pageCount":71,"score":0.4973,"slideshowId":"65473727","sourceName":"cm_text","strippedTitle":"state-of-geoserver-foss4g-2016","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/stateofgeoserver-160829160743-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"State of GeoServer provides an update on our community and reviews the new and noteworthy features for the Project. The community keeps an aggressive six month release cycle with GeoServer 2.8 and 2.9 being released this year.\r\n\r\nEach releases bring together exciting new features. This year a lot of work has been done on the user interface, clustering, security and compatibility with the latest Java platform. We will also take a look at community research into vector tiles, multi-resolution raster support and more.\r\n\r\nAttend this talk for a cheerful update on what is happening with this popular OSGeo project. Whether you are an expert user, a developer, or simply curious what these projects can do for you, this talk is for you.","tags":["geoserver"],"url":"https://www.slideshare.net/slideshow/state-of-geoserver-foss4g-2016/65473727","userLogin":"geosolutions","userName":"GeoSolutions","viewCount":20489},{"algorithmId":"3","displayTitle":"13th kandroid OpenGL and EGL","isSavedByCurrentUser":false,"pageCount":41,"score":0.4936,"slideshowId":"33729751","sourceName":"cm_text","strippedTitle":"13th-kandroid-opengl-and-egl","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/13thkandroidopenglandegl-140420083247-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document provides information about OpenGL and EGL. It discusses OpenGL concepts like the rendering pipeline, shaders, and GLSL. It explains how to use OpenGL and GLSL on Android, including initializing, creating shaders, and rendering. It also covers EGL and how it acts as an interface between OpenGL and the native platform. It describes EGL objects like displays, surfaces, and contexts. It provides examples of basic EGL usage and lists EGL APIs for initializing, configuring, and managing graphics resources.","tags":["egl","opengles","opengl"],"url":"https://www.slideshare.net/slideshow/13th-kandroid-opengl-and-egl/33729751","userLogin":"namjungsoo","userName":"Jungsoo Nam","viewCount":3461},{"algorithmId":"3","displayTitle":"Regal","isSavedByCurrentUser":false,"pageCount":7,"score":0.4934,"slideshowId":"13870512","sourceName":"cm_text","strippedTitle":"regal-tlf","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/regaltlf-120804085632-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Regal is an open source library that provides a consistent OpenGL API across platforms through emulation to enable portability of OpenGL code, it aims to make OpenGL development easier through debugging tools and it supports modern and legacy OpenGL features through emulation where needed.","tags":["texas linux fest","regal","nvidia"],"url":"https://www.slideshare.net/slideshow/regal-tlf/13870512","userLogin":"nigelstewart1","userName":"Nigel Stewart","viewCount":2236},{"algorithmId":"3","displayTitle":"Angel","isSavedByCurrentUser":false,"pageCount":136,"score":0.4913,"slideshowId":"23286025","sourceName":"cm_text","strippedTitle":"angel-23286025","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/angel-130621092751-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document provides an introduction to modern OpenGL programming. It summarizes that OpenGL is a library for 3D computer graphics that renders geometric objects and images. It discusses that modern OpenGL applications are shader-based, concentrating on OpenGL 4.1. It outlines the main components of the OpenGL graphics pipeline including vertex and fragment shaders. It also summarizes the key steps for rendering objects in OpenGL.","tags":[],"url":"https://www.slideshare.net/slideshow/angel-23286025/23286025","userLogin":"Aerent","userName":"Chong Zhang","viewCount":776},{"algorithmId":"3","displayTitle":"Gdc 14 bringing unreal engine 4 to open_gl","isSavedByCurrentUser":false,"pageCount":38,"score":0.4896,"slideshowId":"36943696","sourceName":"cm_text","strippedTitle":"gdc-14-bringing-unreal-engine-4-to-opengl","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gdc14bringingunrealengine4toopengl1-140714030002-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document discusses bringing Unreal Engine 4 to OpenGL by porting its render hardware interface (RHI) to support OpenGL. It describes mapping the D3D11-based RHI to OpenGL, developing a cross-compiler to compile HLSL shaders to GLSL, addressing differences between D3D and OpenGL like texture coordinate systems, and optimizations to achieve performance parity with D3D11. It also covers bringing UE4 to Android by leveraging an NVIDIA Tegra K1 mobile chip's full OpenGL 4.4 support.","tags":[],"url":"https://www.slideshare.net/slideshow/gdc-14-bringing-unreal-engine-4-to-opengl/36943696","userLogin":"cagetu","userName":"changehee lee","viewCount":2878},{"algorithmId":"3","displayTitle":"Opengl basics","isSavedByCurrentUser":false,"pageCount":46,"score":0.4806,"slideshowId":"24488966","sourceName":"cm_text","strippedTitle":"opengl-basics-24488966","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/openglbasics-130722042658-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"OpenGL is a standard graphics library used to render 2D and 3D graphics. It provides basic drawing primitives like points, lines, and polygons. OpenGL follows a graphics pipeline where commands are processed through various stages including transformations, rasterization, and finally writing to the framebuffer. Programmers use OpenGL by issuing commands to specify geometry and settings, which are then rendered to the screen independent of hardware.","tags":[],"url":"https://www.slideshare.net/slideshow/opengl-basics-24488966/24488966","userLogin":"pushsriramsanjay","userName":"pushpa latha","viewCount":2326},{"algorithmId":"3","displayTitle":"LMG Lightning Talks - SFO17-205","isSavedByCurrentUser":false,"pageCount":38,"score":0.4788,"slideshowId":"80708018","sourceName":"cm_text","strippedTitle":"lmg-lightning-talks-sfo17205","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/sfo17-205lmglightningtalks-171011183301-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Session ID: SFO17-205\r\nSession Name: LMG Lightning Talks - SFO17-205\r\nSpeaker: Sam Protsenko - Amit Pundir - Bero Rosenkränzer \r\nTrack: LMG\r\n\r\n\r\n★ Session Summary ★\r\nAn update of various LMG activities since last Connect, including:\r\n - LLCT efforts\r\n - Arm64 Hibernate backport effort - learnings\r\n - uBoot upstreaming learnings\r\n - Zstd compression effort\r\n - Native aarch64 hosted builds for Android\r\n---------------------------------------------------\r\n★ Resources ★\r\nEvent Page: http://connect.linaro.org/resource/sfo17/sfo17-205/\r\nPresentation: ?\r\nVideo: https://www.youtube.com/watch?v=Zv7Uo2QXK4E\r\n ---------------------------------------------------\r\n\r\n★ Event Details ★\r\nLinaro Connect San Francisco 2017 (SFO17)\r\n25-29 September 2017\r\nHyatt Regency San Francisco Airport\r\n\r\n---------------------------------------------------\r\nKeyword: \r\n'http://www.linaro.org'\r\n'http://connect.linaro.org'\r\n---------------------------------------------------\r\nFollow us on Social Media\r\nhttps://www.facebook.com/LinaroOrg\r\nhttps://twitter.com/linaroorg\r\nhttps://www.youtube.com/user/linaroorg?sub_confirmation=1\r\nhttps://www.linkedin.com/company/1026961","tags":[],"url":"https://www.slideshare.net/slideshow/lmg-lightning-talks-sfo17205/80708018","userLogin":"linaroorg","userName":"Linaro","viewCount":310},{"algorithmId":"3","displayTitle":"How to Use OpenGL/ES on Native Activity","isSavedByCurrentUser":false,"pageCount":39,"score":0.4783,"slideshowId":"29609461","sourceName":"cm_text","strippedTitle":"how-to-use-opengles-on-native-activity","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/lecture06web-140101081504-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"What’s OpenGL?\r\nKind of OpenGL\r\nVertions\r\nHello 3D World\r\nWorld\r\nPolygon\r\nProjection\r\nLighting\r\nTexture\r\nHands on\r\nUse OpenGL/ES 2.0\r\nShader Programming\r\n","tags":["opengles","native activity","shader programming"],"url":"https://www.slideshare.net/slideshow/how-to-use-opengles-on-native-activity/29609461","userLogin":"noritsuna","userName":"Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)","viewCount":3384},{"algorithmId":"3","displayTitle":"OpenGL Shading Language","isSavedByCurrentUser":false,"pageCount":41,"score":0.4775,"slideshowId":"29927838","sourceName":"cm_text","strippedTitle":"opengl-shading-language","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/openglshadinglanguage-140112085621-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"OpenGL Shading Language\r\nOpenGL History and Features\r\nGLSL\r\nVertex Shader\r\nFragment Shader\r\nCompute Shader\r\nGeometry Shader","tags":["glsl","opengl","opengles"],"url":"https://www.slideshare.net/slideshow/opengl-shading-language/29927838","userLogin":"namjungsoo","userName":"Jungsoo Nam","viewCount":6033},{"algorithmId":"3","displayTitle":"IE WebGL and Babylon.js (Web3D 2014)","isSavedByCurrentUser":false,"pageCount":24,"score":0.4749,"slideshowId":"37888320","sourceName":"cm_text","strippedTitle":"ie-webgl-and-babylonjs-web3d-2014","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/iewebglandbabylon-140811162942-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"WebGL is now supported in Internet Explorer 11 through DirectX integration. The implementation involved translating OpenGL ES Shader Language (GLSL) to High-Level Shader Language (HLSL) by parsing, verifying, and transforming GLSL code. Issues around vector and selection operators required non-trivial solutions. The implementation provides robust buffer validation for security and improved performance. Upcoming updates will add additional WebGL features and continue improving conformance. Babylon.js is a JavaScript library that makes WebGL development easier through tools like a playground, shader editor, and asset creation support.","tags":["ie","babylonjs","webgl"],"url":"https://www.slideshare.net/slideshow/ie-webgl-and-babylonjs-web3d-2014/37888320","userLogin":"davidcatuhe","userName":"David Catuhe","viewCount":2006},{"algorithmId":"3","displayTitle":"CS 354 Programmable Shading","isSavedByCurrentUser":false,"pageCount":56,"score":0.4695,"slideshowId":"11821194","sourceName":"cm_text","strippedTitle":"13shading","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/13shading-120301133206-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes a lecture on programmable shading given by Mark Kilgard at the University of Texas on March 1, 2012. The lecture covers programmable shading in graphics hardware using shading languages like Cg, HLSL, and GLSL. It discusses how shaders allow programming of vertex, geometry, and fragment processors inside the GPU. Examples of complex shaders are shown. The evolution of shading languages from low-level to high-level is discussed.","tags":["shading","glsl","cg"],"url":"https://www.slideshare.net/slideshow/13shading/11821194","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":2824},{"algorithmId":"3","displayTitle":"Open GL ES Android","isSavedByCurrentUser":false,"pageCount":82,"score":0.4671,"slideshowId":"125498171","sourceName":"cm_text","strippedTitle":"open-gl-es-android","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/openglesandroid-181210074922-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The document discusses OpenGL ES and graphics rendering in Android. It explains the OpenGL family including OpenGL, OpenGL ES, and WebGL. It describes how graphics are rendered in Android using a PhoneWindow, DecorView, SurfaceView, and GLSurfaceView. It provides an example of setting up OpenGL ES 3.1 rendering in Android using GLSurfaceView and discusses key classes and concepts like the renderer, surface, and drawing commands.","tags":["opengl es","android"],"url":"https://www.slideshare.net/slideshow/open-gl-es-android/125498171","userLogin":"MindosCheng","userName":"Mindos Cheng","viewCount":535},{"algorithmId":"3","displayTitle":"SIGGRAPH Asia 2008 Modern OpenGL","isSavedByCurrentUser":false,"pageCount":206,"score":0.4666,"slideshowId":"905245","sourceName":"cm_text","strippedTitle":"sigraph-asia-2008-modern-opengl-presentation","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/sa2008modernopengl-1231549184153966-1-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"A long-time implementer of OpenGL (Mark Kilgard, NVIDIA) and the system's original architect (Kurt Akeley, Microsoft) explain OpenGL's design and evolution. OpenGL's state machine is now a complex data-flow with multiple programmable stages. OpenGL practitioners can expect candid design explanations, advice for programming modern GPUs, and insight into OpenGL's future. \r\n\r\nThese slides were presented at SIGGRAPH Asia 2008 for the \"Modern OpenGL: Its Design and Evolution\" course.\r\n\r\nCourse abstract: OpenGL was conceived in 1991 to provide an industry standard for programming the hardware graphics pipeline. The original design has evolved considerably over the last 17 years. Whereas capabilities mandated by OpenGL such as texture mapping and a stencil buffer were present only on the world's most expensive graphics hardware back in 1991, now these features are completely pervasive in PCs and now even available in several hand-held devices. Over that time, OpenGL's original fixed-function state machine has evolved into a complex data-flow including several application-programmable stages. And the performance of OpenGL has increased from 100x to over 1,000x in many important raw graphics operations.\r\n\r\nIn this course, a long-time implementer of OpenGL and the system's original architect explain OpenGL's design and evolution.\r\n\r\nYou will learn how the modern (post-2006) graphics hardware pipeline is exposed through OpenGL. You will hear Kurt Akeley's personal retrospective on OpenGL's development. You will learn nine ways to write better OpenGL programs. You will learn how modern OpenGL implementations operate. Finally we discuss OpenGL's future evolution.\r\n\r\nWhether you program with OpenGL or program with another API such as Direct3D, this course will give you new insights into graphics hardware architecture, programmable shading, and how to best take advantage of modern GPUs.","tags":["gpu","opengl","kilgard"],"url":"https://www.slideshare.net/slideshow/sigraph-asia-2008-modern-opengl-presentation/905245","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":147520},{"algorithmId":"3","displayTitle":"Adopting Debug Adapter Protocol in Eclipse IDE: netcoredbg (.NET debugger) ca...","isSavedByCurrentUser":false,"pageCount":27,"score":0.4664,"slideshowId":"120566308","sourceName":"cm_text","strippedTitle":"adopting-debug-adapter-protocol-in-eclipse-ide-netcoredbg-net-debugger-case-study-eclipsecon-europe-2918","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/dap-181024135740-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"\r\n\r\nWhile the Language Server Protocol (LSP) has quickly become an industry standard in the devtools domain and Eclipse IDE promptly got support for it with the Eclipse LSP4J and LSP4E projects, LSP is only targetting the code edition activity. However, code edition is just one activity amongst others for a developer, and some would argue that it's not the main use-case that justifies usage of an IDE over a simple text editor.\r\n\r\nOne of the most important activity (where IDEs are usually better than other tools) for a developer is debugging: watching a program run, digging hints of what could be wrong, experimenting things against the running application... Similarly to the Language Server Protocol, as part of Visual Studio Code, a JSON-based language and tool agnostic protocol was created to support typical debug interactions and facilitate the binding of a devtool with a debugger. Eclipse LSP4J and LSP4E enabled in early 2018 support for this Debug Adapter Protocol in Eclipse IDE.\r\n\r\nEclipse aCute, providing an IDE for C# and .NET Core, managed to use this Debug Adapter Protocol and the existing integrations with Eclipse IDE to relatively easily and quickly integrate support for netcoredbg, an open-source debugger for .NET Core.\r\n\r\nIn this presentation, we'll explain how the Debug Adapter Protocol works, how LSP4J can be used to support it in any Java application (either a debugger or a client), how LSP4E can be used to support it out-of-the-box in Eclipse IDE, and we'll use aCute example to show how plugin providers can extend LSP4E and provide the final steps of a good and simple UX.\r\n","tags":["eclipse","debug","dap"],"url":"https://www.slideshare.net/slideshow/adopting-debug-adapter-protocol-in-eclipse-ide-netcoredbg-net-debugger-case-study-eclipsecon-europe-2918/120566308","userLogin":"mickaelistria","userName":"Mickael Istria","viewCount":1149},{"algorithmId":"3","displayTitle":"Computer Graphics - Lecture 01 - 3D Programming I","isSavedByCurrentUser":false,"pageCount":57,"score":0.4659,"slideshowId":"77206724","sourceName":"cm_text","strippedTitle":"computer-graphics-lecture-01-3d-programming-i","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/013dproganton-170623132654-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":" Here are a few key points about adding vertex colors to the example:\n\n- Storing the color data in a separate buffer is cleaner than concatenating or interleaving it with the position data. This keeps the data layout simple.\n\n- The vertex shader now has inputs for both the position (vp) and color (vc) attributes. \n\n- The color is passed through as an output (fcolour) to the fragment shader. \n\n- The position is still used to set gl_Position for transformation.\n\n- The color input has to start in the vertex shader because that is where per-vertex attributes like color are interpolated across the primitive before being sampled in the fragment shader. The vertex shader interpolates the color value","tags":["opengl","computer graphics","3d programming"],"url":"https://www.slideshare.net/slideshow/computer-graphics-lecture-01-3d-programming-i/77206724","userLogin":"AntonGerdelan","userName":"💻 Anton Gerdelan","viewCount":618},{"algorithmId":"3","displayTitle":"UNIT 1 OPENGL_UPDATED .pptx","isSavedByCurrentUser":false,"pageCount":95,"score":0.4648,"slideshowId":"273361452","sourceName":"cm_text","strippedTitle":"unit-1-opengl_updated-pptx","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/unit1openglupdated-241116171657-b43167b9-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Open gl ppt","tags":["#opengl","computer graphics"],"url":"https://www.slideshare.net/slideshow/unit-1-opengl_updated-pptx/273361452","userLogin":"miteshchaudhari4466","userName":"miteshchaudhari4466","viewCount":8}],"moreFromUser":[{"algorithmId":"","displayTitle":"D11: a high-performance, protocol-optional, transport-optional, window system...","isSavedByCurrentUser":false,"pageCount":17,"score":0,"slideshowId":"80514649","sourceName":"MORE_FROM_USER","strippedTitle":"d11-a-highperformance-protocoloptional-transportoptional-window-system-with-x11-compatibility-and-semantics","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/d11-171005235227-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Consider the dual pressures toward a more tightly integrated workstation window system: 1) the need to efficiently handle high bandwidth services such as video, audio, and three-dimensional graphics; and 2) the desire to achieve the under-realized potential for local window system performance in X11.\r\n\r\nThis paper proposes a new window system architecture called D11 that seeks higher performance while preserving compatibility with the industry-standard X11 window system. D11 reinvents the X11 client/server architecture using a new operating system facility similar in concept to the Unix kernel's traditional implementation but designed for user-level execution. This new architecture allows local D11 programs to execute within the D11 window system kernel without compromising the window sytem's integrity. This scheme minimizes context switching, eliminates protocol packing and unpacking, and greatly reduces data copying. D11 programs fall back to the X11 protocol when running remote or connecting to an X11 server. A special D11 program acts as an X11 protocol translator to allow X11 programs to utilize a D11 window system.\r\n\r\n[The described system was never implemented.]","tags":["x11","window system","compatibility"],"url":"https://www.slideshare.net/Mark_Kilgard/d11-a-highperformance-protocoloptional-transportoptional-window-system-with-x11-compatibility-and-semantics","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":3736},{"algorithmId":"","displayTitle":"Computers, Graphics, Engineering, Math, and Video Games for High School Students","isSavedByCurrentUser":false,"pageCount":51,"score":0,"slideshowId":"80514276","sourceName":"MORE_FROM_USER","strippedTitle":"computers-graphics-engineering-math-and-video-games-for-high-school-students","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/waldorf-171005232839-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document provides an overview of computer graphics and how it is used in video games. It discusses how graphics have progressed over time from 1995 to 2017, allowing for more complex characters like Laura Croft. It then explains some of the core concepts in computer graphics like geometry, modeling color, lighting, texturing, and motion blur. It discusses how graphics processing units (GPUs) work and how programming units within the GPU can simulate realistic lighting, shadows, and other effects to generate interactive 3D graphics in real-time.","tags":["graphics","high school","mathematization"],"url":"https://www.slideshare.net/slideshow/computers-graphics-engineering-math-and-video-games-for-high-school-students/80514276","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":1313},{"algorithmId":"","displayTitle":"Virtual Reality Features of NVIDIA GPUs","isSavedByCurrentUser":false,"pageCount":42,"score":0,"slideshowId":"66696076","sourceName":"MORE_FROM_USER","strippedTitle":"virtual-reality-features-of-nvidia-gpus","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/rmo1efmlsfydtzqucqfu-signature-60ceb71855980e1ef4861025dc34739cee3a9c22ac631289e9dbcf3936c7c40f-poli-161004030041-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes virtual reality rendering features of NVIDIA Pascal GPUs. It discusses how Pascal supports efficient single-pass stereo rendering by generating left and right eye views in one rendering pass. It also describes how Pascal implements lens matched shading to better match the rendered images to an HMD lens, reducing pixel resampling. Finally, it notes Pascal's use of window rectangle testing to discard pixels that fall outside the lens region, improving performance.","tags":["opengl","gpu","pascal"],"url":"https://www.slideshare.net/slideshow/virtual-reality-features-of-nvidia-gpus/66696076","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":1664},{"algorithmId":"","displayTitle":"EXT_window_rectangles","isSavedByCurrentUser":false,"pageCount":26,"score":0,"slideshowId":"62920099","sourceName":"MORE_FROM_USER","strippedTitle":"extwindowrectangles","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/extwindowrectangles-160610055928-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"EXT_window_rectangles extends OpenGL with a new per-fragment test called the \"window rectangles test\" for use with FBOs that provides 8 or more inclusive or exclusive rectangles for rasterized fragments. Applications of this functionality include web browsers and virtual reality.","tags":["nvidia","skia","opengl"],"url":"https://www.slideshare.net/Mark_Kilgard/extwindowrectangles","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":3578},{"algorithmId":"","displayTitle":"Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline","isSavedByCurrentUser":false,"pageCount":15,"score":0,"slideshowId":"50067217","sourceName":"MORE_FROM_USER","strippedTitle":"accelerating-vectorgraphicsrenderingusingthegraphicshardwarepipeline","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/acceleratingvectorgraphicsrenderingusingthegraphicshardwarepipeline-150701204115-lva1-app6892-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"SIGGRAPH 2015 paper.\r\n\r\nWe describe our successful initiative to accelerate Adobe Illustrator with the graphics hardware pipeline of modern GPUs. Relying on OpenGL 4.4 plus recent OpenGL extensions for advanced blend modes and first-class GPU-accelerated path rendering, we accelerate the Adobe Graphics Model (AGM) layer responsible for rendering sophisticated Illustrator scenes. Illustrator documents render in either an RGB or CMYK color mode. While GPUs are designed and optimized for RGB rendering, we orchestrate OpenGL rendering of vector content in the proper CMYK color space and accommodate the 5+ color components required. We support both non-isolated and isolated transparency groups, knockout, patterns, and arbitrary path clipping. We harness GPU tessellation to shade paths smoothly with gradient meshes. We do all this and render complex Illustrator scenes 2 to 6x faster than CPU rendering at Full HD resolutions; and 5 to 16x faster at Ultra HD resolutions.","tags":["nv_path_rendering","illustrator","gpu"],"url":"https://www.slideshare.net/slideshow/accelerating-vectorgraphicsrenderingusingthegraphicshardwarepipeline/50067217","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":8920},{"algorithmId":"","displayTitle":"NV_path rendering Functional Improvements","isSavedByCurrentUser":false,"pageCount":47,"score":0,"slideshowId":"38159697","sourceName":"MORE_FROM_USER","strippedTitle":"nv-path-renderingfunctionalimprovements","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/nvpathrenderingfunctionalimprovements-140820003312-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"NV_path_rendering is an OpenGL extension for GPU-accelerated path rendering. Recent functionality improvements provide better performance, better typography, rounded rectangles, conics, and OpenGL ES support. This functionality is available today with NVIDIA's 337.88 drivers.\r\n\r\nThe latest NV_path_rendering specification documents these new functional improvements:\r\n\r\n https://www.opengl.org/registry/specs/NV/path_rendering.txt\r\n\r\nYou can find sample code here:\r\n\r\n https://github.com/markkilgard/NVprSDK","tags":["harfbuzz","freetype","conics"],"url":"https://www.slideshare.net/slideshow/nv-path-renderingfunctionalimprovements/38159697","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":4132},{"algorithmId":"","displayTitle":"SIGGRAPH Asia 2012: GPU-accelerated Path Rendering","isSavedByCurrentUser":false,"pageCount":56,"score":0,"slideshowId":"15469863","sourceName":"MORE_FROM_USER","strippedTitle":"siggraphasia2012gpuacceleratedpathrendering","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraphasia2012gpu-acceleratedpathrendering-121203121613-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Presented at SIGGRAPH Asia 2012 in Singapore on Friday, 30 November 14:15 - 16:00 during the \"Points and Vectors\" session.\r\n\r\nFind the paper at http://developer.nvidia.com/game/gpu-accelerated-path-rendering or on Slideshare.\r\n\r\nFor thirty years, resolution-independent 2D standards (e.g. PostScript, SVG) have relied largely on CPU-based algorithms for the filling and stroking of paths. Learn about our approach to accelerate path rendering with our GPU-based \"Stencil, then Cover\" programming interface. We've built and productized our OpenGL-based system.","tags":["gpu","siggraph asia","nvidia"],"url":"https://www.slideshare.net/slideshow/siggraphasia2012gpuacceleratedpathrendering/15469863","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":3033},{"algorithmId":"","displayTitle":"Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...","isSavedByCurrentUser":false,"pageCount":7,"score":0,"slideshowId":"15293367","sourceName":"MORE_FROM_USER","strippedTitle":"nvpr-annex","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/nvprannex-121122010149-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document provides an overview of the programming interface for NV path rendering, an OpenGL extension for accelerating vector graphics on GPUs. It describes the supported path commands, which are designed to match all major path standards. Paths can be specified explicitly from commands and coordinates, from path strings using grammars like SVG or PostScript, or by generating paths from font glyphs. Additional functions allow copying, interpolating, weighting, or transforming existing path objects.","tags":["nv_path_rendering"],"url":"https://www.slideshare.net/slideshow/nvpr-annex/15293367","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":1795},{"algorithmId":"","displayTitle":"GPU accelerated path rendering fastforward","isSavedByCurrentUser":false,"pageCount":17,"score":0,"slideshowId":"15292298","sourceName":"MORE_FROM_USER","strippedTitle":"gpu-accelerated-path-rendering-fastforward","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gpuacceleratedpathrenderingfastforward-121121225546-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"GPUs can accelerate 2D graphics like resolution-independent web content and complex path rendering. A presentation at SIGGRAPH Asia 2012 showed how GPUs can now render overwhelmingly complex 2D scenes in real-time that were shown last year, using a \"Stencil, then Cover\" approach. Their GPU-accelerated path rendering is available today.","tags":[],"url":"https://www.slideshare.net/slideshow/gpu-accelerated-path-rendering-fastforward/15292298","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":1237},{"algorithmId":"","displayTitle":"GPU-accelerated Path Rendering","isSavedByCurrentUser":false,"pageCount":10,"score":0,"slideshowId":"14300385","sourceName":"MORE_FROM_USER","strippedTitle":"gpuaccelerated-path-rendering","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gpupathrender-120915154018-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Preprint for SIGGRAPH Asia 2012\r\n\r\nCopyright ACM, 2012\r\n\r\nFor thirty years, resolution-independent 2D standards (e.g. PostScript,\r\nSVG) have depended on CPU-based algorithms for the filling and\r\nstroking of paths. However advances in graphics hardware have largely\r\nignored the problem of accelerating resolution-independent 2D graphics\r\nrendered from paths.\r\n\r\nOur work builds on prior work to re-factor the path rendering task\r\nto leverage existing capabilities of modern pipelined and massively\r\nparallel GPUs. We introduce a two-step “Stencil, then Cover” (StC)\r\nparadigm that explicitly decouples path rendering into one GPU\r\nstep to determine a path’s filled or stenciled coverage and a second\r\nstep to rasterize conservative geometry intended to test and reset the\r\ncoverage determinations of the first step while shading color samples\r\nwithin the path. Our goals are completeness, correctness, quality, and\r\nperformance—but we go further to unify path rendering with OpenGL’s\r\nestablished 3D rendering pipeline. We have built and productized our\r\napproach to accelerate path rendering as an OpenGL extension.","tags":["path rendering","vector graphics","stencil buffer"],"url":"https://www.slideshare.net/slideshow/gpuaccelerated-path-rendering/14300385","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":3891},{"algorithmId":"","displayTitle":"SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering","isSavedByCurrentUser":false,"pageCount":79,"score":0,"slideshowId":"14020622","sourceName":"MORE_FROM_USER","strippedTitle":"siggraph-2012-gpuaccelerated-2d-and-web-rendering","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2012gpuacceleratedpathrendering-120820121254-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Video replay: http://nvidia.fullviewmedia.com/siggraph2012/ondemand/SS106.html\r\n\r\nLocation: West Hall Meeting Room 503, Los Angeles Convention Center\r\nDate: Wednesday, August 8, 2012\r\nTime: 2:40 PM – 3:40 PM\u000b\r\n\r\nThe future of GPU-based visual computing integrates the web, resolution-independent 2D graphics, and 3D to maximize interactivity and quality while minimizing consumed power. See what NVIDIA is doing today to accelerate resolution-independent 2D graphics for web content. This presentation explains NVIDIA's unique \"stencil, then cover\" approach to accelerating path rendering with OpenGL and demonstrates the wide variety of web content that can be accelerated with this approach.\u000b\r\n\r\nMore information: http://developer.nvidia.com/nv-path-rendering","tags":["svg","path rendering","opengl"],"url":"https://www.slideshare.net/slideshow/siggraph-2012-gpuaccelerated-2d-and-web-rendering/14020622","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":2848},{"algorithmId":"","displayTitle":"GTC 2012: GPU-Accelerated Path Rendering\u000b\u000b","isSavedByCurrentUser":false,"pageCount":76,"score":0,"slideshowId":"13053296","sourceName":"MORE_FROM_USER","strippedTitle":"gtc-2012-gpuacceleratedpathrendering","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gtc2012gpuacceleratedpathrendering-120523224248-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Presented at the GPU Technology Conference 2012 in San Jose, California.\r\n\r\nTuesday, May 15, 2012.\r\n\r\nStandards such as Scalable Vector Graphics (SVG), PostScript, TrueType outline fonts, and immersive web content such as Flash depend on a resolution-independent 2D rendering paradigm that GPUs have not traditionally accelerated. This tutorial explains a new opportunity to greatly accelerate vector graphics, path rendering, and immersive web standards using the GPU. By attending, you will learn how to write OpenGL applications that accelerate the full range of path rendering functionality. Not only will you learn how to render sophisticated 2D graphics with OpenGL, you will learn to mix such resolution-independent 2D rendering with 3D rendering and do so at dynamic, real-time rates. \u000b","tags":["gtc","nvidia","path rendering"],"url":"https://www.slideshare.net/slideshow/gtc-2012-gpuacceleratedpathrendering/13053296","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":2001},{"algorithmId":"","displayTitle":"GTC 2012: NVIDIA OpenGL in 2012","isSavedByCurrentUser":false,"pageCount":81,"score":0,"slideshowId":"13053282","sourceName":"MORE_FROM_USER","strippedTitle":"gtc-2012-nvidiaopenglfor2012","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/gtc2012nvidiaopenglfor2012-120523224007-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Presented at the GPU Technology Conference 2012 in San Jose, California.\r\n\r\nMonday, May 14, 2012.\r\n\r\nAttend this session to get the most out of OpenGL on NVIDIA Quadro and GeForce GPUs. Topics covered include the latest advances available for Cg 3.1, the OpenGL Shading Language (GLSL); programmable tessellation; improved support for Direct3D conventions; integration with Direct3D and CUDA resources; bindless graphics; and more. When you utilize the latest OpenGL innovations from NVIDIA in your graphics applications, you benefit from NVIDIA's leadership driving OpenGL as a cross-platform, open industry standard. \u000b","tags":["nvidia","kepler","opengl"],"url":"https://www.slideshare.net/slideshow/gtc-2012-nvidiaopenglfor2012/13053282","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":4478},{"algorithmId":"","displayTitle":"CS 354 Final Exam Review","isSavedByCurrentUser":false,"pageCount":44,"score":0,"slideshowId":"12788689","sourceName":"MORE_FROM_USER","strippedTitle":"29review","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/29review-120503120057-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document provides a review for the final exam in CS 354. It includes:\n\n1) A daily quiz covering surfaces and programmable tessellation from lecture. \n\n2) An overview of topics to be covered on the final exam including fundamentals of computer graphics, practical graphics programming, and content from projects and lectures. \n\n3) Details on the format of the final exam including open notes and textbooks, calculators being allowed, and a prohibition on electronics. The exam will be cumulative and cover all course material.\n\n4) Examples of potential exam questions covering topics like Bezier curves, subdivision surfaces, ray tracing intersections, and the rendering equation that students should review and understand.","tags":["final exam"],"url":"https://www.slideshare.net/Mark_Kilgard/29review","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":2216},{"algorithmId":"","displayTitle":"CS 354 Surfaces, Programmable Tessellation, and NPR Graphics","isSavedByCurrentUser":false,"pageCount":61,"score":0,"slideshowId":"12780419","sourceName":"MORE_FROM_USER","strippedTitle":"28surfaces","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/28surfaces-120502221858-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The document discusses a CS 354 class lecture on surfaces, programmable tessellation, and non-photorealistic rendering. The lecture will cover surfaces and how they are modeled using patches like triangular and quadrilateral patches. It will also cover programmable tessellation, which allows for adaptive level-of-detail and displacement mapping on the GPU. The lecture concludes with information on tools that allow authoring of 3D tessellation content and a comparison of OpenGL specifications that added support for programmable tessellation.","tags":["programmable tessellation","surfaces"],"url":"https://www.slideshare.net/Mark_Kilgard/28surfaces","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":4331},{"algorithmId":"","displayTitle":"CS 354 Performance Analysis","isSavedByCurrentUser":false,"pageCount":44,"score":0,"slideshowId":"12706318","sourceName":"MORE_FROM_USER","strippedTitle":"27perfanalysis","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/27perfanalysis-120426145209-phpapp01-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document contains notes from a CS 354 Performance Analysis lecture on April 26, 2012. It discusses topics including an in-class quiz, the lecturer's office hours, an upcoming project deadline, and the day's lecture on graphics performance analysis using concepts like Amdahl's law, Gustafson's law, and modeling pipeline efficiency. It also provides examples and diagrams related to graphics hardware architecture.","tags":["pipeline","parallelism","amdahl's law"],"url":"https://www.slideshare.net/slideshow/27perfanalysis/12706318","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":1247},{"algorithmId":"","displayTitle":"CS 354 Acceleration Structures","isSavedByCurrentUser":false,"pageCount":44,"score":0,"slideshowId":"12673694","sourceName":"MORE_FROM_USER","strippedTitle":"26accelstruct","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/26accelstruct-120424133345-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes a class on acceleration structures for ray tracing. It discusses building bounding volume hierarchies and using them to accelerate ray intersection tests. Uniform grids, kd-trees, and binary space partitioning trees are covered as approaches for spatial subdivision. The role of acceleration structures in speeding up global illumination calculations is also discussed.","tags":["bounding volume","quadtree","octree"],"url":"https://www.slideshare.net/slideshow/26accelstruct/12673694","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":2963},{"algorithmId":"","displayTitle":"CS 354 Global Illumination","isSavedByCurrentUser":false,"pageCount":44,"score":0,"slideshowId":"12605786","sourceName":"MORE_FROM_USER","strippedTitle":"25globalillum","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/25globalillum-120419121306-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes a class lecture on global illumination techniques for computer graphics. It discusses ray tracing and path tracing to solve the rendering equation through Monte Carlo integration. Radiosity for diffuse interreflection using form factors is covered. Participating media and photon mapping are also summarized. The next class will cover acceleration structures to speed up ray tracing computations. Project 4 is assigned, involving implementing a simple ray tracer.","tags":["global illuminations","ray tracing","brdf"],"url":"https://www.slideshare.net/slideshow/25globalillum/12605786","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":1864},{"algorithmId":"","displayTitle":"CS 354 Ray Casting \u0026 Tracing","isSavedByCurrentUser":false,"pageCount":57,"score":0,"slideshowId":"12595304","sourceName":"MORE_FROM_USER","strippedTitle":"24raytrace-12595304","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/24raytrace-120418174018-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes a lecture on ray casting and tracing in the CS 354 course. It discusses ray casting, an in-class quiz on typography, the professor's office hours, details on Project 3 which involves animating a stick figure from motion capture data, and an overview of ray tracing techniques including reflections and limitations of OpenGL for realistic rendering.","tags":["shadow rays","ray casting","reflection"],"url":"https://www.slideshare.net/slideshow/24raytrace-12595304/12595304","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":4999},{"algorithmId":"","displayTitle":"CS 354 Typography","isSavedByCurrentUser":false,"pageCount":67,"score":0,"slideshowId":"12534604","sourceName":"MORE_FROM_USER","strippedTitle":"23typography-12534604","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/23typography-120413222030-phpapp02-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This document summarizes a lecture on digital typography in CS 354. It discusses how fonts are now defined mathematically using cubic Bezier curves rather than metal type. It reviews cubic Bezier curves and how continuity is achieved between curve segments. It describes the PostScript and TrueType font formats and their use of cubic and quadratic Bezier curves. The lecture contrasts modern digital typography approaches with earlier systems like Metal type and Metafont. It shows examples of serif and sans serif typefaces and discusses typographic terminology.","tags":["glyph","postscript","truetype"],"url":"https://www.slideshare.net/slideshow/23typography-12534604/12534604","userLogin":"Mark_Kilgard","userName":"Mark Kilgard","viewCount":4492}],"featured":null,"latest":[{"algorithmId":"4","displayTitle":"UiPath Business Analyst Associate Series 2024 - Awareness Session","isSavedByCurrentUser":false,"pageCount":16,"score":0,"slideshowId":"273505053","sourceName":"LATEST","strippedTitle":"uipath-business-analyst-associate-series-2024-awareness-session","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/uipathcommunitybusinessanalystassociateprogram-awarenesssessionv32024-241121182212-f82f4d74-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The Automation Business Analyst Associate training and certification demonstrate an understanding of the UiPath Automation Implementation Methodology, knowledge of how automations are developed, and the ability to describe UiPath Core Products such as Studio, Robots, and Assistant. This series has both self-paced learning and events led by experts to help you learn the curriculum. Once the training is completed, you will be able to sit for the certification exam. \n\nJoin the UiPath Community and Next Innings career experts for this 5-session series. You will learn what you need to do to start your certification preparation. You will also learn about tools available in the community that you can use it in your career and in establishing a network of like-minded people. \n\nPlease join us for this awareness session to learn about the sessions and for a chance to ask any questions you might have.","tags":["#uipathcommunity","#uipath","#businessanalyst"],"url":"https://www.slideshare.net/slideshow/uipath-business-analyst-associate-series-2024-awareness-session/273505053","userLogin":"DianaGray10","userName":"DianaGray10","viewCount":121},{"algorithmId":"4","displayTitle":"VPN WORKSHOP FROM BASICS TO SETUP SLIDES.pdf","isSavedByCurrentUser":false,"pageCount":27,"score":0,"slideshowId":"273412920","sourceName":"LATEST","strippedTitle":"vpn-workshop-from-basics-to-setup-slides-pdf","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/vpnworkshopfrombasicstosetupslides-241118224707-d6753265-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Google Developer Groups on Campus Universiti Malaya 2024/2025.","tags":[],"url":"https://www.slideshare.net/slideshow/vpn-workshop-from-basics-to-setup-slides-pdf/273412920","userLogin":"muhammadluqmansajjad","userName":"muhammadluqmansajjad","viewCount":43},{"algorithmId":"4","displayTitle":"Data Modeling for Performance Masterclass: Data Modeling Strategies for Perfo...","isSavedByCurrentUser":false,"pageCount":58,"score":0,"slideshowId":"273508588","sourceName":"LATEST","strippedTitle":"data-modeling-for-performance-masterclass-data-modeling-strategies-for-performance","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/bodatamodelingforperformancemasterclass-241121221750-e165057a-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"In this talk, Bo shares how to implement a query-first design to build a schema for a sample application.","tags":[],"url":"https://www.slideshare.net/slideshow/data-modeling-for-performance-masterclass-data-modeling-strategies-for-performance/273508588","userLogin":"ScyllaDB","userName":"ScyllaDB","viewCount":59},{"algorithmId":"4","displayTitle":"INTRODUCTION TO OPERATING SYSTEM_LESSON_2_SHARE.pdf","isSavedByCurrentUser":false,"pageCount":116,"score":0,"slideshowId":"273476695","sourceName":"LATEST","strippedTitle":"introduction-to-operating-system_lesson_2_share-pdf","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/introductiontooperatingsystemlesson2share-241120201749-22c5fd05-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The management of main memory is critical. In fact, from a historical perspective, the performance of the entire system has been directly dependent on two things: \nHow much memory is available \nHow it is optimized while jobs are being processed.\n\nIn this section we will be looking at the Memory Manager (also known as random access memory or RAM, core memory, or primary storage) and four types of memory allocation schemes: \nsingle-user systems\nfixed partitions\ndynamic partitions\nrelocatable dynamic partitions. \n","tags":["operating system","software engineering","computer engineering"],"url":"https://www.slideshare.net/slideshow/introduction-to-operating-system_lesson_2_share-pdf/273476695","userLogin":"NKFOUR1","userName":"Nana Kofi Annan","viewCount":244},{"algorithmId":"4","displayTitle":"Dense Embeddings != Complete Search - a sneak peak of Milvus 2.5","isSavedByCurrentUser":false,"pageCount":26,"score":0,"slideshowId":"273408904","sourceName":"LATEST","strippedTitle":"dense-embeddings-complete-search-a-sneak-peak-of-milvus-2-5","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/jamesslides-241118173748-7c4f9dae-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Dense embeddings miss exact matches. Keyword search misses semantic meaning. Running two separate systems is a maintenance nightmare. We'll show how Milvus 2.5's hybrid search tackles this with a unified solution, preview its sparse-based BM25 implementation, and share performance numbers against current Elasticsearch-based architectures.\n\n​Key Points:\n\n​Where dense embeddings fall short and how a unified system architectures address the search needs\n\n​Sneak Peak of Milvus 2.5 - Quick look at our BM25 implementation and sparse vector optimizations\n\n​Benchmark results comparing hybrid search latency and throughput vs ElasticSsearch\n\n​What's Next - Brief overview of upcoming features in our technical roadmap","tags":[],"url":"https://www.slideshare.net/slideshow/dense-embeddings-complete-search-a-sneak-peak-of-milvus-2-5/273408904","userLogin":"chloewilliams62","userName":"Zilliz ","viewCount":39},{"algorithmId":"4","displayTitle":"Epson EcoTank ET-2800 Wireless Color All-In-One Printer USA.pptx","isSavedByCurrentUser":false,"pageCount":11,"score":0,"slideshowId":"273461743","sourceName":"LATEST","strippedTitle":"epson-ecotank-et-2800-wireless-color-all-in-one-printer-usa-pptx","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/epsonecotanket-2800wirelesscolorall-in-oneprinterusa-241120091609-53e0b7bd-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The Epson ecotank et-2800 can use in a small office setting or at home. It has a very high page output because of its super tank ink technology, so you don’t frequently need to spend time reloading its ink tanks. Unfortunately, it isn’t appropriate for busy offices because it prints slowly and lacks an ADF to efficiently digitize multi-page documents. It also lacks an Ethernet wire, which is necessary for a reliable network connection.","tags":["epson ecotank et-2800","epson ecotank"],"url":"https://www.slideshare.net/slideshow/epson-ecotank-et-2800-wireless-color-all-in-one-printer-usa-pptx/273461743","userLogin":"Easyprinterhelp","userName":"EasyPrinterHelp","viewCount":44},{"algorithmId":"4","displayTitle":"Kit Works_WOOWA CON 2024_후기_20241115.pdf","isSavedByCurrentUser":false,"pageCount":9,"score":0,"slideshowId":"273385081","sourceName":"LATEST","strippedTitle":"kit-works_woowa-con-2024_-_20241115-pdf","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/random-241118012622-814af74a-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Kit-Works Team Study","tags":[],"url":"https://www.slideshare.net/slideshow/kit-works_woowa-con-2024_-_20241115-pdf/273385081","userLogin":"wonjunhwang11","userName":"Wonjun Hwang","viewCount":43},{"algorithmId":"4","displayTitle":"Miller: A command-line tool for querying, shaping, and reformatting data files","isSavedByCurrentUser":false,"pageCount":17,"score":0,"slideshowId":"273413361","sourceName":"LATEST","strippedTitle":"miller-a-command-line-tool-for-querying-shaping-and-reformatting-data-files","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/2024-03-20luomeng-tech-miller-241118231851-5ba20181-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Hoffman Lab Tech Talk","tags":["hoffmanlab techtalk"],"url":"https://www.slideshare.net/slideshow/miller-a-command-line-tool-for-querying-shaping-and-reformatting-data-files/273413361","userLogin":"hoffmanlab","userName":"Hoffman Lab","viewCount":85},{"algorithmId":"4","displayTitle":"LF Energy Webinar: A Lap Around TROLIE 1.0","isSavedByCurrentUser":false,"pageCount":21,"score":0,"slideshowId":"273477185","sourceName":"LATEST","strippedTitle":"lf-energy-webinar-a-lap-around-trolie-1-0","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/troliewebinar-nov2024-241120204637-e70a944a-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"The TROLIE Working Group was started to address the interoperability challenges brought on by FERC Order 881. The TROLIE 1.0 project scope addresses the key use cases for the exchange of transmission ratings and limits necessary to ensure compliance and reliable operations. In this webinar, the TROLIE maintainers will explore these use cases and highlight how the TROLIE OpenAPI specification addresses them. Attendees will gain insights into the concepts that the TROLIE project identified when articulating solutions to the 881 use cases, as well as how to make effective use of the project documentation and the specification itself. The presentation will focus on ensuring the audience is prepared to implement their respective interoperability use cases. Accordingly, this will be a fast-paced, in-depth tour of all that the project has produced as it nears completion. ","tags":["lf energy","energy","trolie"],"url":"https://www.slideshare.net/slideshow/lf-energy-webinar-a-lap-around-trolie-1-0/273477185","userLogin":"DanBrown980551","userName":"DanBrown980551","viewCount":116},{"algorithmId":"4","displayTitle":"An An Exploration Into the Cyber Security","isSavedByCurrentUser":false,"pageCount":35,"score":0,"slideshowId":"273408324","sourceName":"LATEST","strippedTitle":"an-an-exploration-into-the-cyber-security","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/cybersecurity-241118170540-a7be6210-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This presentations is like exploration into the cyber security. It covers the basic concepts , live demos and roles and some tips to get into the cyber security. Basically it can give you an idea in to cyber security as an exploration.","tags":["cyber security","penetration testing","ethical hacking"],"url":"https://www.slideshare.net/slideshow/an-an-exploration-into-the-cyber-security/273408324","userLogin":"sivasakthin2022cse","userName":"sivasakthin2022cse","viewCount":65},{"algorithmId":"4","displayTitle":"You don’t need to hire a 10x engineer, you just need to enable the engineers ...","isSavedByCurrentUser":false,"pageCount":12,"score":0,"slideshowId":"273355012","sourceName":"LATEST","strippedTitle":"you-don-t-need-to-hire-a-10x-engineer-you-just-need-to-enable-the-engineers-you-have","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/youdontneedtohirea10xengineeryoujustneedtoenabletheengineersyouhave1-241116095854-e3679b29-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"This talk discusses how a good developer experience (design system, scaffolding tools, tech standards, ...), combined with the right organisational structures and operating model, a lean team composition with a focus on autonomy, and an organisation that measures individual impact can lead to high performing teams with exceptional productivity.","tags":[],"url":"https://www.slideshare.net/slideshow/you-don-t-need-to-hire-a-10x-engineer-you-just-need-to-enable-the-engineers-you-have/273355012","userLogin":"AikoKlostermann","userName":"Aiko Klostermann","viewCount":164},{"algorithmId":"4","displayTitle":"The Practical Reality of AI and Large Language Models (LLMs)in Transforming B...","isSavedByCurrentUser":false,"pageCount":42,"score":0,"slideshowId":"273504791","sourceName":"LATEST","strippedTitle":"the-practical-reality-of-ai-and-large-language-models-llms-in-transforming-business-operations","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/eis-webinar-ai-search-session-5-transforming-business-ops-2024-11-19-241121180555-02920e71-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Explore the intersection of AI and large language models in transforming business operations. Discuss real-world applications, from automating customer service to enhancing decision-making processes. Examine the implications for various industries, and how LLMs can drive competitive advantages. Emphasize the need for accurate data integration to avoid hallucinations and ensure reliable outputs.\n\nThis session will delve into the convergence of AI and LLMs, focusing on practical business applications and competitive advantages.\n\nReal-World Applications: How AI and LLMs are being utilized in customer service, decision-making, and other business areas.\nExplore how AI and large language models revolutionize business operations. From enhancing customer service to empowering decision-making, discover practical AI applications across marketing, supply chain, HR, finance, and beyond.\nIndustry-Specific Impacts: Assessing the implications for industries such as finance, healthcare, retail, and manufacturing.\n\nExamine how AI and large language models are reshaping key industries. This topic explores the unique challenges and opportunities AI presents across diverse sectors.\n\nCompetitive Advantages: Understanding how LLMs can drive business efficiencies and innovation.\nLearn how businesses leverage LLMs to automate tasks, enhance decision-making, and develop cutting-edge products and services, ultimately gaining an edge in today's competitive marketplace.\n\nCase Studies: Examples of businesses successfully leveraging AI and LLMs for operational improvements.\nDiscover real-world success stories of companies harnessing AI and large language models to transform their operations. These case studies showcase how diverse businesses have implemented LLMs to boost productivity, enhance customer experiences, and drive growth across multiple industries. ","tags":["ai","llms","large language models"],"url":"https://www.slideshare.net/slideshow/the-practical-reality-of-ai-and-large-language-models-llms-in-transforming-business-operations/273504791","userLogin":"Earley","userName":"Earley Information Science","viewCount":45},{"algorithmId":"4","displayTitle":"Transcript: Updates to Thema and their applications to the Canadian market - ...","isSavedByCurrentUser":false,"pageCount":12,"score":0,"slideshowId":"273410953","sourceName":"LATEST","strippedTitle":"transcript-updates-to-thema-and-their-applications-to-the-canadian-market-tech-forum-2024","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/tfthemawebinarfina-241118201513-e7cc0401-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"In this presentation, EDItEUR’s Chris Saynor and Société de gestion BTLF’s Isabelle Gaudet-Labine examine some of the new additions and changes included in the latest update to Thema version 1.6, focusing particularly on changes and additions related to Indigenous Peoples and Canadian-specific requirements. They also discuss the importance of Thema in the French Canadian market.\r\n\r\nLink to the video recording and presentation slides: https://bnctechforum.ca/sessions/updates-to-thema-and-their-applications-to-the-canadian-market/\r\n\r\nPresented by BookNet Canada on November 14, 2024, with support from the Department of Canadian Heritage.","tags":["thema","booknet canada","tech forum"],"url":"https://www.slideshare.net/slideshow/transcript-updates-to-thema-and-their-applications-to-the-canadian-market-tech-forum-2024/273410953","userLogin":"booknetcanada","userName":"BookNet Canada","viewCount":107},{"algorithmId":"4","displayTitle":"How Python Empowers Ethical Hackers by Supriya Kumar Mitra","isSavedByCurrentUser":false,"pageCount":23,"score":0,"slideshowId":"273351419","sourceName":"LATEST","strippedTitle":"how-python-empowers-ethical-hackers-by-supriya-kumar-mitra","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/python-241116063154-2d0e6e3c-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"How Python Empowers Ethical Hackers by Supriya Kumar Mitra on the event of null/OWASP Kolkata November Meetup","tags":["cyber security","cyber threat intelligence","cyber attack"],"url":"https://www.slideshare.net/slideshow/how-python-empowers-ethical-hackers-by-supriya-kumar-mitra/273351419","userLogin":"NullKolkata","userName":"null - The Open Security Community","viewCount":126},{"algorithmId":"4","displayTitle":"Reshaping the landscape of belonging to transform community","isSavedByCurrentUser":false,"pageCount":21,"score":0,"slideshowId":"273349637","sourceName":"LATEST","strippedTitle":"reshaping-the-landscape-of-belonging-to-transform-community","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/2024atoslidedeckwinstinahughes-slideshare-241116044742-c2412e85-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Presented at All Things Open 2024\r\nPresented by Winstina Hughes - Support Inclusion in Tech\r\n\r\nTitle: Reshaping the landscape of belonging to transform community\r\n\r\nThis talk is for anyone who has ever felt like they didn't quite belong, whether in an open source conference, slack channel, or within their own skin. By the end of this talk you will have insight on how to reshape belonging in your community to help any member find their true voice even while hiding from it.\r\n\r\nWatch presentation here: https://www.youtube.com/watch?v=cWh-A6MooPU\u0026list=PL6kQg8bP1Ji6v72BcHStr-yzF8GqIZIXo\u0026index=5\r\n\r\nFind more info about All Things Open:\r\nOn the web: https://www.allthingsopen.org/\r\nTwitter: https://twitter.com/AllThingsOpen\r\nLinkedIn: https://www.linkedin.com/company/all-things-open/\r\nInstagram: https://www.instagram.com/allthingsopen/\r\nFacebook: https://www.facebook.com/AllThingsOpen\r\nMastodon: https://mastodon.social/@allthingsopen\r\nThreads: https://www.threads.net/@allthingsopen\r\n2024 conference: https://2024.allthingsopen.org/ \r\nSlideshare: https://www.slideshare.net/slideshow/reshaping-the-landscape-of-belonging-to-transform-community/273314893","tags":["open source","wordpress","four freedoms"],"url":"https://www.slideshare.net/slideshow/reshaping-the-landscape-of-belonging-to-transform-community/273349637","userLogin":"PWrite","userName":"Winstina Hughes","viewCount":108},{"algorithmId":"4","displayTitle":"The 2024 UX Tools Map by User Interviews","isSavedByCurrentUser":false,"pageCount":25,"score":0,"slideshowId":"273526738","sourceName":"LATEST","strippedTitle":"the-2024-ux-tools-map-by-user-interviews","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/pdf2024uxtoolsmap-241122142845-1997f5cb-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Traveler's Guide to the 2024 UX Tools Map by User Interviews.","tags":[],"url":"https://www.slideshare.net/slideshow/the-2024-ux-tools-map-by-user-interviews/273526738","userLogin":"nick896721","userName":"nick896721","viewCount":273},{"algorithmId":"4","displayTitle":"\"Technological Roulette\",Alex Kovalchuk .pptx","isSavedByCurrentUser":false,"pageCount":24,"score":0,"slideshowId":"273395707","sourceName":"LATEST","strippedTitle":"technological-roulette-alex-kovalchuk-pptx","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/random-241118083433-08af88d4-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"As a CTO, I often faced the temptation to implement new technologies. This technological roulette sometimes led to success, sometimes not, but it always provided valuable experience. Our product continues to evolve, which indicates more wins than losses. Today, I’ll share the lessons we learned from this game and explain how to distinguish valuable innovations from risky experiments.","tags":["fwdays","new technologies","implement"],"url":"https://www.slideshare.net/slideshow/technological-roulette-alex-kovalchuk-pptx/273395707","userLogin":"fwdays","userName":"Fwdays","viewCount":61},{"algorithmId":"4","displayTitle":"Dev Dives: Leverage AI with Autopilot™ for Everyone \u0026 UiPath Clipboard AI™","isSavedByCurrentUser":false,"pageCount":19,"score":0,"slideshowId":"273426836","sourceName":"LATEST","strippedTitle":"dev-dives-leverage-ai-with-autopilot-for-everyone-uipath-clipboard-ai","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/devdivesnovemberdeck-241119085310-e2fa6ea0-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"Watch this Dev Dives session and learn how to master Autopilot™ for everyone and UiPath Clipboard AI™. Our product experts designed this webinar to help you customize the user experience and harness productivity in everyday tasks. \n\n📕 This Dev Dives webinar explores the following key topics: \n- Mastering Autopilot™ for Everyone. \n- Leveraging UiPath Clipboard AI™ to boost productivity. \n\n💡 Key Takeaways: \n- Learn how to customize the user experience. \n- Discover best practices for integrating Autopilot and Clipboard AI into daily workflows. \n- Gain valuable troubleshooting strategies for smooth deployment. \n\n👩‍🏫👨‍🏫 Speakers: \nAlina Capota, Manager, Technology Service @UiPath \nCosmin Voicu, Principal Product Manager @UiPath \n\n\n⏩ Register for our upcoming Dev Dives December session: \nIncrease automation value with Web Apps in Studio Web \n👉 EMEA\u0026APJ: https://bit.ly/Dev_Dives_Dec_EMEA_APJ \n👉 AMER: https://bit.ly/Dev_Dives_Dec_AMER \n\nThis session was streamed live on November 18, 2024, 15:00 GMT. \nCheck out all our upcoming Dev Dives 2024 sessions at: \n🚩 https://bit.ly/Dev_Dives_2024","tags":["#rpadeveloper","#rpa","#automation"],"url":"https://www.slideshare.net/slideshow/dev-dives-leverage-ai-with-autopilot-for-everyone-uipath-clipboard-ai/273426836","userLogin":"UiPathCommunity","userName":"UiPathCommunity","viewCount":225},{"algorithmId":"4","displayTitle":"Intro to Backend Development - GDG on Campus EUE","isSavedByCurrentUser":false,"pageCount":12,"score":0,"slideshowId":"273360045","sourceName":"LATEST","strippedTitle":"intro-to-backend-development-gdg-on-campus-eue","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/introtobackenddevelopment-241116154532-458764ad-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"What You'll Learn:\n- Types of programming languages and how they’re used\n⁠- The difference between backend and frontend development\n⁠- Understanding servers and databases\n⁠- Static vs. dynamic websites\n⁠A live example of a backend server in action!","tags":[],"url":"https://www.slideshare.net/slideshow/intro-to-backend-development-gdg-on-campus-eue/273360045","userLogin":"euegdgoncampus","userName":"Google Developer Group On Campus European Universities in Egypt","viewCount":132},{"algorithmId":"4","displayTitle":"Enhancing Boardroom Decision-Making Slide Deck.pdf","isSavedByCurrentUser":false,"pageCount":13,"score":0,"slideshowId":"273469412","sourceName":"LATEST","strippedTitle":"enhancing-boardroom-decision-making-slide-deck-pdf","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/enhancingboardroomdecision-makingslidedeck-241120135852-17488314-thumbnail.jpg?width=600\u0026height=600\u0026fit=bounds","description":"As modern boards face rapid changes and evolving stakeholder expectations, they must be equipped to act fast without sacrificing strategic focus.\n\nMore than ever, boards require the tools, data, and workflows to inform impactful, responsible decisions. Fortunately, board management software like OnBoard is designed to help boards facilitate a comprehensive and efficient decision-making process.\n\nIn this webinar, you’ll learn how OnBoard:\n\nSimplifies board meeting preparation and materials creation\n\nPromotes easy communication between board and committee members\n\nProvides useful tools that help board members stay accountable and productive between board meetings","tags":[],"url":"https://www.slideshare.net/slideshow/enhancing-boardroom-decision-making-slide-deck-pdf/273469412","userLogin":"OnBoardWebinars","userName":"OnBoard","viewCount":43}]},"secretUrl":"3TwMAztPPZiShG","shouldShowAds":true,"slides":{"host":"https://image.slidesharecdn.com","title":"OpenGL-4-5-Update-for-NVIDIA-GPUs","imageLocation":"siggraph2014-opengl-4-140812133653-phpapp01","imageSizes":[{"quality":85,"width":320,"format":"jpg"},{"quality":85,"width":638,"format":"jpg"},{"quality":75,"width":2048,"format":"webp"}]},"smsShareUrl":"sms:?body=Check out this SlideShare : https://www.slideshare.net/slideshow/opengl-45-update-for-nvidia-gpus/37922750","strippedTitle":"opengl-45-update-for-nvidia-gpus","thumbnail":"https://cdn.slidesharecdn.com/ss_thumbnails/siggraph2014-opengl-4-140812133653-phpapp01-thumbnail.jpg?width=640\u0026height=640\u0026fit=bounds","title":"OpenGL 4.5 Update for NVIDIA GPUs","totalSlides":81,"transcript":["SG4121: OPENGL 4.5 UPDATE FOR\nNVIDIA GPUS\nMark Kilgard\nPrincipal System Software Engineer, NVIDIA\nPiers Daniell\nSenior Graphics Software Engineer, NVIDIA\n ","Mark Kilgard\n• Principal System Software Engineer\n– OpenGL driver and API evolution\n– Cg (“C for graphics”) shading language\n– GPU-accelerated path rendering\n• OpenGL Utility Toolkit (GLUT) implementer\n• Author of OpenGL for the X Window System\n• Co-author of Cg Tutorial\n• Worked on OpenGL for 20+ years\n ","Piers Daniell\n• Senior Graphics Software Engineer\n• NVIDIA’s Khronos OpenGL representative\n– Since 2010\n– Authored numerous OpenGL\nextension specifications now core\n• Leads OpenGL version updates\n– Since OpenGL 4.1\n• 10+ years with NVIDIA\n ","NVIDIA’s OpenGL Leverage\nDebugging with\nNsight\nProgrammable\nGraphics\nTegra\nQuadro\nOptiX\nGeForce\nAdobe Creative Cloud\n ","Single 3D API for Every Platform\nOS X\nLinux\nFreeBSD\nSolaris\nAndroid\nWindows\n ","Adobe Creative Cloud:\nGPU-accelerated Illustrator\n• 27 year old application\n– World’s leading graphics\ndesign application\n• 6 million users\n– Never used the GPU\n• Until this June 2014\n• Adobe and NVIDIA worked to\nintegrate NV_path_rendering\ninto Illustrator CC 2014\n ","","OpenGL 4.x Evolution\n Major revision of OpenGL every year since OpenGL 3.0, 2008\n Maintained full backwards compatibility\n2010 2011 2012 2013 2014\nOpenGL 4.0: Tessellation\nOpenGL 4.1: Shader mix-and-match, ES2 compatibility\nOpenGL 4.2: GLSL upgrades and shader image load store\nOpenGL 4.3: Compute shaders, SSBO, ES3 compatibility\nOpenGL 4.4: Persistently mapped buffers, multi bind\n???\n ","Big News: OpenGL 4.5 Released Today!\n Direct State Access (DSA) finally!\n Robustness\n OpenGL ES 3.1 compatibility\n Faster MakeCurrent\n DirectX 11 features for porting and emulation\n SubImage variant of GetTexImage\n Texture barriers\n Sparse buffers (ARB extension)\n ","So OpenGL Evolution Through 4.5\n Major revision of OpenGL every year since 2008\n Maintained full backwards compatibility\n2010 2011 2012 2013 2014\nOpenGL 4.0: Tessellation\nOpenGL 4.1: Shader mix-and-match, ES2 compatibility\nOpenGL 4.2: GLSL upgrades and shader image load store\nOpenGL 4.3: Compute shaders, SSBO, ES3 compatibility\nOpenGL 4.4: Persistently mapped buffers, multi bind\nOpenGL 4.5: Direct state access, robustness, ES3.1\n ","OpenGL Evolves Modularly\n• Each core revision is specified as a set of extensions\n– Example: ARB_ES3_1_compatibility\n• Puts together all the functionality for ES 3.1 compatibility\n• Describe in its own text file\n– May have dependencies on other extensions\n• Dependencies are stated explicitly\n• A core OpenGL revision (such as OpenGL 4.5) “bundles” a set of agreed\nextensions — and mandates their mutual support\n– Note: implementations can also “unbundle” ARB extensions for hardware unable\nto support the latest core revision\n• So easiest to describe OpenGL 4.5 based on its bundled extensions…\n4.5\nARB_direct_state_access\nARB_clip_control\nmany more …\n ","OpenGL 4.5 as extensions\n All new features to OpenGL 4.5 can be used with GL contexts\n4.0 through 4.4 via extensions:\n— ARB_clip_control\n— ARB_conditional_render_inverted\n— ARB_cull_distance\n— ARB_shader_texture_image_samples\n— ARB_ES3_1_compatibility\n— ARB_direct_state_access\n— KHR_context_flush_control\n— ARB_get_texture_subimage\n— KHR_robustness\n— ARB_texture_barrier\nAPI Compatibility\n(Direct3D, OpenGL ES)\nAPI Improvements\nBrowser security (WebGL)\nTexture \u0026 framebuffer\nmemory consistency\n ","Additional ARB extensions\n Along with OpenGL 4.5, Khronos has released ARB extensions\n ARB_sparse_buffer\n DirectX 11 features\n— ARB_pipeline_statistics_query\n— ARB_transform_feedback_overflow_query\n NVIDIA supports the above on all OpenGL 4.x hardware\n— Fermi, Kepler and Maxwell\n— GeForce, Quadro and Tegra K1\n ","NVIDIA OpenGL 4.5 beta Driver\n Available today!\n https://developer.nvidia.com/opengl-driver\n— Or just Google “opengl driver” – it’s the first hit!\n— Windows and Linux\n Supports all OpenGL 4.5 features and all ARB/KHR extensions\n Available on Fermi, Kepler and Maxwell GPUs\n— GeForce and Quadro\n— Desktop and Laptop\n ","Using OpenGL 4.5\n OpenGL 4.5 has 118 New functions. Eek.\n How do you deal with all that? The easy way…\n Use the OpenGL Extension Wrangler (GLEW)\n— Release 1.11.0 already has OpenGL 4.5 support\n— http://glew.sourceforge.net/\n ","Direct State Access (DSA)\n Read and modify object state directly without bind-to-edit\n Performance benefit in many cases\n Context binding state unmodified\n— Convenient for tools and middleware\n— Avoids redundant state changes\n Derived from EXT_direct_state_access\n ","More Efficient Middleware\nvoid Texture2D::SetMagFilter(Glenum filter)\n{\nGLuint oldTex;\nglGetIntegerv(GL_TEXTURE_BINDING_2D, \u0026oldTex);\nglBindTexture(GL_TEXTURE_2D, m_tex);\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);\nglBindTexture(GL_TEXTURE_2D, oldTex);\n}\n Before DSA\n After DSA\nvoid Texture2D::SetMagFilter(Glenum filter)\n{\nglTextureParameteri(m_tex, GL_TEXTURE_MAG_FILTER, filter);\n}\n ","Simplified Code\n Before DSA\nGLuint tex[2];\nglGenTextures(2, tex);\nglActiveTexture(GL_TEXTURE0 + 0);\nglBindTexture(GL_TEXTURE_2D, tex[0]);\nglTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 8);\nglActiveTexture(GL_TEXTURE0 + 1);\nglBindTexture(GL_TEXTURE_2D, tex[1]);\nglTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 4);\n After DSA\nGLuint tex[2];\nglCreateTextures(GL_TEXTURE_2D, 2, tex);\nglTextureStorage2D(tex[0], 1, GL_RGBA8, 8, 8);\nglTextureStorage2D(tex[1], 1, GL_RGBA8, 4, 4);\nglBindTextures(0, 2, tex);\n ","More Direct Framebuffer Access\n Before DSA\nglBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO);\nDrawStuff();\nglBindFramebuffer(GL_DRAW_FRAMEBUFFER, nonMsFBO);\nglBindFramebuffer(GL_READ_FRAMEBUFFER, msFBO);\nglBlitFramebuffer(...);\nglBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO);\n After DSA\nglBindFramebuffer(GL_DRAW_FRAMEBUFFER, msFBO);\nDrawStuff();\nglBlitNamedFramebuffer(msFBO, nonMsFBO, ...);\n ","DSA Create Functions\nglCreate Creates\nglCreateBuffers Buffer Objects\nglCreateRenderbuffers Renderbuffer Objects\nglCreateTextures(\u003ctarget\u003e) Texture Objects of specific target\nglCreateFramebuffers Framebuffer Objects\nglCreateVertexArrays Vertex Array Objects\nglCreateProgramPipelines Program Pipeline Objects\nglCreateSamplers Sampler Objects\nglCreateQueries(\u003ctarget\u003e) Query Objects of a specific target\n Generates name AND creates object\n Bind-to-create not needed\n ","DSA Texture Functions\nNon-DSA DSA\nglGenTextures + glBindTexture glCreateTextures\nglTexStorage* glTextureStroage*\nglTexSubImage* glTextureSubImage*\nglCopyTexSubImage* glCopyTextureSubImage*\nglGetTexImage glGetTextureImage\nglCompressedTexSubImage* glCompressedTextureSubImage*\nglGetCompressedTexImage glGetCompressedTextureImage\nglActiveTexture + glBindTexture glBindTextureUnit\nglTexBuffer[Range] glTextureBuffer[Range]\nglGenerateMipmap glGenerateTextureMipmap\ngl[Get]TexParameter* gl[Get]TextureParameter*\n ","DSA Renderbuffer Functions\nNon-DSA DSA\nglGenRenderbuffers + glBindRenderbuffer glCreateRenderbuffers\nglRenderbufferStorage* glNamedRenderbufferStorage*\nglGetRenderbufferParameteriv glGetNamedRenderbufferParameteriv\n ","DSA Framebuffer Functions\nNon-DSA DSA\nglGenFramebuffers + glBindFramebuffer glCreateFramebuffers\nglFramebufferRenderbuffer glNamedFramebufferRenderbuffer\nglFramebufferTexture[Layer] glNamedFramebufferTexture[Layer]\nglDrawBuffer[s] glNamedFramebufferDrawBuffer[s]\nglReadBuffer glNamedFramebufferReadBuffer\nglInvalidateFramebuffer[Sub]Data glInvalidateNamedFramebuffer[Sub]Data\nglClearBuffer* glClearNamedFramebuffer*\nglBlitFramebuffer glBlitNamedFramebuffer\nglCheckFramebufferStatus glCheckNamedFramebufferStatus\nglFramebufferParameteri glNamedFramebufferParameteri\nglGetFramebuffer*Parameter* glGetNamedFramebuffer*Parameter*\n ","DSA Buffer Object Functions\nNon-DSA DSA\nglGenBuffers + glBindBuffer glCreateBuffers\nglBufferStorage glNamedBufferStorage\nglBuffer[Sub]Data glNamedBuffer[Sub]Data\nglCopyBufferSubData glCopyNamedBufferSubData\nglClearBuffer[Sub]Data glClearNamedBuffer[Sub]Data\nglMapBuffer[Range] glMapNamedBuffer[Range]\nglUnmapBuffer glUnmapNamedBuffer\nglFlushMappedBufferRange glFlushMappedNamedBufferRange\nglGetBufferParameteri* glGetNamedBufferParameteri*\nglGetBufferPointerv glGetNamedBufferPointerv\nglGetBufferSubData glGetNamedBufferSubData\n ","DSA Transform Feedback Functions\nNon-DSA DSA\nglGenTransformFeedbacks + glBind glCreateTransformFeedbacks\nglBindBuffer{Base|Range} glTransformFeedbackBuffer{Base|Range}\nglGetInteger* glGetTransformFeedbacki*\n ","DSA Vertex Array Object (VAO) Functions\nNon-DSA DSA\nglGenVertexArrays + glBindVertexArray glCreateVertexArrays\nglEnableVertexAttribArray glEnableVertexArrayAttrib\nglDisableVertexAttribArray glDisableVertexArrayAttrib\nglBindBuffer(ELEMENT_ARRAY_BUFFER) glVertexArrayElementBuffer\nglBindVertexBuffer[s] glVertexArrayVertexBuffer[s]\nglVertexAttrib*Format glVertexArrayAttrib*Format\nglVertexBindingDivisor glVertexArrayBindingDivisor\nglGetInteger* glGetVertexArray*\n ","EXT_direct_state_access Differences\n Only OpenGL 4.5 core functionality supported\n Some minor name changes to some functions\n— Mostly the same, but drops EXT suffix\n TextureParameterfEXT -\u003e TextureParameterf\n— VAO function names shortened\n glVertexArrayVertexBindingDivisorEXT -\u003e glVertexArrayBindingDivisor\n— Texture functions no longer require a target parameter\n Target comes from glCreateTextures(\u003ctarget\u003e,)\n Use “3D” functions with CUBE_MAP where z specifies the face\n DSA functions can no longer create objects\n— Use glCreate* functions to create name and object at once\n ","Robustness\n ARB_robustness functionality now part of OpenGL 4.5\n— Called KHR_robustness for use with OpenGL ES too\n— Does not include compatibility functions\n Adds “safe” APIs for queries that return data to user pointers\n Adds mechanism for app to learn about GPU resets\n— Due to my app or some other misbehaving app\n Stronger out-of-bounds behavior\n— No more undefined behavior\n Used by WebGL implementations to deal with Denial of\nService (DOS) attacks\n ","Robustness API\n Before Robustness\nGLubyte tooSmall[NOT_BIG_ENOUGH];\nglReadPixels(0, 0, H, W, GL_RGBA, GL_UNSIGNED_BYTE, tooSmall);\n// CRASH!!\n After Robustness\nGLubyte tooSmall[NOT_BIG_ENOUGH];\nglReadnPixels(0, 0, H, W, GL_RGBA, GL_UNSIGNED_BYTE, sizeof tooSmall, tooSmall);\n// No CRASH, glGetError() returns INVALID_OPERATION\n ","Robustness Reset Notification\n Typical render loop with reset check\nwhile (!quit) {\nDrawStuff();\nSwapBuffers();\nif (glGetGraphicsResetStatus() != GL_NO_ERROR) {\nquit = true;\n}\n}\nDestroyContext(glrc);\n Reset is asynchronous\n— GL will behave as normal after a reset event but rendering commands\nmay not produce the right results\n— The GL context should be destroyed\n— Notify the user\n ","OpenGL ES 3.1 Compatibility\n Adds new ES 3.1 features not already in GL\n Also adds #version 310 es GLSL shader support\n Compatibility profile required for full superset\n— ES 3.1 allows client-side vertex arrays\n— Allows application generated object names\n— Has default Vertex Array Object (VAO)\n Desktop provides great development platform for ES 3.1\ncontent\n ","Desktop features in an ES profile\n NVIDA GPUs provide all ANDROID_extension_pack_es31a\nfeatures in an ES profile\n— Geometry, Tessellation, Advanced blending, etc.\n Scene from Epic’s “Rivarly” OpenGL ES 3.1 + AEP demo running on Tegra K1\n ","Using OpenGL ES 3.1 on Desktop\n The Windows WGL way\nint attribList[] = {\nWGL_CONTEXT_MAJOR_VERSION_ARB, 3,\nWGL_CONTEXT_MINOR_VERSION_ARB, 1,\nWGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_ES_PROFILE_BIT_EXT,\n0\n};\nHGLRC hglrc = wglCreateContextAttribsARB(wglGetCurrentDC(), NULL, attribList);\nwglMakeCurrent(wglGetCurrentDC(), hglrc);\n On NVIDIA GPUs this is a fully conformant OpenGL ES 3.1\nimplementation\n— http://www.khronos.org/conformance/adopters/conformant-products\n ","New OpenGL ES 3.1 features\n glMemoryBarrierByRegion\n— Like glMemoryBarrier, but potentially more efficient on tillers\n GLSL functionality\n— imageAtomicExchange() support for float32\n— gl_HelperInvocation fragment shader input\n Know which pixels won’t get output\n Skip useless cycles or unwanted side-effects\n— mix() function now supports int, uint and bool\n— gl_MaxSamples\n Implementation maximum sample count\n ","Faster MakeCurrent\n An implicit glFlush is called on MakeCurrent\n— Makes switching contexts slow\n New WGL and GLX extensions allow glFlush to be skipped\n— Commands wait in context queue\n— App has more control over flush\n Provides 2x MakeCurrent performance boost\nStartTimer();\nfor (int i = 0; i \u003c iterations; ++i) {\nDrawSimpleTriangle();\nwglMakeCurrent(context[i % 2]);\n}\nStopTimer();\n ","Disable Implicit glFlush on MakeCurrent\n The Windows way with WGL\nint attribList[] = {\nWGL_CONTEXT_MAJOR_VERSION_ARB, 4,\nWGL_CONTEXT_MINOR_VERSION_ARB, 5,\nWGL_CONTEXT_RELEASE_BEHAVIOR_ARB, WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB,\n0\n};\nHGLRC hglrc = wglCreateContextAttribsARB(wglGetCurrentDC(), NULL, attribList);\nwglMakeCurrent(wglGetCurrentDC(), hglrc);\n ","DirectX 11 Features\n ARB_clip_control\n ARB_conditional_render_inverted\n ARB_cull_distance\n ARB_derivative_control\n ARB_shader_texture_image_samples\n ARB_pipeline_statistics_query (ARB extension)\n ARB_transform_feedback_overflow_query (ARB extension)\n ","ARB_clip_control\n glClipControl(origin, depthMode);\n— y-origin can be flipped during viewport transformation\n— Depth clip range can be [0,1] instead of [-1,1]\n depthMode = GL_NEGATIVE_ONE_TO_ONE: Zw = ((f-n)/2) * Zd + (n+f)/2\n depthMode = GL_ZERO_TO_ONE: Zw = (f-n) * Zd + n\n— Provides direct mapping of [0,1] depth clip coordinates to [0,1] depth\nbuffer values when f=1 and n=0\n No precision loss\norigin=GL_LOWER_LEFT origin=GL_UPPER_LEFT\n ","ARB_conditional_render_inverted\n Allow conditional render to use the negated query result\n Matches the DX11 ::SetPredication(, PredicateValue) option\n Query result negation only happens to landed result\n— Otherwise rendering takes place\nGLuint predicate;\nglCreateQueries(GL_SAMPLES_PASSED, 1, \u0026 predicate);\nglBeginQuery(GL_SAMPLES_PASSED, predicate);\nDrawNothing(); // Draws nothing\nglEndQuery(GL_SAMPLES_PASSED);\nglBeginConditionalRender(predicate, GL_QUERY_WAIT_INVERTED);\nDrawStuff(); // Scene is rendered since SAMPLES_PASSED==0\nglEndConditionalRender();\n More useful with other query targets like\nGL_TRANSFORM_FEEDBACK_OVERFLOW\n ","ARB_cull_distance\n Adds new gl_CullDistance[n] to Vertex, Tessellation, and\nGeometry shaders (VS, TCS, TES and GS)\n Like gl_ClipDistance except when any vertex has negative\ndistance whole primitive is culled\n Matches DX11 SV_CullDistance[n]\nClipping\nPlane\nNegative\ngl_ClipDistance\nPositive\ngl_ClipDistance\nClipped\nClipping\nPlane\nNegative\ngl_CullDistance\nPositive\ngl_CullDistance\nCulled\n ","ARB_derivative_control\n Adds “coarse” and “fine” variant of GLSL derivative functions\n dFdxCoarse, dFdyCoarse\n— Potentially faster performance\n dFdxFine, dFdyFine\n— More correct\n— Default behavior of old dFdx and dFdy functions\n fwidthCoarse and fwidthFine are also added\n2x2 Quad Fragment\ndFdxCoarse\n=\n=\n2x2 Quad Fragment\ndFdxFine=\n= dFdxFine\n ","ARB_shader_texture_image_samples\n New GLSL built-ins to query the sample count of multi-sample\ntexture and image resources\n— textureSamples\n— imageSamples\n Equivalent to the NumberOfSamples return with the\nGetDimensions query in HLSL\n#version 450 core\nuniform sample2DMS tex;\nout vec4 color;\nvoid main() {\nif (textureSamples(tex) \u003e 2) {\ncolor = DoFancyDownsample(tex);\n} else {\ncolor = DoSimpleDownsample(tex);\n}\n}\n ","ARB_pipeline_statistics_query\n New queries for profiling and DX11 compatibility\n— GL_VERTICES_SUBMITTED\n Number of vertices submitted to the GL\n— GL_PRIMITIVES_SUBMITTED\n Number of primitives submitted to the GL\n— GL_VERTEX_SHADER_INVOCATIONS\n Number of times the vertex shader has been invoked\n— GL_TESS_CONTROL_SHADER_PATCHES\n Number of patches processed by the tessellation control shader\n— GL_TESS_EVALUATION_SHADER_INVOCATIONS\n Number of times the tessellation control shader has been invoked\n ","ARB_pipeline_statistics_query cont.\n More queries\n— GL_GEOMETRY_SHADER_INVOCATIONS\n Number of times the geometry shader has been invoked\n— GL_GEOMETRY_SHEDER_PRIMITIVES_EMITTED\n Total number of primitives emitted by geometry shader\n— GL_FRAGMENT_SHADER_INVOCATIONS\n Number of times the fragment shader has been invoked\n— GL_COMPUTE_SHADER_INVOCATIONS\n Number of time the compute shader has been invoked\n— GL_CLIPPING_INPUT_PRIMITIVES\n— GL_CLIPPINT_OUTPUT_PRIMITIVES\n Input and output primitives of the clipping stage\n ","ARB_transform_feedback_overflow_query\n Target queries to indicate Transform Feedback Buffer overflow\n— GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB\n— GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB\n Use glBeginQueryIndex to specify specific stream\n The result of which can be used with conditional render\nGLuint predicate;\nglCreateQueries(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB, 1, \u0026 predicate);\nglBeginQuery(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB, predicate);\nglBeginTransformFeedback(GL_TRIANGLES);\nDrawLotsOfStuff();\nglEndTransformFeedback();\nglEndQuery(GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB);\nglBeginConditionalRender(predicate, GL_QUERY_NO_WAIT_INVERTED);\nDrawStuff(); // Scene not rendered if XFB overflowed buffers\nglEndConditionalRender();\n ","… glEnd() // DX11 Features\n ","Texture Barrier\n Allows rendering to a bound texture\n— Use glTextureBarrier() to safely read previously written texels\n— Behavior is now defined with use of texture barriers\n Allows render-to-texture algorithms to ping-pong without\nexpensive Framebuffer Object (FBO) changes\n— Bind 2D texture array for texturing and as a layered FBO attachment\nDraw gl_Layer=0\nglTextureBarrier()\ntexture\nDraw gl_Layer=1\ntexture\n ","Programmable Blending\n Limited form of programmable blending with non-self-\noverlapping draw calls\n— Bind texture as a render target and for texturing\nglBindTexture(GL_TEXTURE_2D, tex);\nglFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0);\ndirtybbox.empty();\nforeach (object in scene) {\nif (dirtybbox.overlaps(object.bbox())) {\nglTextureBarrier();\ndirtybbox.empty();\n}\nobject.draw();\ndirtybbox = bound(dirtybbox, object.bbox());\n}\n ","Advanced Blending\n KHR_blend_equation_advanced created from\nNV_blend_equation_advanced\n Supported by NVIDIA since r340 – June, 2014\n— GL and ES profiles\n Supported natively on Maxwell and Tegra K1 GPUs\n— Otherwise implemented seamlessly with shaders on Fermi and Kepler\n Implements a subset of NV_blend_equation_advanced modes\n Maxwell and Tegra K1 also provide\nKHR_blend_equation_advanced_coherent\n— Doesn’t require glBlendBarrierKHR between primitives that double-hit\ncolor samples\n ","KHR_blend_equation_advanced Modes\n GL_MULTIPLY_KHR\n GL_SCREEN_KHR\n GL_OVERLAY_KHR\n GL_SOFTLIGHT_KHR\n GL_HARDLIGHT_KHR\n GL_COLORDODGE_KHR\n GL_COLORBURN_KHR\n GL_DARKEN_KHR\n GL_LIGHTEN_KHR\n GL_DIFFERENCE_KHR\n GL_EXCLUSION_KHR\n GL_HSL_HUE_KHR\n GL_HSL_SATURATION_KHR\n GL_HSL_COLOR_KHR\n GL_HSL_LUMINOSITY_KHR\n ","Get Texture Sub Image\n Like glGetTexImage, but now you can read a sub-region\n glGetTextureSubImage\n— DSA only variant\nvoid GetTextureSubImage(uint texture, int level,\nint xoffset, int yoffset, int zoffset, sizei width,\nsizei height, sizei depth, enum format, enum type,\nsizei bufSize, void * pixels);\nDirect State Access\nRobustness\npixels\nyoffset\nxoffset\nwidth\nheight\n For GL_TEXTURE_CUBE_MAP targets zoffset specifies face\n ","ARB_sparse_buffer\n Ability to have large buffer objects without the whole buffer\nbeing resident\n— Analogous to ARB_sparse_texture for buffer objects\n Application controls page residency\n1) Create uncommitted buffer: glBufferStorage(,SPARSE_STORAGE_BIT_ARB)\n2) Make pages resident: glBufferPageCommitmentARB(, offset, size, GL_TRUE);\nGL_SPARSE_BUFFER_PAGE_SIZE_ARB\noffset size\n ","Summary of GLSL 450 additions\n dFdxFine, dFdxCoarse, dFxyFine, dFdyCoarse\n textureSamples, imageSamples\n gl_CullDistance[gl_MaxCullDistances];\n #version 310 es\n imageAtomicExchange on float\n gl_HelperInvocation\n gl_MaxSamples\n mix() on int, uint and bool\n ","OpenGL Demos on K1\nShield Tablet\n• Tegra K1 runs Android\n• Kepler GPU hardware in K1 supports the full OpenGL 4.5\nfeature set\n– Today 4.4, expect 4.5 support\n– OpenGL 4.5 is all the new stuff, plus tons of proven features\n• Tessellation, compute, instancing\n– Plus latest features: bindless, path rendering, blend modes\n• Demos use GameWorks framework\n– Write Android-ready OpenGL code that runs on Windows and Linux too\n ","Programmable Tessellation Demo\non Android\n ","Programmable Tessellation Demo\non Windows\n ","Build, Deploy, and Debug Android Native\nOpenGL Code Right in Visual Studio\n ","GameWorks Compute Shader Example\nlayout (local_size_x =16, local_size_y = 16) in;\nlayout(binding=0, rgba8) uniform mediump image2D inputImage;\nlayout(binding=1, rgba8) uniform mediump image2D resultImage;\nvoid main() {\nfloat u = float(gl_GlobalInvocationID.x);\nfloat v = float(gl_GlobalInvocationID.y);\nvec4 inv = 1.0 - imageLoad(inputImage, ivec2(u,v));\nimageStore(resultImage, ivec2(u,v), inv);\n}\nGLSL Compute\nShader to\ninvert an image\n ","Massive Compute Shader Particle Simulation\n ","Mega Geometry with Instancing\nglDrawElementsInstanced +\nglVertexAttribDivisor\n ","Getting GameWorks\n• Get Tegra Android Development Pack (TADP)\n– All the tools you need for Android development\n• Windows or Linux\n– Includes GameWorks samples\n• Samples also available on Github\nhttps://github.com/NVIDIAGameWorks/OpenGLSamples\n ","OpenGL Debug Features\n KHR_debug added to OpenGL 4.3\n App has access to driver “stderr” message stream\n— Via Callback function or\n— Query of message queue\n Any object can have a meaningful “label”\n Driver can tell app about\n— Errors\n— Performance warnings\n— Hazards\n— Usage hints\n App can insert own events into stream for marking\n ","Why is my screen blank?\nvoid DrawTexture()\n{\nGLuint tex;\nglGenTextures(1, \u0026tex);\nglBindTexture(GL_TEXTURE_2D, tex);\nglTexImage2D(tex, 0, GL_R8, 32, 32, 0, GL_RED, GL_UNSIGNED_BYTE, pixels);\nglEnable(GL_TEXTURE_2D);\nglBegin(GL_QUADS); {\nglTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f);\nglTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, -1.0f);\nglTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, 1.0f);\nglTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f);\n} glEnd();\nSwapBuffers();\n}\nOops – Texture is incomplete!\n ","Enable Debug\n Can be done on-the-fly\nvoid GLAPIENTRY DebugCallback(GLenum source, GLenum type, GLuint id, GLenum\nseverity, GLsizei length, const GLchar* message, const void* userParam)\n{\nprintf(“0x%X: %sn\", id, message);\n}\nvoid DebugDrawTexture()\n{\nglDebugMessageCallback(DebugCallback, NULL);\nglDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE);\nglEnable(GL_DEBUG_OUTPUT);\nDrawTexture();\n}\n The callback function outputs:\n0x20084: Texture state usage warning: Texture 1 has no mipmaps, while its min\nfilter requires mipmap.\nWorks in non-debug context!\n ","Give the texture a name\n Instead of “texture 1” – give it a name\nvoid DrawTexture()\n{\nGLuint tex;\nglGenTextures(1, \u0026tex);\nglBindTexture(GL_TEXTURE_2D, tex);\nGLchar texName[] = \"Sky\";\nglObjectLabel(GL_TEXTURE, tex, sizeof texName, texName);\n...\n}\n The callback function outputs:\n0x20084: Texture state usage warning: Texture Sky has no mipmaps, while its min\nfilter requires mipmap.\n ","Organize your debug trace\n Lots of text can get unwieldy\n— What parts of my code does this error apply?\n Use synchronous debug output:\n— glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);\n— Effectively disables dual-core driver\n— So your callback goes to your calling application thread\n— Instead of a driver internal thread\n Use groups and markers\n— App injects markers to notate debug output\n— Push/pop groups to easily control volume\n ","Notating debug with groups\n Use a group\nvoid DebugDrawTexture()\n{\n...\nGLchar groupName[] = \"DrawTexture\";\nglPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0x1234,\nsizeof groupName, groupName);\nglDebugOutputControl(...); // Can change volume if needed\nDrawTexture();\nglPopDebugGroup(); // Old debug volume restored\n}\n Improved output\n0x1234: DrawTexture PUSH\n0x20084: Texture state usage warning: Texture Sky has no mipmaps, while its\nmin filter requires mipmap.\n0x1234: DrawTexture POP\n ","Debug the easy way\n ","Nsight: Interactive OpenGL debugging\n Frame Debugging and Profiling\n Shader Debugging and Pixel History\n Frame Debugging and Dynamic Shader Editing\n OpenGL API \u0026 Hardware Trace\n Supports up to OpenGL 4.2 Core\n— And a bunch of useful extensions\n https://developer.nvidia.com/nvidia-nsight-visual-studio-edition\n ","OpenGL related Linux improvements\n Support for EGL on desktop Linux within X11 (r331)\n OpenGL-based Framebuffer Capture (NvFBC), for remote\ngraphics (r331)\n Support for Quad-Buffered stereo + Composite X extension\n(GLX_EXT_stereo_tree) (r337)\n Support for G-SYNC (Variable Refresh Rate) (r340)\n Support for Tegra K1: NVIDIA SOC with Kepler graphics core\n— Linux Tegra K1 (Jetson) support leverages same X driver, OpenGL\nimplementation as desktop NVIDIA GPUs\n— NVIDIA also contributing to Nouveau for K1 support\n Coming soon: Framebuffer Object creation dramatically\nfaster!\n ","Beyond OpenGL 4.5  Path Rendering\nPath rendering and blend modes\n Resolution-independent 2D rendering\n Not your classic 3D hardware rendering\nEarlier Illustrator demo showed this\n NV_path_rendering +\nNV_blend_equation_advanced\n ","PostScript Tiger with Perspective Warping\nNo textures!\nPaths rendered from\nresolution-independent\n2D paths (outlines)\n ","Render Fancy Text from Outlines\n ","Paths + Text + 3D all at once\n ","Web Page Rendering\nevery glyph from its outlines!\n ","Zoom in\nand visualize\nglyph outline\ncontrol points\n ","Beyond OpenGL 4.5\n Advanced scene rendering with ARB_multi_draw_indirect\n— Added to OpenGL 4.3\n Bring even more processing onto the GPU with\nNV_bindless_multi_draw_indirect\n— Even less work for the CPU – no Vertex Buffer Object (VBO) binds\nbetween draws\n Covered in depth by Christoph Kubisch yesterday\n— SG4117: OpenGL Scene Rendering Techniques\n ","NV_bindless_multi_draw_indirect\n DrawIndirect combined with Bindless\nstruct DrawElementsIndirect {\nGLuint count;\nGLuint instanceCount;\nGLuint firstIndex;\nGLint baseVertex;\nGLuint baseInstance;\n}\nstruct BindlessPtr {\nGluint index;\nGluint reserved;\nGLuint64 address;\nGLuint64 length;\n}\nstruct DrawElementsIndirectBindlessCommandNV {\nDrawElementsIndirect cmd;\nGLuint reserved;\nBindlessPtr index;\nBindlessPtr vertex[];\n}\nChange vertex buffers per draw iteration!\nChange index buffer per draw iteration!\nMultiDrawElementsIndirectBindlessNV(enum mode, enum type, const void *indirect,\nsizei drawCount, sizei stride, int vertexBufferCount);\nCaveat: Does the CPU know the drawCount?\nThe GL_BUFFER_GPU_ADDRESS_NV of the buffer object\n ","NV_bindless_multi_draw_indirect_count\n Source the drawCount from a buffer object\nvoid MultiDrawElementsIndirectBindlessCountNV(\nenum mode,\nenum type,\nconst void * indirect,\nintptr drawCount,\nsizei maxDrawCount,\nsizei stride,\nint vertexBufferCount\n);\ndrawCount now an offset into the bound GL_PARAMETER_BUFFER_ARB buffer range.\n ","Khronos OpenGL BOF at SIGGRAPH\n Date: Wednesday, August 13 2014\n Venue: Marriott Pinnacle Hotel, next to the Convention\nCenter\n Website: http://s2014.siggraph.org\n Times: 5pm-7pm OpenGL and OpenGL ES Track\n BOF After-Party: 7:30pm until late\n— Rumor: Free beer and door prizes\n ","Questions?\n "],"twitterShareUrl":"https://twitter.com/intent/tweet?via=SlideShare\u0026text=OpenGL+4.5+Update+for+NVIDIA+GPUs+%23dsa+%23gameworks+https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fopengl-45-update-for-nvidia-gpus%2F37922750","type":"presentation","slideDimensions":{"height":486,"width":864},"topReadSlides":[{"slideIndex":79,"ranking":1},{"slideIndex":16,"ranking":2},{"slideIndex":18,"ranking":3}],"user":{"id":"15647293","isFollowing":false,"login":"Mark_Kilgard","name":"Mark Kilgard","occupation":"Graphics Software Engineer","organization":"NVIDIA","photo":"https://cdn.slidesharecdn.com/profile-photo-Mark_Kilgard-48x48.jpg?cb=1648161688","photoExists":true,"shortName":"Mark Kilgard"},"views":36377},"_nextI18Next":{"initialI18nStore":{"en":{"common":{"ad":{"fallbackText":"Ad for Scribd subscription","label":"Ad","close":"Close Ad","dismiss_in":"Dismiss in","ad_info_title":"Why are you seeing this?","ad_info_description":"We use ads to keep content free and accessible for everyone. You can remove them by \u003c2\u003esigning up\u003c/2\u003e for a SlideShare subscription."},"error":{"favorite_add":"We couldn't add SlideShare to favorites","favorite_remove":"We couldn't remove SlideShare from favorites","follow":"There was a problem following this user","unfollow":"There was a problem un-following this user","save":"Unable to save this item at this time.","remove_save":"We couldn't remove from your saved items"},"header":{"hamburger_menu_aria_label":"Open navigation menu","logo":{"alt":"SlideShare a Scribd company logo","title":"Return to the homepage"},"home":"Home","explore":"Explore","search":{"placeholder":"Search","aria_label":"Search SlideShare","button":"Submit Search"},"upload":"Upload","login":"Login","signup":{"label":"Download free for 30 days","title":"Signup now for a SlideShare account"},"user":{"aria_label":"User Settings","clipboards":"My Clipboards","uploads":"My Uploads","analytics":"Analytics","settings":"Account Settings","support":"Support","logout":"Logout"}},"footer":{"link":{"about":"About","support":"Support","terms":"Terms","privacy":"Privacy","copyright":"Copyright","cookie":"Cookie Preferences","privacyRights":"Do not sell or share my personal information"},"language_selector":{"aria_label":"Change Language","hidden_text":"Current Language"},"copyright":"SlideShare from Scribd","social":{"rss":{"aria_label":"Slideshare on RSS Feed","title":"RSS"},"twitter":{"aria_label":"Slideshare on Twitter","title":"Twitter"}}},"app_notification_banner":{"notification_text":"We've updated our privacy policy.","notification_link_text_desktop":"Click here to review the details.","notification_link_text_mobile":"Tap here to review the details."},"privacy_policy_explicit_opt_in_modal":{"modal_title":"We've updated our privacy policy.","modal_content_paragraph_one":"We’ve updated our privacy policy so that we are compliant with changing global privacy regulations and to provide you with insight into the limited ways in which we use your data.","modal_content_paragraph_two":"You can read the details below. By accepting, you agree to the updated privacy policy.","modal_content_paragraph_three":"Thank you!","modal_action_assertive":"Accept and continue","modal_action":"View updated privacy policy","modal_action_error":"We've encountered a problem, please try again."},"actions":{"addToSaved":"Save for later","all_saved":"All Saved","back":"Back","close":"Close","cancel":"Cancel","save":"Save","saved":"Saved","submit":"Submit","next":"Next","previous":"Previous","removeSaved":"Remove from saved","scrollLeft":"Scroll Left","scrollRight":"Scroll Right","save_to_new_list_success":"Saved to "},"form":{"required":"Required"},"slideshow_card":{"slideshow_type":{"document":"Document","infographic":"Infographic","presentation":"Presentation","documents":"Documents","infographics":"Infographics","presentations":"Presentations","downloads":"Downloads","likes":"Likes"},"slideshow_type_unit":{"presentation":"Slide","document":"Page","infographic":"Page"},"pages_count_one":"{{count}} page","pages_count_other":"{{count}} pages","slides_count_one":"{{count}} slide","slides_count_other":"{{count}} slides","screen_reader_text":"{{title}} by {{author}}","screen_reader_text_extended":"{{title}} by {{author}}, has {{slideCount}} slides with {{viewCount}} views.","view_one":"view","view_other":"views"},"image_alt":{"studying":"Abstract image of a woman sitting on books and studying on a laptop"},"items":{"count_one":"{{count}} item","count_other":"{{count}} items"},"time":{"second_one":"{{count}} second","second_other":"{{count}} seconds"},"timeSince":{"minutes_ago":"{{count}} min. ago","hours_ago_one":"{{count}} hour ago","hours_ago_other":"{{count}} hours ago","days_ago_one":"{{count}} day ago","days_ago_other":"{{count}} days ago","months_ago_one":"{{count}} month ago","months_ago_other":"{{count}} months ago","years_ago_one":"{{count}} year ago","years_ago_other":"{{count}} years ago"},"see_more":"See more","see_less":"See Less","yes":"Yes","no":"No","signup":"Sign Up"},"player":{"actions":{"all_saved":"All Saved","clip":"Clip Slide","copy_text":"Copy text","copy_text_success":"Text copied to clipboard","copy_text_error":"Failed to copy the text. Please try again!","download_presentation":"Download presentation","download_slide":"Download slide","download_document":"Download document","download_page":"Download page","download_now":"Download now","download":"Download","favorite":"Favorite","remove_favorite":"Remove favorite","remove_like":"Remove like","like":"Like","follow":"Follow","unfollow":"Unfollow","more_options":"More options","share":"Share","save_slide":"Save slide","saved":"Saved","remove_from_list":"Remove from list {{listname}}","removed_from_list":"Saved item has been removed from the List","removed_from_list_error":"Could not remove the saved item from list","save_error":"Unable to save this item at this time.","save_to_new_list":"New list","save_to_list":"Save to list {{listname}}","scroll_view":"Scroll view","scroll_view_description":"Vertically scroll through all slides","slideshow_view":"Slideshow view","slideshow_view_description":"View one slide at a time","no_saved_lists":"You don't have any lists created yet."},"ads":{"label":"Ad","skip":"Skip to next slide","skip_countdown":"You can skip to the next slide in","continue_in":"Continue in","change_volume":"Change Volume","download_read_ad_free":"Download to read ad-free","scroll":"Scroll to read more"},"ad_block_interstitial":{"title_1":"Keep SlideShare free —","title_2":"please disable your ad blocker.","button_label":"Show me how","message":"Hate ads? Join Scribd to browse SlideShare and Scribd ad-free.","cta":"Try Scribd for free"},"author":{"by":"by","follow":"Follow","following":"Following","keynoteAuthor":"Keynote Author"},"download":{"success":"Your SlideShare is downloading."},"editors_notes":"Editor's Notes","end_of_reading":{"loading":"Loading in","title":"Check these out next","next_slideshares":"Next SlideShares","upcoming_slideshare":"Upcoming SlideShare"},"first_clip":{"title":"You just clipped your first slide!","description":"Clipping is a handy way to collect important slides you want to go back to later. Now customize the name of a clipboard to store your clips."},"metadata":{"at":"at","aiTag":{"descriptionLabel":"AI-enhanced description","descriptionTooltipTitle":"AI-Enhanced Description","descriptionTooltip":"Leveraging AI technology, we've optimized the description for improved clarity.","titleLabel":"AI-enhanced title","titleTooltipTitle":"AI-Enhanced Title","titleTooltip":"Leveraging AI technology, we've optimized the title for improved clarity.","titleAndDescriptionLabel":"AI-enhanced title and description","titleAndDescriptionTooltipTitle":"AI-Enhanced Title and Description","titleAndDescriptionTooltip":"Leveraging AI technology, we've optimized the title and description for improved clarity."},"download":{"bottomSheetTitle":"Download format","label_short":"Download","label":"Download now","description":"Download to read offline","download_count":"Downloaded {{count}} times"},"download_as":"Download as {{formatTypes}}","free_download":"Free Download","readMore":"Read more","readLess":"Read less","more":"more","category":{"label":"Category","description":"View the featured presentations, documents and infographics in the"},"dateFormat":"MMM. D, YYYY","most_read":"Most read","pages":"Pages","page":"Page"},"navigation":{"next_slide":"Next Slide","previous_slide":"Previous Slide","slide_count_of_total_count":"\u003cspan data-cy='current-slide-number' class='current-slide-number j-current-slide'\u003e{{slideCount}}\u003c/span\u003e of \u003cspan class='total-slides j-total-slides'\u003e{{totalCount}}\u003c/span\u003e","view_fullscreen":"View Fullscreen","zoom_in":"Zoom In","zoom_out":"Zoom Out"},"new_clipboard_modal":{"title":"Create a clipboard","name":{"label":"Name","placeholder":"Best of Slides","error":"Name cannot be blank"},"description":{"label":"Description","placeholder":"Add a brief description so other know what your clipboard is about."},"visibility":{"label":"Visibility","description":"Others can see my Clipboard"}},"select_clipboard_modal":{"title":"Select a clipboard","message":"Looks like you've already clipped this slide","button":"Create a clipboard"},"share":"Share SlideShare","rec":{"related":"Related slideshows","recommended_for_you":"Recommended for you","descTooltipTitle":"About the slideshow","recommended":{"title":"Recommended","shortTitle":"Recommended"},"relatedContent":{"title":"More Related Content","shortTitle":"More Related Content"},"featured":{"title":"Featured","shortTitle":"Featured"},"forYou":{"title":"Slideshows for you","shortTitle":"Slideshows for you"},"alsoLiked":{"title":"Viewers also liked","shortTitle":"Viewers also liked"},"latest":{"title":"Recently uploaded","shortTitle":"Recently uploaded"},"moreFromUser":{"title":"More from {{name}}","shortTitle":"More from uploader"},"similarTo":{"title":"Similar to {{title}}","shortTitle":"Similar to"},"whatsHot":{"title":"What's hot","shortTitle":"What's hot"}},"scribd":{"books":{"label":"Ebook","title":"Related Books"},"audioBooks":{"label":"Audiobook","title":"Related Audiobooks"},"error":{"title":"Oops! Something went wrong.","description":"We're sorry, but we can't find any related content at this time.","button":"Try again"},"freeWithTrial":"Free with a 30 day trial from {{brand}}","viewAll":"View All"},"error":{"clipboard":"We couldn't create your clipboard","save":"We couldn't save this item","unsave":"We couldn't remove from your saved items","blocked":"This user has blocked you","private_content":"Private content!","privacy_explanation":"This content has been marked as private by the uploader.","enter_password":"Enter password","file_protected":"This file is password protected.","password_incorrect":"The password is incorrect.","private_presentation":"Private Presentation","private_content_message":"This uploaded file has been marked private by the author. Sorry!","removed_content_title":"Uploaded Content Removed","removed_content_message":"The uploaded content has been removed and is no longer available.","redirect_message":"Redirecting to the homepage in","something_went_wrong_title":"Sorry! The page could not be loaded.","something_went_wrong_message":"This is probably a temporary error. Just refresh the page and retry. If the problem continues, please check back in 5-10 minutes.","not_found_title":"Sorry! We could not find what you were looking for.","not_found_message":"Don't worry, we will help you get to the right place. Are you looking for:"},"save_to_new_list_modal":{"title":"Add to a new list","list_name_input_label":"What would you like to name this list?","list_privacy_label":"Make list private","cancel_button_label":"Cancel","save_list_button_label":"Save","success":"Saved to ","error":"We couldn't save this item to {{listname}}"},"confirm_remove_save_modal":{"title":"This saved item is also in a list.","description":"Removing from saved will also delete the item from your lists","cancel_button_label":"Cancel","delete_button_label":"Delete"},"seo_metadata_test":{"description_suffix":"Download as a PDF or view online for free"}},"metadata":{"gallery_view":"Gallery","gallery_view_label":"Gallery View","like_one":"like","like_other":"likes","likeWithCount_one":"{{count}} like","likeWithCount_other":"{{count}} likes","view_one":"view","view_other":"views","saved_one":"saved","saved_other":"saved","from_embeds":"From embeds","number_of_embeds":"Number of embeds","on_slideshare":"On Slideshare","total_views":"Total views","split_char":",","decimal_point":".","show_more":"Show More","likes":{"empty_message":"Be the first to like this","loading_message":"Loading..."},"slide_one":"slide","slide_other":"slides","slide_count_of_total":"of"},"report":{"more":"More options","share":"Share","report":"Report","edit":"Edit","viewAnalytics":"View Analytics","flag_as_inappropriate":"Report as inappropriate","error":"There was an error while reporting this slideshow. Please try again.","flag":"Flag","copyright_complaint":"Copyright Complaint","select_a_reason":"Select a reason","select_your_reason":"Select your reason for reporting this presentation as inappropriate.","none":"None","porn":"Pornographic","defamatory":"Defamatory","ultraviolence":"Extremely Violent or Promotes Terrorism","hate_speech":"Hate Speech","offensive":"Offensive Language or Threatening","spam":"Spam or Scam","form":{"title":"Report content","description":"If you are the copyright owner of this document and want to report it, please visit the \u003cCustomLink href='example.com'\u003ecopyright infringement notice page\u003c/CustomLink\u003e to submit a report.","error_category":"Select a category to submit your report","error_subtype":"Select a sub-category to submit your report","default_subtype":"Select an option...","category":{"illegal":{"label":"Illegal","description":"Content that breaks the law or promotes illegal activities.","subtypes":{"child_exploitation":"Minor Exploitation","child_sexual_abuse_material":"Child Sexual Abuse","dangerous_products_or_services":"Dangerous Products/Services","non_violent_crime":"Non-Violent Offenses","sex_related_crime":"Sexual Offenses","violent_crime":"Violent Offenses","terrorism":"Terrorism","general":"Other"}},"explicit":{"label":"Explicit","description":"Content that is graphic, offensive, or disturbing.","subtypes":{"sexually_explicit_content":"Sexually Explicit","shocking_content":"Shocking or Disturbing","general":"Other"}},"dangerous_and_deragatory":{"label":"Dangerous \u0026 Derogatory","description":"Content that encourages harmful, threatening, or hateful behavior.","subtypes":{"menacing":"Threatening Behavior","incitement":"Inciting Violence or Hatred","self_harm":"Self-harm","general":"Other"}},"deceptive_and_fraudulent":{"label":"Deceptive \u0026 Fraudulent","description":"Content that intentionally misleads, deceives, or engages in fraudulent activities.","subtypes":{"academic_integrity":"Academic Dishonesty","misinformation":"Spreading False Information","general":"Other"}},"guideline_ignoring":{"label":"Intellectual Property","description":"Content that uses someone else's protected work without permission.","subtypes":{"ip_infringement_copyright":"IP infringement (copyright)","ip_infringement_non_copyright":"IP infringement (non-copyright)","general":"Other"}},"privacy":{"label":"Privacy","description":"Content that misuses personal information.","subtypes":{"privacy_general":"General Privacy","privacy_child":"Child Privacy"}},"spam":{"label":"Spam","description":"Unsolicited and repetitive content that disrupts your experience."},"low_quality":{"label":"Low Quality","description":"Content that fails to meet minimum standards for clarity, relevance, or completeness."}}}},"share_modal":{"close":"Close","embed_title":"Embed","embed_size":"Size (px)","link":"Link","start":"Start on","title":"Share this SlideShare","share_facebook":"Share on Facebook","share_linkedin":"Share on Linkedin","share_twitter":"Tweet on Twitter"},"next_slideshow":{}}},"initialLocale":"en","ns":["common","player","metadata","report","share_modal","next_slideshow"],"userConfig":null},"_sentryTraceData":"ef2fb05e114f4b4cbdce46b2182bd00f-933cc708179dc32b-1","_sentryBaggage":"sentry-environment=production,sentry-public_key=7e7cafa2920448ed81ac67de08abbeed,sentry-trace_id=ef2fb05e114f4b4cbdce46b2182bd00f,sentry-sample_rate=1,sentry-transaction=%2Fslideshow%2F%5Btitle%5D%2F%5Bid%5D,sentry-sampled=true"},"__N_SSP":true},"page":"/slideshow/[title]/[id]","query":{"title":"opengl-45-update-for-nvidia-gpus","id":"37922750"},"buildId":"24d6d1951e60542c5d6ed68398963595c0cca34b","assetPrefix":"https://public.slidesharecdn.com","runtimeConfig":{"assetPrefix":"https://public.slidesharecdn.com"},"isFallback":false,"isExperimentalCompile":false,"gssp":true,"locale":"en","locales":["en","de","es","pt","fr"],"defaultLocale":"en","domainLocales":[{"domain":"www.slideshare.net","defaultLocale":"en"},{"domain":"de.slideshare.net","defaultLocale":"de"},{"domain":"es.slideshare.net","defaultLocale":"es"},{"domain":"pt.slideshare.net","defaultLocale":"pt"},{"domain":"fr.slideshare.net","defaultLocale":"fr"}],"scriptLoader":[]}</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10