Trying to get examples to run on macOS.
ofTheo opened this issue · 5 comments
Hey @patriciogonzalezvivo
I gave the instructions a try with the nightly build of OF on macOS
Nothing seemed to render as is, but I also didn't get any error messages.
Changing the GL version to 3.2 or 4.1 gave me useful error messages, but didn't change the visual output.
This is what I changed the main.cpp to ( otherwise it is using the non-programmable renderer )
//Use ofGLFWWindowSettings for more options like multi-monitor fullscreen
ofGLWindowSettings settings;
settings.setSize(1024, 768);
settings.windowMode = OF_WINDOW; //can also be OF_FULLSCREEN
settings.setGLVersion(3, 2);
auto window = ofCreateWindow(settings);
ofRunApp(window, make_shared<ofApp>());
ofRunMainLoop();
then the errors I get:
[ error ] ofShader: setupShaderFromSource(): GL_VERTEX_SHADER shader failed to compile
[ error ] ofShader: GL_VERTEX_SHADER shader reports:
ERROR: 0:1: '' : #version required and missing.
ERROR: 0:5: 'attribute' : syntax error: syntax error
[ error ] ofShader: GL_VERTEX_SHADER, offending line 1:
1 uniform mat4 modelViewProjectionMatrix;
2
3 uniform vec2 u_resolution;
[ error ] ofShader: setupShaderFromSource(): GL_FRAGMENT_SHADER shader failed to compile
[ error ] ofShader: GL_FRAGMENT_SHADER shader reports:
ERROR: 0:2: '' : #version required and missing.
[ error ] ofShader: GL_FRAGMENT_SHADER, offending line 2:
1
2 #ifdef GL_ES
3 precision highp float;
4 #endif
[ error ] ofShader: checkProgramLinkStatus(): program failed to link
[ error ] ofShader: ofShader: program reports:
ERROR: One or more attached shaders not successfully compiled
[ error ] ofShader: setupShaderFromSource(): GL_VERTEX_SHADER shader failed to compile
[ error ] ofShader: GL_VERTEX_SHADER shader reports:
ERROR: 0:1: '' : #version required and missing.
ERROR: 0:5: 'attribute' : syntax error: syntax error
[ error ] ofShader: GL_VERTEX_SHADER, offending line 1:
1 uniform mat4 modelViewProjectionMatrix;
2
3 uniform vec2 u_resolution;
[ error ] ofShader: setupShaderFromSource(): GL_FRAGMENT_SHADER shader failed to compile
[ error ] ofShader: GL_FRAGMENT_SHADER shader reports:
ERROR: 0:2: '' : #version required and missing.
[ error ] ofShader: GL_FRAGMENT_SHADER, offending line 2:
1
2 #ifdef GL_ES
3 precision mediump float;
4 #endif
[ error ] ofShader: checkProgramLinkStatus(): program failed to link
[ error ] ofShader: ofShader: program reports:
ERROR: One or more attached shaders not successfully compiled
Is there a specific version of OpenGL I should be setting and if so do we need to inject
#version 150
or
#version 410
etc into the lygia shaders
When I get the shader error I do see a tiny white dot at the screen center - I think it is because the billboard mesh is in normalized coords where as OF would need screen res coords:
ie: instead of this being -1 to 1 it should be -ofGetWidth()/2 to ofGetWidth()/2
https://github.com/patriciogonzalezvivo/lygia_of_examples/blob/main/src/ofApp.cpp#L19-L31
Maybe I am missing something basic though.
What was the setup you used?
Hi! Thanks for give it a go!
I run it without issues in a Ubuntu 20.04 (intel) with the integrated intel's GPU card. It makes sense that running it against 3.2 or 4.1 will break because the billboard.vert
uses attributes
.
I'm adding #version 120
to the top of all shaders cd2a963. Lygia shouldn't be bounded to versions with the caveat that I should add a version check to all functions that do sampling to change the use of texture2D(..)
for texture(...)
. Ex: https://github.com/patriciogonzalezvivo/lygia/blob/main/sample/derivative.glsl#L10-L12
Thanks you for giving it a try. Maybe with the #version 120
at the top... now it works?
Wohoo - got it working!
So for macOS the change needed was to make the billboard.vert
#version 120
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texcoord;
varying vec4 v_position;
void main() {
// get the texture coordinates
v_texcoord = gl_MultiTexCoord0.xy;
// get the position of the vertex relative to the modelViewProjectionMatrix
v_position = ftransform();
// this is the resulting vertex position
gl_Position = v_position;
}
and then adding
ofScale(width*0.5, height*0.5, 1);
Before the billboard drawing ( as the mesh is otherwise just drawn at -1 to 1 pixel in size )
shader.begin();
shader.setUniformTexture("u_tex0", tex_danny, 0);
shader.setUniformTexture("u_lut", tex_lut, 1);
shader.setUniformTexture("u_moss", tex_moss, 2);
shader.setUniformTexture("u_noise", tex_noise, 3);
shader.setUniformTexture("u_sprite", tex_sprite, 4);
shader.setUniform2f("u_spriteResolution", tex_sprite.getWidth(), tex_sprite.getHeight());
shader.setUniform2f("u_resolution", width, height);
shader.setUniform2f("u_mouse", (float)ofGetMouseX(), (float)ofGetMouseY());
shader.setUniform1f("u_time", ofGetElapsedTimef());
ofScale(width*0.5, height*0.5, 1); //<-- needed so we don't draw a tiny 2pixel x 2pixel square in the screen center
billboard.draw();
shader.end();
YAY! That's awesome! do you mind submitting those as a PR? curious how they will run on my end