Skip to content

Commit 6e43607

Browse files
committed
reload shader uniform locations every time the shader changes
1 parent 743f4c3 commit 6e43607

File tree

3 files changed

+61
-39
lines changed

3 files changed

+61
-39
lines changed

core/src/processing/opengl/PGraphics2DX.java

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,6 +1337,23 @@ public void filter(PShader shader) {
13371337
// SHADER API
13381338

13391339

1340+
@Override
1341+
public PShader loadShader(String fragFilename) {
1342+
if (fragFilename == null || fragFilename.equals("")) {
1343+
PGraphics.showWarning(MISSING_FRAGMENT_SHADER);
1344+
return null;
1345+
}
1346+
1347+
PShader shader = new PShader(parent);
1348+
1349+
shader.setFragmentShader(fragFilename);
1350+
String[] vertSource = pgl.loadVertexShader(defP2DShaderVertURL);
1351+
shader.setVertexShader(vertSource);
1352+
1353+
return shader;
1354+
}
1355+
1356+
13401357
@Override
13411358
public void shader(PShader shader) {
13421359
if (useParentImpl) {
@@ -1676,18 +1693,22 @@ private boolean checkShaderLocs(PShader shader) {
16761693
positionLoc = shader.getAttributeLoc("vertex");
16771694
}
16781695
int colorLoc = shader.getAttributeLoc("color");
1679-
int texCoordLoc = shader.getAttributeLoc("texCoord");
1680-
int texFactorLoc = shader.getAttributeLoc("texFactor");
16811696
int transformLoc = shader.getUniformLoc("transform");
16821697
if (transformLoc == -1) {
16831698
transformLoc = shader.getUniformLoc("transformMatrix");
16841699
}
1700+
1701+
/*
16851702
int texScaleLoc = shader.getUniformLoc("texScale");
16861703
if (texScaleLoc == -1) {
16871704
texScaleLoc = shader.getUniformLoc("texOffset");
16881705
}
1689-
return positionLoc != -1 && colorLoc != -1 && texCoordLoc != -1 &&
1690-
texFactorLoc != -1 && transformLoc != -1 && texScaleLoc != -1;
1706+
int texCoordLoc = shader.getAttributeLoc("texCoord");
1707+
int texFactorLoc = shader.getAttributeLoc("texFactor");
1708+
*/
1709+
1710+
return positionLoc != -1 && colorLoc != -1 && transformLoc != -1;
1711+
// texCoordLoc != -1 && texFactorLoc != -1 && texScaleLoc != -1;
16911712
}
16921713

16931714

@@ -1717,15 +1738,14 @@ private PShader getShader() {
17171738
String[] vertSource = pgl.loadVertexShader(defP2DShaderVertURL);
17181739
String[] fragSource = pgl.loadFragmentShader(defP2DShaderFragURL);
17191740
defTwoShader = new PShader(parent, vertSource, fragSource);
1720-
loadShaderLocs(defTwoShader);
17211741
}
17221742
shader = defTwoShader;
17231743
} else {
17241744
shader = twoShader;
17251745
}
1726-
if (shader != defTwoShader) {
1727-
loadShaderLocs(shader);
1728-
}
1746+
// if (shader != defTwoShader) {
1747+
loadShaderLocs(shader);
1748+
// }
17291749
return shader;
17301750
}
17311751

@@ -1737,12 +1757,16 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
17371757
private void setAttribs() {
17381758
pgl.vertexAttribPointer(positionLoc, 3, PGL.FLOAT, false, vertSize, 0);
17391759
pgl.enableVertexAttribArray(positionLoc);
1740-
pgl.vertexAttribPointer(texCoordLoc, 2, PGL.FLOAT, false, vertSize, 3*Float.BYTES);
1741-
pgl.enableVertexAttribArray(texCoordLoc);
1760+
if (-1 < texCoordLoc) {
1761+
pgl.vertexAttribPointer(texCoordLoc, 2, PGL.FLOAT, false, vertSize, 3*Float.BYTES);
1762+
pgl.enableVertexAttribArray(texCoordLoc);
1763+
}
17421764
pgl.vertexAttribPointer(colorLoc, 4, PGL.UNSIGNED_BYTE, true, vertSize, 5*Float.BYTES);
17431765
pgl.enableVertexAttribArray(colorLoc);
1744-
pgl.vertexAttribPointer(texFactorLoc, 1, PGL.FLOAT, false, vertSize, 6*Float.BYTES);
1745-
pgl.enableVertexAttribArray(texFactorLoc);
1766+
if (-1 < texFactorLoc) {
1767+
pgl.vertexAttribPointer(texFactorLoc, 1, PGL.FLOAT, false, vertSize, 6*Float.BYTES);
1768+
pgl.enableVertexAttribArray(texFactorLoc);
1769+
}
17461770
}
17471771

