aboutsummaryrefslogtreecommitdiff
path: root/BuddhaTest
diff options
context:
space:
mode:
Diffstat (limited to 'BuddhaTest')
-rw-r--r--BuddhaTest/Shaders/BuddhaCompute.glsl10
-rw-r--r--BuddhaTest/src/BuddhaTest.cpp27
2 files changed, 32 insertions, 5 deletions
diff --git a/BuddhaTest/Shaders/BuddhaCompute.glsl b/BuddhaTest/Shaders/BuddhaCompute.glsl
index 63b9000..83e0c30 100644
--- a/BuddhaTest/Shaders/BuddhaCompute.glsl
+++ b/BuddhaTest/Shaders/BuddhaCompute.glsl
@@ -41,7 +41,7 @@ uniform uvec4 orbitLength;
uniform uint iterationsPerDispatch;
uniform uint totalIterations;
-uniform vec4 imageRange = vec4(-2.0,-1.125,2.0,1.125);
+uniform vec4 effectiveImageRange = vec4(-2.0,-1.125,2.0,1.125);
/** Data stored in shared memory. Used to reduce register pressure. Read at beginning from buffer (if needed), written back at end. */
struct workerState
@@ -96,7 +96,7 @@ void addToColorOfCell(uvec2 cell, uvec3 toAdd)
uvec2 getCell(vec2 complex)
{
- vec2 uv = clamp(vec2((complex.x-imageRange[0])/(imageRange[2]-imageRange[0]), (complex.y-imageRange[1])/(imageRange[3]-imageRange[1])),vec2(0.0),vec2(1.0));
+ vec2 uv = clamp(vec2((complex.x-effectiveImageRange[0])/(effectiveImageRange[2]-effectiveImageRange[0]), (complex.y-effectiveImageRange[1])/(effectiveImageRange[3]-effectiveImageRange[1])),vec2(0.0),vec2(1.0));
return uvec2(width * uv.x, height * uv.y);
}
@@ -262,9 +262,9 @@ bool drawOrbit(in vec2 offset, in uint totalIterations, in uint scale, inout vec
doneIterations = i+1;
return true; //done.
}
- if(lastVal.x > imageRange[0] && lastVal.x < imageRange[2] && lastVal.y > imageRange[1] && lastVal.y < imageRange[3])
+ if(lastVal.x > effectiveImageRange[0] && lastVal.x < effectiveImageRange[2] && abs(lastVal.y) > effectiveImageRange[1] && abs(lastVal.y) < effectiveImageRange[3])
{
- addToColorAt(lastVal,scale*uvec3(i < orbitLength.r,i < orbitLength.g,i < orbitLength.b));
+ addToColorAt(vec2(lastVal.x,abs(lastVal.y)),scale*uvec3(i < orbitLength.r,i < orbitLength.g,i < orbitLength.b));
addToImportanceMap(offset, scale);
}
}
@@ -284,7 +284,7 @@ vec2 getCurrentOrbitOffset(const uint orbitNumber, const uint totalWorkers, cons
vec2 random = vec2(x,y);
scale = 1;
- return vec2(random.x * 4-2,random.y*4-2);
+ return vec2(random.x * 4-2,random.y*2);
}
void initImportanceMapCache()
diff --git a/BuddhaTest/src/BuddhaTest.cpp b/BuddhaTest/src/BuddhaTest.cpp
index cc6bc83..bbbd915 100644
--- a/BuddhaTest/src/BuddhaTest.cpp
+++ b/BuddhaTest/src/BuddhaTest.cpp
@@ -6,6 +6,7 @@
#include <chrono>
#include <iomanip>
#include <algorithm>
+#include <cmath>
void error_callback(int error, const char* description)
{
@@ -26,6 +27,17 @@ int main(int argc, char * argv[])
return 2;
}
+
+
+ float imageRangeMinX = -2.0f;
+ float imageRangeMinY = -1.125f;
+ float imageRangeMaxX = 2.0f;
+ float imageRangeMaxY = 1.125f;
+
+
+
+
+
GLFWwindow* window;
/* Initialize the library */
@@ -158,9 +170,24 @@ int main(int argc, char * argv[])
GLint widthUniformComputeHandle = glGetUniformLocation(ComputeShader, "width");
GLint heightUniformComputeHandle = glGetUniformLocation(ComputeShader, "height");
GLint iterationsPerDispatchHandle = glGetUniformLocation(ComputeShader, "iterationsPerDispatch");
+ GLint imageRangeComputeHandle = glGetUniformLocation(ComputeShader,"effectiveImageRange");
glUniform4ui(orbitLengthUniformHandle,settings.orbitLengthRed,settings.orbitLengthGreen,settings.orbitLengthBlue,settings.orbitLengthSkip);
glUniform1ui(widthUniformComputeHandle, settings.imageWidth);
glUniform1ui(heightUniformComputeHandle, settings.imageHeight);
+ float effectiveImageRange[4];
+ effectiveImageRange[0] = imageRangeMinX;
+ effectiveImageRange[2] = imageRangeMaxX;
+ if(imageRangeMinY*imageRangeMaxY < 0)
+ {
+ effectiveImageRange[1] = std::max(imageRangeMinY,-imageRangeMaxY);
+ effectiveImageRange[3] = std::max(-imageRangeMinY,imageRangeMaxY);
+ }
+ else
+ {
+ effectiveImageRange[1] = std::min(std::abs(imageRangeMinY),std::abs(imageRangeMaxY));
+ effectiveImageRange[3] = std::max(std::abs(imageRangeMinY),std::abs(imageRangeMaxY));
+ }
+ glUniform4f(imageRangeComputeHandle,effectiveImageRange[0],effectiveImageRange[1],effectiveImageRange[2],effectiveImageRange[3]);
const uint32_t maxOrbitlength = std::max(std::max(settings.orbitLengthBlue,settings.orbitLengthGreen),settings.orbitLengthRed);
glUniform1ui(totalIterationsUniformHandle, maxOrbitlength);