RenderBufferData.h
Go to the documentation of this file.
00001 //
00002 // Redistribution and use in source and binary forms, with or without
00003 // modification, are permitted provided that the following conditions
00004 // are met:
00005 //  * Redistributions of source code must retain the above copyright
00006 //    notice, this list of conditions and the following disclaimer.
00007 //  * Redistributions in binary form must reproduce the above copyright
00008 //    notice, this list of conditions and the following disclaimer in the
00009 //    documentation and/or other materials provided with the distribution.
00010 //  * Neither the name of NVIDIA CORPORATION nor the names of its
00011 //    contributors may be used to endorse or promote products derived
00012 //    from this software without specific prior written permission.
00013 //
00014 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
00015 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00016 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00017 // PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00018 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00019 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00020 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00021 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
00022 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00023 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00024 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00025 //
00026 // Copyright (c) 2018 NVIDIA Corporation. All rights reserved.
00027 
00028 
00029 
00030 #ifndef RENDER_BUFFER_DATA_H
00031 #define RENDER_BUFFER_DATA_H
00032 
00038 #include "ApexUsingNamespace.h"
00039 #include "RenderDataFormat.h"
00040 #include "ApexSDK.h"
00041 
00042 namespace nvidia
00043 {
00044 namespace apex
00045 {
00046 
00047 PX_PUSH_PACK_DEFAULT
00048 
00052 class RenderSemanticData
00053 {
00054 public:
00055     const void*             data;   
00056     uint32_t                stride; 
00057     void*                   ident;  
00058     RenderDataFormat::Enum  format; 
00059 
00065     RenderDataFormat::Enum  srcFormat;
00071     bool                    serialize;
00072 public:
00073     PX_INLINE RenderSemanticData(void)
00074     {
00075         data   = 0;
00076         stride = 0;
00077         ident  = 0;
00078         format = RenderDataFormat::UNSPECIFIED;
00079         srcFormat = RenderDataFormat::UNSPECIFIED;
00080         serialize = false;
00081     }
00082 };
00083 
00087 template < class SemanticClass, class SemanticEnum>
00088 class RenderBufferData
00089 {
00090 public:
00091     PX_INLINE RenderBufferData(void)
00092     {
00093         m_numCustomSemantics = 0;
00094         m_customSemanticData = 0;
00095     }
00096 
00100     PX_INLINE const RenderSemanticData& getSemanticData(SemanticEnum semantic) const
00101     {
00102         PX_ASSERT(semantic < SemanticClass::NUM_SEMANTICS);
00103         return m_semanticData[semantic];
00104     }
00105 
00109     PX_INLINE uint32_t getNumCustomSemantics() const
00110     {
00111         return m_numCustomSemantics;
00112     }
00113 
00117     PX_INLINE const RenderSemanticData& getCustomSemanticData(uint32_t index) const
00118     {
00119         PX_ASSERT(index < m_numCustomSemantics);
00120         return m_customSemanticData[index];
00121     }
00122 
00129     PX_INLINE void setCustomSemanticData(RenderSemanticData* data, uint32_t num)
00130     {
00131         m_numCustomSemantics = num;
00132         m_customSemanticData = data;
00133     }
00134 
00138     PX_INLINE void setSemanticData(SemanticEnum semantic, const void* data, uint32_t stride, RenderDataFormat::Enum format, RenderDataFormat::Enum srcFormat = RenderDataFormat::UNSPECIFIED)
00139     {
00140         PX_ASSERT(semantic < SemanticClass::NUM_SEMANTICS);
00141         RenderSemanticData& sd = m_semanticData[semantic];
00142         sd.data   = data;
00143         sd.stride = stride;
00144         sd.format = format;
00145         sd.srcFormat = srcFormat == RenderDataFormat::UNSPECIFIED ? format : srcFormat;
00146     }
00147 
00148 private:
00149     RenderSemanticData  m_semanticData[SemanticClass::NUM_SEMANTICS]; 
00150     uint32_t              m_numCustomSemantics;                         
00151     RenderSemanticData* m_customSemanticData;                           
00152 };
00153 
00157 class ModuleSpecificRenderBufferData
00158 {
00159 public:
00160     AuthObjTypeID           moduleId;                       
00161     RenderSemanticData*     moduleSpecificSemanticData;   
00162     uint32_t                numModuleSpecificSemantics;   
00163 
00164 public:
00165     PX_INLINE ModuleSpecificRenderBufferData(void)
00166     {
00167         moduleId                   = 0;
00168         moduleSpecificSemanticData = 0;
00169         numModuleSpecificSemantics = 0;
00170     }
00171 };
00172 
00173 PX_POP_PACK
00174 
00175 }
00176 } // end namespace nvidia::apex
00177 
00178 #endif // RENDER_BUFFER_DATA_H

Generated on Sat Dec 1 2018 15:52:06

Copyright © 2012-2018 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved.