Sophie

Sophie

distrib > PLD > th > x86_64 > by-pkgid > 3b87faceb47db01a011d04a86cccd880 > files > 1197

OpenSubdiv-apidocs-3.5.1-1.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<title>osd_tutorial_0.cpp</title>
<link rel="icon" type="image/png" href="images/icon.png">
<link rel="stylesheet" href="css/rst.css" type="text/css" />
<link rel="stylesheet" href="css/default.css" type="text/css" />
<link rel="stylesheet" href="css/flavor.css" type="text/css" />
<link rel="stylesheet" href="css/renderman-university.css" type="text/css" />
<link rel="stylesheet" href="css/pygments.css" type="text/css" />
<style>
#mainContentContainer {
    left: 15px;
    margin-left: 255px;
}
ul.creatorFooterNav {
    margin-left: 250px;
}
.navigation {
    background-color: #333333;
    margin-top: 10px;
    margin-left: 10px;
}
ul.creatorMainNav li a {
    font-size: 12px !important;
}
.copyrightFooter {
    font-size: 11px;
    margin-top: 25px;
    text-align: center;
    float: none;
}
</style>
</head>
<body>

<div class="navigation">
    <br>
    <div class="searchBar">
        <form action="search.html">
            <input type="text" name="q" id="searchInput" />
            <input type="button" id="searchButton" onclick="this.form.submit();" value="Search" />
        </form>
    </div>
    <div class="quickLinks">
        <ul>
            <li><a href="intro.html">Introduction</a></li>
                <ul>
                    <li><a href="license.html">License</a></li>
                    <li><a href="getting_started.html">Getting Started</a></li>
                    <li><a href="contributing.html">Contributing</a></li>
                    <li><a href="cmake_build.html">Building OpenSubdiv</a></li>
                    <li><a href="code_examples.html">Code Examples</a></li>
                    <li><a href="references.html">References</a></li>
                </ul>
            <p></p>
            <li><a href="subdivision_surfaces.html">Subdivision Surfaces</a>
                <ul>
                    <li><a href="subdivision_surfaces.html#piecewise-parametric-surfaces">Piecewise Parametric Surfaces</a></li>
                    <li><a href="subdivision_surfaces.html#arbitrary-topology">Arbitrary Topology</a></li>
                    <li><a href="subdivision_surfaces.html#subdivision-versus-tessellation">Subdivision versus Tessellation</a></li>
                    <li><a href="subdivision_surfaces.html#mesh-data-and-topology">Mesh Data and Topology</a></li>
                    <li><a href="subdivision_surfaces.html#schemes-and-options">Schemes and Options</a></li>
                    <li><a href="mod_notes.html">Modeling Tips</a></li>
                </ul>
            </li>
            <p></p>
            <li><a href="api_overview.html">OpenSubdiv User Guide</a>
                <ul>
                    <li><a href="api_overview.html">API Overview</a>
                    <ul>
                        <li><a href="sdc_overview.html">Sdc</a></li>
                        <li><a href="vtr_overview.html">Vtr</a></li>
                        <li><a href="far_overview.html">Far</a></li>
                        <ul>
                            <li><a href="far_overview.html#far-topologyrefiner">Topology Refiner</a></li>
                            <li><a href="far_overview.html#far-topologyrefinerfactory">Topology Refiner Factory</a></li>
                            <li><a href="far_overview.html#far-primvarrefiner">Primvar Refiner</a></li>
                            <li><a href="far_overview.html#far-patchtable">Patch Table</a></li>
                            <li><a href="far_overview.html#far-stenciltable">Stencil Table</a></li>
                        </ul>
                        <li><a href="bfr_overview.html">Bfr</a></li>
                        <ul>
                            <li><a href="bfr_overview.html#bfr-navlink-evaluation">Evaluation</a></li>
                            <li><a href="bfr_overview.html#bfr-navlink-parameterization">Parameterization</a></li>
                            <li><a href="bfr_overview.html#bfr-navlink-tessellation">Tessellation</a></li>
                            <li><a href="bfr_overview.html#bfr-navlink-surfacefactory">More on Surface Factory</a></li>
                            <li><a href="bfr_overview.html#bfr-navlink-customizing">Custom Surface Factory</a></li>
                        </ul>
                        <li><a href="osd_overview.html">Osd</a></li>
                        <ul>
                            <li><a href="osd_shader_interface.html">Shader Interface</a></li>
                        </ul>
                    </ul>
                    </li>
                    <li><a href="tutorials.html">Tutorials</a>
                    <li><a href="hbr_overview.html">Historical But Relevant</a></li>
                    <ul>
                        <li><a href="hbr_overview.html">Hbr</a></li>
                        <ul>
                            <li><a href="using_osd_hbr.html">Using Hbr</a></li>
                        </ul>
                        <li><a href="hedits.html">Hierarchical Edits</a></li>
                    </ul>
                </ul>
            </li>
            <p></p>
            <li><a href="additional_resources.html">Additional Resources</a>
                <ul>
                    <li><a href="http://graphics.pixar.com/opensubdiv/forum.html">Forum</a>
                    <li><a href="additional_resources.html#links">Links</a>
                    <li><a href="additional_resources.html#videos">Videos</a>
                </ul>
            <p></p>
            <li><a href="release_notes.html">Releases</a>
                <ul>
                    <li><a href="release_35.html">Release 3.5</a></li>
                    <li><a href="release_34.html">Release 3.4</a></li>
                    <li><a href="release_33.html">Release 3.3</a></li>
                    <li><a href="release_32.html">Release 3.2</a></li>
                    <li><a href="release_31.html">Release 3.1</a></li>
                    <li><a href="release_30.html">Release 3.0</a></li>
                        <ul>
                            <li><a href="release_30.html">Overview</a></li>
                            <li><a href="porting.html">Porting Guide: 2.0 to 3.0</a></li>
                            <li><a href="compatibility.html">Subdivision Compatibility</a></li>
                        </ul>
                    <li><a href="release_notes.html">Release Notes</a></li>
                </ul>
            <p></p>
            <li><a href="doxy_html/index.html" target="_blank">Doxygen</a></li>
        </ul>
    </div>
    <br>
