首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPU处理与图形GPU

GPU处理与图形GPU
EN

Stack Overflow用户
提问于 2022-02-20 22:01:16
回答 1查看 78关注 0票数 0

所以我正在开发一个图形API,我已经知道如何创建一个窗口并绘制像素,我现在所缺少的只是GPU部分。我可以用Sycl或OpenCL来替换它吗?所以我想使用Sycl或OpenCL来访问gpu,并为我的图形做计算部分。使用GPU是一种有效的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-21 08:11:14

是的,您可以使用OpenCL进行图形绘制。如果做的正确--对于比其他任何应用都快的特殊应用程序--这是非常快速的,但是你必须从头开始实现所有的东西:从3D到2D屏幕坐标的摄像机转换,用于行/三角光栅化的Bresenham算法,以及z缓冲区。

想想看:图像只是一个整数数组。您可以使用OpenCL在相应的像素坐标处将颜色值写入数组。然后将其作为框架缓冲区传递给您的图形API,并在屏幕上绘制它。

GPU的关键部分是并行化和内存访问:

  1. 并行化:
    • 对于栅格图形,您可以在一系列线/三角形数组上并行化。每个GPU线程在帧上栅格化一个单线/三角形。
    • 对于光线跟踪图形,您可以在帧上的像素上并行处理。每个GPU线程计算单个像素的颜色。

  2. 内存访问:所有时候,行/三角形的数组都必须在GPU内存中。在帧之间将大型数组从/到CPU的PCIe数据传输将使其极其缓慢。

与OpenCL交互的图形策略是如下所示:

  1. 初始化GPU内存中的行数组/三角形数组。在CPU上有一个单独的物理线程,您可以在GPU内存中对计算一些物理和更新行/三角坐标的OpenCL内核进行排队。
  2. 获取摄像机参数(从鼠标运动、摄像机位置、视场等角度获得旋转矩阵)。,并将它们复制到GPU内存中。
  3. 调用GPU上的栅格化内核,将帧/z-缓冲区上的所有行/三角形并行地进行栅格化。
  4. 将完成的帧复制到CPU内存,并将其交给图形API。

免责声明:我已经写了我自己的光栅/射线跟踪图形引擎在OpenCL从零。有关实时演示,请参见这里

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

https://stackoverflow.com/questions/71199193

复制
相关文章

相似问题

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