2012-12-11 01:15:13 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// Copyright 2013 Pixar
|
2012-12-11 01:15:13 +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:
|
2012-12-11 01:15:13 +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.
|
2012-12-11 01:15:13 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
// You may obtain a copy of the Apache License at
|
2012-12-11 01:15:13 +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.
|
2012-12-11 01:15:13 +00:00
|
|
|
//
|
2013-09-26 19:04:57 +00:00
|
|
|
|
2012-12-11 01:15:13 +00:00
|
|
|
#ifndef EXAMPLES_MAYAPTEXVIEWER_OPENSUBDIVPTEXSHADER_H_
|
|
|
|
#define EXAMPLES_MAYAPTEXVIEWER_OPENSUBDIVPTEXSHADER_H_
|
|
|
|
|
|
|
|
// full include needed for scheme/interp enums
|
|
|
|
// class OsdPtexMeshData;
|
|
|
|
#include "osdPtexMeshData.h"
|
|
|
|
|
|
|
|
#include <osd/glDrawContext.h>
|
|
|
|
#include <osd/glPtexTexture.h>
|
|
|
|
|
|
|
|
#include <maya/MPxHwShaderNode.h>
|
|
|
|
#include <maya/MViewport2Renderer.h>
|
|
|
|
#include <maya/MImage.h>
|
|
|
|
|
|
|
|
class OpenSubdivPtexShader : public MPxHwShaderNode
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
OpenSubdivPtexShader();
|
|
|
|
virtual ~OpenSubdivPtexShader();
|
|
|
|
|
|
|
|
// MPxNode methods
|
|
|
|
static void *creator();
|
|
|
|
static MStatus initialize();
|
|
|
|
|
|
|
|
// MPxNode virtuals
|
|
|
|
virtual void postConstructor();
|
|
|
|
virtual MStatus compute(const MPlug &plug, MDataBlock &data);
|
|
|
|
virtual bool getInternalValueInContext(const MPlug &plug, MDataHandle &handle, MDGContext &);
|
|
|
|
virtual bool setInternalValueInContext(const MPlug &plug, const MDataHandle &handle, MDGContext &);
|
|
|
|
|
|
|
|
// MPxHwShaderNode virtuals
|
|
|
|
virtual MStatus renderSwatchImage(MImage & image);
|
|
|
|
|
|
|
|
//
|
|
|
|
// Non-Viewport 2.0 rendering: geometry/glGeometry, bind/glBind and unbind/glUnbind
|
|
|
|
// are not implemented at this time. mayaViewer must be run under Viewport 2.0.
|
|
|
|
//
|
|
|
|
|
|
|
|
void updateAttributes();
|
|
|
|
void draw(const MHWRender::MDrawContext &context, OsdPtexMeshData *data);
|
|
|
|
|
|
|
|
// Accessors
|
|
|
|
void setHbrMeshDirty(bool dirty) { _hbrMeshDirty = dirty; }
|
|
|
|
bool getHbrMeshDirty() { return _hbrMeshDirty; }
|
|
|
|
|
|
|
|
int getLevel() const { return _level; }
|
|
|
|
bool isAdaptive() const { return _adaptive; }
|
|
|
|
|
|
|
|
OsdPtexMeshData::SchemeType getScheme() const { return _scheme; }
|
|
|
|
OsdPtexMeshData::KernelType getKernel() const { return _kernel; }
|
|
|
|
OsdPtexMeshData::InterpolateBoundaryType getInterpolateBoundary() const { return _interpolateBoundary; }
|
|
|
|
|
|
|
|
// Identifiers
|
|
|
|
static MTypeId id;
|
|
|
|
static MString drawRegistrantId;
|
|
|
|
|
|
|
|
// Offsets from GL_TEXTURE0
|
|
|
|
static const int CLR_TEXTURE_UNIT = 5;
|
|
|
|
static const int DISP_TEXTURE_UNIT = 8;
|
|
|
|
static const int OCC_TEXTURE_UNIT = 11;
|
|
|
|
static const int DIFF_TEXTURE_UNIT = 14;
|
|
|
|
static const int ENV_TEXTURE_UNIT = 15;
|
|
|
|
|
|
|
|
private:
|
|
|
|
void updateRegistry();
|
|
|
|
|
|
|
|
GLuint bindTexture(const MString& filename, int textureUnit);
|
|
|
|
GLuint bindProgram(const MHWRender::MDrawContext & mDrawContext,
|
|
|
|
OpenSubdiv::OsdGLDrawContext *osdDrawContext,
|
|
|
|
const OpenSubdiv::OsdPatchArray & patch);
|
|
|
|
|
|
|
|
OpenSubdiv::OsdGLPtexTexture * loadPtex(const MString &filename);
|
|
|
|
bool bindPtexTexture(const MString& ptexFilename,
|
|
|
|
OpenSubdiv::OsdGLPtexTexture **osdPtexPtr,
|
|
|
|
int samplerUnit);
|
|
|
|
|
|
|
|
// OSD attributes
|
|
|
|
static MObject aLevel;
|
|
|
|
static MObject aTessFactor;
|
|
|
|
static MObject aScheme;
|
|
|
|
static MObject aKernel;
|
|
|
|
static MObject aInterpolateBoundary;
|
|
|
|
static MObject aAdaptive;
|
|
|
|
static MObject aWireframe;
|
|
|
|
|
|
|
|
// Material attributes
|
|
|
|
static MObject aDiffuse;
|
|
|
|
static MObject aAmbient;
|
|
|
|
static MObject aSpecular;
|
|
|
|
|
|
|
|
// Shader
|
|
|
|
static MObject aShaderSource;
|
|
|
|
|
|
|
|
// Ptex-specific attributes
|
|
|
|
static MObject aDiffuseEnvironmentMapFile;
|
|
|
|
static MObject aSpecularEnvironmentMapFile;
|
|
|
|
static MObject aColorFile;
|
|
|
|
static MObject aDisplacementFile;
|
|
|
|
static MObject aOcclusionFile;
|
|
|
|
|
|
|
|
static MObject aEnableDisplacement;
|
|
|
|
static MObject aEnableColor;
|
|
|
|
static MObject aEnableOcclusion;
|
|
|
|
static MObject aEnableNormal;
|
|
|
|
|
|
|
|
static MObject aFresnelBias;
|
|
|
|
static MObject aFresnelScale;
|
|
|
|
static MObject aFresnelPower;
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
// OSD parameters
|
|
|
|
int _level;
|
|
|
|
int _tessFactor;
|
|
|
|
bool _adaptive;
|
|
|
|
bool _wireframe;
|
|
|
|
|
|
|
|
OsdPtexMeshData::SchemeType _scheme;
|
|
|
|
OsdPtexMeshData::KernelType _kernel;
|
|
|
|
OsdPtexMeshData::InterpolateBoundaryType _interpolateBoundary;
|
|
|
|
|
|
|
|
// Material parameters
|
|
|
|
MColor _diffuse;
|
|
|
|
MColor _ambient;
|
|
|
|
MColor _specular;
|
|
|
|
|
|
|
|
// Texture manager
|
|
|
|
MHWRender::MTextureManager *_theTextureManager;
|
|
|
|
|
|
|
|
// Ptex-specific parameters
|
|
|
|
bool _enableColor;
|
|
|
|
bool _enableDisplacement;
|
|
|
|
bool _enableOcclusion;
|
|
|
|
bool _enableNormal;
|
|
|
|
|
|
|
|
MString _ptexColorFile;
|
|
|
|
MColor _ptexDisplacementFile;
|
|
|
|
MColor _ptexOcclusionFile;
|
|
|
|
OpenSubdiv::OsdGLPtexTexture * _ptexColor;
|
|
|
|
OpenSubdiv::OsdGLPtexTexture * _ptexDisplacement;
|
|
|
|
OpenSubdiv::OsdGLPtexTexture * _ptexOcclusion;
|
|
|
|
|
|
|
|
MString _colorFile;
|
|
|
|
MString _displacementFile;
|
|
|
|
MString _occlusionFile;
|
|
|
|
|
|
|
|
MString _diffEnvMapFile;
|
|
|
|
MString _specEnvMapFile;
|
|
|
|
|
|
|
|
float _fresnelBias;
|
|
|
|
float _fresnelScale;
|
|
|
|
float _fresnelPower;
|
|
|
|
|
|
|
|
// Shader
|
|
|
|
std::string _shaderSource;
|
|
|
|
MString _shaderSourceFilename;
|
|
|
|
|
|
|
|
// Plugin flags
|
|
|
|
bool _hbrMeshDirty;
|
|
|
|
bool _adaptiveDirty;
|
|
|
|
bool _diffEnvMapDirty;
|
|
|
|
bool _specEnvMapDirty;
|
|
|
|
|
|
|
|
bool _ptexColorDirty;
|
|
|
|
bool _ptexDisplacementDirty;
|
|
|
|
bool _ptexOcclusionDirty;
|
|
|
|
|
|
|
|
bool _shaderSourceDirty;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // EXAMPLES_MAYAPTEXVIEWER_OPENSUBDIVPTEXSHADER_H_
|