</div>

<div class="document" id="osd-tutorial-0-cpp">
<h1 class="title">osd_tutorial_0.cpp</h1>


    <div id="mainContentContainer">
        <div class="fullWidth headerColor">
            <div class="center">
                <div id="mainSiteNavigation">
                    <div class="homeRenderManLink">
                        <a href="http://graphics.pixar.com/opensubdiv/index.html"><img alt="OpenSubdiv Logo" src="images/opensubdiv_logo_header.png"></a>
                    </div>
          
					<!-- TOP NAVIGATION MENU -->
                    <ul class="creatorMainNav floatLeft" id="menu">
                        <li class="creatorMainNav">
                            <a href="release_notes.html">3.5.1</a>
                        </li>
                    </ul>
                    <ul class="creatorMainNav floatNav" id="menu">
                        <li class="mainSubNavigation marginR12 marginL12" id="navbarId-23704">
                            <a href="intro.html">User Docs</a>
                        </li>
                        <li class="mainSubNavigation marginR12 marginL12" id="navbarId-23887">
                            <a href="doxy_html/index.html">API Docs</a>
                        </li>
                        <li class="mainSubNavigation marginR12 marginL12" id="navbarId-23944">
                            <a href="release_notes.html">Release Notes</a>
                        </li>
                        <li class="mainSubNavigation marginR15 marginL12" id="navbarId-23703">
                            <a href="http://graphics.pixar.com/opensubdiv/forum.html">Forum</a>
                        </li>
                        <a class="blueButton marginR0 marginL0" style="width:70px" href="https://github.com/PixarAnimationStudios/OpenSubdiv">Github</a>
                    </ul>
                </div><!-- close mainSiteNavigation -->
            </div><!-- close center -->
        </div><!-- close fullWidth -->


        <div class="clearBoth"></div>
        
        <h1 class="articleContentTitle">osd_tutorial_0.cpp</h1>
        
        <div class="clearBoth"></div>
        
        <hr>
        
        <div class="clearBoth"></div>
        
        <div class="coursewareBackground">

          <!-- <div class="topicLeftData-IntroPara"></div> -->
          <div class="topicLeftData-MainData">
