Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:42

0001 #pragma once
0002 /**
0003 SOPTIX_BuildInput_Mesh.h : create OptixBuildInput via "part" indexing into SCUDA_MeshGroup (Used from SOPTIX_MeshGroup)
0004 =======================================================================================================================
0005 
0006 Instances of this need to be kept alive whilst 
0007 using the OptixBuildInput because of the 
0008 vertexBuffers field that is a host pointer 
0009 to device arrays. Have to keep that address valid.  
0010 
0011 **/
0012 #include "SCUDA_MeshGroup.h"
0013 #include "SOPTIX_BuildInput.h"
0014 
0015 struct SOPTIX_BuildInput_Mesh : public SOPTIX_BuildInput 
0016 {
0017     static constexpr const char* NAME = "BuildInputTriangleArray" ; 
0018     unsigned    flag ;  
0019     CUdeviceptr vertexBuffer ;  
0020     CUdeviceptr indexBuffer ; 
0021     size_t vtx_elem ; 
0022     size_t idx_elem ; 
0023  
0024     SOPTIX_BuildInput_Mesh( const SCUDA_MeshGroup* _mg, size_t part ); 
0025     std::string desc() const ; 
0026 }; 
0027 
0028 inline SOPTIX_BuildInput_Mesh::SOPTIX_BuildInput_Mesh( const SCUDA_MeshGroup* mg, size_t part )
0029     :
0030     SOPTIX_BuildInput(NAME),
0031     flag( OPTIX_GEOMETRY_FLAG_DISABLE_ANYHIT | OPTIX_GEOMETRY_FLAG_DISABLE_TRIANGLE_FACE_CULLING ),
0032     vertexBuffer( mg->vtx.pointer(part) ),
0033     indexBuffer( mg->idx.pointer(part) ),
0034     vtx_elem( mg->vtx.item_num(part) ),
0035     idx_elem( mg->idx.item_num(part) )
0036 {
0037     assert( vtx_elem % 3 == 0 ); 
0038     assert( idx_elem % 3 == 0 ); 
0039     unsigned numVertices = vtx_elem/3 ; 
0040     unsigned numIndexTriplets = idx_elem/3 ; 
0041 
0042     unsigned vertexStrideInBytes = 0 ; 
0043 
0044     OptixBuildInputType type = OPTIX_BUILD_INPUT_TYPE_TRIANGLES ;
0045     OptixVertexFormat vertexFormat = OPTIX_VERTEX_FORMAT_FLOAT3 ; 
0046     OptixIndicesFormat indexFormat = OPTIX_INDICES_FORMAT_UNSIGNED_INT3 ;  
0047 
0048     unsigned indexStrideInBytes = 0 ; 
0049     CUdeviceptr preTransform = 0 ; 
0050     OptixTransformFormat transformFormat = OPTIX_TRANSFORM_FORMAT_NONE ;  
0051 
0052     buildInput.type = type ; 
0053 
0054     OptixBuildInputTriangleArray& triangleArray = buildInput.triangleArray ;
0055 
0056     unsigned numSbtRecords = 1 ; 
0057     CUdeviceptr sbtIndexOffsetBuffer = 0 ; 
0058     unsigned sbtIndexOffsetSizeInBytes = 0 ; 
0059     unsigned sbtIndexOffsetStrideInBytes = 0 ; 
0060 
0061     unsigned primitiveIndexOffset = 0 ; 
0062 
0063     // NB made these members to keep the addresses valid
0064     const unsigned* flags = &flag ; 
0065     CUdeviceptr* vertexBuffers = &vertexBuffer  ; 
0066 
0067 
0068     triangleArray.vertexBuffers = vertexBuffers ; // only one without motion
0069     triangleArray.numVertices = numVertices ;  
0070     triangleArray.vertexFormat = vertexFormat ; 
0071     triangleArray.vertexStrideInBytes = vertexStrideInBytes ; 
0072     triangleArray.indexBuffer = indexBuffer ; 
0073     triangleArray.numIndexTriplets = numIndexTriplets ; 
0074     triangleArray.indexFormat = indexFormat ;     
0075     triangleArray.indexStrideInBytes = indexStrideInBytes ; 
0076     triangleArray.preTransform = preTransform ; 
0077     triangleArray.flags = flags ;
0078  
0079     triangleArray.numSbtRecords = numSbtRecords ;    
0080     triangleArray.sbtIndexOffsetBuffer = sbtIndexOffsetBuffer ; 
0081     triangleArray.sbtIndexOffsetSizeInBytes = sbtIndexOffsetSizeInBytes ; 
0082     triangleArray.sbtIndexOffsetStrideInBytes = sbtIndexOffsetStrideInBytes ;
0083 
0084     triangleArray.primitiveIndexOffset = primitiveIndexOffset ; 
0085     triangleArray.transformFormat = transformFormat ;     
0086 }
0087 
0088 
0089 inline std::string SOPTIX_BuildInput_Mesh::desc() const 
0090 {
0091     std::stringstream ss ; 
0092     ss << "[SOPTIX_BuildInput_Mesh::desc" << std::endl ; 
0093     ss <<  SOPTIX_Desc::BuildInputTriangleArray(buildInput) ; 
0094     ss << "]SOPTIX_BuildInput_Mesh::desc" << std::endl ; 
0095     std::string str = ss.str() ; 
0096     return str ; 
0097 }
0098