Add inset on layers for animations to avoid bleed; change GL settings to avoid stretching pixels if crop larger than texture size
This commit is contained in:
@@ -392,13 +392,20 @@ namespace anm2ed::imgui
|
|||||||
math::percent_to_unit(frame.scale), frame.rotation);
|
math::percent_to_unit(frame.scale), frame.rotation);
|
||||||
auto layerTransform = transform * layerModel;
|
auto layerTransform = transform * layerModel;
|
||||||
|
|
||||||
auto uvMin = frame.crop / vec2(texture.size);
|
auto texSize = vec2(texture.size);
|
||||||
auto uvMax = (frame.crop + frame.size) / vec2(texture.size);
|
if (texSize.x <= 0.0f || texSize.y <= 0.0f) continue;
|
||||||
auto vertices = math::uv_vertices_get(uvMin, uvMax);
|
|
||||||
|
auto uvMin = frame.crop / texSize;
|
||||||
|
auto uvMax = (frame.crop + frame.size) / texSize;
|
||||||
vec3 frameColorOffset = frame.colorOffset + colorOffset;
|
vec3 frameColorOffset = frame.colorOffset + colorOffset;
|
||||||
vec4 frameTint = frame.tint;
|
vec4 frameTint = frame.tint;
|
||||||
frameTint.a = std::max(0.0f, frameTint.a - alphaOffset);
|
frameTint.a = std::max(0.0f, frameTint.a - alphaOffset);
|
||||||
|
|
||||||
|
auto inset = vec2(0.5f) / texSize;
|
||||||
|
uvMin += inset;
|
||||||
|
uvMax -= inset;
|
||||||
|
auto vertices = math::uv_vertices_get(uvMin, uvMax);
|
||||||
|
|
||||||
texture_render(shaderTexture, texture.id, layerTransform, frameTint, frameColorOffset, vertices.data());
|
texture_render(shaderTexture, texture.id, layerTransform, frameTint, frameColorOffset, vertices.data());
|
||||||
|
|
||||||
auto color = isOnionskin ? vec4(colorOffset, 1.0f - alphaOffset) : color::RED;
|
auto color = isOnionskin ? vec4(colorOffset, 1.0f - alphaOffset) : color::RED;
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ namespace anm2ed::resource
|
|||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, id);
|
glBindTexture(GL_TEXTURE_2D, id);
|
||||||
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user