Skip to content

Commit 876b56c

Browse files
committed
added some utility methods to allow renderer libraries to customize shader loading
1 parent 30ce128 commit 876b56c

File tree

1 file changed

+63
-27
lines changed

1 file changed

+63
-27
lines changed

core/src/processing/opengl/PGraphicsOpenGL.java

Lines changed: 63 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7316,74 +7316,110 @@ protected PShader getPolyShader(boolean lit, boolean tex) {
73167316
PShader shader;
73177317
PGraphicsOpenGL ppg = getPrimaryPG();
73187318
boolean useDefault = polyShader == null;
7319-
if (polyShader != null) {
7320-
polyShader.setRenderer(this);
7321-
polyShader.loadAttributes();
7322-
polyShader.loadUniforms();
7323-
}
7319+
// if (polyShader != null) {
7320+
// polyShader.setRenderer(this);
7321+
// polyShader.loadAttributes();
7322+
// polyShader.loadUniforms();
7323+
// }
73247324
if (lit) {
73257325
if (tex) {
7326-
if (useDefault || !polyShader.checkPolyType(PShader.TEXLIGHT)) {
7326+
if (useDefault || !isPolyShaderTexLight(polyShader)) {
73277327
if (ppg.defTexlightShader == null) {
7328-
String[] vertSource = pgl.loadVertexShader(defTexlightShaderVertURL);
7329-
String[] fragSource = pgl.loadFragmentShader(defTexlightShaderFragURL);
7330-
ppg.defTexlightShader = new PShader(parent, vertSource, fragSource);
7328+
ppg.defTexlightShader = loadShaderFromURL(defTexlightShaderFragURL,
7329+
defTexlightShaderVertURL);
73317330
}
73327331
shader = ppg.defTexlightShader;
73337332
} else {
73347333
shader = polyShader;
73357334
}
73367335
} else {
7337-
if (useDefault || !polyShader.checkPolyType(PShader.LIGHT)) {
7336+
if (useDefault || !isPolyShaderLight(polyShader)) {
73387337
if (ppg.defLightShader == null) {
7339-
String[] vertSource = pgl.loadVertexShader(defLightShaderVertURL);
7340-
String[] fragSource = pgl.loadFragmentShader(defLightShaderFragURL);
7341-
ppg.defLightShader = new PShader(parent, vertSource, fragSource);
7338+
ppg.defLightShader = loadShaderFromURL(defLightShaderFragURL,
7339+
defLightShaderVertURL);
73427340
}
73437341
shader = ppg.defLightShader;
73447342
} else {
73457343
shader = polyShader;
73467344
}
73477345
}
73487346
} else {
7349-
if (polyShader != null && polyShader.accessLightAttribs()) {
7347+
if (isPolyShaderUsingLights(polyShader)) {
73507348
PGraphics.showWarning(SHADER_NEED_LIGHT_ATTRIBS);
73517349
useDefault = true;
73527350
}
73537351

73547352
if (tex) {
7355-
if (useDefault || !polyShader.checkPolyType(PShader.TEXTURE)) {
7353+
if (useDefault || !isPolyShaderTex(polyShader)) {
73567354
if (ppg.defTextureShader == null) {
7357-
String[] vertSource = pgl.loadVertexShader(defTextureShaderVertURL);
7358-
String[] fragSource = pgl.loadFragmentShader(defTextureShaderFragURL);
7359-
ppg.defTextureShader = new PShader(parent, vertSource, fragSource);
7355+
ppg.defTextureShader = loadShaderFromURL(defTextureShaderFragURL,
7356+
defTextureShaderVertURL);
73607357
}
73617358
shader = ppg.defTextureShader;
73627359
} else {
73637360
shader = polyShader;
73647361
}
73657362
} else {
7366-
if (useDefault || !polyShader.checkPolyType(PShader.COLOR)) {
7363+
if (useDefault || !isPolyShaderColor(polyShader)) {
73677364
if (ppg.defColorShader == null) {
7368-
String[] vertSource = pgl.loadVertexShader(defColorShaderVertURL);
7369-
String[] fragSource = pgl.loadFragmentShader(defColorShaderFragURL);
7370-
ppg.defColorShader = new PShader(parent, vertSource, fragSource);
7365+
ppg.defColorShader = loadShaderFromURL(defColorShaderFragURL,
7366+
defColorShaderVertURL);
73717367
}
73727368
shader = ppg.defColorShader;
73737369
} else {
73747370
shader = polyShader;
73757371
}
73767372
}
73777373
}
7378-
if (shader != polyShader) {
7379-
shader.setRenderer(this);
7380-
shader.loadAttributes();
7381-
shader.loadUniforms();
7382-
}
7374+
// if (shader != polyShader) {
7375+
// shader.setRenderer(this);
7376+
// shader.loadAttributes();
7377+
// shader.loadUniforms();
7378+
// }
7379+
updateShader(shader);
73837380
return shader;
73847381
}
73857382

73867383

7384+
protected void updateShader(PShader shader) {
7385+
shader.setRenderer(this);
7386+
shader.loadAttributes();
7387+
shader.loadUniforms();
7388+
}
7389+
7390+
7391+
protected PShader loadShaderFromURL(URL fragURL, URL vertURL) {
7392+
String[] vertSource = pgl.loadVertexShader(vertURL);
7393+
String[] fragSource = pgl.loadFragmentShader(fragURL);
7394+
return new PShader(parent, vertSource, fragSource);
7395+
}
7396+
7397+
7398+
protected boolean isPolyShaderTexLight(PShader shader) {
7399+
return shader.checkPolyType(PShader.TEXLIGHT);
7400+
}
7401+
7402+
7403+
protected boolean isPolyShaderLight(PShader shader) {
7404+
return shader.checkPolyType(PShader.LIGHT);
7405+
}
7406+
7407+
7408+
protected boolean isPolyShaderTex(PShader shader) {
7409+
return shader.checkPolyType(PShader.TEXTURE);
7410+
}
7411+
7412+
7413+
protected boolean isPolyShaderColor(PShader shader) {
7414+
return shader.checkPolyType(PShader.COLOR);
7415+
}
7416+
7417+
7418+
protected boolean isPolyShaderUsingLights(PShader shader) {
7419+
return shader != null && shader.accessLightAttribs();
7420+
}
7421+
7422+
73877423
protected PShader getLineShader() {
73887424
PShader shader;
73897425
PGraphicsOpenGL ppg = getPrimaryPG();

0 commit comments

Comments
 (0)