mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-13 20:14:05 +09:00
wtf is going on
This commit is contained in:
@@ -245,6 +245,7 @@ public class App implements ApplicationListener {
|
|||||||
|
|
||||||
public static Mesh fullscreenQuad;
|
public static Mesh fullscreenQuad;
|
||||||
public static Mesh fullscreenQuad2x;
|
public static Mesh fullscreenQuad2x;
|
||||||
|
public static Mesh fullscreenQuad2d;
|
||||||
private static OrthographicCamera camera;
|
private static OrthographicCamera camera;
|
||||||
private static FlippingSpriteBatch logoBatch;
|
private static FlippingSpriteBatch logoBatch;
|
||||||
public static TextureRegion logo;
|
public static TextureRegion logo;
|
||||||
@@ -493,8 +494,15 @@ public class App implements ApplicationListener {
|
|||||||
VertexAttribute.ColorUnpacked(),
|
VertexAttribute.ColorUnpacked(),
|
||||||
VertexAttribute.TexCoords(0)
|
VertexAttribute.TexCoords(0)
|
||||||
);
|
);
|
||||||
|
fullscreenQuad2d = new Mesh(
|
||||||
|
true, 4, 6,
|
||||||
|
VertexAttribute.Position(),
|
||||||
|
VertexAttribute.ColorUnpacked(),
|
||||||
|
VertexAttribute.TexCoords(0)
|
||||||
|
);
|
||||||
updateFullscreenQuad(fullscreenQuad, scr.getWidth(), scr.getHeight());
|
updateFullscreenQuad(fullscreenQuad, scr.getWidth(), scr.getHeight());
|
||||||
updateFullscreenQuad(fullscreenQuad2x, scr.getWidth(), scr.getHeight());
|
updateFullscreenQuad(fullscreenQuad2x, scr.getWidth() * 2, scr.getHeight() * 2);
|
||||||
|
updateFullscreenQuad(fullscreenQuad2d, scr.getWidth() / 2, scr.getHeight() / 2);
|
||||||
|
|
||||||
// set up renderer info variables
|
// set up renderer info variables
|
||||||
renderer = Gdx.graphics.getGLVersion().getRendererString();
|
renderer = Gdx.graphics.getGLVersion().getRendererString();
|
||||||
@@ -508,6 +516,7 @@ public class App implements ApplicationListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private FrameBuffer postProcessorOutFBO;
|
private FrameBuffer postProcessorOutFBO;
|
||||||
|
private FrameBuffer postProcessorOutFBO2;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render() {
|
public void render() {
|
||||||
@@ -568,10 +577,10 @@ public class App implements ApplicationListener {
|
|||||||
|
|
||||||
|
|
||||||
// process screenshot request
|
// process screenshot request
|
||||||
if (screenshotRequested) {
|
/*if (screenshotRequested) {
|
||||||
FrameBufferManager.begin(postProcessorOutFBO);
|
FrameBufferManager.begin(postProcessorOutFBO);
|
||||||
try {
|
try {
|
||||||
Pixmap p = Pixmap.createFromFrameBuffer(0, 0, scr.getWidth(), scr.getHeight());
|
Pixmap p = Pixmap.createFromFrameBuffer(0, 0, postProcessorOutFBO.getWidth(), postProcessorOutFBO.getHeight());
|
||||||
PixmapIO.writePNG(Gdx.files.absolute(defaultDir+"/Screenshot-"+String.valueOf(System.currentTimeMillis())+".png"), p, 9, true);
|
PixmapIO.writePNG(Gdx.files.absolute(defaultDir+"/Screenshot-"+String.valueOf(System.currentTimeMillis())+".png"), p, 9, true);
|
||||||
p.dispose();
|
p.dispose();
|
||||||
Terrarum.INSTANCE.getIngame().sendNotification("Screenshot taken");
|
Terrarum.INSTANCE.getIngame().sendNotification("Screenshot taken");
|
||||||
@@ -582,23 +591,58 @@ public class App implements ApplicationListener {
|
|||||||
}
|
}
|
||||||
FrameBufferManager.end();
|
FrameBufferManager.end();
|
||||||
screenshotRequested = false;
|
screenshotRequested = false;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
if (getConfigString("screenmagnifyingfilter").equals("hq2x")) {
|
if (getConfigString("screenmagnifyingfilter").equals("hq2x")) {
|
||||||
int canvasWidth = scr.getWidth() * 2;
|
int canvasWidth = postProcessorOutFBO.getWidth(); // not zoomed dimension
|
||||||
int canvasHeight = scr.getHeight() * 2;
|
int canvasHeight = postProcessorOutFBO.getHeight();
|
||||||
|
|
||||||
|
FrameBufferManager.begin(postProcessorOutFBO2);
|
||||||
|
|
||||||
shaderHQ2x.bind();
|
shaderHQ2x.bind();
|
||||||
shaderHQ2x.setUniformMatrix("u_projTrans", camera.combined);
|
shaderHQ2x.setUniformMatrix("u_projTrans", camera.combined);
|
||||||
shaderHQ2x.setUniformi("u_lut", 1);
|
shaderHQ2x.setUniformi("u_lut", 1);
|
||||||
shaderHQ2x.setUniformi("u_texture", 0);
|
shaderHQ2x.setUniformi("u_texture", 0);
|
||||||
shaderHQ2x.setUniformf("u_textureSize", canvasWidth / 2f, canvasHeight / 2f);
|
shaderHQ2x.setUniformf("u_textureSize", canvasWidth, canvasHeight);
|
||||||
hq2xLut.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
|
hq2xLut.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
|
||||||
|
hq2xLut.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
|
||||||
hq2xLut.bind(1);
|
hq2xLut.bind(1);
|
||||||
postProcessorOutFBO.getColorBufferTexture().setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
|
postProcessorOutFBO.getColorBufferTexture().setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
|
||||||
|
postProcessorOutFBO.getColorBufferTexture().setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
|
||||||
postProcessorOutFBO.getColorBufferTexture().bind(0);
|
postProcessorOutFBO.getColorBufferTexture().bind(0);
|
||||||
fullscreenQuad2x.render(shaderHQ2x, GL20.GL_TRIANGLES);
|
fullscreenQuad.render(shaderHQ2x, GL20.GL_TRIANGLES); // the shader expects the target texture size to be 2x the input dimension
|
||||||
|
|
||||||
|
FrameBufferManager.end();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (screenshotRequested) {
|
||||||
|
FrameBufferManager.begin(postProcessorOutFBO2);
|
||||||
|
try {
|
||||||
|
Pixmap p = Pixmap.createFromFrameBuffer(0, 0, postProcessorOutFBO2.getWidth(), postProcessorOutFBO2.getHeight());
|
||||||
|
PixmapIO.writePNG(Gdx.files.absolute(defaultDir+"/Screenshot-"+String.valueOf(System.currentTimeMillis())+".png"), p, 9, true);
|
||||||
|
p.dispose();
|
||||||
|
Terrarum.INSTANCE.getIngame().sendNotification("Screenshot taken");
|
||||||
|
}
|
||||||
|
catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Terrarum.INSTANCE.getIngame().sendNotification("Failed to take screenshot: "+e.getMessage());
|
||||||
|
}
|
||||||
|
FrameBufferManager.end();
|
||||||
|
screenshotRequested = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
shaderPassthruRGBA.bind();
|
||||||
|
shaderPassthruRGBA.setUniformMatrix("u_projTrans", camera.combined);
|
||||||
|
shaderPassthruRGBA.setUniformi("u_texture", 0);
|
||||||
|
postProcessorOutFBO2.getColorBufferTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
|
||||||
|
postProcessorOutFBO2.getColorBufferTexture().setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
|
||||||
|
postProcessorOutFBO2.getColorBufferTexture().bind(0);
|
||||||
|
fullscreenQuad.render(shaderPassthruRGBA, GL20.GL_TRIANGLES);
|
||||||
}
|
}
|
||||||
else if (getConfigDouble("screenmagnifying") < 1.01 || getConfigString("screenmagnifyingfilter").equals("none")) {
|
else if (getConfigDouble("screenmagnifying") < 1.01 || getConfigString("screenmagnifyingfilter").equals("none")) {
|
||||||
shaderPassthruRGBA.bind();
|
shaderPassthruRGBA.bind();
|
||||||
@@ -751,7 +795,8 @@ public class App implements ApplicationListener {
|
|||||||
if (currentScreen != null) currentScreen.resize(scr.getWidth(), scr.getHeight());
|
if (currentScreen != null) currentScreen.resize(scr.getWidth(), scr.getHeight());
|
||||||
TerrarumPostProcessor.INSTANCE.resize(scr.getWidth(), scr.getHeight());
|
TerrarumPostProcessor.INSTANCE.resize(scr.getWidth(), scr.getHeight());
|
||||||
updateFullscreenQuad(fullscreenQuad, scr.getWidth(), scr.getHeight());
|
updateFullscreenQuad(fullscreenQuad, scr.getWidth(), scr.getHeight());
|
||||||
updateFullscreenQuad(fullscreenQuad2x, scr.getWidth(), scr.getHeight());
|
updateFullscreenQuad(fullscreenQuad2x, scr.getWidth() * 2, scr.getHeight() * 2);
|
||||||
|
updateFullscreenQuad(fullscreenQuad2d, scr.getWidth() / 2, scr.getHeight() / 2);
|
||||||
|
|
||||||
|
|
||||||
if (renderFBO == null ||
|
if (renderFBO == null ||
|
||||||
@@ -763,6 +808,11 @@ public class App implements ApplicationListener {
|
|||||||
scr.getHeight(),
|
scr.getHeight(),
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
postProcessorOutFBO2 = new FloatFrameBuffer(
|
||||||
|
scr.getWidth() * 2,
|
||||||
|
scr.getHeight() * 2,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
if (IS_DEVELOPMENT_BUILD) {
|
if (IS_DEVELOPMENT_BUILD) {
|
||||||
@@ -822,6 +872,7 @@ public class App implements ApplicationListener {
|
|||||||
CommonResourcePool.INSTANCE.dispose();
|
CommonResourcePool.INSTANCE.dispose();
|
||||||
fullscreenQuad.dispose();
|
fullscreenQuad.dispose();
|
||||||
fullscreenQuad2x.dispose();
|
fullscreenQuad2x.dispose();
|
||||||
|
fullscreenQuad2d.dispose();
|
||||||
logoBatch.dispose();
|
logoBatch.dispose();
|
||||||
batch.dispose();
|
batch.dispose();
|
||||||
// shapeRender.dispose();
|
// shapeRender.dispose();
|
||||||
|
|||||||
@@ -3,11 +3,7 @@
|
|||||||
|
|
||||||
#version 150
|
#version 150
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
#define PRECISION mediump
|
precision mediump float;
|
||||||
precision PRECISION float;
|
|
||||||
precision PRECISION int;
|
|
||||||
#else
|
|
||||||
#define PRECISION
|
|
||||||
#endif
|
#endif
|
||||||
#define SCALE 2.0
|
#define SCALE 2.0
|
||||||
|
|
||||||
@@ -83,5 +79,9 @@ void main() {
|
|||||||
float sum = dot(weights, vec4(1));
|
float sum = dot(weights, vec4(1));
|
||||||
vec3 res = (pixels * (weights / sum)).rgb;
|
vec3 res = (pixels * (weights / sum)).rgb;
|
||||||
|
|
||||||
fragColor.rgb = res;
|
fragColor = vec4(res.rgb, 1.0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// fragColor = vec4(v_texCoord[0].x, v_texCoord[0].y, 0.0, 1.0);
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,8 @@
|
|||||||
#version 150
|
#version 150
|
||||||
#ifdef GL_ES
|
#ifdef GL_ES
|
||||||
#define PRECISION mediump
|
precision mediump float;
|
||||||
precision PRECISION float;
|
|
||||||
precision PRECISION int;
|
|
||||||
#else
|
|
||||||
#define PRECISION
|
|
||||||
#endif
|
#endif
|
||||||
|
#define SCALE 1.0
|
||||||
|
|
||||||
in vec4 a_position;
|
in vec4 a_position;
|
||||||
in vec2 a_texCoord0;
|
in vec2 a_texCoord0;
|
||||||
@@ -16,12 +13,14 @@ out vec2 u_textureSize;
|
|||||||
out vec4 v_texCoord[4];
|
out vec4 v_texCoord[4];
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = u_projTrans * a_position;
|
gl_Position = u_projTrans * a_position / SCALE;
|
||||||
|
|
||||||
vec2 ps = 1.0/u_textureSize;
|
vec2 ps = 1.0/u_textureSize;
|
||||||
float dx = ps.x;
|
float dx = ps.x;
|
||||||
float dy = ps.y;
|
float dy = ps.y;
|
||||||
|
|
||||||
|
vec2 a_texCoord00 = a_texCoord0 / SCALE;
|
||||||
|
|
||||||
// +----+----+----+
|
// +----+----+----+
|
||||||
// | | | |
|
// | | | |
|
||||||
// | w1 | w2 | w3 |
|
// | w1 | w2 | w3 |
|
||||||
@@ -34,8 +33,8 @@ void main() {
|
|||||||
// +----+----+----+
|
// +----+----+----+
|
||||||
|
|
||||||
v_texCoord[0].zw = ps;
|
v_texCoord[0].zw = ps;
|
||||||
v_texCoord[0].xy = a_texCoord0.xy;
|
v_texCoord[0].xy = a_texCoord00.xy;
|
||||||
v_texCoord[1] = a_texCoord0.xxxy + vec4(-dx, 0, dx, -dy); // w1 | w2 | w3
|
v_texCoord[1] = a_texCoord00.xxxy + vec4(-dx, 0, dx, -dy); // w1 | w2 | w3
|
||||||
v_texCoord[2] = a_texCoord0.xxxy + vec4(-dx, 0, dx, 0); // w4 | w5 | w6
|
v_texCoord[2] = a_texCoord00.xxxy + vec4(-dx, 0, dx, 0); // w4 | w5 | w6
|
||||||
v_texCoord[3] = a_texCoord0.xxxy + vec4(-dx, 0, dx, dy); // w7 | w8 | w9
|
v_texCoord[3] = a_texCoord00.xxxy + vec4(-dx, 0, dx, dy); // w7 | w8 | w9
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user