<p><a class="reference external" href="https://github.com/PixarAnimationStudios/OpenSubdiv/blob/release/tutorials/osd/tutorial_0/osd_tutorial_0.cpp">https://github.com/PixarAnimationStudios/OpenSubdiv/blob/release/tutorials/osd/tutorial_0/osd_tutorial_0.cpp</a></p>
<hr class="docutils" />
<pre class="code c++ literal-block">
<span class="comment single">//------------------------------------------------------------------------------
// Tutorial description:
//
// This tutorial demonstrates the manipulation of Osd Evaluator and
// BufferDescriptor.
//
</span><span class="whitespace">
</span><span class="comment preproc">#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;opensubdiv/far/topologyDescriptor.h&gt;</span><span class="comment preproc">
#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;opensubdiv/far/stencilTableFactory.h&gt;</span><span class="comment preproc">
#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;opensubdiv/osd/cpuEvaluator.h&gt;</span><span class="comment preproc">
#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;opensubdiv/osd/cpuVertexBuffer.h&gt;</span><span class="comment preproc">
</span><span class="whitespace">
</span><span class="comment preproc">#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;cstdio&gt;</span><span class="comment preproc">
#include</span><span class="whitespace"> </span><span class="comment preprocfile">&lt;cstring&gt;</span><span class="comment preproc">
</span><span class="whitespace">
</span><span class="comment single">//------------------------------------------------------------------------------
// Cube geometry from catmark_cube.h
</span><span class="keyword">static</span><span class="whitespace"> </span><span class="keyword type">float</span><span class="whitespace"> </span><span class="name">g_verts</span><span class="punctuation">[</span><span class="literal number integer">24</span><span class="punctuation">]</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">{</span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">
                             </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">
                            </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">
                             </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">
                            </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace">
                             </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace">  </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace">
                            </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace">
                             </span><span class="literal number float">0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number float">-0.5f</span><span class="punctuation">};</span><span class="whitespace">

</span><span class="keyword">static</span><span class="whitespace"> </span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">g_nverts</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="literal number integer">8</span><span class="punctuation">,</span><span class="whitespace">
           </span><span class="name">g_nfaces</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="literal number integer">6</span><span class="punctuation">;</span><span class="whitespace">

</span><span class="keyword">static</span><span class="whitespace"> </span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">g_vertsperface</span><span class="punctuation">[</span><span class="literal number integer">6</span><span class="punctuation">]</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">{</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="whitespace"> </span><span class="punctuation">};</span><span class="whitespace">

</span><span class="keyword">static</span><span class="whitespace"> </span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">g_vertIndices</span><span class="punctuation">[</span><span class="literal number integer">24</span><span class="punctuation">]</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="punctuation">{</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="whitespace">
                                 </span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">5</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="whitespace">
                                 </span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">5</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">7</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">6</span><span class="punctuation">,</span><span class="whitespace">
                                 </span><span class="literal number integer">6</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">7</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace">
                                 </span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">7</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">5</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="whitespace">
                                 </span><span class="literal number integer">6</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">4</span><span class="whitespace">  </span><span class="punctuation">};</span><span class="whitespace">

</span><span class="keyword">using</span><span class="whitespace"> </span><span class="keyword">namespace</span><span class="whitespace"> </span><span class="name namespace">OpenSubdiv</span><span class="punctuation">;</span><span class="whitespace">

</span><span class="keyword">static</span><span class="whitespace"> </span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyRefiner</span><span class="whitespace"> </span><span class="keyword">const</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="name">createTopologyRefiner</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">maxlevel</span><span class="punctuation">);</span><span class="whitespace">

</span><span class="comment single">//------------------------------------------------------------------------------
</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name function">main</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="keyword type">char</span><span class="whitespace"> </span><span class="operator">**</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="punctuation">{</span><span class="whitespace">

    </span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">maxlevel</span><span class="operator">=</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="whitespace">
        </span><span class="name">nCoarseVerts</span><span class="operator">=</span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace">
        </span><span class="name">nRefinedVerts</span><span class="operator">=</span><span class="literal number integer">0</span><span class="punctuation">;</span><span class="whitespace">

    </span><span class="comment single">//
</span><span class="whitespace">    </span><span class="comment single">// Setup phase
</span><span class="whitespace">    </span><span class="comment single">//
</span><span class="whitespace">    </span><span class="name">Far</span><span class="operator">::</span><span class="name">StencilTable</span><span class="whitespace"> </span><span class="keyword">const</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="name">stencilTable</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name builtin">NULL</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="punctuation">{</span><span class="whitespace"> </span><span class="comment single">// Setup Far::StencilTable
</span><span class="whitespace">        </span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyRefiner</span><span class="whitespace"> </span><span class="keyword">const</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="name">refiner</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">createTopologyRefiner</span><span class="punctuation">(</span><span class="name">maxlevel</span><span class="punctuation">);</span><span class="whitespace">

        </span><span class="comment single">// Setup a factory to create FarStencilTable (for more details see
