summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Redfern <tim@getdrop.com>2018-10-28 22:18:00 +0000
committerTim Redfern <tim@getdrop.com>2018-10-28 22:18:00 +0000
commita2d734a72ff37a5798608563c7550cd09abff951 (patch)
treebf5db81331a8c42018449ad6dbc90f950576e947
parentf1bf4431e11666ca0131af8f10a934993b768f44 (diff)
disabled luttim/lut
-rw-r--r--gui/.DS_Storebin8196 -> 10244 bytes
-rw-r--r--gui/src/chainImage.cpp118
-rw-r--r--gui/src/chainImage.h6
-rw-r--r--gui/src/ofxGpuLutBlend.cpp98
-rw-r--r--gui/src/ofxGpuLutBlend.h10
5 files changed, 170 insertions, 62 deletions
diff --git a/gui/.DS_Store b/gui/.DS_Store
index 1a71078..14cc285 100644
--- a/gui/.DS_Store
+++ b/gui/.DS_Store
Binary files 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<mapWidth;b++){
+ uint32_t bluecolumn=b%((int)pow(2,mapWidthBits/2));
+ uint32_t bluerow=b>>(mapWidthBits/2);
+ if (gamma==0.0f){
+ memset(pixels,0,numpixels*4);
+ }
+ for (uint32_t g=0;g<mapWidth;g++){
+ for (uint32_t r=0;r<mapWidth;r++){
+ uint8_t *pixel=&pixels[(r+(g<<mapDimensionBits)+(bluecolumn<<mapWidthBits)+(bluerow<<(mapDimensionBits+mapWidthBits)))*3];
+ pixel[0]=(uint8_t)((pedestal+(pow(((float)r)/mapWidth,gamma)*(clamp-pedestal)))*255);
+ pixel[1]=(uint8_t)((pedestal+(pow(((float)g)/mapWidth,gamma)*(clamp-pedestal)))*255);
+ pixel[2]=(uint8_t)((pedestal+(pow(((float)b)/mapWidth,gamma)*(clamp-pedestal)))*255);
+ }
+ }
+ }
+ ofLog()<<"Created LUT: "<<numpixels<<" pixels";
+ //image.update();
+ return image;
+}
+
+ofImage makeLut(float gamma,float pedestal,float clamp,int mapWidthBits){
+ //attempt to optimise: starting 2.5fps @ 16mp
+ //loop optimisation of gpixel and bPixel make us nothing
+ 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<mapWidth;b++){
+ uint32_t bluecolumn=b%((int)pow(2,mapWidthBits/2));
+ uint32_t bluerow=b>>(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<mapWidth;g++){
+ uint8_t gPixel=(uint8_t)((pedestal+(pow(((float)g)/mapWidth,gamma)*(clamp-pedestal)))*255);
+ for (uint32_t r=0;r<mapWidth;r++){
+ uint8_t *pixel=&pixels[(r+(g<<mapDimensionBits)+(bluecolumn<<mapWidthBits)+(bluerow<<(mapDimensionBits+mapWidthBits)))*3];
+ pixel[0]=(uint8_t)((pedestal+(pow(((float)r)/mapWidth,gamma)*(clamp-pedestal)))*255);
+ pixel[1]=gPixel;
+ pixel[2]=bPixel;
+ }
+ }
+ }
+ ofLog()<<"Created LUT: "<<numpixels<<" pixels";
+ //image.update();
+ return image;
+}
+*/
diff --git a/gui/src/ofxGpuLutBlend.h b/gui/src/ofxGpuLutBlend.h
index d2f7d33..8ec1af2 100644
--- a/gui/src/ofxGpuLutBlend.h
+++ b/gui/src/ofxGpuLutBlend.h
@@ -1,10 +1,11 @@
#pragma once
+/*
#include "ofMain.h"
#define STRINGIFY(e) #e
-class ofxGpuLutBlend{
+class ofxGpuRemapBlend{
private:
ofShader lutShader;
@@ -14,8 +15,8 @@ private:
ofImage lutImage;
float blendAmt;
public:
- ofxGpuLutBlend();
- ~ofxGpuLutBlend();
+ ofxGpuRemapBlend(blendAmt=1;);
+ ~ofxGpuRemapBlend();
void load(ofTexture lutTexture);
void load(ofImage lutImage);
@@ -23,4 +24,5 @@ public:
void setBlend(float amt);
void begin();
void end();
-}; \ No newline at end of file
+};
+*/