小编Sea*_*tar的帖子

DXGI_FORMAT 的确切颜色空间是什么?

在DXGI_FORMAT的官方文档中,告诉我们只有带有_SRGB枚举后缀的格式才属于sRGB色彩空间。我认为没有这个后缀的其他格式都在线性空间中。但是我在 DirectXTex 库中发现了格式转换函数的一个很奇怪的行为。(您可以从http://directxtex.codeplex.com/下载)

首先,我使用NVIDIA Photoshop DDS Plugin将纹理文件导出为DXGI_FORMAT_R32G32B32A32_FLOAT。然后我通过 LoadFromDDSFile() 函数加载这个文件,并通过 Convert() 函数将其格式转换为 DXGI_FORMAT_R16G16B16A16_UNORM。(这两个函数都是由 DirectXTex 库提供的。)

你猜怎么着?图像转换为DXGI_FORMAT_R16G16B16A16_UNORM后,所有像素的亮度也发生了变化,整个图像变得比以前更亮了。

如果在图像转换为 DXGI_FORMAT_R16G16B16A16_UNORM 格式后手动将像素值从 sRGB 空间转换为线性空间,则生成的像素值与输入相同。因此,我假设 DirectXTex 库将 DXGI_FORMAT_R32G32B32A32_FLOAT 视为线性色彩空间中的格式,并将 DXGI_FORMAT_R16G16B16A16_UNORM 视为 sRGB 色彩空间中的格式,然后将色彩空间从线性空间转换为 sRGB 空间。(我试图找出为什么Convert()函数也会转换颜色空间,但它是由WIC实现的,并且没有它的源代码。)

那么,DirectXTex 库中是否有任何错误?或者它是 DXGI_FORMAT 的真正标准?如果某些特殊的 DXGI_FORMAT 有不同的颜色空间,请告诉我在哪里可以找到它的规范。

任何帮助将不胜感激。谢谢!

graphics direct3d game-engine color-space dxgi

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

为什么movlps和movhps SSE指令比用于传输未对齐数据的movup更快?

我发现在用于进行数学计算的一些SSE优化代码中,它们使用movlps和movhps指令的组合而不是单个movups指令来传输未对齐的数据.我不知道为什么,所以我自己尝试了,这是下面的伪代码:

struct Vec4
{
    float f[4];
};

const size_t nSize = sizeof(Vec4) * 100;
Vec4* pA = (Vec4*)malloc( nSize );
Vec4* pB = (Vec4*)malloc( nSize );
Vec4* pR = (Vec4*)malloc( nSize );

...Some data initialization code here
...Records current time by QueryPerformanceCounter()

for( int i=0; i<100000, ++i )
{
    for( int j=0; j<100; ++j )
    {
          Vec4* a = &pA[i];
          Vec4* b = &pB[i];
          Vec4* r = &pR[i];
          __asm
          {
              mov eax, a
              mov ecx, b
              mov edx, r

              ...option …
Run Code Online (Sandbox Code Playgroud)

optimization assembly sse

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

如何通过批处理文件知道命令是否成功执行?

例如,在批处理文件中,我输入以下命令:

xcopy C:\ fileA.txt D:\ Dir\/ y/d

如果没有名为fileA.txt的文件,它将绝对失败.但我想知道它是否失败,然后向用户输出一些消息.我怎样才能做到这一点?

任何帮助将不胜感激,谢谢!

windows batch-file

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