diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index b158383..3520613 100755 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -80,6 +80,10 @@ B449DBA8F11B159758F5004C /* ofxRD.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxRD.cpp; path = ../../../addons/ofxRD/src/ofxRD.cpp; sourceTree = SOURCE_ROOT; }; B87C60311EC1FE841C1ECD89 /* ofxLabel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxLabel.h; path = ../../../addons/ofxGui/src/ofxLabel.h; sourceTree = SOURCE_ROOT; }; BCC5C83C153EF43F5C45B70A /* ofxRDSampleRenderer.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxRDSampleRenderer.cpp; path = ../../../addons/ofxRD/src/ofxRDSampleRenderer.cpp; sourceTree = SOURCE_ROOT; }; + C6A588E61F77F34C004DBAE8 /* passthru.vert */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; path = passthru.vert; sourceTree = ""; }; + C6A588E71F77F34C004DBAE8 /* sampleRenderer.frag */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; path = sampleRenderer.frag; sourceTree = ""; }; + C6A588E81F77F34C004DBAE8 /* sampleRenderer.vert */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; path = sampleRenderer.vert; sourceTree = ""; }; + C6A588E91F77F34C004DBAE8 /* updateMap.frag */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; path = updateMap.frag; sourceTree = ""; }; C70D8946940288799E82131E /* ofxSliderGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSliderGroup.h; path = ../../../addons/ofxGui/src/ofxSliderGroup.h; sourceTree = SOURCE_ROOT; }; C88333E71C9457E441C33474 /* ofxButton.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxButton.cpp; path = ../../../addons/ofxGui/src/ofxButton.cpp; sourceTree = SOURCE_ROOT; }; D55BB44561D6D640D99D3324 /* ofxRDSampleRenderer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxRDSampleRenderer.h; path = ../../../addons/ofxRD/src/ofxRDSampleRenderer.h; sourceTree = SOURCE_ROOT; }; @@ -217,6 +221,18 @@ name = addons; sourceTree = ""; }; + C6A588E51F77F34C004DBAE8 /* shaders */ = { + isa = PBXGroup; + children = ( + C6A588E61F77F34C004DBAE8 /* passthru.vert */, + C6A588E71F77F34C004DBAE8 /* sampleRenderer.frag */, + C6A588E81F77F34C004DBAE8 /* sampleRenderer.vert */, + C6A588E91F77F34C004DBAE8 /* updateMap.frag */, + ); + name = shaders; + path = ../shaders; + sourceTree = ""; + }; E4328144138ABC890047C5CB /* Products */ = { isa = PBXGroup; children = ( @@ -230,6 +246,7 @@ children = ( E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, + C6A588E51F77F34C004DBAE8 /* shaders */, E4B69E1C0A3A1BDC003C02F2 /* src */, E4EEC9E9138DF44700A80321 /* openFrameworks */, BB4B014C10F69532006C3DED /* addons */, diff --git a/shaders/sampleRenderer.vert b/shaders/sampleRenderer.vert index 1ed6978..c516483 100755 --- a/shaders/sampleRenderer.vert +++ b/shaders/sampleRenderer.vert @@ -8,7 +8,7 @@ uniform vec4 colors[6]; uniform float colors_pos[6]; uniform float resolution; uniform float meshDepth; -uniform bool enableSmoothing; +uniform int interpolationMode; uniform bool enableHeatMap; uniform vec3 minParam; uniform vec3 maxParam; @@ -173,10 +173,19 @@ void main() int meshWidth = int(float(textureSize(cellMap).x) / resolution); ivec2 meshIdx = ivec2(int(mod(gl_VertexID, meshWidth)), int(gl_VertexID / meshWidth)); vec2 texIdx = vec2(meshIdx.x, meshIdx.y) * resolution; - - vec2 param = - (enableSmoothing) ? bicubic(texIdx, componentColor, componentHeight) : - bilinear(texIdx, componentColor, componentHeight); + + vec2 param; + switch (interpolationMode) { + case 2: + param = bicubic(texIdx, componentColor, componentHeight); + break; + case 1: + param = bilinear(texIdx, componentColor, componentHeight); + break; + default: + param = getTextureValue(texIdx, componentColor, componentHeight); + break; + } vec4 vPos = position; vPos.z = param[1] * meshDepth; diff --git a/src/ofxRDSampleRenderer.cpp b/src/ofxRDSampleRenderer.cpp index 0f4158a..e45a206 100644 --- a/src/ofxRDSampleRenderer.cpp +++ b/src/ofxRDSampleRenderer.cpp @@ -2,7 +2,7 @@ ofxRDSampleRenderer::ofxRDSampleRenderer() : updatedOptions(true) { options.add(ofParameter().set("meshDepth", 100.0f, 0.0f, 400.f)); - options.add(enableBicubic.set("enableBicubic", false)); + options.add(ofParameter().set("interpolationMode", 1, 0, 2)); options.add(enableHeatMap.set("enableHeatMap", true)); auto colorArray = new ofVec4f[6] { @@ -95,7 +95,6 @@ void ofxRDSampleRenderer::draw(){ render.setUniformTexture("cellMap", mapTexture, 0); if (updatedOptions) { - render.setUniform1i(enableBicubic.getName(), enableBicubic); render.setUniform1i(enableHeatMap.getName(), enableHeatMap); render.setUniforms(options); updatedOptions = false; diff --git a/src/ofxRDSampleRenderer.h b/src/ofxRDSampleRenderer.h index 5e6a248..25f6374 100644 --- a/src/ofxRDSampleRenderer.h +++ b/src/ofxRDSampleRenderer.h @@ -11,7 +11,6 @@ class ofxRDSampleRenderer{ float resolution; float colors[24]; float colors_pos[6]; - ofParameter enableBicubic; ofParameter enableHeatMap; ofParameterGroup options; bool updatedOptions;