Skip to content

Commit

Permalink
fix shader bug on linux
Browse files Browse the repository at this point in the history
  • Loading branch information
mi-sts committed May 26, 2024
1 parent 713e1f9 commit a60eafb
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 45 deletions.
2 changes: 2 additions & 0 deletions src/main/kotlin/solve/scene/view/SceneView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ class SceneView : View() {
}
root.setOnScroll { event ->
val scrollDelta = event.deltaY
if (scrollDelta == 0.0)
return@setOnScroll
if (scrollDelta > 0) {
controller.increaseScale()
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/engine/shaders/frame/frame.frag
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ out vec4 color;

void main()
{
if (fTexID == -1.0) {
if (fTexID == -1) {
color = vec4(0.0, 0.0, 0.0, 0.0);
} else {
color = texture(uTextures, vec3(fTexCoords, fTexID));
Expand Down
80 changes: 36 additions & 44 deletions src/main/resources/engine/shaders/frame/frame.geom
Original file line number Diff line number Diff line change
Expand Up @@ -14,55 +14,47 @@ in VS_OUT {

out float fTexID;
out vec2 fTexCoords;
out float fIsColored;

layout (points) in;
layout (triangle_strip, max_vertices = 4) out;

void main() {
bool isColored = gs_in[0].isColored;

if (isColored) {
int frameID = gs_in[0].frameID;
int frameX = frameID % uGridWidth;
int frameY = frameID / uGridWidth;

int bufferX = frameX % uBuffersSize.x;
int bufferY = frameY % uBuffersSize.y;
float texID = float(bufferY * uBuffersSize.x + bufferX);

vec4 initialPosition = vec4(
(gl_in[0].gl_Position.x * uTexturesRatio + uFramesSpacing * frameX),
gl_in[0].gl_Position.y + uFramesSpacing * frameY,
gl_in[0].gl_Position.z,
gl_in[0].gl_Position.w
);
gl_Position = uProjection * uModel * initialPosition;
fTexID = texID;
fTexCoords = vec2(0.0, 1.0);
EmitVertex();

gl_Position = uProjection * uModel * (initialPosition + vec4(uTexturesRatio, 0.0, 0.0, 0.0));
fTexID = texID;
fTexCoords = vec2(1.0, 1.0);
EmitVertex();

gl_Position = uProjection * uModel * (initialPosition + vec4(0.0, 1.0, 0.0, 0.0));
fTexID = texID;
fTexCoords = vec2(0.0, 0.0);
EmitVertex();

gl_Position = uProjection * uModel * (initialPosition + vec4(uTexturesRatio, 1.0, 0.0, 0.0));
fTexID = texID;
fTexCoords = vec2(1.0, 0.0);
EmitVertex();

EndPrimitive();
} else {
gl_Position = vec4(0.0, 0.0, 0.0, 0.0);
fTexID = -1.0;
fTexCoords = vec2(0.0, 0.0);
EmitVertex();

EndPrimitive();
}
int frameID = gs_in[0].frameID;
int frameX = frameID % uGridWidth;
int frameY = frameID / uGridWidth;

int bufferX = frameX % uBuffersSize.x;
int bufferY = frameY % uBuffersSize.y;
float texID = float(bufferY * uBuffersSize.x + bufferX);

vec4 initialPosition = vec4(
(gl_in[0].gl_Position.x * uTexturesRatio + uFramesSpacing * frameX),
gl_in[0].gl_Position.y + uFramesSpacing * frameY,
gl_in[0].gl_Position.z,
gl_in[0].gl_Position.w
);
gl_Position = uProjection * uModel * initialPosition;
fTexID = texID;
fTexCoords = vec2(0.0, 1.0);
EmitVertex();

gl_Position = uProjection * uModel * (initialPosition + vec4(uTexturesRatio, 0.0, 0.0, 0.0));
fTexID = texID;
fTexCoords = vec2(1.0, 1.0);
EmitVertex();

gl_Position = uProjection * uModel * (initialPosition + vec4(0.0, 1.0, 0.0, 0.0));
fTexID = texID;
fTexCoords = vec2(0.0, 0.0);
EmitVertex();

gl_Position = uProjection * uModel * (initialPosition + vec4(uTexturesRatio, 1.0, 0.0, 0.0));
fTexID = texID;
fTexCoords = vec2(1.0, 0.0);
EmitVertex();

EndPrimitive();
}

0 comments on commit a60eafb

Please sign in to comment.