Fixes
This commit is contained in:
@ -23,6 +23,12 @@
|
|||||||
|
|
||||||
namespace ia::iae
|
namespace ia::iae
|
||||||
{
|
{
|
||||||
|
SpriteRendererComponent::AnimationKeyFrame SpriteRendererComponent::GetKeyFrame(IN INT32 index)
|
||||||
|
{
|
||||||
|
index %= m_activeAnimation.Keys.size();
|
||||||
|
return m_reverseAnimation ? m_activeAnimation.Keys[m_activeAnimation.Keys.size() - 1 - index] : m_activeAnimation.Keys[index];
|
||||||
|
}
|
||||||
|
|
||||||
SpriteRendererComponent::SpriteRendererComponent(IN Node *node) : IComponent(node)
|
SpriteRendererComponent::SpriteRendererComponent(IN Node *node) : IComponent(node)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -48,8 +54,10 @@ namespace ia::iae
|
|||||||
IA_RELEASE_ASSERT((animation != INVALID_HANDLE) && (animation < m_animations.size()));
|
IA_RELEASE_ASSERT((animation != INVALID_HANDLE) && (animation < m_animations.size()));
|
||||||
m_prevAnimationKeyFrameIndex = 0;
|
m_prevAnimationKeyFrameIndex = 0;
|
||||||
m_activeAnimation = m_animations[animation];
|
m_activeAnimation = m_animations[animation];
|
||||||
m_prevAnimationKeyFrame = m_activeAnimation.Keys[m_prevAnimationKeyFrameIndex + 0];
|
|
||||||
m_nextAnimationKeyFrame = m_activeAnimation.Keys[(m_prevAnimationKeyFrameIndex + 1) % m_activeAnimation.Keys.size()];
|
m_prevAnimationKeyFrame = GetKeyFrame(m_prevAnimationKeyFrameIndex + 0);
|
||||||
|
m_nextAnimationKeyFrame = GetKeyFrame(m_prevAnimationKeyFrameIndex + 1);
|
||||||
|
|
||||||
m_currentAnimationState = m_prevAnimationKeyFrame;
|
m_currentAnimationState = m_prevAnimationKeyFrame;
|
||||||
m_activeAnimationHandle = animation;
|
m_activeAnimationHandle = animation;
|
||||||
}
|
}
|
||||||
@ -97,8 +105,8 @@ namespace ia::iae
|
|||||||
m_activeAnimation = {};
|
m_activeAnimation = {};
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_prevAnimationKeyFrame = m_activeAnimation.Keys[m_prevAnimationKeyFrameIndex + 0];
|
m_prevAnimationKeyFrame = GetKeyFrame(m_prevAnimationKeyFrameIndex + 0);
|
||||||
m_nextAnimationKeyFrame = m_activeAnimation.Keys[(m_prevAnimationKeyFrameIndex + 1) % keyCount];
|
m_nextAnimationKeyFrame = GetKeyFrame(m_prevAnimationKeyFrameIndex + 1);
|
||||||
m_currentAnimationState = m_prevAnimationKeyFrame;
|
m_currentAnimationState = m_prevAnimationKeyFrame;
|
||||||
m_timelinePosition = 0;
|
m_timelinePosition = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,6 +55,8 @@ namespace ia::iae
|
|||||||
glm::mat4 matView{1.0f};
|
glm::mat4 matView{1.0f};
|
||||||
glm::mat4 matModel{1.0f};
|
glm::mat4 matModel{1.0f};
|
||||||
|
|
||||||
|
BOOL g_flipH{false};
|
||||||
|
BOOL g_flipV{false};
|
||||||
FLOAT32 g_parallaxFactor{0.0f};
|
FLOAT32 g_parallaxFactor{0.0f};
|
||||||
|
|
||||||
BOOL Renderer::Initialize()
|
BOOL Renderer::Initialize()
|
||||||
@ -219,20 +221,22 @@ namespace ia::iae
|
|||||||
SDL_SubmitGPUCommandBuffer(g_cmdBuffer);
|
SDL_SubmitGPUCommandBuffer(g_cmdBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID Renderer::BindTexture(IN Handle handle, IN BOOL flipV, IN BOOL flipH, IN CONST glm::vec4 &colorOverlay)
|
VOID Renderer::SetFlipH(IN BOOL value)
|
||||||
{
|
{
|
||||||
STATIC struct
|
g_flipH = value;
|
||||||
{
|
}
|
||||||
glm::vec4 colorOverlay;
|
|
||||||
UINT32 flipV;
|
|
||||||
UINT32 flipH;
|
|
||||||
} textureState;
|
|
||||||
|
|
||||||
textureState = {colorOverlay, flipV, flipH};
|
VOID Renderer::SetFlipV(IN BOOL value)
|
||||||
|
{
|
||||||
|
g_flipV = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID Renderer::BindTexture(IN Handle handle, IN CONST glm::vec4 &colorOverlay)
|
||||||
|
{
|
||||||
SDL_GPUTextureSamplerBinding binding{.texture = (SDL_GPUTexture *) handle,
|
SDL_GPUTextureSamplerBinding binding{.texture = (SDL_GPUTexture *) handle,
|
||||||
.sampler = (SDL_GPUSampler *) GPUTexture::GetDefaultSampler()};
|
.sampler = (SDL_GPUSampler *) GPUTexture::GetDefaultSampler()};
|
||||||
SDL_BindGPUFragmentSamplers(g_renderPass, 0, &binding, 1);
|
SDL_BindGPUFragmentSamplers(g_renderPass, 0, &binding, 1);
|
||||||
SDL_PushGPUFragmentUniformData(g_cmdBuffer, 0, &textureState, sizeof(textureState));
|
SDL_PushGPUFragmentUniformData(g_cmdBuffer, 0, &colorOverlay, sizeof(colorOverlay));
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID SetModelTransformMatrix(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale,
|
VOID SetModelTransformMatrix(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale,
|
||||||
@ -243,13 +247,28 @@ namespace ia::iae
|
|||||||
else
|
else
|
||||||
matView = glm::mat4(1.0f);
|
matView = glm::mat4(1.0f);
|
||||||
SDL_PushGPUVertexUniformData(g_cmdBuffer, 1, &matView, sizeof(matView));
|
SDL_PushGPUVertexUniformData(g_cmdBuffer, 1, &matView, sizeof(matView));
|
||||||
g_parallaxFactor *= g_camera.Position().x/640.0f;
|
FLOAT32 shaderParallaxFactor = g_parallaxFactor * g_camera.Position().x / 640.0f;
|
||||||
SDL_PushGPUFragmentUniformData(g_cmdBuffer, 1, &g_parallaxFactor, sizeof(g_parallaxFactor));
|
SDL_PushGPUFragmentUniformData(g_cmdBuffer, 1, &shaderParallaxFactor, sizeof(shaderParallaxFactor));
|
||||||
|
|
||||||
|
matModel = glm::mat4(1.0f);
|
||||||
|
|
||||||
|
glm::vec3 poff = {0.0f, 0.0f, 0.0f};
|
||||||
|
|
||||||
|
const auto f = 1.0f;
|
||||||
|
if(g_flipH)
|
||||||
|
{
|
||||||
|
poff.x = scale.x * f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// [IATODO]: IMPL Flip V
|
||||||
|
|
||||||
const auto depthTestOffset = sortOffset + (Engine::GetActiveScene()->YSortingEnabled() ? position.y : 0);
|
const auto depthTestOffset = sortOffset + (Engine::GetActiveScene()->YSortingEnabled() ? position.y : 0);
|
||||||
matModel = glm::translate(glm::mat4(1.0f), {position.x, position.y, position.z + depthTestOffset + (g_parallaxFactor < 0.0f ? 0.0f : -100.0f)});
|
matModel =
|
||||||
|
glm::translate(matModel, {position.x + poff.x, position.y,
|
||||||
|
position.z + depthTestOffset + (g_parallaxFactor < 0.0f ? 0.0f : -100.0f)});
|
||||||
matModel = glm::rotate(matModel, rotation, glm::vec3(0.0f, 0.0f, 1.0f));
|
matModel = glm::rotate(matModel, rotation, glm::vec3(0.0f, 0.0f, 1.0f));
|
||||||
matModel = glm::scale(matModel, scale);
|
matModel = glm::scale(matModel, scale * (g_flipH ? glm::vec3{-1.0f, 1.0f, 1.0f} : glm::vec3{1.0f, 1.0f, 1.0f}));
|
||||||
|
|
||||||
SDL_PushGPUVertexUniformData(g_cmdBuffer, 2, &matModel, sizeof(matModel));
|
SDL_PushGPUVertexUniformData(g_cmdBuffer, 2, &matModel, sizeof(matModel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,9 @@ namespace ia::iae
|
|||||||
VOID Texture::Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, IN FLOAT32 rotation, IN BOOL flipH,
|
VOID Texture::Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, IN FLOAT32 rotation, IN BOOL flipH,
|
||||||
IN BOOL flipV, IN CONST glm::vec4 &colorOverlay) CONST
|
IN BOOL flipV, IN CONST glm::vec4 &colorOverlay) CONST
|
||||||
{
|
{
|
||||||
Renderer::BindTexture(m_handle, flipV, flipH, colorOverlay);
|
Renderer::SetFlipH(flipH);
|
||||||
|
Renderer::SetFlipV(flipV);
|
||||||
|
Renderer::BindTexture(m_handle, colorOverlay);
|
||||||
QuadMesh::Draw(sortOffset, position, m_size * scale, rotation);
|
QuadMesh::Draw(sortOffset, position, m_size * scale, rotation);
|
||||||
}
|
}
|
||||||
} // namespace ia::iae
|
} // namespace ia::iae
|
||||||
@ -8,8 +8,6 @@ layout(location = 0) out vec4 outColor;
|
|||||||
layout(set = 2, binding = 0) uniform sampler2D texSampler;
|
layout(set = 2, binding = 0) uniform sampler2D texSampler;
|
||||||
layout(set = 3, binding = 0) uniform UniformBufferObject {
|
layout(set = 3, binding = 0) uniform UniformBufferObject {
|
||||||
vec4 colorOverlay;
|
vec4 colorOverlay;
|
||||||
bool flipV;
|
|
||||||
bool flipH;
|
|
||||||
} ubo;
|
} ubo;
|
||||||
layout(set = 3, binding = 1) uniform UniformBufferObject2 {
|
layout(set = 3, binding = 1) uniform UniformBufferObject2 {
|
||||||
float parallaxFactor;
|
float parallaxFactor;
|
||||||
@ -19,8 +17,6 @@ void main()
|
|||||||
{
|
{
|
||||||
vec2 uv = inTexCoord;
|
vec2 uv = inTexCoord;
|
||||||
uv.x += ubo2.parallaxFactor;
|
uv.x += ubo2.parallaxFactor;
|
||||||
if(ubo.flipH) uv.x = 1 - uv.x;
|
|
||||||
if(ubo.flipV) uv.y = 1 - uv.y;
|
|
||||||
outColor = texture(texSampler, uv) * ubo.colorOverlay;
|
outColor = texture(texSampler, uv) * ubo.colorOverlay;
|
||||||
if(outColor.w < 0.1)
|
if(outColor.w < 0.1)
|
||||||
discard;
|
discard;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -76,11 +76,16 @@ namespace ia::iae
|
|||||||
return m_sortOffset;
|
return m_sortOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
FLOAT32& ParallaxFactor()
|
FLOAT32 &ParallaxFactor()
|
||||||
{
|
{
|
||||||
return m_parallaxFactor;
|
return m_parallaxFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL &ReverseAnimation()
|
||||||
|
{
|
||||||
|
return m_reverseAnimation;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
VOID Draw();
|
VOID Draw();
|
||||||
VOID Update();
|
VOID Update();
|
||||||
@ -88,7 +93,10 @@ namespace ia::iae
|
|||||||
private:
|
private:
|
||||||
VOID UpdateAnimation();
|
VOID UpdateAnimation();
|
||||||
|
|
||||||
|
AnimationKeyFrame GetKeyFrame(IN INT32 index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
BOOL m_reverseAnimation{};
|
||||||
FLOAT32 m_parallaxFactor{0.0f};
|
FLOAT32 m_parallaxFactor{0.0f};
|
||||||
FLOAT32 m_sortOffset{};
|
FLOAT32 m_sortOffset{};
|
||||||
BOOL m_isFlippedV{false};
|
BOOL m_isFlippedV{false};
|
||||||
|
|||||||
@ -44,13 +44,15 @@ namespace ia::iae
|
|||||||
STATIC VOID BeginFrame();
|
STATIC VOID BeginFrame();
|
||||||
STATIC VOID EndFrame();
|
STATIC VOID EndFrame();
|
||||||
|
|
||||||
STATIC VOID BindTexture(IN Handle handle, IN BOOL flipV, IN BOOL flipH, IN CONST glm::vec4& colorOverlay);
|
STATIC VOID BindTexture(IN Handle handle, IN CONST glm::vec4& colorOverlay);
|
||||||
|
|
||||||
STATIC VOID Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, IN FLOAT32 rotation, IN Handle vertexBufferHandle, IN INT32 vertexCount);
|
STATIC VOID Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, IN FLOAT32 rotation, IN Handle vertexBufferHandle, IN INT32 vertexCount);
|
||||||
STATIC VOID Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, IN FLOAT32 rotation, IN Handle vertexBufferHandle, IN Handle indexBufferHandle, IN INT32 indexCount);
|
STATIC VOID Draw(IN FLOAT32 sortOffset, IN CONST glm::vec3 &position, IN CONST glm::vec3 &scale, IN FLOAT32 rotation, IN Handle vertexBufferHandle, IN Handle indexBufferHandle, IN INT32 indexCount);
|
||||||
|
|
||||||
STATIC Camera2D* GetCamera();
|
STATIC Camera2D* GetCamera();
|
||||||
|
|
||||||
|
STATIC VOID SetFlipH(IN BOOL value);
|
||||||
|
STATIC VOID SetFlipV(IN BOOL value);
|
||||||
STATIC VOID SetParallaxFactor(IN FLOAT32 value);
|
STATIC VOID SetParallaxFactor(IN FLOAT32 value);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
Reference in New Issue
Block a user