From a2d734a72ff37a5798608563c7550cd09abff951 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Sun, 28 Oct 2018 22:18:00 +0000 Subject: disabled lut --- gui/.DS_Store | Bin 8196 -> 10244 bytes gui/src/chainImage.cpp | 118 +++++++++++++++++++++++++-------------------- gui/src/chainImage.h | 6 ++- gui/src/ofxGpuLutBlend.cpp | 98 +++++++++++++++++++++++++++++++++++-- gui/src/ofxGpuLutBlend.h | 10 ++-- 5 files changed, 170 insertions(+), 62 deletions(-) diff --git a/gui/.DS_Store b/gui/.DS_Store index 1a71078..14cc285 100644 Binary files a/gui/.DS_Store and b/gui/.DS_Store differ diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp index f30677c..c93f9c0 100644 --- a/gui/src/chainImage.cpp +++ b/gui/src/chainImage.cpp @@ -5,9 +5,9 @@ float distance(ofPoint p1,ofPoint p2){ } void chainImage::init(ofPoint _linkPos,float _linkScale,float _linkRot){ -//#ifdef GPU_ALGORITHM +#ifdef GPU_ALGORITHM shader.load("shader"); -//#endif //GPU_ALGORITHM +#endif //GPU_ALGORITHM linkPos=_linkPos; linkScale=_linkScale; @@ -17,6 +17,9 @@ void chainImage::init(ofPoint _linkPos,float _linkScale,float _linkRot){ dragPos=ofPoint(0,0); dragRot=0; dragScale=0; + + remap.load(); + } void chainImage::start(bool reverse){ @@ -33,6 +36,8 @@ void chainImage::start(bool reverse){ transition ); */ + + } void chainImage::gpu_drawImage(){ @@ -408,25 +413,7 @@ void chainImage::drawRecursive(float fadeIn,bool additive,float intensity,float glPopMatrix(); } */ -ofImage makeLut(float gamma,float pedestal,float clamp){ - ofImage image; - image.allocate(512,512,OF_IMAGE_COLOR); - uint8_t *pixels=&image.getPixels()[0]; - for (uint32_t b=0;b<64;b++){ - uint32_t bluecolumn=b%8; - uint32_t bluerow=b>>3; - for (uint32_t g=0;g<64;g++){ - for (uint32_t r=0;r<64;r++){ - uint8_t *pixel=&pixels[(r+(g<<9)+(bluecolumn<<6)+(bluerow<<15))*3]; //+(b<<12))*3]; - pixel[0]=(uint8_t)((pedestal+(pow(r/64.0f,gamma)*(clamp-pedestal)))*255); - pixel[1]=(uint8_t)((pedestal+(pow(g/64.0f,gamma)*(clamp-pedestal)))*255); - pixel[2]=(uint8_t)((pedestal+(pow(b/64.0f,gamma)*(clamp-pedestal)))*255); - } - } - } - image.update(); - return image; -} + void chainImage::drawChain(float fadeIn,bool additive,float intensity,float zoomMultiplier,float startGamma){ @@ -437,16 +424,6 @@ void chainImage::drawChain(float fadeIn,bool additive,float intensity,float zoom glPushMatrix(); - if (additive){ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - ofSetColor(255,255,255,255*(1.0f-min(1.0,transition/fadeIn))*intensity); - } - else { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - ofSetColor(255,255,255,255*intensity); - } //ofDisableAlphaBlending(); @@ -456,6 +433,7 @@ void chainImage::drawChain(float fadeIn,bool additive,float intensity,float zoom //add a scale factor to the outgoing image that builds up over the transition + glDisable(GL_BLEND); glPushMatrix(); //if this is linear we see the jump from the unlessaccelerated phase @@ -466,17 +444,21 @@ void chainImage::drawChain(float fadeIn,bool additive,float intensity,float zoom glScalef(zoomFactor,zoomFactor,zoomFactor); - //ofSetColor(colour); - - float gamma=1.0f; //transition; //(startGamma*transition)+(1.0f*(1.0f-transition)); - float pedestal=0.0f; - float clamp=1.0f; //-transition; - lut.load(makeLut(gamma,pedestal,clamp)); - lut.setBlend(1.0f); - lut.begin(); + //need to use the LUT shader on both images so the they match + //float gamma=1.0f; + //float pedestal=0.0f; + //float clamp=1.0f; + + //if (!lutLoaded){ + // lut.load(makeLut(gamma,pedestal,clamp,8)); + // lutLoaded=true; + //} + + + //lut.begin(); //setAlpha(1.0f); draw(0,0,getWidth(),getHeight()); - lut.end(); + //lut.end(); glPopMatrix(); @@ -487,7 +469,16 @@ void chainImage::drawChain(float fadeIn,bool additive,float intensity,float zoom glScalef(getLinkScale(),getLinkScale(),getLinkScale()); //ofEnableAlphaBlending(); - glEnable(GL_BLEND); + if (additive){ + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + ofSetColor(255,255,255,255*(1.0f-min(1.0,transition/fadeIn))*intensity); + } + else { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + ofSetColor(255,255,255,255*intensity); + } //ofSetColor(255,255,255,255*min(1.0,transition/fadeIn)*intensity); //setting alpha here doesn't work with shader? @@ -495,18 +486,43 @@ void chainImage::drawChain(float fadeIn,bool additive,float intensity,float zoom link->setAnchorPoint(link->getWidth()/2,link->getHeight()/2); - gamma=((1.0f-transition)*10.0f)+1.0f; //(startGamma*transition)+(1.0f*(1.0f-transition)); - pedestal=0.0f; - clamp=1.0f; //transition; - lut.load(makeLut(gamma,pedestal,clamp)); - lut.setBlend(transition); - lut.begin(); + //gamma=1.0f; //((1.0f-transition)*0.5f)+1.0f; //(startGamma*transition)+(1.0f*(1.0f-transition)); + //pedestal=0.0f; + //clamp=1.0f; + //lut.load(makeLut(gamma,pedestal,clamp,8)); + remap.setBlend(transition); + remap.setGamma(1.0f+(1.0f-transition)); //(2.0f-transition)*10.0f); + remap.setClamp(1.0f); //transition); + remap.setPedestal(-1.0f+transition); + remap.begin(); - //ofSetColor(link->colour); - //link->setAlpha(transition); - link->draw(0,0,link->getWidth(),link->getHeight()); + //ofSetColor(link->colour); + //link->setAlpha(transition); + link->draw(0,0,link->getWidth(),link->getHeight()); + remap.end(); - lut.end(); + //potentially + + glPushMatrix(); + + glTranslatef(link->getLinkPos().x,link->getLinkPos().y,0); + + glRotatef(link->getLinkRot(),0,0,1); + + glScalef(link->getLinkScale(),link->getLinkScale(),link->getLinkScale()); + + remap.setBlend(link->transition); + remap.setGamma(1.0f+(1.0f-link->transition)); + remap.setClamp(1.0f); //transition); + remap.setPedestal(-1.0f+link->transition); + remap.begin(); + + link->link->draw(0,0,link->link->getWidth(),link->link->getHeight()); + remap.end(); + + glPopMatrix(); + + glDisable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); diff --git a/gui/src/chainImage.h b/gui/src/chainImage.h index 3763aab..9d6d13e 100644 --- a/gui/src/chainImage.h +++ b/gui/src/chainImage.h @@ -3,7 +3,7 @@ #include "ofMain.h" #include "ofxJSON.h" #include "ofxEasing.h" -#include "ofxGpuLutBlend.h" +#include "ofxGpuRemapBlend.h" #define min(a,b) ((a) < (b) ? (a) : (b)) #define max(a,b) ((a) > (b) ? (a) : (b)) @@ -125,7 +125,9 @@ class chainImage : public ofImage{ bool isLoaded; ofShader shader; - ofxGpuLutBlend lut; + ofxGpuRemapBlend remap; + + bool lutLoaded; //int totalframes,framecount; diff --git a/gui/src/ofxGpuLutBlend.cpp b/gui/src/ofxGpuLutBlend.cpp index 85a0811..4b469ed 100644 --- a/gui/src/ofxGpuLutBlend.cpp +++ b/gui/src/ofxGpuLutBlend.cpp @@ -1,5 +1,6 @@ #include "ofxGpuLutBlend.h" +/* ofxGpuLutBlend::ofxGpuLutBlend(){} ofxGpuLutBlend::~ofxGpuLutBlend(){} @@ -29,6 +30,7 @@ void ofxGpuLutBlend::load(ofTexture lutTexture){ uniform sampler2DRect tex; uniform sampler2DRect lut; uniform float blend; + uniform float size = 64.0; in vec2 texCoordVarying; @@ -37,14 +39,14 @@ void ofxGpuLutBlend::load(ofTexture lutTexture){ // Texture coordinates vec2 texcoord0 = texCoordVarying; - float size = 64.0; + void main( void ) { vec3 rawColor = texture(tex, texcoord0).rgb; //float rawAlpha = texture(tex, texcoord0).a; - if (rawAlpha <= 0.0) { + if (blend <= 0.0) { fragColor = vec4(rawColor, 0.0); } else { @@ -67,8 +69,7 @@ void ofxGpuLutBlend::load(ofTexture lutTexture){ uniform sampler2DRect tex; uniform sampler2DRect lut; uniform float blend; - - float size = 64.0; + uniform float size = 64.0; void main( void ) { @@ -120,8 +121,95 @@ void ofxGpuLutBlend::begin(){ lutShader.begin(); lutShader.setUniformTexture("lut", lut, 1); lutShader.setUniform1f("blend", blendAmt); + lutShader.setUniform1f("size", 256.0f); } void ofxGpuLutBlend::end(){ lutShader.end(); -} \ No newline at end of file +} + +ofImage oldMakeLut(float gamma,float pedestal,float clamp){ + ofImage image; + image.allocate(512,512,OF_IMAGE_COLOR); + uint8_t *pixels=&image.getPixels()[0]; + if (gamma<=0.0f){ + memset(pixels,0,image.getWidth()*image.getHeight()*3); + } + else { + for (uint32_t b=0;b<64;b++){ + uint32_t bluecolumn=b%8; + uint32_t bluerow=b>>3; + for (uint32_t g=0;g<64;g++){ + for (uint32_t r=0;r<64;r++){ + uint8_t *pixel=&pixels[(r+(g<<9)+(bluecolumn<<6)+(bluerow<<15))*3]; //+(b<<12))*3]; + pixel[0]=(uint8_t)((pedestal+(pow(r/64.0f,1.0f/gamma)*(clamp-pedestal)))*255); + pixel[1]=(uint8_t)((pedestal+(pow(g/64.0f,1.0f/gamma)*(clamp-pedestal)))*255); + pixel[2]=(uint8_t)((pedestal+(pow(b/64.0f,1.0f/gamma)*(clamp-pedestal)))*255); + } + } + } + } + //image.update(); + return image; +} + +ofImage simpleMakeLut(float gamma,float pedestal,float clamp,int mapWidthBits){ + ofImage image; + int mapWidth=pow(2,mapWidthBits); + int mapDimensionBits=(mapWidthBits*3)/2; //only works if mapWidthBits is even + int mapDimension=pow(2,mapDimensionBits); + image.allocate(mapDimension,mapDimension,OF_IMAGE_COLOR); + uint8_t *pixels=&image.getPixels()[0]; + int numpixels=image.getWidth()*image.getHeight(); + for (uint32_t b=0;b>(mapWidthBits/2); + if (gamma==0.0f){ + memset(pixels,0,numpixels*4); + } + for (uint32_t g=0;g>(mapWidthBits/2); + uint8_t bPixel=(uint8_t)((pedestal+(pow(((float)b)/mapWidth,gamma)*(clamp-pedestal)))*255); + if (gamma==0.0f){ + memset(pixels,0,numpixels*4); + } + for (uint32_t g=0;g