17481772

@@ -1757,11 +1781,13 @@ private void loadUniforms() {
17571781
//set texture info
17581782
pgl.activeTexture(PGL.TEXTURE0);
17591783
pgl.bindTexture(PGL.TEXTURE_2D, tex);
1760-
//enable uv scaling only for use-defined images, not for fonts
1761-
if (tex == imageTex) {
1762-
pgl.uniform2f(texScaleLoc, 1f/texWidth, 1f/texHeight);
1763-
} else {
1764-
pgl.uniform2f(texScaleLoc, 1, 1);
1784+
if (-1 < texScaleLoc) {
1785+
//enable uv scaling only for use-defined images, not for fonts
1786+
if (tex == imageTex) {
1787+
pgl.uniform2f(texScaleLoc, 1f/texWidth, 1f/texHeight);
1788+
} else {
1789+
pgl.uniform2f(texScaleLoc, 1, 1);
1790+
}
17651791
}
17661792
}
17671793

debug/apps/fast2d/src/main/assets/edges.glsl

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,23 @@ precision mediump float;
33
precision mediump int;
44
#endif
55

6-
#define PROCESSING_TEXTURE_SHADER
6+
varying vec4 vertColor;
7+
varying vec2 vertTexCoord;
8+
varying float vertTexFactor;
79

810
uniform sampler2D texture;
9-
uniform vec2 texOffset;
10-
11-
varying vec4 vertColor;
12-
varying vec4 vertTexCoord;
11+
uniform vec2 texScale;
1312

1413
void main(void) {
15-
// Grouping texcoord variables in order to make it work in the GMA 950. See post #13
16-
// in this thread:
17-
// http://www.idevgames.com/forums/thread-3467.html
18-
vec2 tc0 = vertTexCoord.st + vec2(-texOffset.s, -texOffset.t);
19-
vec2 tc1 = vertTexCoord.st + vec2( 0.0, -texOffset.t);
20-
vec2 tc2 = vertTexCoord.st + vec2(+texOffset.s, -texOffset.t);
21-
vec2 tc3 = vertTexCoord.st + vec2(-texOffset.s, 0.0);
22-
vec2 tc4 = vertTexCoord.st + vec2( 0.0, 0.0);
23-
vec2 tc5 = vertTexCoord.st + vec2(+texOffset.s, 0.0);
24-
vec2 tc6 = vertTexCoord.st + vec2(-texOffset.s, +texOffset.t);
25-
vec2 tc7 = vertTexCoord.st + vec2( 0.0, +texOffset.t);
26-
vec2 tc8 = vertTexCoord.st + vec2(+texOffset.s, +texOffset.t);
14+
vec2 tc0 = vertTexCoord.st + vec2(-texScale.s, -texScale.t);
15+
vec2 tc1 = vertTexCoord.st + vec2( 0.0, -texScale.t);
16+
vec2 tc2 = vertTexCoord.st + vec2(+texScale.s, -texScale.t);
17+
vec2 tc3 = vertTexCoord.st + vec2(-texScale.s, 0.0);
18+
vec2 tc4 = vertTexCoord.st + vec2( 0.0, 0.0);
19+
vec2 tc5 = vertTexCoord.st + vec2(+texScale.s, 0.0);
20+
vec2 tc6 = vertTexCoord.st + vec2(-texScale.s, +texScale.t);
21+
vec2 tc7 = vertTexCoord.st + vec2( 0.0, +texScale.t);
22+
vec2 tc8 = vertTexCoord.st + vec2(+texScale.s, +texScale.t);
2723

2824
vec4 col0 = texture2D(texture, tc0);
2925
vec4 col1 = texture2D(texture, tc1);

debug/apps/fast2d/src/main/java/fast2d/SketchCustomShader.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class SketchCustomShader extends PApplet {
88
PShader edges;
99
PImage img;
10-
boolean enabled = false;
10+
boolean enabled = true;
1111

1212
public void settings() {
1313
// fullScreen(P2D);
@@ -21,15 +21,15 @@ public void setup() {
2121
}
2222

2323
public void draw() {
24-
// if (enabled == true) {
25-
// shader(edges);
26-
// }
24+
if (enabled == true) {
25+
shader(edges);
26+
}
2727
image(img, 0, 0, width, height);
2828
}
2929

3030
public void mousePressed() {
3131
enabled = !enabled;
32-
if (!enabled == true) {
32+
if (!enabled) {
3333
resetShader();
3434
}
3535
}

0 commit comments

Comments
 (0)