| 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/// \details The GlsSortedDrawable class. An interface for an object that knows how to sort itself.
47 class GlsSortedDrawable
48{
49 public:
50 // virtual destructor
51 virtual ~GlsSortedDrawable() {}
52
53 /// Allows for static casting in compare functions.
54 /// \see RegisterClassID
55 /// \return The unique identifier for this object's class.
56 virtual unsigned int SortedDraw_ClassID() = 0;
57
58 /// Compare two GlsSortedDrawable objects to determine the sort order.
59 /// \param other Object to compare to.
60 /// \returns True if this object should draw before other.
61 virtual bool SortedDraw_Compare( GlsSortedDrawable& other ) = 0;
62
63 /// Comparison that should be used if the derived class is unsure.
64 /// \param o The object to compare to.
65 /// \return True if this object's id is less than the compared object.
66 inline bool SortedDraw_CompareDefault( GlsSortedDrawable& o )
67 {
68 // Group objects by ClassID
69 return SortedDraw_ClassID() < o.SortedDraw_ClassID();
70 }
71
72 /// Try to merge two adjecently-sorted GlsSortedDrawable nodes.
73 /// \param lastObj Pointer to the previous GlsSortedDrawable in the sort order.
74 virtual void SortedDraw_OptimizeMerge( GlsSortedDrawable& lastObj ) = 0;
75
76 /// Draw the object using the current OpenGL context.
77 /// Use lastDrawnObj to avoid redundant state changes.
78 /// \param lastObj Pointer to the GlsSortedDrawable that was drawn (may be NULL).
79 virtual void SortedDraw( GlsSortedDrawable* lastObj ) = 0;
80
81 /// Tell an object to restore the OpenGLDefaultState after drawing.
82 /// Objects should call this if lastDrawnObj has an unknown class.
83 /// The Group will also call this after the last object is drawn.
84 virtual void SortedDrawCleanup() = 0;
85
86 /// \return Whether or not this can be re-ordered, or if it is part of an preserved order set.
87 virtual bool SortedDraw_ReorderAtWill() { return true; }
88
89 /// \return A new ClassID.
90 /// Typically only called once by each GlsSortedDrawable implementation.
91 /// \param debugStr Unused, kept for backward compatibility.
92 static unsigned int RegisterNewClassID( const char* debugStr = NULL );
93};
94
95} // namespace disti
96
97#endif
disti::GlsSortedDrawable
Definition: gls_sorted_drawable.h:48
disti::GlsSortedDrawable::SortedDraw
virtual void SortedDraw(GlsSortedDrawable *lastObj)=0
disti::GlsSortedDrawable::SortedDraw_CompareDefault
bool SortedDraw_CompareDefault(GlsSortedDrawable &o)
Definition: gls_sorted_drawable.h:66
disti::GlsSortedDrawable::SortedDraw_ClassID
virtual unsigned int SortedDraw_ClassID()=0
disti::GlsSortedDrawable::SortedDraw_OptimizeMerge
virtual void SortedDraw_OptimizeMerge(GlsSortedDrawable &lastObj)=0
disti::GlsSortedDrawable::SortedDraw_Compare
virtual bool SortedDraw_Compare(GlsSortedDrawable &other)=0
disti::GlsSortedDrawable::SortedDrawCleanup
virtual void SortedDrawCleanup()=0
disti::GlsSortedDrawable::SortedDraw_ReorderAtWill
virtual bool SortedDraw_ReorderAtWill()
Definition: gls_sorted_drawable.h:87
disti::GlsSortedDrawable::RegisterNewClassID
static unsigned int RegisterNewClassID(const char *debugStr=NULL)
disti
Definition: bmpimage.h:47