Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PxRenderBuffer array fields aren't mapped properly #70

Open
dustContributor opened this issue Jun 23, 2024 · 1 comment
Open

PxRenderBuffer array fields aren't mapped properly #70

dustContributor opened this issue Jun 23, 2024 · 1 comment

Comments

@dustContributor
Copy link

Hi! I was researching how to implement a debug visualization using the official docs:

https://nvidia-omniverse.github.io/PhysX/physx/5.4.0/docs/DebugVisualization.html

const PxRenderBuffer& rb = scene->getRenderBuffer();

for(PxU32 i=0; i < rb.getNbPoints(); i++)
{
    const PxDebugPoint& point = rb.getPoints()[i];
    // render the point
}

for(PxU32 i=0; i < rb.getNbLines(); i++)
{
    const PxDebugLine& line = rb.getLines()[i];
    // render the line
}

It seems the array fields for points, lines, etc in PxRenderBuffer are mapped to a single element with no way to index into them.

[Const] PxDebugPoint getPoints();

I think PxDebugLine.arrayGet for example can be used to work around this:

PxRenderBuffer renderBuffer = physxScene.getRenderBuffer();
int pointsLength = renderBuffer.getNbPoints();
int pointsBaseAddress = renderBuffer.getPoints().getAddress();
for (int p = 0; p < pointsLength; ++p) {
	PxDebugPoint point = PxDebugPoint.arrayGet(pointsBaseAddress, p);
}

But I believe it should be exposed like the getAnyHit(index) accessor from PxSweepResult

[Const, Ref] PxSweepHit getAnyHit(unsigned long index);

Where you do

int hitsLength = sweepResult.getNbAnyHits();
for (int h = 0; h < hitsLength; ++h) {
	PxSweepHit hit = sweepResult.getAnyHit(h);
}
@fabmax
Copy link
Owner

fabmax commented Nov 10, 2024

I was just browsing through the open issues and found this one... (for some reason I wasn't watching this repo for a while and didn't get notifications on new issues 😄)

Yeah the way the PxRenderBuffer (and also a lot of the other PhysX classes) works is a bit unfortunate, because it only returns a raw pointer for the get*() functions and my code generator currently isn't smart enough to generate array accessors for these.

The various PxHitResult classes work better than this because I implemented them myself: WebIdlBindings.h

I guess it would be possible to add an annotation to the idl file and improve the code generator for this case but I'm also trying to keep it in line with the emscripten / WASM version of this library and with emscripten this isn't possible as far as I know. On the other hand I already do a few things differently than emscipten and it would make things easier in a lot of places, so I might actually do this one day.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants