diff options
| author | Tim Redfern <tim@getdrop.com> | 2017-10-16 16:24:04 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@getdrop.com> | 2017-10-16 16:24:04 +0100 |
| commit | a3c99df80c201e56a32eb5fe650d45e9a9ccaee2 (patch) | |
| tree | 5e070309793bf11d04e05919a3fb07b1e1157f62 /keyshade | |
| parent | 5116dea8815de81ddaef299fdcae15f56ae3a87b (diff) | |
shader compiles
Diffstat (limited to 'keyshade')
| -rw-r--r-- | keyshade/Makefile | 13 | ||||
| -rw-r--r-- | keyshade/bin/data/shader.frag | 38 | ||||
| -rw-r--r-- | keyshade/bin/data/shader.vert | 16 | ||||
| -rw-r--r-- | keyshade/config.make | 142 | ||||
| -rw-r--r-- | keyshade/src/addons.make | 0 | ||||
| -rw-r--r-- | keyshade/src/main.cpp | 15 | ||||
| -rw-r--r-- | keyshade/src/ofApp.cpp | 102 | ||||
| -rw-r--r-- | keyshade/src/ofApp.h | 39 |
8 files changed, 365 insertions, 0 deletions
diff --git a/keyshade/Makefile b/keyshade/Makefile new file mode 100644 index 0000000..177e172 --- /dev/null +++ b/keyshade/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=$(realpath ../../..) +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/keyshade/bin/data/shader.frag b/keyshade/bin/data/shader.frag new file mode 100644 index 0000000..7dbf468 --- /dev/null +++ b/keyshade/bin/data/shader.frag @@ -0,0 +1,38 @@ +#version 150 + +uniform vec4 keyColour; +uniform float keyMinDist; +uniform float keyMaxDist; + +// these are our textures +uniform sampler2DRect backgroundTex; +uniform sampler2DRect foregroundTex; + +// this comes from the vertex shader +in vec2 texCoordVarying; + + + +// this is the output of the fragment shader +out vec4 outputColor; + +void main() +{ + // Get color values from the background and foreground + vec4 back = texture(backgroundTex, texCoordVarying); + vec4 fore = texture(foregroundTex, texCoordVarying); + + // get alpha from mask + float mask = texture(backgroundTex, texCoordVarying).r; + + vec4 delta = back - keyColour; + float distance2 = dot( delta, delta ); + float weight = clamp( (distance2 - keyMinDist) / (keyMaxDist - keyMinDist) ,0.0,1.0); + + //float4 transparent = IN.color; + //transparent.w = 0; + //OUT.color = lerp( transparent, IN.color, weight ); + + //mix colors from background and foreground based on the mask value + outputColor = mix(fore , back, weight); +} diff --git a/keyshade/bin/data/shader.vert b/keyshade/bin/data/shader.vert new file mode 100644 index 0000000..0e63995 --- /dev/null +++ b/keyshade/bin/data/shader.vert @@ -0,0 +1,16 @@ +#version 150 + +// these come from the programmable pipeline +uniform mat4 modelViewProjectionMatrix; + +in vec4 position; +in vec2 texcoord; + +// texture coordinates are sent to fragment shader +out vec2 texCoordVarying; + +void main() +{ + texCoordVarying = texcoord; + gl_Position = modelViewProjectionMatrix * position; +}
\ No newline at end of file diff --git a/keyshade/config.make b/keyshade/config.make new file mode 100644 index 0000000..469c495 --- /dev/null +++ b/keyshade/config.make @@ -0,0 +1,142 @@ +################################################################################ +# CONFIGURE PROJECT MAKEFILE (optional) +# This file is where we make project specific configurations. +################################################################################ + +################################################################################ +# OF ROOT +# The location of your root openFrameworks installation +# (default) OF_ROOT = ../../.. +################################################################################ + OF_ROOT = ../../openFrameworks + +################################################################################ +# PROJECT ROOT +# The location of the project - a starting place for searching for files +# (default) PROJECT_ROOT = . (this directory) +# +################################################################################ +# PROJECT_ROOT = . + +################################################################################ +# PROJECT SPECIFIC CHECKS +# This is a project defined section to create internal makefile flags to +# conditionally enable or disable the addition of various features within +# this makefile. For instance, if you want to make changes based on whether +# GTK is installed, one might test that here and create a variable to check. +################################################################################ +# None + +################################################################################ +# PROJECT EXTERNAL SOURCE PATHS +# These are fully qualified paths that are not within the PROJECT_ROOT folder. +# Like source folders in the PROJECT_ROOT, these paths are subject to +# exlclusion via the PROJECT_EXLCUSIONS list. +# +# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXTERNAL_SOURCE_PATHS = + +################################################################################ +# PROJECT EXCLUSIONS +# These makefiles assume that all folders in your current project directory +# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations +# to look for source code. The any folders or files that match any of the +# items in the PROJECT_EXCLUSIONS list below will be ignored. +# +# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete +# string unless teh user adds a wildcard (%) operator to match subdirectories. +# GNU make only allows one wildcard for matching. The second wildcard (%) is +# treated literally. +# +# (default) PROJECT_EXCLUSIONS = (blank) +# +# Will automatically exclude the following: +# +# $(PROJECT_ROOT)/bin% +# $(PROJECT_ROOT)/obj% +# $(PROJECT_ROOT)/%.xcodeproj +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXCLUSIONS = + +################################################################################ +# PROJECT LINKER FLAGS +# These flags will be sent to the linker when compiling the executable. +# +# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ + +# Currently, shared libraries that are needed are copied to the +# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to +# add a runtime path to search for those shared libraries, since they aren't +# incorporated directly into the final executable application binary. +# TODO: should this be a default setting? +# PROJECT_LDFLAGS=-Wl,-rpath=./libs + +################################################################################ +# PROJECT DEFINES +# Create a space-delimited list of DEFINES. The list will be converted into +# CFLAGS with the "-D" flag later in the makefile. +# +# (default) PROJECT_DEFINES = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_DEFINES = + +################################################################################ +# PROJECT CFLAGS +# This is a list of fully qualified CFLAGS required when compiling for this +# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS +# defined in your platform specific core configuration files. These flags are +# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. +# +# (default) PROJECT_CFLAGS = (blank) +# +# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in +# your platform specific configuration file will be applied by default and +# further flags here may not be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CFLAGS = + +################################################################################ +# PROJECT OPTIMIZATION CFLAGS +# These are lists of CFLAGS that are target-specific. While any flags could +# be conditionally added, they are usually limited to optimization flags. +# These flags are added BEFORE the PROJECT_CFLAGS. +# +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) +# +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) +# +# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the +# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration +# file will be applied by default and further optimization flags here may not +# be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = + +################################################################################ +# PROJECT COMPILERS +# Custom compilers can be set for CC and CXX +# (default) PROJECT_CXX = (blank) +# (default) PROJECT_CC = (blank) +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CXX = +# PROJECT_CC = diff --git a/keyshade/src/addons.make b/keyshade/src/addons.make new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/keyshade/src/addons.make diff --git a/keyshade/src/main.cpp b/keyshade/src/main.cpp new file mode 100644 index 0000000..6136697 --- /dev/null +++ b/keyshade/src/main.cpp @@ -0,0 +1,15 @@ +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + + ofGLWindowSettings settings; + settings.setGLVersion(3,2); + ofCreateWindow(settings); + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp(new ofApp()); + +} diff --git a/keyshade/src/ofApp.cpp b/keyshade/src/ofApp.cpp new file mode 100644 index 0000000..9adae87 --- /dev/null +++ b/keyshade/src/ofApp.cpp @@ -0,0 +1,102 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ + shader.load("shader"); + backgroundImage.load("../../../gui/bin/data/funfair/IMG_2893.JPG"); + foregroundImage.load("../../../gui/bin/data/funfair/IMG_2894.JPG"); + + maskFbo.allocate(ofGetWidth(), ofGetHeight()); + + // Clear the FBO's + // otherwise it will bring some junk with it from the memory + maskFbo.begin(); + ofClear(0,0,0,255); + maskFbo.end(); + + keyMinDist=0.2f; + keyMaxDist=0.3f; + keyColour=ofColor(200,40,0); +} + +//-------------------------------------------------------------- +void ofApp::update(){ + +} + +//-------------------------------------------------------------- +void ofApp::draw(){ + + ofSetColor(255); + + //better to scale first then mask, or visa versa? + + shader.begin(); + shader.setUniform4f("keyColour",keyColour); + shader.setUniform1f("keyMinDist",keyMinDist); + shader.setUniform4f("keyMaxDist",keyMaxDist); + shader.setUniformTexture("backgroundTex", backgroundImage.getTexture(), 1 ); + shader.setUniformTexture("foregroundTex", foregroundImage.getTexture(), 2 ); + + backgroundImage.draw(0, 0,ofGetWidth(),ofGetHeight()); + + shader.end(); +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + keyColour = backgroundImage.getColor( + x*(backgroundImage.getWidth()/ofGetWidth()), + y*(backgroundImage.getHeight()/ofGetHeight()) + ); +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseEntered(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseExited(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} diff --git a/keyshade/src/ofApp.h b/keyshade/src/ofApp.h new file mode 100644 index 0000000..8774291 --- /dev/null +++ b/keyshade/src/ofApp.h @@ -0,0 +1,39 @@ +#pragma once + +#include "ofMain.h" + +/* +click on the image to choose a colour (maybe draw a line or outline a range of colours?) + +*/ + +class ofApp : public ofBaseApp{ + + public: + void setup(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseEntered(int x, int y); + void mouseExited(int x, int y); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + ofShader shader; + + ofImage backgroundImage; + ofImage foregroundImage; + + ofFbo maskFbo; + + ofColor keyColour; + float keyMinDist; + float keyMaxDist; +}; |
