2013-04-19 02:55:05 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// Copyright 2013 Pixar
|
2013-04-19 02:55:05 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
|
|
// with the following modification; you may not use this file except in
|
|
|
|
// compliance with the Apache License and the following modification to it:
|
|
|
|
// Section 6. Trademarks. is deleted and replaced with:
|
2013-04-19 02:55:05 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// 6. Trademarks. This License does not grant permission to use the trade
|
|
|
|
// names, trademarks, service marks, or product names of the Licensor
|
|
|
|
// and its affiliates, except as required to comply with Section 4(c) of
|
|
|
|
// the License and to reproduce the content of the NOTICE file.
|
2013-04-19 02:55:05 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// You may obtain a copy of the Apache License at
|
2013-04-19 02:55:05 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
2013-07-18 21:19:50 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the Apache License with the above modification is
|
|
|
|
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
|
|
// KIND, either express or implied. See the Apache License for the specific
|
|
|
|
// language governing permissions and limitations under the Apache License.
|
2013-04-19 02:55:05 +00:00
|
|
|
//
|
|
|
|
|
|
|
|
#include "../osd/cpuEvalLimitContext.h"
|
|
|
|
#include "../osd/vertexDescriptor.h"
|
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
#include <cassert>
|
|
|
|
#include <cstdio>
|
|
|
|
#include <cmath>
|
|
|
|
|
|
|
|
namespace OpenSubdiv {
|
|
|
|
namespace OPENSUBDIV_VERSION {
|
|
|
|
|
|
|
|
OsdCpuEvalLimitContext *
|
2014-03-28 19:10:13 +00:00
|
|
|
OsdCpuEvalLimitContext::Create(FarPatchTables const *patchTables, bool requireFVarData) {
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2014-03-28 19:10:13 +00:00
|
|
|
assert(patchTables);
|
2013-04-19 02:55:05 +00:00
|
|
|
|
|
|
|
// we do not support uniform yet
|
2014-03-28 19:10:13 +00:00
|
|
|
if (not patchTables->IsFeatureAdaptive())
|
2013-04-19 02:55:05 +00:00
|
|
|
return NULL;
|
|
|
|
|
2014-03-28 19:10:13 +00:00
|
|
|
return new OsdCpuEvalLimitContext(patchTables, requireFVarData);
|
2013-04-19 02:55:05 +00:00
|
|
|
}
|
|
|
|
|
2014-03-28 19:10:13 +00:00
|
|
|
OsdCpuEvalLimitContext::OsdCpuEvalLimitContext(FarPatchTables const *patchTables, bool requireFVarData) :
|
|
|
|
OsdEvalLimitContext(patchTables) {
|
2013-04-19 02:55:05 +00:00
|
|
|
|
|
|
|
assert(patchTables);
|
|
|
|
|
2013-05-16 21:21:11 +00:00
|
|
|
// copy the data from the FarTables
|
|
|
|
_patches = patchTables->GetPatchTable();
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-05-16 21:21:11 +00:00
|
|
|
_patchArrays = patchTables->GetPatchArrayVector();
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-06-18 01:13:13 +00:00
|
|
|
_vertexValenceTable = patchTables->GetVertexValenceTable();
|
2013-05-16 21:21:11 +00:00
|
|
|
|
2013-06-18 01:13:13 +00:00
|
|
|
_quadOffsetTable = patchTables->GetQuadOffsetTable();
|
2013-05-16 21:21:11 +00:00
|
|
|
|
2013-05-22 19:10:49 +00:00
|
|
|
_maxValence = patchTables->GetMaxValence();
|
|
|
|
|
2013-05-16 21:21:11 +00:00
|
|
|
// Copy the bitfields, the faceId will be the key to our map
|
|
|
|
int npatches = patchTables->GetNumPatches();
|
|
|
|
|
|
|
|
_patchBitFields.reserve(npatches);
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-05-24 23:29:28 +00:00
|
|
|
FarPatchTables::PatchParamTable const & ptxTable =
|
|
|
|
patchTables->GetPatchParamTable();
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-05-24 23:29:28 +00:00
|
|
|
if ( not ptxTable.empty() ) {
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-05-17 16:47:44 +00:00
|
|
|
FarPatchParam const * pptr = &ptxTable[0];
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-05-16 21:21:11 +00:00
|
|
|
for (int arrayId = 0; arrayId < (int)_patchArrays.size(); ++arrayId) {
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-05-16 21:21:11 +00:00
|
|
|
FarPatchTables::PatchArray const & pa = _patchArrays[arrayId];
|
2013-04-19 02:55:05 +00:00
|
|
|
|
2013-05-16 21:21:11 +00:00
|
|
|
for (unsigned int j=0; j < pa.GetNumPatches(); ++j) {
|
|
|
|
_patchBitFields.push_back( pptr++->bitField );
|
|
|
|
}
|
2013-04-19 02:55:05 +00:00
|
|
|
}
|
|
|
|
}
|
2013-05-16 21:21:11 +00:00
|
|
|
|
2013-06-13 20:58:23 +00:00
|
|
|
// Copy the face-varying table if necessary
|
2013-06-07 01:07:46 +00:00
|
|
|
if (requireFVarData) {
|
2014-04-05 02:10:34 +00:00
|
|
|
_fvarwidth = patchTables->GetFVarData().GetFVarWidth();
|
2013-06-07 01:07:46 +00:00
|
|
|
if (_fvarwidth>0) {
|
2014-04-05 02:10:34 +00:00
|
|
|
_fvarData = patchTables->GetFVarData().GetAllData();
|
2013-06-07 01:07:46 +00:00
|
|
|
}
|
|
|
|
}
|
2013-06-13 20:58:23 +00:00
|
|
|
|
|
|
|
_patchMap = new FarPatchMap( *patchTables );
|
2013-04-19 02:55:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
OsdCpuEvalLimitContext::~OsdCpuEvalLimitContext() {
|
|
|
|
delete _patchMap;
|
|
|
|
}
|
|
|
|
|
2013-06-18 01:13:13 +00:00
|
|
|
void
|
|
|
|
OsdCpuEvalLimitContext::VertexData::Unbind() {
|
|
|
|
|
|
|
|
inDesc.Reset();
|
|
|
|
in.Unbind();
|
|
|
|
|
|
|
|
outDesc.Reset();
|
|
|
|
out.Unbind();
|
|
|
|
outDu.Unbind();
|
|
|
|
outDv.Unbind();
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
OsdCpuEvalLimitContext::VaryingData::Unbind() {
|
|
|
|
|
|
|
|
inDesc.Reset();
|
|
|
|
in.Unbind();
|
|
|
|
|
|
|
|
outDesc.Reset();
|
|
|
|
out.Unbind();
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
OsdCpuEvalLimitContext::FaceVaryingData::Unbind() {
|
|
|
|
|
|
|
|
inDesc.Reset();
|
|
|
|
|
|
|
|
outDesc.Reset();
|
|
|
|
out.Unbind();
|
|
|
|
}
|
|
|
|
|
2013-04-19 02:55:05 +00:00
|
|
|
} // end namespace OPENSUBDIV_VERSION
|
|
|
|
} // end namespace OpenSubdiv
|