diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/include/UserRenderCallback.h | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'APEX_1.4/include/UserRenderCallback.h')
| -rw-r--r-- | APEX_1.4/include/UserRenderCallback.h | 394 |
1 files changed, 394 insertions, 0 deletions
diff --git a/APEX_1.4/include/UserRenderCallback.h b/APEX_1.4/include/UserRenderCallback.h new file mode 100644 index 00000000..97b55e2a --- /dev/null +++ b/APEX_1.4/include/UserRenderCallback.h @@ -0,0 +1,394 @@ +/* + * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved. + * + * NVIDIA CORPORATION and its licensors retain all intellectual property + * and proprietary rights in and to this software, related documentation + * and any modifications thereto. Any use, reproduction, disclosure or + * distribution of this software and related documentation without an express + * license agreement from NVIDIA CORPORATION is strictly prohibited. + */ + + +#ifndef USER_RENDER_CALLBACK_H +#define USER_RENDER_CALLBACK_H + +#include "RenderDataFormat.h" + +/** +\brief Cuda graphics resource +*/ +typedef struct CUgraphicsResource_st* CUgraphicsResource; + + +namespace nvidia +{ +namespace apex +{ + +PX_PUSH_PACK_DEFAULT + +/** +\brief Render interop flags +*/ +struct RenderInteropFlags +{ + /** + \brief Enum of render interop flags + */ + enum Enum + { + NO_INTEROP = 0, + CUDA_INTEROP, + }; +}; + +/** +\brief Render map type +*/ +struct RenderMapType +{ + /** + \brief Enum of render map type + */ + enum Enum + { + MAP_READ = 1, + MAP_WRITE = 2, + MAP_READ_WRITE = 3, + MAP_WRITE_DISCARD = 4, + MAP_WRITE_NO_OVERWRITE = 5 + }; +}; + +/** +\brief User render data +*/ +class UserRenderData +{ +public: + + /** + \brief Add reference + */ + virtual void addRef() = 0; + + /** + \brief release data + */ + virtual void release() = 0; +}; + +/** +\brief User render data holder +*/ +class UserRenderDataHolder +{ +public: + UserRenderDataHolder() + : userData(NULL) + { + } + + ~UserRenderDataHolder() + { + if (userData) + { + userData->release(); + } + } + + /** + \brief Copy constructor for UserRenderDataHolder + */ + UserRenderDataHolder(const UserRenderDataHolder& other) + : userData(other.userData) + { + if (userData) + { + userData->addRef(); + } + } + + /** + \brief Assignment operator for UserRenderDataHolder + */ + UserRenderDataHolder& operator=(const UserRenderDataHolder& other) + { + setUserData(other.userData); + return *this; + } + + /** + \brief Set user render data + \see UserRenderData + */ + void setUserData(UserRenderData* newUserData) + { + if (userData != newUserData) + { + if (userData) + { + userData->release(); + } + userData = newUserData; + if (userData) + { + userData->addRef(); + } + } + } + + /** + \brief Get user render data + \see UserRenderData + */ + UserRenderData* getUserData() const + { + return userData; + } + +private: + + /** + \brief User render data + \see UserRenderData + */ + UserRenderData* userData; +}; + +/** +\brief User render storage +*/ +class UserRenderStorage +{ +public: + + /** + \brief Release user render storage + */ + virtual void release() = 0; + + /** + \brief Enum of user render storage type + */ + enum Type + { + BUFFER = 0, + SURFACE, + }; + + /** + \brief Returns type of user render storage + */ + virtual Type getType() const = 0; +}; + +/** +\brief User render buffer desc +*/ +struct UserRenderBufferDesc : public UserRenderDataHolder +{ + UserRenderBufferDesc(void) + { + setDefaults(); + } + + /** + \brief Default values + */ + void setDefaults() + { + size = 0; + setUserData(NULL); + userFlags = 0; + interopFlags = RenderInteropFlags::NO_INTEROP; + } + + /** + \brief Check if parameter's values are correct + */ + bool isValid(void) const + { + return (size > 0); + } + + /** + \brief Check if this object is the same as other + */ + bool isTheSameAs(const UserRenderBufferDesc& other) const + { + if (size != other.size) return false; + if (userFlags != other.userFlags) return false; + if (getUserData() != other.getUserData()) return false; + if (interopFlags != other.interopFlags) return false; + return true; + } + + size_t size; ///< Buffer size + uint32_t userFlags; ///< User flags + RenderInteropFlags::Enum interopFlags; ///< Interop flags +}; + +/** +\brief User render buffer +*/ +class UserRenderBuffer : public UserRenderStorage +{ +public: + + /** + \brief Returns BUFFER type + */ + virtual Type getType() const + { + return BUFFER; + } + + /** + \brief Returns CPU memory pointer to buffer content + \note CPU access + */ + virtual void* map(RenderMapType::Enum mapType, size_t offset = 0, size_t size = SIZE_MAX) = 0; + + /** + \brief Flush CPU buffer to GPU + */ + virtual void unmap() = 0; + + /** + \brief Returns graphics resource for CUDA Interop + \note GPU access + */ + virtual bool getCUDAgraphicsResource(CUgraphicsResource &ret) = 0; +}; + +/** +\brief User render surface desc +*/ +struct UserRenderSurfaceDesc : public UserRenderDataHolder +{ + UserRenderSurfaceDesc(void) + { + setDefaults(); + } + + /** + \brief Default values + */ + void setDefaults() + { + width = 0; + height = 0; + depth = 0; + format = RenderDataFormat::UNSPECIFIED; + setUserData(NULL); + userFlags = 0; + interopFlags = RenderInteropFlags::NO_INTEROP; + } + + /** + \brief Check if parameter's values are correct + */ + bool isValid(void) const + { + uint32_t numFailed = 0; + numFailed += (width == 0); + numFailed += (format == RenderDataFormat::UNSPECIFIED); + return (numFailed == 0); + } + + /** + \brief Check if this object is the same as other + */ + bool isTheSameAs(const UserRenderSurfaceDesc& other) const + { + if (width != other.width) return false; + if (height != other.height) return false; + if (depth != other.depth) return false; + if (format != other.format) return false; + if (userFlags != other.userFlags) return false; + if (getUserData() != other.getUserData()) return false; + if (interopFlags != other.interopFlags) return false; + return true; + } + + size_t width; ///< Surface width + size_t height; ///< Surface height + size_t depth; ///< Surface depth + RenderDataFormat::Enum format; ///< Render data format + uint32_t userFlags; ///< User flags + RenderInteropFlags::Enum interopFlags; ///< Interop flags +}; + +/** +\brief User render surface +*/ +class UserRenderSurface : public UserRenderStorage +{ +public: + + /** + \brief Returns SURFACE type + */ + virtual Type getType() const + { + return SURFACE; + } + + /** + \brief Mapped information + */ + struct MappedInfo + { + void* pData; ///< Data pointer + uint32_t rowPitch; ///< Row pitch + uint32_t depthPitch; ///< Depth pitch + }; + + /** + \brief Returns CPU memory pointer to buffer content + \note CPU access + */ + virtual bool map(RenderMapType::Enum mapType, MappedInfo& info) = 0; + + /** + \brief Flush CPU buffer to GPU + */ + virtual void unmap() = 0; + + /** + \brief Returns graphics resource for CUDA Interop + \note GPU access + */ + virtual bool getCUDAgraphicsResource(CUgraphicsResource &ret) = 0; +}; + +/** +\brief User render callback +*/ +class UserRenderCallback +{ +public: + + /** + \brief Creates render buffer with specified UserRenderBufferDesc + */ + virtual UserRenderBuffer* createRenderBuffer(const UserRenderBufferDesc& ) + { + return NULL; + } + /** + \brief Creates render surface with specified UserRenderSurfaceDesc + */ + virtual UserRenderSurface* createRenderSurface(const UserRenderSurfaceDesc& ) + { + return NULL; + } +}; + +PX_POP_PACK + +} +} // end namespace nvidia::apex + +#endif |