</span><span class="whitespace">        </span><span class="comment single">// Far tutorials)
</span><span class="whitespace">        </span><span class="name">Far</span><span class="operator">::</span><span class="name">StencilTableFactory</span><span class="operator">::</span><span class="name">Options</span><span class="whitespace"> </span><span class="name">options</span><span class="punctuation">;</span><span class="whitespace">
        </span><span class="name">options</span><span class="punctuation">.</span><span class="name">generateOffsets</span><span class="operator">=</span><span class="name builtin">true</span><span class="punctuation">;</span><span class="whitespace">
        </span><span class="name">options</span><span class="punctuation">.</span><span class="name">generateIntermediateLevels</span><span class="operator">=</span><span class="name builtin">false</span><span class="punctuation">;</span><span class="whitespace">

        </span><span class="name">stencilTable</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">Far</span><span class="operator">::</span><span class="name">StencilTableFactory</span><span class="operator">::</span><span class="name">Create</span><span class="punctuation">(</span><span class="operator">*</span><span class="name">refiner</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">options</span><span class="punctuation">);</span><span class="whitespace">

        </span><span class="name">nCoarseVerts</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">refiner</span><span class="operator">-&gt;</span><span class="name">GetLevel</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">).</span><span class="name">GetNumVertices</span><span class="punctuation">();</span><span class="whitespace">
        </span><span class="name">nRefinedVerts</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">stencilTable</span><span class="operator">-&gt;</span><span class="name">GetNumStencils</span><span class="punctuation">();</span><span class="whitespace">

        </span><span class="comment single">// We are done with Far: cleanup table
</span><span class="whitespace">        </span><span class="keyword">delete</span><span class="whitespace"> </span><span class="name">refiner</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="punctuation">}</span><span class="whitespace">

    </span><span class="comment single">// Setup a buffer for vertex primvar data:
