safety checks on shaders & unified format
This commit is contained in:
parent
9a520fbe2c
commit
016925f507
11 changed files with 94 additions and 67 deletions
|
@ -1,8 +1,8 @@
|
|||
#version 400
|
||||
#version 150
|
||||
uniform sampler2D depth;
|
||||
|
||||
void main() {
|
||||
vec2 coords = vec2(gl_TexCoord[0].x, gl_TexCoord[0].y);
|
||||
gl_FragDepth = texture2D(depth, coords).r;
|
||||
gl_FragDepth = texture(depth, coords).r;
|
||||
gl_FragColor = vec4(0.0);
|
||||
}
|
|
@ -1,16 +1,16 @@
|
|||
#version 400
|
||||
#version 150
|
||||
uniform sampler2D depth;
|
||||
uniform sampler2D occlusion;
|
||||
uniform sampler2D texture;
|
||||
|
||||
void main() {
|
||||
vec2 coords = vec2(gl_TexCoord[0].x, gl_TexCoord[0].y);
|
||||
float depth = texture2D(depth, coords).r - 0.001;
|
||||
float occlusion = texture2D(occlusion, coords).r;
|
||||
float depth = texture(depth, coords).r - 0.001;
|
||||
float occlusion = texture(occlusion, coords).r;
|
||||
vec4 color = vec4(0.0);
|
||||
float writedepth = occlusion;
|
||||
if(depth <= occlusion) {
|
||||
color = texture2D(texture, coords);
|
||||
color = texture(texture, coords);
|
||||
// color = vec4(1.0);
|
||||
writedepth = depth;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
|
||||
|
||||
void main(){
|
||||
gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
|
|
|
@ -1,26 +1,50 @@
|
|||
#version 400
|
||||
#version 150
|
||||
uniform vec2 u_Scale;
|
||||
uniform sampler2D u_Texture0;
|
||||
|
||||
const float gaussFilter[14] = float[14](
|
||||
-3.0, 0.015625,
|
||||
-2.0, 0.09375,
|
||||
-1.0, 0.234375,
|
||||
0.0, 0.3125,
|
||||
1.0, 0.234375,
|
||||
2.0, 0.09375,
|
||||
3.0, 0.015625
|
||||
const float gaussFilter[50] = float[50](
|
||||
-12.0, 1.0/16777216.0,
|
||||
-11.0, 24.0/16777216.0,
|
||||
-10.0, 276.0/16777216.0,
|
||||
-9.0, 2024.0/16777216.0,
|
||||
-8.0, 10626.0/16777216.0,
|
||||
-7.0, 42504.0/16777216.0,
|
||||
-6.0, 134596.0/16777216.0,
|
||||
-5.0, 346104.0/16777216.0,
|
||||
-4.0, 735471.0/16777216.0,
|
||||
-3.0, 1307504.0/16777216.0,
|
||||
-2.0, 1961256.0/16777216.0,
|
||||
-1.0, 2496144.0/16777216.0,
|
||||
0.0, 2704156.0/16777216.0,
|
||||
1.0, 2496144.0/16777216.0,
|
||||
2.0, 1961256.0/16777216.0,
|
||||
3.0, 1307504.0/16777216.0,
|
||||
4.0, 735471.0/16777216.0,
|
||||
5.0, 346104.0/16777216.0,
|
||||
6.0, 134596.0/16777216.0,
|
||||
7.0, 42504.0/16777216.0,
|
||||
8.0, 10626.0/16777216.0,
|
||||
9.0, 2024.0/16777216.0,
|
||||
10.0, 276.0/16777216.0,
|
||||
11.0, 24.0/16777216.0,
|
||||
12.0, 1.0/16777216.0
|
||||
);
|
||||
|
||||
void main() {
|
||||
vec4 color = vec4(0.0);
|
||||
float k = 0.0;
|
||||
float wt = 0.0;
|
||||
for( int i = 0; i < 7; i++ )
|
||||
for( int i = 0; i < 25; i++ )
|
||||
{
|
||||
vec4 pix = texture2D( u_Texture0,
|
||||
vec4 pix = texture( u_Texture0,
|
||||
vec2(gl_TexCoord[0].x+gaussFilter[i*2]*u_Scale.x, gl_TexCoord[0].y+gaussFilter[i*2]*u_Scale.y )
|
||||
);
|
||||
color += pix*gaussFilter[i*2+1] * pix.w*1.5;
|
||||
wt = gaussFilter[i*2+1] * pix.w * 1.5;
|
||||
color += wt * pix;
|
||||
k += wt;
|
||||
}
|
||||
gl_FragColor = color;
|
||||
gl_FragColor = color;
|
||||
// if(k > 1) {
|
||||
// gl_FragColor /= k;
|
||||
// }
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
#version 150
|
||||
|
||||
void main(){
|
||||
gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#version 150
|
||||
|
||||
varying vec4 vertColor;
|
||||
|
||||
void main(){
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#version 150
|
||||
|
||||
varying vec4 vertColor;
|
||||
|
||||
void main(){
|
||||
|
|
|
@ -89,8 +89,11 @@ public class ClientProxy extends CommonProxy {
|
|||
URL otherResource = ClientProxy.class.getResource(Config.RESOURCE_PREFIX + "models/armor2.xml");
|
||||
ModelSpecXMLReader.parseFile(otherResource);
|
||||
|
||||
if (MuseShaders.hBlurProgram().program() == 0) {
|
||||
MuseLogger.logDebug("Hi");
|
||||
try {
|
||||
MuseShaders.hBlurProgram().program();
|
||||
Config.canUseShaders = true;
|
||||
} catch (Throwable e) {
|
||||
MuseLogger.logException("Loading shaders failed!", e);
|
||||
}
|
||||
// DefaultModelSpec.loadDefaultModel();
|
||||
// ModelSpecXMLWriter.writeRegistry("modelspec.xml");
|
||||
|
|
|
@ -296,4 +296,14 @@ public class Config {
|
|||
public static boolean fontAntiAliasing() {
|
||||
return config.get("Font", "Font Anti-Aliasing", false).getBoolean(false);
|
||||
}
|
||||
|
||||
public static int glowMultiplier() {
|
||||
return config.get("Graphics", "Bloom Multiplier", 1).getInt(1);
|
||||
}
|
||||
|
||||
public static boolean useShaders() {
|
||||
return config.get("Graphics", "Use Pixel/Vertex Shaders", true).getBoolean(true);
|
||||
}
|
||||
|
||||
public static boolean canUseShaders = false;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.machinemuse.powersuits.event;
|
|||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.machinemuse.powersuits.common.Config;
|
||||
import net.machinemuse.utils.render.GlowBuffer;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
|
@ -16,7 +17,9 @@ public class TextureStitchHandler {
|
|||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
ScaledResolution screen = new ScaledResolution(mc.gameSettings, mc.displayWidth, mc.displayHeight);
|
||||
GlowBuffer.drawFullScreen(screen);
|
||||
if (Config.useShaders() && Config.canUseShaders) {
|
||||
GlowBuffer.drawFullScreen(screen);
|
||||
}
|
||||
}
|
||||
|
||||
@ForgeSubscribe
|
||||
|
|
|
@ -5,6 +5,8 @@ import net.minecraft.client.gui.ScaledResolution
|
|||
import net.machinemuse.general.geometry.Colour
|
||||
import org.lwjgl.opengl.GL13._
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.machinemuse.utils.render.Render._
|
||||
import net.machinemuse.powersuits.common.Config
|
||||
|
||||
/**
|
||||
* Author: MachineMuse (Claire Semple)
|
||||
|
@ -90,13 +92,32 @@ object GlowBuffer {
|
|||
glActiveTexture(GL_TEXTURE0)
|
||||
glDisable(GL_DEPTH_TEST)
|
||||
|
||||
// Vertical Pass
|
||||
for(i<- 1 until Config.glowMultiplier) {
|
||||
doBlurPasses()
|
||||
}
|
||||
|
||||
// To Main display
|
||||
fromBuffer(secondBuffer) {
|
||||
Render.pure {
|
||||
drawTexSquare(texDimension)
|
||||
}
|
||||
}.run()
|
||||
|
||||
|
||||
glPopAttrib()
|
||||
MuseRenderer.blendingOff()
|
||||
MuseRenderer.glowOff()
|
||||
popDualIdentityMatrix()
|
||||
}
|
||||
|
||||
def doBlurPasses() {
|
||||
// Vertical Pass
|
||||
fromBuffer(secondBuffer) {
|
||||
toBuffer(glowBuffer) {
|
||||
withShaderProgram(MuseShaders.vBlurProgram) {
|
||||
Render pure {
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
||||
MuseShaders.vBlurProgram.setUniform2f("u_Scale", 0, 2.0f / texDimension)
|
||||
MuseShaders.vBlurProgram.setUniform2f("u_Scale", 0, 1.0f / texDimension)
|
||||
MuseShaders.vBlurProgram.setTexUnit("u_Texture0", 0)
|
||||
drawTexSquare(texDimension)
|
||||
}
|
||||
|
@ -111,55 +132,13 @@ object GlowBuffer {
|
|||
withShaderProgram(MuseShaders.hBlurProgram) {
|
||||
Render.pure {
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
||||
MuseShaders.hBlurProgram.setUniform2f("u_Scale", 2.0f / texDimension, 0)
|
||||
MuseShaders.hBlurProgram.setUniform2f("u_Scale", 1.0f / texDimension, 0)
|
||||
MuseShaders.hBlurProgram.setTexUnit("u_Texture0", 0)
|
||||
drawTexSquare(texDimension)
|
||||
}
|
||||
}
|
||||
}
|
||||
}.run()
|
||||
|
||||
|
||||
// Vertical Pass
|
||||
fromBuffer(secondBuffer) {
|
||||
toBuffer(glowBuffer) {
|
||||
withShaderProgram(MuseShaders.vBlurProgram) {
|
||||
Render pure {
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
||||
MuseShaders.vBlurProgram.setUniform2f("u_Scale", 0, 2.0f / texDimension)
|
||||
MuseShaders.vBlurProgram.setTexUnit("u_Texture0", 0)
|
||||
drawTexSquare(texDimension)
|
||||
}
|
||||
}
|
||||
}
|
||||
}.run()
|
||||
|
||||
|
||||
// Horizontal Pass
|
||||
fromBuffer(glowBuffer) {
|
||||
toBuffer(secondBuffer) {
|
||||
withShaderProgram(MuseShaders.hBlurProgram) {
|
||||
Render.pure {
|
||||
MuseShaders.hBlurProgram.setUniform2f("u_Scale", 2.0f / texDimension, 0)
|
||||
MuseShaders.hBlurProgram.setTexUnit("u_Texture0", 0)
|
||||
drawTexSquare(texDimension)
|
||||
}
|
||||
}
|
||||
}
|
||||
}.run()
|
||||
|
||||
// To Main display
|
||||
fromBuffer(secondBuffer) {
|
||||
Render.pure {
|
||||
drawTexSquare(texDimension)
|
||||
}
|
||||
}.run()
|
||||
|
||||
|
||||
glPopAttrib()
|
||||
MuseRenderer.blendingOff()
|
||||
MuseRenderer.glowOff()
|
||||
popDualIdentityMatrix()
|
||||
}
|
||||
|
||||
def drawTexSquare(td: Int) {
|
||||
|
|
Loading…
Reference in a new issue