如何在DirectX11着色器中使用swizzle .rrrg

时间:2019-02-07 05:07:12

标签: c++ directx-11 directx-9 texture2d dxgi

我必须在Directx9和Directx11中创建具有D3DFMT_A8L8等效格式的纹理。但是文档中的注释对我来说并不明确。有人可以解释应该怎么做吗?创建输入布局时,我面临无效的参数错误。

D3DFMT_A8L8 => DXGI_FORMAT_R8G8_UNORM 注意:在着色器中使用swizzle .rrrg复制红色并将绿色移至alpha组件以获得Direct3D 9行为。

1 个答案:

答案 0 :(得分:0)

在Direct3D 9中,“亮度”格式将自动在着色器中读取为RGB值(已复制),因为它们是灰度格式。在Direct3D 10+中,没有“亮度”格式。有一种和两种通道格式,它们之间没有“特殊行为”。

因此,在着色器中,<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id=infoDiv>This is div info</div>纹理的第一个通道位于'r'通道中,第二个通道位于'g'通道中。 //Clear the screen system("clear"); //Declare variables float weight, height, bmi; int number_of_inputs = 2; //Interger constant or literal //Get grades from user printf("Please enter Weight in Pounds: "); scanf("%f", &weight); printf("Please enter your Height in inches: "); scanf("%f", &height); //Calculate the BMI bmi = 703 * (weight / (height * height) ); //Display what is the health status of the user if (bmi >= 18.5 <= 24) { printf("Your Health Status is Normal \n"); } else if (bmi <= 18.5 >= 0) { printf("Your Health Status is Underweight \n"); } else if (bmi >= 25 <= 29) { printf("Your Health Status is Overweight \n"); } else if (bmi >= 30 <= 999) { printf("Your Health Status is Obese \n"); } printf("BMI: %f \n", bmi); return (0); 具有与DXGI_FORMAT_R8G8_UNORM相同的内存占用量,即两个8位无符号普通整数数据通道,但是如果您想要现代着色器中的行为与旧着色器匹配,则必须使用着色器细节明确地做到这一点:

DXGI_FORMAT_R8G8_UNORM
  

这与输入布局完全无关。这就是纹理采样器的工作方式。