GL Studio C++ Runtime API
gls_sorted_drawable.h
Go to the documentation of this file.
1 /// \file
2 /// \brief A sorted drawable group.
3 ///
4 /// \par Copyright Information
5 ///
6 /// Copyright (c) 2017 by The DiSTI Corporation.<br>
7 /// 11301 Corporate Blvd; Suite 100<br>
8 /// Orlando, Florida 32817<br>
9 /// USA<br>
10 /// <br>
11 /// All rights reserved.<br>
12 ///
13 /// This Software contains proprietary trade secrets of DiSTI and may not be
14 /// reproduced, in whole or part, in any form, or by any means of electronic,
15 /// mechanical, or otherwise, without the written permission of DiSTI. Said
16 /// permission may be derived through the purchase of applicable DiSTI product
17 /// licenses which detail the distribution rights of this content and any
18 /// Derivative Works based on this or other copyrighted DiSTI Software.
19 ///
20 /// NO WARRANTY. THE SOFTWARE IS PROVIDED "AS-IS," WITHOUT WARRANTY OF ANY KIND,
21 /// AND ANY USE OF THIS SOFTWARE PRODUCT IS AT YOUR OWN RISK. TO THE MAXIMUM EXTENT
22 /// PERMITTED BY APPLICABLE LAW, DISTI AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES
23 /// AND CONDITIONS, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
24 /// IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY AND/OR FITNESS FOR A
25 /// PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT, WITH REGARD TO THE SOFTWARE.
26 ///
27 /// LIMITATION OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW,
28 /// IN NO EVENT SHALL DISTI OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
29 /// INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION,
30 /// DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
31 /// INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR
32 /// INABILITY TO USE THE SOFTWARE, EVEN IF DISTI HAS BEEN ADVISED OF THE POSSIBILITY
33 /// OF SUCH DAMAGES. DISTI'S ENTIRE LIABILITY AND YOUR EXCLUSIVE REMEDY SHALL NOT
34 /// EXCEED FIVE DOLLARS (US$5.00).
35 ///
36 /// The aforementioned terms and restrictions are governed by the laws of the
37 /// State of Florida and the United States of America.
38 
39 #ifndef GLS_SORTED_DRAWABLE_H
40 #define GLS_SORTED_DRAWABLE_H
41 
42 #include <cstddef>
43 
44 namespace disti
45 {
46 // Interface for a drawable object
48 {
49 public:
50  // virtual destructor
51  virtual ~GlsSortedDrawable() {}
52 
53  // Allows for static casting in compare functions
54  // See RegisterClassID
55  virtual unsigned int SortedDraw_ClassID() = 0;
56 
57  // Compare two GlsSortedDrawable objects to determine the sort order
58  // \param other object to compare to
59  // \returns true if this object should draw before other
60  virtual bool SortedDraw_Compare( GlsSortedDrawable& other ) = 0;
61 
62  // Comparison that should be used if the
63  // derived class is unsure
64  inline bool SortedDraw_CompareDefault( GlsSortedDrawable& o )
65  {
66  // Group objects by ClassID
67  return SortedDraw_ClassID() < o.SortedDraw_ClassID();
68  }
69 
70  // Try to merge two adjecently-sorted GlsSortedDrawable nodes
71  // \param lastObj pointer to the previous GlsSortedDrawable in the sort order
72  virtual void SortedDraw_OptimizeMerge( GlsSortedDrawable& lastObj ) = 0;
73 
74  // Draw the object using the current OpenGL context
75  // Use lastDrawnObj to avoid redundant state changes
76  // \param lastObj pointer to the GlsSortedDrawable that was drawn (may be NULL)
77  virtual void SortedDraw( GlsSortedDrawable* lastObj ) = 0;
78 
79  // Tell an object to restore the OpenGLDefaultState after drawing
80  // Objects should call this if lastDrawnObj has an unknown class
81  // The Group will also call this after the last object is drawn
82  virtual void SortedDrawCleanup() = 0;
83 
84  //Whether or not this can be re-ordered, or if it is part of an preserved order set
85  virtual bool SortedDraw_ReorderAtWill() { return true; }
86 
87  // Returns a new ClassID
88  // Typically only called once by each GlsSortedDrawable implementation
89  static unsigned int RegisterNewClassID( const char* debugStr = NULL );
90 };
91 
92 } // namespace disti
93 
94 #endif
Definition: gls_sorted_drawable.h:47
Definition: bmpimage.h:46