Шейдер DirectX hlsl не обрабатывает цвета - PullRequest
0 голосов
/ 09 апреля 2019

Просто начинаю с DirectX. У меня есть пиксельный шейдер, чтобы объединить текстуру и цвет. Текстурная часть работает отлично. Но цветная часть ничего не делает. Я должен что-то упустить. Я не получаю ошибок. Код "input.color" равен 0 (думаю, я не могу проверить внутри кода шейдера с помощью отладчика). У кого-нибудь есть подсказки, в чем может быть проблема?

Спасибо.

// Shader code:
struct PixelInputType
{
  float4 position : SV_POSITION;
  float2 tex : TEXCOORD0;
  float4 color : COLOR;
};
float4 TexturePixelShader(PixelInputType input) : SV_TARGET
{
  float4 textureColor;
  textureColor = shaderTexture.Sample(SampleType, input.tex); // This works fine.
  textureColor += float4(0.0f, 0.25f, 0.0f, 1.0f); // This works fine, makes texture greeny.
  textureColor += input.color; // This does not work. Does nothing.
  return textureColor;
}

// DirectX code:
struct VertexType
{
  DirectX::XMFLOAT4 position;
  DirectX::XMFLOAT2 texture;
  DirectX::XMFLOAT4 color;
};
//
D3D11_INPUT_ELEMENT_DESC polygonLayout[3];
polygonLayout[0].SemanticName = "POSITION";
polygonLayout[0].SemanticIndex = 0;
polygonLayout[0].Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
polygonLayout[0].InputSlot = 0;
polygonLayout[0].AlignedByteOffset = 0;
polygonLayout[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[0].InstanceDataStepRate = 0;
polygonLayout[1].SemanticName = "TEXCOORD";
polygonLayout[1].SemanticIndex = 0;
polygonLayout[1].Format = DXGI_FORMAT_R32G32_FLOAT;
polygonLayout[1].InputSlot = 0;
polygonLayout[1].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[1].InstanceDataStepRate = 0;
polygonLayout[2].SemanticName = "COLOR";
polygonLayout[2].SemanticIndex = 0;
polygonLayout[2].Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
polygonLayout[2].InputSlot = 0;
polygonLayout[2].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT;
polygonLayout[2].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
polygonLayout[2].InstanceDataStepRate = 0;
//
std::vector<VertexType> vertices;
vertices[0].position = DirectX::XMFLOAT4(-1.0f, -1.0f, 0.0f, 0.0f);
vertices[0].texture = DirectX::XMFLOAT2(0.0f, 1.0f);
vertices[0].color = DirectX::XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f);
vertices[1].position = DirectX::XMFLOAT4(0.0f, 1.0f, 0.0f, 0.0f);
vertices[1].texture = DirectX::XMFLOAT2(0.5f, 0.0f);
vertices[1].color = DirectX::XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f);
vertices[2].position = DirectX::XMFLOAT4(1.0f, -1.0f, 0.0f, 0.0f);
vertices[2].texture = DirectX::XMFLOAT2(1.0f, 1.0f);
vertices[2].color = DirectX::XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f);
//
D3D11_BUFFER_DESC vertexBufferDesc;
vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
vertexBufferDesc.ByteWidth = sizeof(VertexType) * m_vertexCount;
vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
vertexBufferDesc.CPUAccessFlags = 0;
vertexBufferDesc.MiscFlags = 0;
vertexBufferDesc.StructureByteStride = 0;
...