summaryrefslogtreecommitdiff
path: root/keyshade
diff options
context:
space:
mode:
Diffstat (limited to 'keyshade')
-rw-r--r--keyshade/Makefile13
-rw-r--r--keyshade/bin/data/shader.frag38
-rw-r--r--keyshade/bin/data/shader.vert16
-rw-r--r--keyshade/config.make142
-rw-r--r--keyshade/src/addons.make0
-rw-r--r--keyshade/src/main.cpp15
-rw-r--r--keyshade/src/ofApp.cpp102
-rw-r--r--keyshade/src/ofApp.h39
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;
+};