标签: dds-format

如何在没有CPU拷贝的情况下上传GPU操作生成的DXT5压缩像素数据?

所以我想做的是:

  1. 将使用任何算法(在我的情况下为AES-256)加密的文件加载到GPU内存(使用CUDA).

  2. 使用我们现在拥有的所有GPU并行功能来解密文件并让它保留在GPU内存中.

  3. 现在告诉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中....

非常感谢任何帮助或简短的例子;)

c++ opengl encryption dds-format

5
推荐指数
1
解决办法
438
查看次数

如何确保 DirectDraw 表面具有正确的文件格式?

我需要做一个简单的检查,如果一个 dds 文件是有效的格式。我只需要对 dds 文件进行一般检查,所以我不需要检查它是否是 dxt1、dxt5、dx10 等。例如,如果我有一个 png 图像并且我将扩展名重命名为 .dds dds 格式当然会出错,然后我需要告诉用户他正在尝试使用格式错误的 dds 文件。但是,如果我有一个确实具有正确文件格式的 dds,我将不需要做任何进一步的调查,因为我不关心它是什么类型的 dds 文件(此时)。所以我只需要读取 dds 文件的部分,这些部分将在所有 dds 文件上保持不变。我想我可以以某种方式读取 dds 标题和幻数。我必须对 png 文件进行相同的验证,然后我正在读取 png 标题,如下所示:

    var png = new byte[] { 0x89, 0x50, 0x4e, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }
    using (FileStream fs = new FileStream(fileToCheck, FileMode.Open, FileAccess.Read))
            {
               if (fs.Length > buffer.Length)
                 {
                   fs.Read(buffer, 0, buffer.Length);
                   fs.Position = (int)fs.Length - endBuffer.Length;
                   fs.Read(bufferEnd, 0, endBuffer.Length);
                 }

               fs.Close();
            } 
    for (int i = 0; i < png.Length; i++)
        { …
Run Code Online (Sandbox Code Playgroud)

.net c# binaryfiles dds-format

5
推荐指数
1
解决办法
901
查看次数

如何将.dds文件加载到图片框中?

如何在C#中将.dds纹理文件加载为图像?我能找到的谷歌没什么用处.

你给我的样本信息越多,我就越能理解它.

c# image directdraw dds-format

4
推荐指数
1
解决办法
1万
查看次数

我认为*.DDS文件意味着可以快速加载?

好吧,所以我试图权衡使用各种不同纹理压缩技术的专业人士和骗子.我花了99.999%的时间使用DirectX为Windows机器编写2D精灵游戏.

到目前为止,我已经看了纹理打包(SpriteSheets)与alpha修剪,这似乎是获得更多性能的好方法.现在我开始看看它们存储的纹理格式; 目前所有内容都存储为*.PNGs.

我听说*.DDS文件很好,尤其是当与DXT5(/ 3/1取决于任务)压缩一起使用时,因为纹理在VRAM中保持压缩状态?还有人说,因为它们已经是DirectDraw Surfaces,所以它们加载的速度也快得多.

所以我创建了一个应用程序来测试它; 我将该行调用20次以下,在每次调用之间释放纹理.

    for (int i = 0; i < 20; i++)
 {
  if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, L"Test.dds", &g_pTexture ) ) )
  {
   return E_FAIL;
  }

  g_pTexture->Release();
  g_pTexture = NULL;
 }
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试使用DXT5纹理,它需要比在简单的*.PNG中加载要长5倍.我听说如果你不生成Mipmap,它会变慢,所以我仔细检查了一下.然后我改变了我用来生成*.DDS文件的程序,切换到NVIDIA自己的nvcompress.exe,但没有任何效果.

编辑:我忘了提到文件(*.png和*.dds)都是相同的图像,只是以不同的格式保存.(相同大小,alpha数量,一切!)

编辑2:当使用以下参数时,它的加载速度提高了近2.5倍,并且消耗的VRAM少了很少!

 D3DXCreateTextureFromFileEx( g_pd3dDevice, L"Test.dds", D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_FROM_FILE, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, NULL, NULL, &g_pTexture )
Run Code Online (Sandbox Code Playgroud)

但是,我现在正在失去纹理的所有透明度,我看了DXT5纹理,它在Paint.NET和DirectX DDS Viewer中看起来很好.但是当装入所有透明度时变成纯黑色.ColorKey问题?

