在 OpenGL 和 CUDA 之间共享纹理

2023-12-25

我在 OpenGL 和 CUDA 之间共享数据如下:

GLuint buffer;
glGenBuffers(1, &buffer);
// Some image is bound to this texture buffer at some point.
...
cudaGraphicsResource_t cgr;
checkCudaErrors(cudaGraphicsGLRegisterBuffer(&cgr, 
                buffer, cudaGraphicsRegisterFlagsNone));
checkCudaErrors(cudaGraphicsMapResources(1, &cgr, 0));
uchar4 * device_ptr = 0;
size_t num_bytes;
checkCudaErrors(cudaGraphicsResourceGetMappedPointer(
               (void **)&device_ptr, &num_bytes, cgr));

这工作正常,device_ptr 不是指向我的 CUDA 内存的指针。现在,在某个时候我想使用双线性插值对该图像重新采样。看来在 CUDA 中执行此操作的首选方法是将设备数据映射到 CUDA 纹理内存,然后使用 tex2D 调用执行插值。

现在,我的问题是成像数据已经存在于 OpenGL 纹理内存中,我想知道是否有一种方法可以避免再次调用 cudaBindTexture2D 并以某种方式使用 CUDA 中的 OpenGL 纹理进行插值?


是的,您可以使用 tex2D 直接读取/写入 opengl 纹理。

  1. 初始化图形资源

    struct cudaGraphicsResource *vbo_res;
    cudaGraphicsGLRegisterImage(&vbo_res, gl_buffer,gl_target, cudaGraphicsRegisterFlagsSurfaceLoadStore);
    
  2. 将资源映射到数组(每帧)

    cudaArray *array;
    cudaGraphicsMapResources(1, &vbo_res, 0);
    cudaGraphicsSubResourceGetMappedArray(&array, vbo_res, 0,0);
    
  3. 将纹理绑定到数组

    texture<uchar4, cudaTextureType2D, cudaReadModeNormalizedFloat> texRef;
    cudaBindTextureToArray(texRef, (cudaArray *)array));
    texRef.filterMode = cudaFilterModeLinear;
    

Note:

