File indexing completed on 2026-04-09 07:49:42
0001 #pragma once
0002
0003
0004
0005
0006
0007
0008
0009
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
0064 const unsigned* flags = &flag ;
0065 CUdeviceptr* vertexBuffers = &vertexBuffer ;
0066
0067
0068 triangleArray.vertexBuffers = vertexBuffers ;
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