</span><span class="whitespace">    </span><span class="name">Osd</span><span class="operator">::</span><span class="name">CpuVertexBuffer</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="name">vbuffer</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace">
        </span><span class="name">Osd</span><span class="operator">::</span><span class="name">CpuVertexBuffer</span><span class="operator">::</span><span class="name">Create</span><span class="punctuation">(</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">nCoarseVerts</span><span class="whitespace"> </span><span class="operator">+</span><span class="whitespace"> </span><span class="name">nRefinedVerts</span><span class="punctuation">);</span><span class="whitespace">

    </span><span class="comment single">//
</span><span class="whitespace">    </span><span class="comment single">// Execution phase (every frame)
</span><span class="whitespace">    </span><span class="comment single">//
</span><span class="whitespace">    </span><span class="punctuation">{</span><span class="whitespace">
        </span><span class="comment single">// Pack the control vertex data at the start of the vertex buffer
</span><span class="whitespace">        </span><span class="comment single">// and update every time control data changes
</span><span class="whitespace">        </span><span class="name">vbuffer</span><span class="operator">-&gt;</span><span class="name">UpdateData</span><span class="punctuation">(</span><span class="name">g_verts</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">nCoarseVerts</span><span class="punctuation">);</span><span class="whitespace">


        </span><span class="name">Osd</span><span class="operator">::</span><span class="name">BufferDescriptor</span><span class="whitespace"> </span><span class="name">srcDesc</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="punctuation">);</span><span class="whitespace">
        </span><span class="name">Osd</span><span class="operator">::</span><span class="name">BufferDescriptor</span><span class="whitespace"> </span><span class="name">dstDesc</span><span class="punctuation">(</span><span class="name">nCoarseVerts</span><span class="operator">*</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="punctuation">);</span><span class="whitespace">

        </span><span class="comment single">// Launch the computation
</span><span class="whitespace">        </span><span class="name">Osd</span><span class="operator">::</span><span class="name">CpuEvaluator</span><span class="operator">::</span><span class="name">EvalStencils</span><span class="punctuation">(</span><span class="name">vbuffer</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">srcDesc</span><span class="punctuation">,</span><span class="whitespace">
                                        </span><span class="name">vbuffer</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">dstDesc</span><span class="punctuation">,</span><span class="whitespace">
                                        </span><span class="name">stencilTable</span><span class="punctuation">);</span><span class="whitespace">
    </span><span class="punctuation">}</span><span class="whitespace">

    </span><span class="punctuation">{</span><span class="whitespace"> </span><span class="comment single">// Visualization with Maya : print a MEL script that generates particles
</span><span class="whitespace">      </span><span class="comment single">// at the location of the refined vertices
</span><span class="whitespace">
        </span><span class="name">printf</span><span class="punctuation">(</span><span class="literal string">&quot;particle &quot;</span><span class="punctuation">);</span><span class="whitespace">
        </span><span class="keyword type">float</span><span class="whitespace"> </span><span class="keyword">const</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="name">refinedVerts</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">vbuffer</span><span class="operator">-&gt;</span><span class="name">BindCpuBuffer</span><span class="punctuation">()</span><span class="whitespace"> </span><span class="operator">+</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="operator">*</span><span class="name">nCoarseVerts</span><span class="punctuation">;</span><span class="whitespace">
        </span><span class="keyword">for</span><span class="whitespace"> </span><span class="punctuation">(</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">i</span><span class="operator">=</span><span class="literal number integer">0</span><span class="punctuation">;</span><span class="whitespace"> </span><span class="name">i</span><span class="operator">&lt;</span><span class="name">nRefinedVerts</span><span class="punctuation">;</span><span class="whitespace"> </span><span class="operator">++</span><span class="name">i</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="punctuation">{</span><span class="whitespace">
            </span><span class="keyword type">float</span><span class="whitespace"> </span><span class="keyword">const</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="name">vert</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">refinedVerts</span><span class="whitespace"> </span><span class="operator">+</span><span class="whitespace"> </span><span class="literal number integer">3</span><span class="operator">*</span><span class="name">i</span><span class="punctuation">;</span><span class="whitespace">
            </span><span class="name">printf</span><span class="punctuation">(</span><span class="literal string">&quot;-p %f %f %f</span><span class="literal string escape">\n</span><span class="literal string">&quot;</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">vert</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">],</span><span class="whitespace"> </span><span class="name">vert</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">],</span><span class="whitespace"> </span><span class="name">vert</span><span class="punctuation">[</span><span class="literal number integer">2</span><span class="punctuation">]);</span><span class="whitespace">
        </span><span class="punctuation">}</span><span class="whitespace">
        </span><span class="name">printf</span><span class="punctuation">(</span><span class="literal string">&quot;-c 1;</span><span class="literal string escape">\n</span><span class="literal string">&quot;</span><span class="punctuation">);</span><span class="whitespace">
    </span><span class="punctuation">}</span><span class="whitespace">

    </span><span class="keyword">delete</span><span class="whitespace"> </span><span class="name">stencilTable</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="keyword">delete</span><span class="whitespace"> </span><span class="name">vbuffer</span><span class="punctuation">;</span><span class="whitespace">
</span><span class="punctuation">}</span><span class="whitespace">

