Skip to content

Commit

Permalink
Merge pull request #1311 from yannci/ieSceneShapeProxy
Browse files Browse the repository at this point in the history
SceneShapeProxy
  • Loading branch information
ivanimanishi authored Nov 3, 2022
2 parents b6182a1 + d0cd1f4 commit df242ef
Show file tree
Hide file tree
Showing 16 changed files with 520 additions and 118 deletions.
1 change: 1 addition & 0 deletions include/IECoreMaya/MayaTypeIds.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ enum MayaTypeId
GeometryCombinerId = 0x00110DD2,
SceneShapeId = 0x00110DD3,
SceneShapeInterfaceId = 0x00110DD4,
SceneShapeProxyId = 0x00110DD5,
/// Don't forget to update MayaTypeIdsBinding.cpp

LastId = 0x00110E3F,
Expand Down
67 changes: 67 additions & 0 deletions include/IECoreMaya/SceneShapeProxy.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
//////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2022, Image Engine Design Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of Image Engine Design nor the names of any
// other contributors to this software may be used to endorse or
// promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////

#ifndef IE_COREMAYA_SCENESHAPEPROXY_H
#define IE_COREMAYA_SCENESHAPEPROXY_H

#include "IECoreMaya/SceneShape.h"

namespace IECoreMaya
{

/// A proxy derived from the SceneShape which exposes the same functionality as the base clase
/// with the exception, that we never register it as a maya SubSceneOverride. The reasoning
/// behind this is that the SubSceneOverride does not take into account the visibility state of the shape.
/// During an update loop of the SubSceneOverride, all SceneShapes will be queried for their update state,
/// regardless their visibility in the scene. This query is slow and we get a huge drop in performance
/// when having a huge amount of SceneShapes in the scene.
/// This is considered to be a bug in the ViewPort 2 API. Our attempts to rewrite the code to use
/// "MPxGeometryOverride" or "MPxDrawOverride" prove themselves as unstable or not suitable for our
/// use case, why we decided to use this "hackery" and not register a proxy of the SceneShape for
/// drawing at all
class IECOREMAYA_API SceneShapeProxy : public SceneShape
{
public :

SceneShapeProxy();
virtual ~SceneShapeProxy();

static void *creator();
static MStatus initialize();
static MTypeId id;
};

}

#endif // IE_COREMAYA_SCENESHAPEPROXY_H
59 changes: 59 additions & 0 deletions include/IECoreMaya/SceneShapeProxyUI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
//////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2022, Image Engine Design Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of Image Engine Design nor the names of any
// other contributors to this software may be used to endorse or
// promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////

#ifndef IECOREMAYA_SCENESHAPEPROXYUI_H
#define IECOREMAYA_SCENESHAPEPROXYUI_H

#include "maya/MPxSurfaceShapeUI.h"
#include "maya/MTypes.h"
#include "IECoreMaya/Export.h"

namespace IECoreMaya
{

/// The SceneShapeProxyUI is required for the registration of the SceneShapeProxy and we just make it a NoOp
/// TODO: It might be worth to see if the SceneShapeUI has any dependencies on the drawing capabilities of the
/// shape and if that's not the case, register SceneShapeProxy with the original implementation of SceneShapeUI
class IECOREMAYA_API SceneShapeProxyUI : public MPxSurfaceShapeUI
{

public :

SceneShapeProxyUI();
static void *creator();
};

} // namespace IECoreMaya

#endif // IECOREMAYA_SCENESHAPEPROXYUI_H
1 change: 1 addition & 0 deletions mel/IECoreMaya/IECoreMaya.mel
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,4 @@ source "IECoreMaya/ieDrawableHolderUI.mel";
source "IECoreMaya/ieGeometryCombinerUI.mel";
source "IECoreMaya/ieCurveCombinerUI.mel";
source "IECoreMaya/ieSceneShapeUI.mel";
source "IECoreMaya/ieSceneShapeProxyUI.mel";
63 changes: 63 additions & 0 deletions mel/IECoreMaya/ieSceneShapeProxyUI.mel
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
//////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2022, Image Engine Design Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of Image Engine Design nor the names of any
// other contributors to this software may be used to endorse or
// promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////


global proc AEieSceneShapeProxyTemplate( string $nodeName )
{
editorTemplate -beginScrollLayout;

editorTemplate -beginLayout "Inputs";
editorTemplate -annotation "Path to the scene interface file." -addControl "file" ;
editorTemplate -annotation "Path in the scene interface where you start reading." -addControl "root";
editorTemplate -annotation "If on, only read the object at the root path." -addControl "objectOnly";
editorTemplate -addControl "time";

editorTemplate -endLayout;

editorTemplate -beginLayout "Queries";
editorTemplate -addControl "querySpace";
editorTemplate -addControl "queryPaths";
editorTemplate -addControl "queryAttributes";
editorTemplate -addControl "queryConvertParameters";

editorTemplate -endLayout;

editorTemplate -beginLayout "All Dynamic Attributes";
editorTemplate -beginLayout "Open With Caution - Maya May Hang";
editorTemplate -extraControlsLabel "Too Late Now!" -addExtraControls;
editorTemplate -endLayout;
editorTemplate -endLayout;

editorTemplate -endScrollLayout;
}
Loading

0 comments on commit df242ef

Please sign in to comment.