Add clamp mode to Draw2d (#6630)
Signed-off-by: abrmich <abrmich@amazon.com>
This commit is contained in:
@@ -103,10 +103,7 @@ void CDraw2d::OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene)
|
||||
LyShinePassRequestBus::EventResult(uiCanvasPass, sceneId, &LyShinePassRequestBus::Events::GetUiCanvasPass);
|
||||
|
||||
m_dynamicDraw = AZ::RPI::DynamicDrawInterface::Get()->CreateDynamicDrawContext();
|
||||
AZ::RPI::ShaderOptionList shaderOptions;
|
||||
shaderOptions.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true")));
|
||||
shaderOptions.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("false")));
|
||||
m_dynamicDraw->InitShaderWithVariant(shader, &shaderOptions);
|
||||
m_dynamicDraw->InitShader(shader);
|
||||
m_dynamicDraw->InitVertexFormat(
|
||||
{ {"POSITION", AZ::RHI::Format::R32G32B32_FLOAT},
|
||||
{"COLOR", AZ::RHI::Format::B8G8R8A8_UNORM},
|
||||
@@ -136,6 +133,16 @@ void CDraw2d::OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene)
|
||||
m_shaderData.m_viewProjInputIndex = layout->FindShaderInputConstantIndex(AZ::Name(worldToProjIndexName));
|
||||
AZ_Error("Draw2d", m_shaderData.m_viewProjInputIndex.IsValid(), "Failed to find shader input constant %s.",
|
||||
worldToProjIndexName);
|
||||
|
||||
// Cache shader variants that will be used
|
||||
AZ::RPI::ShaderOptionList shaderOptionsClamp;
|
||||
shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("true")));
|
||||
shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true")));
|
||||
m_shaderData.m_shaderOptionsClamp = m_dynamicDraw->UseShaderVariant(shaderOptionsClamp);
|
||||
AZ::RPI::ShaderOptionList shaderOptionsWrap;
|
||||
shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("false")));
|
||||
shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true")));
|
||||
m_shaderData.m_shaderOptionsWrap = m_dynamicDraw->UseShaderVariant(shaderOptionsWrap);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -181,6 +188,8 @@ void CDraw2d::DrawImage(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vector2 po
|
||||
|
||||
quad.m_image = image;
|
||||
|
||||
quad.m_clamp = actualImageOptions->m_clamp;
|
||||
|
||||
// add the blendMode flags to the base state
|
||||
quad.m_renderState = actualImageOptions->m_renderState;
|
||||
|
||||
@@ -206,7 +215,7 @@ void CDraw2d::DrawImageAligned(AZ::Data::Instance<AZ::RPI::Image> image, AZ::Vec
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void CDraw2d::DrawQuad(AZ::Data::Instance<AZ::RPI::Image> image, VertexPosColUV* verts, Rounding pixelRounding,
|
||||
const CDraw2d::RenderState& renderState)
|
||||
bool clamp, const CDraw2d::RenderState& renderState)
|
||||
{
|
||||
// define quad
|
||||
DeferredQuad quad;
|
||||
@@ -217,6 +226,7 @@ void CDraw2d::DrawQuad(AZ::Data::Instance<AZ::RPI::Image> image, VertexPosColUV*
|
||||
quad.m_packedColors[i] = PackARGB8888(verts[i].color);
|
||||
}
|
||||
quad.m_image = image;
|
||||
quad.m_clamp = clamp;
|
||||
|
||||
// add the blendMode flags to the base state
|
||||
quad.m_renderState = renderState;
|
||||
@@ -766,6 +776,8 @@ void CDraw2d::DeferredQuad::Draw(AZ::RHI::Ptr<AZ::RPI::DynamicDrawContext> dynam
|
||||
vertices[i].st = Vec2(m_texCoords[j].GetX(), m_texCoords[j].GetY());
|
||||
}
|
||||
|
||||
dynamicDraw->SetShaderVariant(m_clamp ? shaderData.m_shaderOptionsClamp : shaderData.m_shaderOptionsWrap);
|
||||
|
||||
// Set up per draw SRG
|
||||
AZ::Data::Instance<AZ::RPI::ShaderResourceGroup> drawSrg = dynamicDraw->NewDrawSrg();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user