Jam*_*shy 5 c++ opengl encryption dds-format
所以我想做的是:
将使用任何算法(在我的情况下为AES-256)加密的文件加载到GPU内存(使用CUDA).
使用我们现在拥有的所有GPU并行功能来解密文件并让它保留在GPU内存中.
现在告诉OpenGL(4.3)内存中的纹理需要从DDS DXT5读取和解压缩.
第3点是我怀疑的地方.由于要在OpenGL中加载压缩的DDS DXT5,必须使用压缩类型(GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)和指向图像数据缓冲区的指针调用openGL :: glCompressedTexImage [+ 2D | 3D | 2DARB ...].
所以,简而言之 - >有没有办法将GPU内存中已有的纹理缓冲区地址传递给OpenGL(采用DDS格式)?如果没有此选项,我需要将AES解密文件传输回CPU并告诉OpenGL将其再次加载到GPU中....
非常感谢任何帮助或简短的例子;)
你需要做两件事。
首先,您必须确保生成此数据的操作的同步和可见性。如果您使用计算着色器将数据生成到 SSBO、缓冲区纹理或其他内容中,那么您需要将glMemoryBarrier, 与该GL_PIXEL_BUFFER_BARRIER_BIT集合一起使用。如果您通过对缓冲区纹理的渲染操作生成此数据,则不需要显式屏障。但如果 FS 正在写入 SSBO 或通过图像加载/存储,您仍然需要如上所述的显式屏障。
如果您使用 OpenCL,则必须使用 OpenCL 的 OpenGL 互操作功能来使 CL 操作的结果对 GL 可见。
完成后,您只需将该缓冲区用作像素解包缓冲区,就像任何异步像素传输操作一样。压缩纹理的工作方式与GL_PIXEL_UNPACK_BUFFER未压缩纹理的工作方式相同。
请记住:在 OpenGL 中,所有缓冲区对象都是相同的。OpenGL 并不关心您是否前一分钟将缓冲区用作 SSBO,然后下一分钟将其用于像素传输。只要你同步了,一切都好。