Ho un vertex con un blocco di spinta costante contenente un galleggiante:Utilizzando differenti flessioni costanti in differenti Shader stadi
layout(push_constant) uniform pushConstants {
float test1;
} u_pushConstants;
E shader frammento con un altro blocco di spinta costante con un valore float diversa:
layout(push_constant) uniform pushConstants {
float test2;
} u_pushConstants;
test1 e test2 si suppone di essere diversi.
Le gamme di spinta costante per il layout tubazione sono definite in questo modo:
std::array<vk::PushConstantRange,2> ranges = {
vk::PushConstantRange{
vk::ShaderStageFlagBits::eVertex,
0,
sizeof(float)
},
vk::PushConstantRange{
vk::ShaderStageFlagBits::eFragment,
sizeof(float), // Push-constant range offset (Start after vertex push constants)
sizeof(float)
}
};
Le costanti reali vengono quindi spinte durante il rendering simili:
std::array<float,1> constants = {123.f};
commandBufferDraw.pushConstants(
pipelineLayout,
vk::ShaderStageFlagBits::eVertex,
0,
sizeof(float),
constants.data()
);
std::array<float,1> constants = {456.f};
commandBufferDraw.pushConstants(
pipelineLayout,
vk::ShaderStageFlagBits::eFragment,
sizeof(float), // Offset in bytes
sizeof(float),
constants.data()
);
Tuttavia, durante il controllo i valori all'interno gli shader hanno entrambi il valore 123. Sembra che gli offset siano completamente ignorati. Sto usando in modo errato?