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 USER_RENDER_RESOURCE_DESC_H 00031 #define USER_RENDER_RESOURCE_DESC_H 00032 00038 #include "UserRenderResourceManager.h" 00039 #include "foundation/PxAssert.h" 00040 00041 namespace nvidia 00042 { 00043 namespace apex 00044 { 00045 00046 PX_PUSH_PACK_DEFAULT 00047 00048 class Renderable; 00049 class UserOpaqueMesh; 00050 class UserRenderVertexBuffer; 00051 class UserRenderIndexBuffer; 00052 class UserRenderBoneBuffer; 00053 class UserRenderInstanceBuffer; 00054 class UserRenderSpriteBuffer; 00055 00059 class UserRenderResourceDesc 00060 { 00061 public: 00062 UserRenderResourceDesc(void) 00063 { 00064 firstVertex = 0; 00065 numVerts = 0; 00066 00067 indexBuffer = 0; 00068 firstIndex = 0; 00069 numIndices = 0; 00070 00071 boneBuffer = 0; 00072 firstBone = 0; 00073 numBones = 0; 00074 00075 instanceBuffer = 0; 00076 firstInstance = 0; 00077 numInstances = 0; 00078 00079 spriteBuffer = 0; 00080 firstSprite = 0; 00081 numSprites = 0; 00082 visibleSpriteCount = 0; 00083 00084 material = 0; 00085 submeshIndex = 0; 00086 00087 userRenderData = 0; 00088 00089 numVertexBuffers = 0; 00090 vertexBuffers = NULL; 00091 00092 cullMode = RenderCullMode::CLOCKWISE; 00093 primitives = RenderPrimitiveType::UNKNOWN; 00094 00095 opaqueMesh = NULL; 00096 } 00097 00101 bool isValid(void) const 00102 { 00103 uint32_t numFailed = 0; 00104 if (numVertexBuffers >= 255) 00105 { 00106 numFailed++; 00107 } 00108 if (numIndices && !indexBuffer) 00109 { 00110 numFailed++; 00111 } 00112 if (numBones && !boneBuffer) 00113 { 00114 numFailed++; 00115 } 00116 if (numInstances && !instanceBuffer) 00117 { 00118 numFailed++; 00119 } 00120 if (numSprites && !spriteBuffer) 00121 { 00122 numFailed++; 00123 } 00124 PX_ASSERT(numFailed == 0); 00125 return numFailed == 0; 00126 } 00127 00128 public: 00129 UserOpaqueMesh* opaqueMesh; 00130 UserRenderVertexBuffer** vertexBuffers; 00131 00132 uint32_t numVertexBuffers; 00133 00134 uint32_t firstVertex; 00135 uint32_t numVerts; 00136 00137 UserRenderIndexBuffer* indexBuffer; 00138 uint32_t firstIndex; 00139 uint32_t numIndices; 00140 00141 UserRenderBoneBuffer* boneBuffer; 00142 uint32_t firstBone; 00143 uint32_t numBones; 00144 00145 UserRenderInstanceBuffer* instanceBuffer; 00146 uint32_t firstInstance; 00147 uint32_t numInstances; 00148 00149 UserRenderSpriteBuffer* spriteBuffer; 00150 uint32_t firstSprite; 00151 uint32_t numSprites; 00152 uint32_t visibleSpriteCount; 00153 00154 UserRenderSurfaceBuffer** surfaceBuffers; 00155 uint32_t numSurfaceBuffers; 00156 uint32_t widthSurfaceBuffers; 00157 uint32_t heightSurfaceBuffers; 00158 00159 void* material; 00160 uint32_t submeshIndex; 00161 00163 void* userRenderData; 00164 00165 RenderCullMode::Enum cullMode; 00166 RenderPrimitiveType::Enum primitives; 00167 }; 00168 00169 PX_POP_PACK 00170 00171 } 00172 } // end namespace nvidia::apex 00173 00174 #endif