Coin Logo Coin3D is Free Software,
published under the BSD 3-clause license.
https://coin3d.github.io
https://www.kongsberg.com/en/kogt/
SoGLRenderAction.h
Go to the documentation of this file.
1 #ifndef COIN_SOGLRENDERACTION_H
2 #define COIN_SOGLRENDERACTION_H
3 
4 /**************************************************************************\
5  * Copyright (c) Kongsberg Oil & Gas Technologies AS
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are
10  * met:
11  *
12  * Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in the
17  * documentation and/or other materials provided with the distribution.
18  *
19  * Neither the name of the copyright holder nor the names of its
20  * contributors may be used to endorse or promote products derived from
21  * this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 \**************************************************************************/
35 
36 #include <Inventor/actions/SoAction.h>
37 #include <Inventor/actions/SoSubAction.h>
38 #include <Inventor/SbBasic.h>
39 #include <Inventor/SbViewportRegion.h>
40 #include <Inventor/system/inttypes.h>
41 #include <Inventor/lists/SoPathList.h>
42 #include <Inventor/lists/SbList.h>
43 
44 typedef void SoGLRenderPassCB(void * userdata);
45 typedef void SoGLPreRenderCB(void * userdata, class SoGLRenderAction * action);
46 typedef float SoGLSortedObjectOrderCB(void * userdata, SoGLRenderAction * action);
47 
48 class SoGLRenderActionP;
49 
50 class COIN_DLL_API SoGLRenderAction : public SoAction {
51  typedef SoAction inherited;
52 
53  SO_ACTION_HEADER(SoGLRenderAction);
54 
55 public:
56  static void initClass(void);
57 
58  SoGLRenderAction(const SbViewportRegion & viewportregion);
59  virtual ~SoGLRenderAction(void);
60 
63  ADD, DELAYED_ADD, SORTED_OBJECT_ADD,
64  BLEND, DELAYED_BLEND, SORTED_OBJECT_BLEND,
65  // The remaining are Coin extensions to the common Inventor API
68  NONE, SORTED_LAYERS_BLEND
69  };
70 
73  NONSOLID_SEPARATE_BACKFACE_PASS
74  };
75 
76  enum AbortCode {
77  CONTINUE, ABORT, PRUNE, DELAY
78  };
79 
84  CUSTOM_CALLBACK
85  };
86 
87  typedef AbortCode SoGLRenderAbortCB(void * userdata);
88 
89  void setViewportRegion(const SbViewportRegion & newregion);
90  const SbViewportRegion & getViewportRegion(void) const;
91  void setUpdateArea(const SbVec2f & origin, const SbVec2f & size);
92  void getUpdateArea(SbVec2f & origin, SbVec2f & size) const;
93  void setAbortCallback(SoGLRenderAbortCB * const func, void * const userdata);
94  void getAbortCallback(SoGLRenderAbortCB * & func_out, void * & userdata_out) const;
95  void setTransparencyType(const TransparencyType type);
96  TransparencyType getTransparencyType(void) const;
97  void setTransparentDelayedObjectRenderType(TransparentDelayedObjectRenderType type);
98  TransparentDelayedObjectRenderType getTransparentDelayedObjectRenderType(void) const;
99  void setSmoothing(const SbBool smooth);
100  SbBool isSmoothing(void) const;
101  void setNumPasses(const int num);
102  int getNumPasses(void) const;
103  void setPassUpdate(const SbBool flag);
104  SbBool isPassUpdate(void) const;
105  void setPassCallback(SoGLRenderPassCB * const func, void * const userdata);
106  void setCacheContext(const uint32_t context);
107  uint32_t getCacheContext(void) const;
108 
109  void addDelayedPath(SoPath * path);
110  SbBool isRenderingDelayedPaths(void) const;
111 
112  SbBool handleTransparency(SbBool istransparent = FALSE);
113  void setCurPass(const int passnum, const int numpasses);
114  int getCurPass(void) const;
115  SbBool abortNow(void);
116 
117  void setRenderingIsRemote(SbBool isremote);
118  SbBool getRenderingIsRemote(void) const;
119 
120  virtual void invalidateState(void);
121 
122  void addPreRenderCallback(SoGLPreRenderCB * func, void * userdata);
123  void removePreRenderCallback(SoGLPreRenderCB * func, void * userdata);
124 
125  void setSortedLayersNumPasses(int num);
126  int getSortedLayersNumPasses(void) const;
127 
128  void setSortedObjectOrderStrategy(const SortedObjectOrderStrategy strategy,
129  SoGLSortedObjectOrderCB * cb = NULL,
130  void * closure = NULL);
131 
132  void setDelayedObjDepthWrite(SbBool write);
133  SbBool getDelayedObjDepthWrite(void) const;
134 
135  SbBool isRenderingTranspPaths(void) const;
136  SbBool isRenderingTranspBackfaces(void) const;
137 
138 protected:
139  friend class SoGLRenderActionP; // calls beginTraversal
140  virtual void beginTraversal(SoNode * node);
141  virtual void endTraversal(SoNode * node);
142 
143 private:
145 
146  SoGLRenderAction(const SoGLRenderAction & rhs);
147  SoGLRenderAction & operator = (const SoGLRenderAction & rhs);
148 
149 }; // SoGLRenderAction
150 
151 #endif // !COIN_SOGLRENDERACTION_H
The SbVec2f class is a 2 dimensional vector with floating point coordinates.
Definition: SbVec2f.h:49
static void initClass(void)
Definition: SoAction.cpp:370
void SoGLRenderPassCB(void *userdata)
Definition: SoGLRenderAction.h:44
AbortCode
Definition: SoGLRenderAction.h:76
Definition: SoGLRenderAction.h:63
The SoNode class is the base class for nodes used in scene graphs.
Definition: SoNode.h:56
virtual void invalidateState(void)
Definition: SoAction.cpp:822
Definition: SoGLRenderAction.h:72
TransparentDelayedObjectRenderType
Definition: SoGLRenderAction.h:71
Definition: SoGLRenderAction.h:77
The SoPath class is a container class for traversal path descriptions.
Definition: SoPath.h:52
TransparencyType
Definition: SoGLRenderAction.h:61
The SoAction class is the base class for all traversal actions.
Definition: SoAction.h:77
Definition: SoGLRenderAction.h:83
Definition: SoGLRenderAction.h:81
float SoGLSortedObjectOrderCB(void *userdata, SoGLRenderAction *action)
Definition: SoGLRenderAction.h:46
AbortCode SoGLRenderAbortCB(void *userdata)
Definition: SoGLRenderAction.h:87
virtual void endTraversal(SoNode *node)
Definition: SoAction.cpp:1280
virtual void beginTraversal(SoNode *node)
Definition: SoAction.cpp:1270
The SbViewportRegion class is a viewport within a full window.
Definition: SbViewportRegion.h:40
Definition: SoGLRenderAction.h:64
SortedObjectOrderStrategy
Definition: SoGLRenderAction.h:80
Definition: SoGLRenderAction.h:82
Definition: SoGLRenderAction.h:62
The SoGLRenderAction class renders the scene graph with OpenGL calls.
Definition: SoGLRenderAction.h:50