</span><span class="comment single">//------------------------------------------------------------------------------
</span><span class="keyword">static</span><span class="whitespace"> </span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyRefiner</span><span class="whitespace"> </span><span class="keyword">const</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace">
</span><span class="name">createTopologyRefiner</span><span class="punctuation">(</span><span class="keyword type">int</span><span class="whitespace"> </span><span class="name">maxlevel</span><span class="punctuation">)</span><span class="whitespace"> </span><span class="punctuation">{</span><span class="whitespace">

    </span><span class="comment single">// Populate a topology descriptor with our raw data
</span><span class="whitespace">
    </span><span class="keyword">typedef</span><span class="whitespace"> </span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyDescriptor</span><span class="whitespace"> </span><span class="name">Descriptor</span><span class="punctuation">;</span><span class="whitespace">

    </span><span class="name">Sdc</span><span class="operator">::</span><span class="name">SchemeType</span><span class="whitespace"> </span><span class="name">type</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">OpenSubdiv</span><span class="operator">::</span><span class="name">Sdc</span><span class="operator">::</span><span class="name">SCHEME_CATMARK</span><span class="punctuation">;</span><span class="whitespace">

    </span><span class="name">Sdc</span><span class="operator">::</span><span class="name">Options</span><span class="whitespace"> </span><span class="name">options</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="name">options</span><span class="punctuation">.</span><span class="name">SetVtxBoundaryInterpolation</span><span class="punctuation">(</span><span class="name">Sdc</span><span class="operator">::</span><span class="name">Options</span><span class="operator">::</span><span class="name">VTX_BOUNDARY_EDGE_ONLY</span><span class="punctuation">);</span><span class="whitespace">

    </span><span class="name">Descriptor</span><span class="whitespace"> </span><span class="name">desc</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="name">desc</span><span class="punctuation">.</span><span class="name">numVertices</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">g_nverts</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="name">desc</span><span class="punctuation">.</span><span class="name">numFaces</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">g_nfaces</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="name">desc</span><span class="punctuation">.</span><span class="name">numVertsPerFace</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">g_vertsperface</span><span class="punctuation">;</span><span class="whitespace">
    </span><span class="name">desc</span><span class="punctuation">.</span><span class="name">vertIndicesPerFace</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace"> </span><span class="name">g_vertIndices</span><span class="punctuation">;</span><span class="whitespace">

    </span><span class="comment single">// Instantiate a FarTopologyRefiner from the descriptor
</span><span class="whitespace">    </span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyRefiner</span><span class="whitespace"> </span><span class="operator">*</span><span class="whitespace"> </span><span class="name">refiner</span><span class="whitespace"> </span><span class="operator">=</span><span class="whitespace">
        </span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyRefinerFactory</span><span class="operator">&lt;</span><span class="name">Descriptor</span><span class="operator">&gt;::</span><span class="name">Create</span><span class="punctuation">(</span><span class="name">desc</span><span class="punctuation">,</span><span class="whitespace">
            </span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyRefinerFactory</span><span class="operator">&lt;</span><span class="name">Descriptor</span><span class="operator">&gt;::</span><span class="name">Options</span><span class="punctuation">(</span><span class="name">type</span><span class="punctuation">,</span><span class="whitespace"> </span><span class="name">options</span><span class="punctuation">));</span><span class="whitespace">

    </span><span class="comment single">// Uniformly refine the topology up to 'maxlevel'
</span><span class="whitespace">    </span><span class="name">refiner</span><span class="operator">-&gt;</span><span class="name">RefineUniform</span><span class="punctuation">(</span><span class="name">Far</span><span class="operator">::</span><span class="name">TopologyRefiner</span><span class="operator">::</span><span class="name">UniformOptions</span><span class="punctuation">(</span><span class="name">maxlevel</span><span class="punctuation">));</span><span class="whitespace">

    </span><span class="keyword">return</span><span class="whitespace"> </span><span class="name">refiner</span><span class="punctuation">;</span><span class="whitespace">
</span><span class="punctuation">}</span><span class="whitespace">

</span><span class="comment single">//------------------------------------------------------------------------------</span>
</pre>
</div>
<div class="footer">
<hr class="footer" />
Generated on: 2023-09-06 15:35 UTC.

</div>
</body>
</html>

          </div><!-- close topicLeftData-MainData -->
        </div><!-- close coursewareBackground -->
    </div> <!-- close mainContentContainer -->
</div> <!-- close center -->

<!-- BOTTOM NAVIGATION MENU -->
    <ul class="creatorFooterNav">
        <li class="" id="navbarId-23704">
            <a href="intro.html">User Docs</a>
        </li>
        <li class="" id="navbarId-23887">
            <a href="doxy_html/index.html">API Docs</a>
        </li>
        <li class="" id="navbarId-23944">
            <a href="release_notes.html">Release Notes</a>
        </li>
        <li class="" id="navbarId-23703">
            <a href="http://graphics.pixar.com/opensubdiv/forum.html">Forum</a>
        </li>
    </ul><!-- end bottom navigation menu -->

<div class="clearBoth"></div>

<div class="center">
    <div class="copyrightFooter">
    TM &amp; &#169; 1986 - 2017 PIXAR. ALL RIGHTS RESERVED. <a class="copyrightFooter" target="_blank" href="https://www.pixar.com/terms-of-use#terms-of-use-1">Terms of Use</a>
    </div>
</div>

<div class="clearBoth"></div>