这个问题是为了帮助NVIDIA OptiX的初学者(就像我一样)。
发生了什么
在使用OptiX编译的示例(随安装OptiX一起交付)时,我试图从其中一个计算机内核打印到控制台,并不断得到以下错误:
error: cannot convert ‘optix::Context {aka optix::Handle<optix::ContextObj>}’ to ‘RTcontext’ for argument ‘1’ to ‘RTresult rtContextSetPrintEnabled(RTcontext, int)’
error: cannot convert ‘optix::Context {aka optix::Handle<optix::ContextObj>}’ to ‘RTcontext’ for argument ‘1’ to ‘RTresult rtContextSetPrintBufferSize(RTcontext, RTsize)’尝试解决方案
在createContext()函数中,在创建上下文的地方,我添加了几行代码来打开调试打印。我添加的代码行如下:
rtContextSetPrintEnabled(context, 1);
rtContextSetPrintBufferSize(context, 4096);这是产生上述错误的两行。我在上下文对象的实例化(由下面的代码提供)之后添加了以下代码行()--来自最初的示例:
context = Context::create();
context->setRayTypeCount( 2 );
context->setEntryPointCount( 1 );
context->setStackSize( 2800 );因此,中断的完整代码如下所示:
// Set up context
context = Context::create();
context->setRayTypeCount( 2 );
context->setEntryPointCount( 1 );
context->setStackSize( 2800 );
// Setup debug printing
rtContextSetPrintEnabled(context, 1);
rtContextSetPrintBufferSize(context, 4096);一些背景信息
我正在尝试修改optixWhitted项目,使用CentOS版本的NSight版本在CentOS计算机上工作。
问题
在使用optixWhitted代码时,并试图维护已经部署的代码样式和对象使用.我该怎么解决这个问题?
发布于 2018-09-12 00:42:26
在深入研究了错误和上下文的原始实例化之后,发现optixWhitted示例使用一个包装类来处理rtContext对象。这两个对象是不同的类,在进行一些研究时,我发现NVIDIA将ContextObj类作为底层rtContext的方便包装器。这个ContextObj类具有与rtContext非常相似的功能,以及OptiX 5.1编程指南第3章中概述的函数。
纵观ContextObj类,您将发现用于设置rtPrintf设置的类似函数:OptiX ContextObj包装器类。
具体来说,您将发现以下功能:
setPrintEnabled(bool)setPrintBufferSize(uint)最后工作守则
这是最后的工作代码,它使用已经存在并在optixWhitted教程中使用的optixWhitted包装类。
// Set up context
context = Context::create();
context->setRayTypeCount( 2 );
context->setEntryPointCount( 1 );
context->setStackSize( 2800 );
// Set Output Debugging via rtPrintf
context->setPrintEnabled(1);
context->setPrintBufferSize(4096);发布于 2019-08-01 21:36:59
使用OptiX API有两种基本方法。在您的问题中,您使用OptiXpp api实例化您的上下文,从而成为访问方法和数据的指针。在本例中,context的类型是optix::Handle<optix::ContextObj>,它与rt函数所需的类型不同,在本例中是RTcontext *。您也可以在句柄上使用get()方法,并混合API,但是如果您使用其他API创建了上下文,那么一切都应该正常进行。
RTcontext context;
rtContextCreate( &context );
rtContextSetPrintEnabled(context, 1);
rtContextSetPrintBufferSize(context, 4096);使用OptiXpp API还有其他好处,例如变量的括号表示法。总之,为了避免混淆,选择一个并坚持下去。
https://stackoverflow.com/questions/52285842
复制相似问题