I'll just leave this here...
-
@UrsBollhalder It's all laid out in the docs:
- Load a shader file.
- Render it in the paint routine of a scriptpanel.
A example snippet is not very helpful because it requires the shader file to be in the script repo. I have added the ability of using base64 encoded strings, but it's not the most transparent way to learn how to use shaders in HISE.
Make sure to enable OpenGL in HISE (it's not the plugin OpenGL flag but a new one inside the Development settings).
-
@Christoph-Hart Should we be migrating to the codegen_rewrite branch now or sticking with scriptnode?
-
Yes it's now at a point where people can test drive the new stuff - but I wouldn't use it in a real project at the moment.
BTW the editor used for the GLSL code will be the new default code editor (I'm holding off with replacing the old code editor for HiseScript until all kinks are sorted out), so any feedback about quirks when editing GLSL code are welcome - there are still many small bugs, it's rather difficult to create a code editor almost from scratch...
-
@Christoph-Hart That makes sense. I’ll give it a go tonight...
-
@Christoph-Hart So... I am obviously missing something...
The shader.glsl script sits in the right column under my onControl Callback and in the script folder... OpenGL is enabled in the Settings, flag set for plugin (if needed)...Content.makeFrontInterface(600, 500); const var pnlShader = Content.getComponent("pnlShader"); const var shader = Content.createShader("shader"); //shader.setBlendFunc(true, shader.GL_ONE, shader.GL_ONE); pnlShader.setPaintRoutine(function(g) { g.applyShader("shader", [0, 0, this.getWidth(), this.getHeight()]); });
-
Are there any compile errors in the console? What's the shader code?
-
@Christoph-Hart It compiles without errors and the shader code is the example code in the docs:
void main() // must be named `main()` without parameters { // Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord/iResolution.xy; // Time varying pixel color vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4)); // Output to screen fragColor = pixelAlpha * vec4(col,1.0); }
-
Are you on Windows or mac?
This shader stuff is beyond awesome. Check out this 3D keyboard prototype:
-
@Christoph-Hart Ok. This is killing me!!! Why doesn't it work on my system! You have to drop me a bone I can gnaw on a bit at least... Do you have any idea why it isn't working? Beacuse this looks just crazy awesome!! And on a scale of 1 to 10, how unwise is it to start working on the codegen rewrite branch if I plan to release a plugin by the end of the year?
-
I haven‘t tested it on macOS yet, so maybe something‘s off there. I‘ll take a look later this day.
And yes you can definitely use the latest branch for a project that will be published in a few months - this branch is likely to be the master branch by then. Its just risky to switch an existing project to the newest branch (especially if you‘re using the old scriptnode stuff).
-
@Christoph-Hart Hey Christoph. Awesome. Thank you! Well, no scriptnode so far. It’s on the to-do list. I was busy working on a granular processor and an Euclidean Sequencer... so... I might just risk it...
-
Please check again, I noticed that Intel HD graphic cards do not support the
#line
directive, so I deactivated this. -
@Christoph-Hart No luck so far... I was already getting excited!
-
I added a getOpenGLStatistics method to the shader class - it needs to render the shader once before it returns something useful though, so you need to add it after the
applyShader
function in the paint routine (and the script panel needs to be visible on the screen):g.applyShader(shader, [0, 0, this.getWidth(), this.getHeight()]); Console.print(shader.getOpenGLStatistics()));
Can you post the output, maybe this will give a glue.
-
@Christoph-Hart said in I'll just leave this here...:
I added a getOpenGLStatistics method to the shader class - it needs to render the shader once before it returns something useful though, so you need to add it after the
applyShader
function in the paint routine (and the script panel needs to be visible on the screen):g.applyShader(shader, [0, 0, this.getWidth(), this.getHeight()]); Console.print(shader.getOpenGLStatistics()));
Can you post the output, maybe this will give a glue.
I put the getOpenGLStatistics after the applyShader line as instructed.
Now. The output seems to be a bit inconsistent... I get this normally:
then occasionally, after hitting compile a few more times, I do get the following:
-
hmm, can anyone explain what this is ? How can I make graphics using this ?
-
@lalalandsynth Have a look at the Art of Code YouTube channel... link in docs! It’s not yet working on my system but that channel shows off some impressive stuff you can make with shader code!
-
Ah that gl_fc stuff is helpful - I had it myself on macOS. I‘ll push a fix in a few hours...
-
@Christoph-Hart 🥳🥳🥳
-
@Christoph-Hart said in I'll just leave this here...:
Ah that gl_fc stuff is helpful - I had it myself on macOS. I‘ll push a fix in a few hours...
Also this one is joining the party:
Interface:! ERROR: 0:16: '}' : syntax error: syntax error