Revision control
++ // Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
++ // Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
++ // SPDX-FileCopyrightText: Copyright (c) 2008-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
++ // SPDX-License-Identifier: Apache-2.0
++
++ #include "foundation/PxAssert.h"
++ #include "foundation/PxString.h"
++ #include "foundation/PxThread.h"
++ #include "extensions/PxDefaultErrorCallback.h"
++
++ #include <stdio.h>
++
++ using namespace physx;
++
++
++ PxDefaultErrorCallback::PxDefaultErrorCallback()
++ {
++ }
++
++ PxDefaultErrorCallback::~PxDefaultErrorCallback()
++ {
++ }
++
++ void PxDefaultErrorCallback::reportError(PxErrorCode::Enum e, const char* message, const char* file, int line)
++ {
++ const char* errorCode = NULL;
++
++ switch (e)
++ {
++ case PxErrorCode::eNO_ERROR:
++ errorCode = "no error";
++ break;
++ case PxErrorCode::eINVALID_PARAMETER:
++ errorCode = "invalid parameter";
++ break;
++ case PxErrorCode::eINVALID_OPERATION:
++ errorCode = "invalid operation";
++ break;
++ case PxErrorCode::eOUT_OF_MEMORY:
++ errorCode = "out of memory";
++ break;
++ case PxErrorCode::eDEBUG_INFO:
++ errorCode = "info";
++ break;
++ case PxErrorCode::eDEBUG_WARNING:
++ errorCode = "warning";
++ break;
++ case PxErrorCode::ePERF_WARNING:
++ errorCode = "performance warning";
++ break;
++ case PxErrorCode::eABORT:
++ errorCode = "abort";
++ break;
++ case PxErrorCode::eINTERNAL_ERROR:
++ errorCode = "internal error";
++ break;
++ case PxErrorCode::eMASK_ALL:
++ errorCode = "unknown error";
++ break;
++ }
++
++ PX_ASSERT(errorCode);
++ if(errorCode)
++ {
++ char buffer[1024];
++ Pxsnprintf(buffer, sizeof(buffer), "%s (%d) : %s : %s\n", file, line, errorCode, message);
++
++ PxPrintString(buffer);
++
++ PX_ASSERT(e != PxErrorCode::eABORT);
++
++ if (e == PxErrorCode::eABORT)
++ PxThread::sleep(1000); // make sure that the error message is flushed
++ }
++ }