diff options
| author | Tim Redfern <tim@getdrop.com> | 2018-10-28 22:18:00 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@getdrop.com> | 2018-10-28 22:18:00 +0000 |
| commit | a2d734a72ff37a5798608563c7550cd09abff951 (patch) | |
| tree | bf5db81331a8c42018449ad6dbc90f950576e947 /gui/src/ofxGpuLutBlend.cpp | |
| parent | f1bf4431e11666ca0131af8f10a934993b768f44 (diff) | |
disabled luttim/lut
Diffstat (limited to 'gui/src/ofxGpuLutBlend.cpp')
| -rw-r--r-- | gui/src/ofxGpuLutBlend.cpp | 98 |
1 files changed, 93 insertions, 5 deletions
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; +} +*/ |
