Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[BUG] ChannelAccessor has no valid channel pointer with VectorGrid

Aperta
#2,000 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
cpp

Direzione di ricerca

Inizia con tools::createNanoGrid, ChannelAccessor, deviceGrid e il kernel GPU mostrato nel riproduttore. Confronta i percorsi di FloatGrid e VectorGrid ed esegui l’esempio CUDA per determinare perché il puntatore al canale di VectorGrid è vuoto; il lavoro è completato quando l’accessor di VectorGrid è valido e il kernel può recuperare l’indice del canale.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug nanovdb
Environment

Operating System: Win 10
Version: VDB 12.0

Describe the bug

I'm building an nanovdb::IndexGrid from an openvdb::FloatGrid. It encodes voxel values as blind data that can be accessed with a
nanovdb::ChannelAccessor<float, nanovdb::ValueOnIndex>, there everythings works as it should.

But when using an openvdb::VectorGrid and the accessor nanovdb::ChannelAccessor<nanovdb::Vec3f, nanovdb::ValueOnIndex> the channel ptr is empty.

To Reproduce
using SrcGridT  = openvdb::FloatGrid; // replace by opevdb::VectorGrid 
using DstBuildT = nanovdb::ValueOnIndex;
using BufferT   = nanovdb::cuda::DeviceBuffer;

nanovdb::GridHandle<BufferT> idxHandle = nanovdb::tools::createNanoGrid<SrcGridT, DstBuildT, BufferT>(*floatGrid /* *vectorGrid */, 1u, false , false, 0);
idxHandle.deviceUpload(stream, false);

const auto* gpuGrid = idxHandle.deviceGrid<DstBuildT>();
launch_kernels(gpuGrid, toSample, stream);

Then a cuda kernel is launched to access the grid on the GPU.

__global__ void gpu_kernel(const nanovdb::NanoGrid<nanovdb::ValueOnIndex>* gpuGrid, const float* data) {
	const nanovdb::ChannelAccessor<float /* nanovdb::Vec3f */, nanovdb::ValueOnIndex> acc(*gpuGrid);

	if (!acc) {
		printf("Error: ChannelAccessor has no valid channel pointer! (null)\n");
		return;
	}

	const uint32_t idx000 = acc.idx(0, 0, 0);
	printf("Idx at Coord 0,0,0 : %u\n", idx000);
}
Additional context

I tried different configurations such as adding 3u channel with the VectorGrid and trying to access each component individually but it didn't work.

Lingua principale
C++
Stelle
3.4k
Fork
777
Merge medio
3g 1h
PR unite (30g)
7

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di AcademySoftwareFoundation/openvdb

Tutte le issue di AcademySoftwareFoundation/openvdb

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.