编辑3:忽略最后一点,我是愚蠢的,在我的"快速示例"中,我忘了在D3DXSprite-> Begin()上启用Alpha-Blending.卫生署!

compression directx textures directdraw dds-format

4
推荐指数
1
解决办法
5964
查看次数

iOS支持哪些压缩纹理格式?

来自Windows背景,我习惯的唯一压缩文件格式是DDS,它使用S3 DXT压缩.

我不确定iOS设备是否支持DDS,以及可能有哪些其他选项?我听说过爱立信纹理压缩(ETC)和PVRTC之类的东西,但我不明白它们是如何组合在一起的,以及它们对特定硬件功能的依赖程度.

textures pvrtc ios dds-format

2
推荐指数
1
解决办法
7316
查看次数

在OpenGL中加载DDS DXT1,崩溃

我的代码有什么问题吗?当我执行glCompressedTexImage2D()时程序崩溃(来自Windows XP崩溃消息的东西...)

我试图加载没有mipmap的DDS图像,图像格式是DDS DXT1

我错过了一些包含文件,或者我做错了什么?我从以下网址下载了包含的文件:http: //sourceforge.net/projects/glew/files/glew/1.5.1/glew-1.5.1-win32.zip/download

我在与.exe相同的文件夹中有glew32.dll.

下面的代码只有我更改的部分才能加载DDS图像:

#pragma comment(lib, "glew32.lib")
#include <GL\glew.h>
#include <GL\gl.h>


...


typedef struct {
    GLuint dwSize;
    GLuint dwFlags;
    GLuint dwFourCC;
    GLuint dwRGBBitCount;
    GLuint dwRBitMask;
    GLuint dwGBitMask;
    GLuint dwBBitMask;
    GLuint dwABitMask;
} DDS_PIXELFORMAT;

typedef struct {
    GLuint dwMagic;
    GLuint dwSize;
    GLuint dwFlags;
    GLuint dwHeight;
    GLuint dwWidth;
    GLuint dwLinearSize;
    GLuint dwDepth;
    GLuint dwMipMapCount;
    GLuint dwReserved1[11];
    DDS_PIXELFORMAT ddpf;
    GLuint dwCaps;
    GLuint dwCaps2;
    GLuint dwCaps3;
    GLuint dwCaps4;
    GLuint dwReserved2;
} DDS_HEADER;

DDS_HEADER DDS_headers;


...


FILE …
Run Code Online (Sandbox Code Playgroud)

c++ opengl directdraw dds-format

2
推荐指数
1
解决办法
5166
查看次数

DXT压缩与原始PNG产生相同的文件大小

我正在尝试将纹理转换/压缩为DDS格式,并使用原始PNG进行DXT压缩.我在Mac上,所以我正在使用Graphic Converter(虽然我也尝试过其他工具).但无论我使用哪种DXT级别(DXT1-5),文件大小都与原始PNG大致相同.

compression textures webgl dds-format

2
推荐指数
1
解决办法
2169
查看次数

SharpDX在Windows Phone 8中加载纹理

我正在创建一个Windows Phone 8应用程序,我正在使用SharpDX来加载纹理.

我试图加载PNG,Content.Load<Texture2D>("filename.png")但我有错误,我已经意识到Windows Phone 8中的SharpDX只接受DDS纹理,不接受PNG/JPEG/BMP等.我已经将我的PNG转换为DDS使用texconv filename.png并将文件添加到我的解决方案就像我在我的项目中使用的其他文件(我可以正确加载).当我运行我的应用程序时,我得到一个例外:

{SharpDX.Serialization.InvalidChunkException: Unexpected chunk [DDS /0x20534444] instead of [TKFX/0x58464B54] at SharpDX.Serialization.BinarySerializer.BeginChunk(FourCC chunkId)}

好吧,我已经使用该texconv工具将有效的PNG转换为DDS .从我看到的,它是一个文件格式错误,并且fourCC代码对应于DDS,这是应该的.但是SharpDX期望TKFX格式(工具包效应?)而不是DDS.为什么?我试图加载纹理Content.Load<Texture2D>没有Content.Load<Effect>(我也有它加载着色器,它完美地工作).

如果有人发现如何加载PNG而不是DDS,那就更好了!

texture2d sharpdx windows-phone-8 dds-format

1
推荐指数
1
解决办法
1465
查看次数