首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Optix上下文包装器进行rtPrint

如何使用Optix上下文包装器进行rtPrint
EN

Stack Overflow用户
提问于 2018-09-12 00:30:27
回答 2查看 310关注 0票数 0

这个问题是为了帮助NVIDIA OptiX的初学者(就像我一样)。

发生了什么

在使用OptiX编译的示例(随安装OptiX一起交付)时,我试图从其中一个计算机内核打印到控制台,并不断得到以下错误:

代码语言:javascript
复制
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()函数中,在创建上下文的地方,我添加了几行代码来打开调试打印。我添加的代码行如下:

代码语言:javascript
复制
rtContextSetPrintEnabled(context, 1);
rtContextSetPrintBufferSize(context, 4096);

这是产生上述错误的两行。我在上下文对象的实例化(由下面的代码提供)之后添加了以下代码行()--来自最初的示例:

代码语言:javascript
复制
context = Context::create();
context->setRayTypeCount( 2 );
context->setEntryPointCount( 1 );
context->setStackSize( 2800 );

因此,中断的完整代码如下所示:

代码语言:javascript
复制
// 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代码时,并试图维护已经部署的代码样式和对象使用.我该怎么解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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包装类。

代码语言:javascript
复制
// 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);
票数 0
EN

Stack Overflow用户

发布于 2019-08-01 21:36:59

使用OptiX API有两种基本方法。在您的问题中,您使用OptiXpp api实例化您的上下文,从而成为访问方法和数据的指针。在本例中,context的类型是optix::Handle<optix::ContextObj>,它与rt函数所需的类型不同,在本例中是RTcontext *。您也可以在句柄上使用get()方法,并混合API,但是如果您使用其他API创建了上下文,那么一切都应该正常进行。

代码语言:javascript
复制
RTcontext context;
rtContextCreate( &context );
rtContextSetPrintEnabled(context, 1);
rtContextSetPrintBufferSize(context, 4096);

使用OptiXpp API还有其他好处,例如变量的括号表示法。总之,为了避免混淆,选择一个并坚持下去。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52285842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档