00001 /*============================================================================== 00002 ** THE CONTENT OF THIS WORK IS PROPRIETARY TO FEI S.A.S, (FEI S.A.S.), ** 00003 ** AND IS DISTRIBUTED UNDER A LICENSE AGREEMENT. ** 00004 ** ** 00005 ** REPRODUCTION, DISCLOSURE, OR USE, IN WHOLE OR IN PART, OTHER THAN AS ** 00006 ** SPECIFIED IN THE LICENSE ARE NOT TO BE UNDERTAKEN EXCEPT WITH PRIOR ** 00007 ** WRITTEN AUTHORIZATION OF FEI S.A.S. ** 00008 ** ** 00009 ** RESTRICTED RIGHTS LEGEND ** 00010 ** USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT OF THE CONTENT OF THIS ** 00011 ** WORK OR RELATED DOCUMENTATION IS SUBJECT TO RESTRICTIONS AS SET FORTH IN ** 00012 ** SUBPARAGRAPH (C)(1) OF THE COMMERCIAL COMPUTER SOFTWARE RESTRICTED RIGHT ** 00013 ** CLAUSE AT FAR 52.227-19 OR SUBPARAGRAPH (C)(1)(II) OF THE RIGHTS IN ** 00014 ** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 52.227-7013. ** 00015 ** ** 00016 ** COPYRIGHT (C) 1996-2022 BY FEI S.A.S, ** 00017 ** BORDEAUX, FRANCE ** 00018 ** ALL RIGHTS RESERVED ** 00019 ==============================================================================*/ 00020 00021 #pragma once 00022 00023 #include <Inventor/nodes/SoNode.h> 00024 #include <Inventor/fields/SoSFEnum.h> 00025 #include <Inventor/fields/SoSFVec3i32.h> 00026 #include <Inventor/fields/SoSFTrigger.h> 00027 00028 class SoGLRenderAction; 00029 class SoNotList; 00030 00063 class SoComputeShaderScheduler : public SoNode 00064 { 00065 SO_NODE_HEADER(SoComputeShaderScheduler); 00066 00067 public: 00071 enum Policy 00072 { 00076 EACH_FRAME, 00077 00083 ON_TRIGGER, 00084 }; 00085 00092 SoSFVec3i32 numWorkGroups; 00093 00099 SoSFEnum policy; 00100 00106 SoSFTrigger trigger; 00107 00108 SoComputeShaderScheduler(); 00109 00113 virtual SbBool affectsState() const 00114 { 00115 return FALSE; 00116 } 00117 00118 private: 00119 virtual void GLRender(SoGLRenderAction* action); 00120 00121 private: 00122 static void initClass(); 00123 static void exitClass(); 00124 00125 virtual void fieldHasChanged(SoField* field); 00126 virtual void notify(SoNotList* list); 00127 00128 virtual bool shouldCompute(SoGLRenderAction* action); 00129 00130 private: 00131 virtual ~SoComputeShaderScheduler(); 00132 00133 private: 00134 bool m_triggerCalled; 00135 }; 00136