Fix compare shader(s)

This commit is contained in:
Joscha 2017-04-24 17:25:26 +00:00
parent 74051fe676
commit 1171c37f88
3 changed files with 47 additions and 9 deletions

View file

@ -4,16 +4,16 @@
// try isampler2D, ivec4 etc.? Probably not // try isampler2D, ivec4 etc.? Probably not
uniform vec2 size; uniform vec2 size;
uniform vec2 offs;
uniform sampler2D base; uniform sampler2D base;
uniform sampler2D curr; uniform sampler2D curr;
void main(void) void main(void)
{ {
vec2 pos = gl_FragCoord.xy/size; vec2 pos = (gl_FragCoord.xy-offs)/size;
// vec4 color = texture(curr, pos); // fails for some reason!? pos.y = 1.0 - pos.y;
// vec4 basecolor = texture(base, pos); // fails too... vec4 color = texture2D(curr, pos);
// color.xyz = abs(color.xyz - basecolor.xyz); vec4 basecolor = texture2D(base, pos);
// gl_FragColor = color; color.xyz = abs(color.xyz - basecolor.xyz);
// gl_FragColor = basecolor; gl_FragColor = color;
gl_FragColor = vec4(1.0);
} }

20
compare_med.glsl Normal file
View file

@ -0,0 +1,20 @@
// Compute the pixelwise diff between two textures.
// Computes the diff for each color chanel separately (r, g, b).
// Assumes both images are not transparent.
// try isampler2D, ivec4 etc.? Probably not
uniform vec2 size;
uniform vec2 offs;
uniform sampler2D base;
uniform sampler2D curr;
void main(void)
{
vec2 pos = (gl_FragCoord.xy-offs)/size;
pos.y = 1.0 - pos.y;
vec4 color = texture2D(curr, pos);
vec4 basecolor = texture2D(base, pos);
color.xyz = color.xyz - basecolor.xyz;
color.xyz = (vec3(1.0, 1.0, 1.0) + color.xyz)/2.0;
gl_FragColor = color;
}

View file

@ -14,6 +14,9 @@
* - show fitness for individuals? * - show fitness for individuals?
* - show stats for generation? * - show stats for generation?
* *
* 1.5) mating screen
* -
*
* 2) fitness screen * 2) fitness screen
* - show original image * - show original image
* - show currently evaluated image * - show currently evaluated image
@ -67,7 +70,19 @@ int main() {
compshdr.setUniform("base", base); compshdr.setUniform("base", base);
compshdr.setUniform("curr", comp); compshdr.setUniform("curr", comp);
compshdr.setUniform("size", 240, 240); compshdr.setUniform("size", sf::Vector2f(240, 240));
compshdr.setUniform("offs", sf::Vector2f(0, 0));
sf::Shader medcompshdr;
medcompshdr.loadFromFile("compare_med.glsl", sf::Shader::Fragment);
if (!medcompshdr.isAvailable()) {
std::cout << "The medshader is not available\n";
return 1;
}
medcompshdr.setUniform("base", comp);
medcompshdr.setUniform("curr", base);
medcompshdr.setUniform("size", sf::Vector2f(240, 240));
medcompshdr.setUniform("offs", sf::Vector2f(240, 0));
// Set the resolution parameter (the resoltion is divided to make the fire smaller) // Set the resolution parameter (the resoltion is divided to make the fire smaller)
// shader.setParameter("resolution", sf::Vector2f(winW / 2, winH / 2)); // shader.setParameter("resolution", sf::Vector2f(winW / 2, winH / 2));
@ -92,7 +107,7 @@ int main() {
// sf::Vector2i mousePos = sf::Mouse::getPosition(window); // sf::Vector2i mousePos = sf::Mouse::getPosition(window);
// shader.setParameter("mouse", sf::Vector2f(mousePos.x, mousePos.y - winH)); // shader.setParameter("mouse", sf::Vector2f(mousePos.x, mousePos.y - winH));
// Draw the sprites, one with the shader on it // Draw the sprites
window.clear(); window.clear();
window.draw(sprbase); window.draw(sprbase);
@ -103,6 +118,9 @@ int main() {
sprcomp.setPosition(0, 240); sprcomp.setPosition(0, 240);
window.draw(sprcomp, &compshdr); window.draw(sprcomp, &compshdr);
sprcomp.setPosition(240, 240);
window.draw(sprcomp, &medcompshdr);
window.display(); window.display();
} }