# Overview of Release 3.2

- New Features
  - Face-Varying Stencil Evaluation
  - 1st and 2nd Derivative Evaluation
  - Smooth Corner Patch
- API Additions
  - Osd::CpuEvaluator, GLComputeEvaluator, etc
  - Osd::Mesh
  - Osd::MeshBits
  - Far::PatchTableFactory::Options
  - Far::StencilTableFactory
  - Far::StencilTableFactory::Options
- Other Changes
  - Improvements
  - Bug Fixes

### New Features

#### Face-Varying Stencil Evaluation

Face-Varying primvar values may now be refined using stencil tables.

The stencil table for a face-varying channel is created by specifying the desired fvarChannel and setting the Far::StencilTableFactory::Option interpolationMode to INTERPOLATE_FACE_VARYING when creating the stencil table.

#### 1st and 2nd Derivative Evaluation

The Osd Evaluator API has been extended to support 1st derivative and 2nd partial derivative evaluation for stencils and patches.

1st Derivative Surface Normal | 2nd Derivative Surface Curvature

On the left is an example of computing a surface normal at each point using the evaluated 1st derivatives, while on the right is an example of computing surface curvature at each point using the evaluated 2nd partial derivatives.

#### Smooth Corner Patch

An option has been added to disable the legacy behavior of generating a sharp-corner patch at a smooth corner. Corners which are actually sharp will continue to generate sharp-corner patches.

The differences between the two methods is most apparent at low-levels of feature isolation.

This feature is controlled by the generateLegacySharpCornerPatches option added to Far::PatchTableFactory::Options.

Sharp Corner Patch (legacy behavior) | Smooth Corner Patch

On the left is the legacy behavior of generating sharp corner patches at smooth corners. The image on the right shows the correct smooth corner patches generated when this legacy behavior is disabled.

### API Additions

See associated Doxygen for full details.

#### Osd::CpuEvaluator, GLComputeEvaluator, etc

> - Create()
> - EvalStencils()
> - EvalPatches()
> - EvalPatchesVarying()
> - EvalPatchesFaceVarying()

#### Osd::Mesh

> - Create()

#### Osd::MeshBits

> - member MeshUseSmoothCornerPatch

#### Far::PatchTableFactory::Options

> - member generateLegacySharpCornerPatches

#### Far::StencilTableFactory

> - enumeration Mode::INTERPOLATE_FACE_VARYING
> - AppendLocalPointStencilTableFaceVarying()

#### Far::StencilTableFactory::Options

> - member fvarChannel

### Other Changes

#### Improvements

> - Corrected numerous spelling errors in doxygen comments
> - Updated glFVarViewer with improved error detection and command line parsing
> - Added option to build using MSVC with static CRT

#### Bug Fixes

> - Fixed a double delete of GL program in Osd::GLComputeEvaluator