Я немного сталкиваюсь с шейдерами и получаю эту странную ошибку компиляции, которая сводит меня с ума!
следующий фрагмент кода пиксельного шейдера:
DirectionVector = normalize(f3LightPosition[i] - PixelPos);
LightVec = PixelNormal - DirectionVector;
// Get the light strenght factor
LightStrFactor = float(abs((LightVec.x + LightVec.y + LightVec.z) / 3.0f));
// TEST!!!
LightStrFactor = 1.0f;
// Add this light to the total light on this pixel
LightVal += f4Light[i] * LightStrFactor;
работает отлично, нокак только я уберу "LightStrFactor = 1.0f;"строка, т. е. позволяя значению LightStrFactor быть результатом вышеприведенных вычислений, он не может скомпилировать шейдер.
LightStrFactor является float LightVal & f4Light [i] являются float4. Все остальные являются float3.
Мой вопрос, кроме того, почему он не компилируется, почему DX-компилятор заботится о значении float?даже если мои значения неверны, разве это не должно быть во время выполнения?код компиляции шейдера такой:
/* Compile the bitch */
if (FAILED(D3DXCompileShaderFromFile(fileName, NULL, NULL, "PS_MAIN", "ps_2_0", 0, &this->m_pCode, NULL, &this->m_constantTable)))
GraphicException("Failed to compile pixel shader!"); // <-- gets here :(
if (FAILED(g_D3dDevice->CreatePixelShader( (DWORD*)this->m_pCode->GetBufferPointer(), &this->m_hPixelShader )))
GraphicException("Failed to create pixel shader!");
this->m_fLoaded = true;
любая помощь приветствуется, спасибо !!!:]