| 1 | // | 
| 2 | // Redistribution and use in source and binary forms, with or without | 
| 3 | // modification, are permitted provided that the following conditions | 
| 4 | // are met: | 
| 5 | //  * Redistributions of source code must retain the above copyright | 
| 6 | //    notice, this list of conditions and the following disclaimer. | 
| 7 | //  * Redistributions in binary form must reproduce the above copyright | 
| 8 | //    notice, this list of conditions and the following disclaimer in the | 
| 9 | //    documentation and/or other materials provided with the distribution. | 
| 10 | //  * Neither the name of NVIDIA CORPORATION nor the names of its | 
| 11 | //    contributors may be used to endorse or promote products derived | 
| 12 | //    from this software without specific prior written permission. | 
| 13 | // | 
| 14 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY | 
| 15 | // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 16 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 
| 17 | // PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR | 
| 18 | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 
| 19 | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 
| 20 | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 
| 21 | // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | 
| 22 | // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| 23 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| 24 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| 25 | // | 
| 26 | // Copyright (c) 2008-2021 NVIDIA Corporation. All rights reserved. | 
| 27 | // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. | 
| 28 | // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.   | 
| 29 |  | 
| 30 |  | 
| 31 | #ifndef PX_FOUNDATION_PXRENDERBUFFER_H | 
| 32 | #define PX_FOUNDATION_PXRENDERBUFFER_H | 
| 33 |  | 
| 34 | /** \addtogroup common | 
| 35 | @{ | 
| 36 | */ | 
| 37 |  | 
| 38 | #include "common/PxPhysXCommonConfig.h" | 
| 39 | #include "foundation/PxVec3.h" | 
| 40 | #include "foundation/PxMat33.h" | 
| 41 | #include "foundation/PxBounds3.h" | 
| 42 |  | 
| 43 | #if !PX_DOXYGEN | 
| 44 | namespace physx | 
| 45 | { | 
| 46 | #endif | 
| 47 |  | 
| 48 | /** | 
| 49 | \brief Default color values used for debug rendering. | 
| 50 | */ | 
| 51 | struct PxDebugColor | 
| 52 | { | 
| 53 | 	enum Enum | 
| 54 | 	{ | 
| 55 | 		eARGB_BLACK		= 0xff000000, | 
| 56 | 		eARGB_RED		= 0xffff0000, | 
| 57 | 		eARGB_GREEN		= 0xff00ff00, | 
| 58 | 		eARGB_BLUE		= 0xff0000ff, | 
| 59 | 		eARGB_YELLOW	= 0xffffff00, | 
| 60 | 		eARGB_MAGENTA	= 0xffff00ff, | 
| 61 | 		eARGB_CYAN		= 0xff00ffff, | 
| 62 | 		eARGB_WHITE		= 0xffffffff, | 
| 63 | 		eARGB_GREY		= 0xff808080, | 
| 64 | 		eARGB_DARKRED	= 0x88880000, | 
| 65 | 		eARGB_DARKGREEN	= 0x88008800, | 
| 66 | 		eARGB_DARKBLUE	= 0x88000088 | 
| 67 | 	}; | 
| 68 | }; | 
| 69 |  | 
| 70 | /** | 
| 71 | \brief Used to store a single point and colour for debug rendering. | 
| 72 | */ | 
| 73 | struct PxDebugPoint | 
| 74 | { | 
| 75 | 	PxDebugPoint(const PxVec3& p, const PxU32& c) | 
| 76 | 		: pos(p), color(c) {} | 
| 77 |  | 
| 78 | 	PxVec3	pos; | 
| 79 | 	PxU32	color; | 
| 80 | }; | 
| 81 |  | 
| 82 | /** | 
| 83 | \brief Used to store a single line and colour for debug rendering. | 
| 84 | */ | 
| 85 | struct PxDebugLine | 
| 86 | { | 
| 87 | 	PxDebugLine(const PxVec3& p0, const PxVec3& p1, const PxU32& c) | 
| 88 | 		: pos0(p0), color0(c), pos1(p1), color1(c) {} | 
| 89 |  | 
| 90 | 	PxVec3	pos0; | 
| 91 | 	PxU32	color0; | 
| 92 | 	PxVec3	pos1; | 
| 93 | 	PxU32	color1; | 
| 94 | }; | 
| 95 |  | 
| 96 | /** | 
| 97 | \brief Used to store a single triangle and colour for debug rendering. | 
| 98 | */ | 
| 99 | struct PxDebugTriangle | 
| 100 | { | 
| 101 | 	PxDebugTriangle(const PxVec3& p0, const PxVec3& p1, const PxVec3& p2, const PxU32& c) | 
| 102 | 		: pos0(p0), color0(c), pos1(p1), color1(c), pos2(p2), color2(c) {} | 
| 103 |  | 
| 104 | 	PxVec3	pos0; | 
| 105 | 	PxU32	color0; | 
| 106 | 	PxVec3	pos1; | 
| 107 | 	PxU32	color1; | 
| 108 | 	PxVec3	pos2; | 
| 109 | 	PxU32	color2; | 
| 110 | }; | 
| 111 |  | 
| 112 | /** | 
| 113 | \brief Used to store a text for debug rendering. Doesn't own 'string' array. | 
| 114 | */ | 
| 115 | struct PxDebugText | 
| 116 | { | 
| 117 | 	PxDebugText() : string(0) {} | 
| 118 |  | 
| 119 | 	PxDebugText(const PxVec3& p, const PxReal& s, const PxU32& c, const char* str) | 
| 120 | 		: position(p), size(s), color(c), string(str) {} | 
| 121 |  | 
| 122 | 	PxVec3		position; | 
| 123 | 	PxReal		size; | 
| 124 | 	PxU32		color; | 
| 125 | 	const char*	string; | 
| 126 | }; | 
| 127 |  | 
| 128 | /** | 
| 129 | \brief Interface for points, lines, triangles, and text buffer. | 
| 130 | */ | 
| 131 | class PxRenderBuffer | 
| 132 | { | 
| 133 | public: | 
| 134 | 	virtual ~PxRenderBuffer() {} | 
| 135 |  | 
| 136 | 	virtual PxU32 getNbPoints() const = 0; | 
| 137 | 	virtual const PxDebugPoint* getPoints() const = 0; | 
| 138 |  | 
| 139 | 	virtual PxU32 getNbLines() const = 0; | 
| 140 | 	virtual const PxDebugLine* getLines() const = 0; | 
| 141 |  | 
| 142 | 	virtual PxU32 getNbTriangles() const = 0; | 
| 143 | 	virtual const PxDebugTriangle* getTriangles() const = 0; | 
| 144 |  | 
| 145 | 	virtual PxU32 getNbTexts() const = 0; | 
| 146 | 	virtual const PxDebugText* getTexts() const = 0; | 
| 147 |  | 
| 148 | 	virtual void append(const PxRenderBuffer& other) = 0; | 
| 149 | 	virtual void clear() = 0; | 
| 150 | }; | 
| 151 |  | 
| 152 | #if !PX_DOXYGEN | 
| 153 | } // namespace physx | 
| 154 | #endif | 
| 155 |  | 
| 156 | /** @} */ | 
| 157 | #endif | 
| 158 |  |