summaryrefslogtreecommitdiff
path: root/gui/src/ofxGpuLutBlend.cpp
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 /gui/src/ofxGpuLutBlend.cpp
parentf1bf4431e11666ca0131af8f10a934993b768f44 (diff)
disabled luttim/lut
Diffstat (limited to 'gui/src/ofxGpuLutBlend.cpp')
-rw-r--r--gui/src/ofxGpuLutBlend.cpp98
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;
+}
+*/