If texRef驻留在全局内存中,然后可以在 cuda 内核中访问它float4 rgba = tex2D( texRef, u,v);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OpenGL 和 CUDA 之间共享纹理 的相关文章

  • CUDA 常量内存是否应该被均匀地访问?

    我的 CUDA 应用程序的恒定内存小于 8KB 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 如果是 如何确保所有线程同时访问同一地址 既然它都会被缓存 我是否需要担心每个线程访问相同的地址以进行优化 是的 这缓存本身每
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • gluPerspective 与 gluOrtho2D

    我查看了 MSDN 上关于这两个函数的文档 但是 我不太明白这两个功能之间的区别 一个是用于设置 3D 相机视图 另一个是用于设置 2D 相机视图 如果能得到解答就太好了 预先感谢您的评论 正交投影基本上是没有透视的 3D 投影 本质上 这
  • cuda中有模板化的数学函数吗? [复制]

    这个问题在这里已经有答案了 我一直在寻找 cuda 中的模板化数学函数 但似乎找不到 在普通的 C 中 如果我调用std sqrt它是模板化的 并且将根据参数是浮点数还是双精度数执行不同的版本 我想要这样的 CUDA 设备代码 我的内核将真
  • 如何在cmake中添加cuda源代码的定义

    我使用的是 Visual Studio 2013 Windows 10 CMake 3 5 1 一切都可以使用标准 C 正确编译 例如 CMakeLists txt project Test add definitions D WINDOW
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • OpenGL 中连续暂停

    void keyPress unsigned char key int x int y int i switch key case f i 3 while i x pos 3 sleep 100 glutPostRedisplay 上面是在
  • 阻止 OpenGL.framework 在 Cocoa 应用程序中加载

    我的应用程序链接到这些框架 Cocoa Framework AppKit Framework CoreData Framework Foundation Framework 请注意 OpenGL Framework 是NOT已链接 但是 设
  • __device__ __constant__ 常量

    有什么区别吗 在 CUDA 程序中定义设备常量的最佳方法是什么 在 C 主机 设备程序中 如果我想将常量定义在设备常量内存中 我可以这样做 device constant float a 5 constant float a 5 问题 1
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • glut 库中缺少 glutInitContextVersion()

    我正在练习一些 opengl 代码 但是当我想通过以下方式强制 opengl 上下文使用特定版本的 opengl 时glutInitContextVersion 它编译过程失败并给出以下消息 使用未声明的标识符 glutInitContex
  • cudaMemcpy() 与 cudaMemcpyFromSymbol()

    我试图找出原因cudaMemcpyFromSymbol 存在 似乎 symbol func 可以做的所有事情 nonSymbol cmd 也可以做 symbol func 似乎可以轻松移动数组或索引的一部分 但这也可以使用 nonSymbo
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 如果我用opengl绘图的话SDL Renderer就没用了吗?

    我正在学习 SDL2 但我也在使用使用 OpenGL 调用的 imgui 库 从我在网上各种博客上读到的内容来看 我无法轻松混合 SDL2 渲染器和 opengl 调用 我要么使用其中之一 要么使用另一个 我读过的大多数教程都使用渲染器 所
  • 在 GLUT 中使用鼠标滚轮

    我想在 OpenGL GLUT 程序中使用鼠标滚轮来放大和缩小场景 我怎么做 Freeglut 的 glutMouseWheelFunc 回调与版本相关 并且在 X 中不可靠 使用标准鼠标功能并测试按钮 3 和 4 OpenGlut 对 g
  • 为什么拥有单独的投影矩阵但结合模型和视图矩阵会有好处?

    当您学习 3D 编程时 您会被告知用 3 个变换矩阵来思考是最简单的 模型矩阵 该矩阵对于每个模型都是独立的 它根据需要旋转和缩放对象 最后将其移动到 3D 世界中的最终位置 模型矩阵将模型坐标转换为世界坐标 视图矩阵 对于大量对象 如果不
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 内联 PTX 汇编代码强大吗?

    我看到一些代码示例 人们在 C 代码中使用内联 PTX 汇编代码 CUDA工具包中的文档提到PTX很强大 为什么会这样呢 如果我们在 C 代码中使用这样的代码 我们会得到什么好处 内联 PTX 使您可以访问未通过 CUDA 内在函数公开的指
  • Visual Studio 2010 中的 SOIL 设置

    我无法得到SOIL http www lonesock net soil html正确使用 Visual Studio 2010 我远非 VS 专家 但据我所知 只需执行以下步骤即可使环境正常运行 属性 gt gt C C gt 常规 gt

随机推荐

  • Python 中哪个更高效:标准导入还是上下文导入?

    如果这个问题看起来有补救作用 我提前道歉 在 Python 中这被认为更有效 标准进口 import logging try some code exception Exception e logging error e or 上下文导入
  • 包含助手不起作用

    我试图在我的测试中包含一些助手 但我无法让它发挥作用 我收到以下错误 home edu rvm rubies ruby 1 9 3 p392 bin ruby S rspec spec features customers spec rb
  • 如何使用 pywinauto 右键单击​​文件夹并从上下文菜单中选择?

    我正在为云同步桌面应用程序编写自动化测试 我面临的问题是 我无法从窗口中选择子文件夹 并且右键单击文件夹时无法从上下文菜单中选择选项 Example import pywinauto pywinauto Application Start
  • 自动生成与现有表匹配的用户定义表类型

    我的数据库中已经存在几个表 其中一些有相当多的专栏 我想制作一些存储过程来对这些表执行合并语句 为此 我希望存储过程的参数是用户定义的表类型 我可以编写每个表的脚本并将其修改为用户定义的表类型创建语句 但我真正想要的是一种从数据库中现有表生
  • 如何从存储过程返回bool

    我正在尝试弄清楚如何编写返回布尔值的存储过程 我开始编写以下返回 int 的代码 USE Database GO Object StoredProcedure dbo ReturnInt Script Date 09 30 2010 09
  • IntraWeb 的 SSL 问题 - Delphi 2007

    最近一段时间 我一直在尝试在 IW 程序上使用 SSL 但一直遇到 无法加载 SSL 库 的问题 我已经遵循了我能找到的关于这个主题的每一条建议 但仍然没有快乐 我已经在本地目录和 system32 中尝试了建议的 DLL 有人对我应该使用
  • 将 null 分配给 JSON 字段而不是空字符串

    由于空字符串是 Go 的零 默认值string 我决定将所有此类字段定义为interface 反而 例如 type student struct FirstName interface json first name MiddleName
  • 从 Kotlin 活动中获取额外的字符串

    我想从意图中获得另一个活动中的额外字符串 这是创造我的意图的方式 val intent Intent this Main2Activity class java intent putExtra samplename abd startAct
  • firestore数据存储在子集合中

    我正在 Firestore 中制作一个 聊天演示 来保存消息 我这样做是这样的 FirebaseFirestore getInstance collection Consts R CHAT ROOM document finalChatRo
  • 交换不同长度字符串中特定位置的字符

    我一直在尝试学习 sed 我在这里找到的示例用于交换从 05082012 到 20120805 的日期 但我无法使它们适应我当前的需要 我需要将 IP 地址 10 4 13 22 转换为 nsupdate 脚本的反向查找 22 13 4 1
  • XQuery 存在检查选择 sql 查询

    我有一个带有 xml 列的 sql 表 其中包含如下 xml 的值
  • 如何计算没有循环的矩阵的欧几里德长度?

    看起来这个问题的答案应该很简单 但我很困惑 我有一个 Nx3 矩阵 其中第 1 2 和 3 列是第 n 个项目的 X Y 和 Z 坐标 我想计算从原点到该项目的距离 在非矢量化形式中 这很容易 距离 范数 x y z or 距离 sqrt
  • Laravel NotFoundHttpException

    我对这条路线有疑问 Route get va uniqueid AdminController VaShow gt name va 并在控制器中 public function VaShow uniqueid 123 dd uniqueid
  • 在 Flow 中输入“camel caser”:方差问题?

    尝试流链接 https flowtype org try 0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgBSAygPIByYAvGAHYCuMMYAPmAM4YBOAlrQOas69ALYAjPFyFi4cGHgCGtIQ
  • 如何使用 Python 在文本文件中查找单词

    我是 python 新手 正在尝试在 python 中创建一个函数 该函数查找文本文件中出现该单词的行并打印行号 该函数将文本文件名和单词列表作为输入 我不知道从哪里开始 Example index notes txt isotope pr
  • 版本控制(即 Subversion)适用于文档跟踪吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我负责大约 100 多个文档 word 文档 而不是源代码 需要由我部门的不同人员进行修改 目前 所有文档都位于一个共享文件夹中 它们将在其中检
  • 在django中传递json并反序列化表单

    接下来的问题是 我使用 ajax 向服务器发送一些发布数据 该数据看起来像 data form this serialize some array 2 3 4 1 如何在django中获取表单对象 request POST form 返回带
  • Twitter Bootstrap:全宽 div 的列重新排序

    这看起来是一个简单的任务 但无法让它发挥作用 我需要为平板电脑重新排序 div 宽度为 100 请看一下下面的内容fiddle http jsfiddle net 711p2dLb 看看我的意思 原文参考 div class row div
  • 相同密度的不同 Android 设备上的滑动(滑动)速度不同

    我正在编写自己的图像查看器 使用户能够向左 向右滑动以查看下一个 上一个图像 我想根据投射速度制作图像变化的动画 为了检测猛击手势及其速度 我遵循了这个基本手势检测 https stackoverflow com questions 937
  • 在 OpenGL 和 CUDA 之间共享纹理

    我在 OpenGL 和 CUDA 之间共享数据如下 GLuint buffer glGenBuffers 1 buffer Some image is bound to this texture buffer at some point c