Skip to content

Commit 3311e6e

Browse files
committed
split up fragment shader - finished main TODOs
1 parent 120c7fb commit 3311e6e

File tree

10 files changed

+51
-50
lines changed

10 files changed

+51
-50
lines changed

simulation/TODO.md

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,9 @@
1414
- Make sure that it is properly distinguished between the time step of switching files (a day), and a simulation time step (dt)
1515
- Make sure that it is clear that fluid simulation and particle simulation is the same thing as we are simulating the fluid as particles (probs. in the intro)
1616

17-
### When sending the thesis draft mention:
18-
- Found the inline feedback for the research proposal draft, did not know that was a thing ... implemented those changes
1917

2018
## Android side
2119
- Delete unused project files / folders
22-
- Fixed the occasional glitch during user interactions
23-
- Split up the fragment shader
2420

2521
## Native side
2622
- Delete unused functions
@@ -48,11 +44,7 @@ Note that the dense grid is pretty much an issue just for the compute shaders, f
4844
- Try better rendering methods when exatra time, e.g. thesis draft is being review ->volume rendering / volume ray casting, find new ones
4945
- Mention the different (attempted) different ways of rendering stuff - so far: LIC
5046
- Make a measurement for the "new bottleneck" see how the performance changes with a more random distrib. (either perlin, or bigger double-gyre)
51-
- Make proper APKs for a) reduced, b) full version of the app
52-
- Make measurements for (very) small numbers of particles -> see if v-sync doesn't make it pointless
53-
- Question: Since a lot of the app is asynchronous, for compute shaders especially cause lot of GPU time, is it okay to just limit (unrelated) background processes and measure the wall-clock time?
54-
- Ideally measure it all separately, and report that way.
55-
- Measure, GPU compute, GPU render, GPU buffer load, CPU file load, CPU time ... all separately, as any could potentially become bottleneck
47+
5648
- Put detailed lib versions in the readme.md
5749
- Put library credit in the readme.md
5850
- Add apk as a github release

simulation/app/src/main/assets/fragment_shader.glsl

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#version 320 es
2+
precision mediump float;
3+
4+
flat in vec4 col;
5+
out vec4 fragColor;
6+
7+
void main() {
8+
fragColor = col;
9+
}
10+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#version 320 es
2+
precision mediump float;
3+
4+
flat in vec4 col;
5+
out vec4 fragColor;
6+
7+
void main() {
8+
vec2 center = vec2(0.5, 0.5);
9+
float radius = 0.1;
10+
float dist = length(gl_PointCoord - center);
11+
12+
if (dist > radius) {
13+
discard;
14+
} else {
15+
fragColor = vec4(1.0, 0, 0, 1.0); // Red
16+
}
17+
}
18+

simulation/app/src/main/cpp/include/mainview.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,6 @@ class Mainview {
157157
NavigCube *navigCube;
158158

159159
// Uniforms
160-
GLint isPointLocationLines;
161-
GLint isPointLocationPoints;
162160
GLint pointSize;
163161
GLint modelLocationLines;
164162
GLint viewLocationLines;

simulation/app/src/main/cpp/include/physics.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ class Physics {
2525
/**
2626
* @enum Model
2727
* @brief The model of physics for the particles.
28+
*
29+
* @note particles_simple and particles are not compatible with the compute shader implementation
2830
*/
2931
enum class Model {
3032
particles_simple, // drag force
3133
particles, // centripetal, buoyant, drag, gravity, drag, and added mass force
32-
particles_advection, // Advection equation for particles - default
34+
particles_advection, // Advection equation for tracer particles - default
3335
};
3436

3537
/**

simulation/app/src/main/cpp/include/shaderManager.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ class ShaderManager {
126126

127127
// Shader sources
128128
std::string vertexShaderSource;
129-
std::string fragmentShaderSource;
129+
std::string fragmentShaderLinesSource;
130+
std::string fragmentShaderPointsSource;
130131
std::string geometryLinesShaderSource;
131132
std::string geometryPointsShaderSource;
132133
std::string computeShaderSource;
@@ -135,7 +136,8 @@ class ShaderManager {
135136

136137
// Shaders
137138
GLuint vertexShader;
138-
GLuint fragmentShader;
139+
GLuint fragmentShaderLines;
140+
GLuint fragmentShaderPoints;
139141
GLuint geometryLinesShader;
140142
GLuint geometryPointsShader;
141143
GLuint computeShader;

simulation/app/src/main/cpp/src/mainview.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,11 @@ void Mainview::setFrame() {
3737

3838

3939
void Mainview::loadUniforms() {
40-
this->isPointLocationPoints = glGetUniformLocation(shaderManager->shaderPointsProgram, "uIsPoint");
4140
this->pointSize = glGetUniformLocation(shaderManager->shaderPointsProgram, "uPointSize");
4241
this->modelLocationPoints = glGetUniformLocation(shaderManager->shaderPointsProgram, "modelTransform");
4342
this->viewLocationPoints = glGetUniformLocation(shaderManager->shaderPointsProgram, "viewTransform");
4443
this->projectionLocationPoints = glGetUniformLocation(shaderManager->shaderPointsProgram, "projectionTransform");
4544

46-
this->isPointLocationLines = glGetUniformLocation(shaderManager->shaderLinesProgram, "uIsPoint");
4745
this->modelLocationLines = glGetUniformLocation(shaderManager->shaderLinesProgram, "modelTransform");
4846
this->projectionLocationLines = glGetUniformLocation(shaderManager->shaderLinesProgram, "projectionTransform");
4947
this->viewLocationLines = glGetUniformLocation(shaderManager->shaderLinesProgram, "viewTransform");
@@ -95,7 +93,6 @@ void Mainview::drawParticles(int size) {
9593
glBindVertexArray(particleVAO);
9694

9795
// Load uniforms
98-
glUniform1i(isPointLocationPoints, 1);
9996
glUniform1f(pointSize, 15.0f);
10097
glUniformMatrix4fv(modelLocationPoints, 1, GL_TRUE, &(transforms->modelTransform)[0][0]);
10198
glUniformMatrix4fv(projectionLocationPoints, 1, GL_TRUE, &(transforms->projectionTransform)[0][0]);
@@ -142,7 +139,6 @@ void Mainview::drawVectorField(int size) {
142139
glBindVertexArray(vectorFieldVAO);
143140

144141
// Load uniforms
145-
glUniform1i(isPointLocationLines, 0);
146142
glUniformMatrix4fv(modelLocationLines, 1, GL_TRUE, &(transforms->modelTransform)[0][0]);
147143
glUniformMatrix4fv(projectionLocationLines, 1, GL_TRUE, &transforms->projectionTransform[0][0]);
148144
glUniformMatrix4fv(viewLocationLines, 1, GL_TRUE, &transforms->viewTransform[0][0]);

simulation/app/src/main/cpp/src/native-lib.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ void init(std::string packageName) {
105105
//////////////////////// Double gyre ////////////////////////
106106
globalAppState->vectorFieldHandler = new VectorFieldHandler(15, 15, 5);
107107
globalAppState->physics = new Physics(*(globalAppState->vectorFieldHandler), Physics::Model::particles_advection, 0.1f);
108-
globalAppState->particlesHandler = new ParticlesHandler(ParticlesHandler::InitType::two_lines , *(globalAppState->physics), NUM_PARTICLES);
108+
globalAppState->particlesHandler = new ParticlesHandler(ParticlesHandler::InitType::line , *(globalAppState->physics), NUM_PARTICLES);
109109
/////////////////////////////////////////////////////////////
110110

111111
//////////////////////// Perlin noise ////////////////////////

simulation/app/src/main/cpp/src/shaderManager.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ void ShaderManager::compileVertexShaders() {
4747
}
4848

4949
void ShaderManager::compileFragmentShaders() {
50-
compileShaderHelper(fragmentShader, fragmentShaderSource, GL_FRAGMENT_SHADER);
50+
compileShaderHelper(fragmentShaderLines, fragmentShaderLinesSource, GL_FRAGMENT_SHADER);
51+
// LOGI("shaderManager", "fragmentShaderPointsSource: %s", fragmentShaderPointsSource.c_str());
52+
compileShaderHelper(fragmentShaderPoints, fragmentShaderPointsSource, GL_FRAGMENT_SHADER);
5153
compileShaderHelper(uiFragmentShader, uiFragmentShaderSource, GL_FRAGMENT_SHADER);
5254
}
5355

@@ -60,6 +62,7 @@ void ShaderManager::compileComputeShaders() {
6062
compileShaderHelper(computeShader, computeShaderSource, GL_COMPUTE_SHADER);
6163
}
6264

65+
// Helper function to create a shader program
6366
void createProgramHelper(GLuint& program, GLuint shaders[]) {
6467
GLint linkSuccess = 0;
6568
GLchar infoLog[512];
@@ -84,11 +87,11 @@ void createProgramHelper(GLuint& program, GLuint shaders[]) {
8487
}
8588

8689
void ShaderManager::createLinesProgram() {
87-
createProgramHelper(shaderLinesProgram, (GLuint[]) {vertexShader, geometryLinesShader, fragmentShader, 0});
90+
createProgramHelper(shaderLinesProgram, (GLuint[]) {vertexShader, geometryLinesShader, fragmentShaderLines, 0});
8891
}
8992

9093
void ShaderManager::createPointsProgram() {
91-
createProgramHelper(shaderPointsProgram, (GLuint[]) {vertexShader, geometryPointsShader, fragmentShader, 0});
94+
createProgramHelper(shaderPointsProgram, (GLuint[]) {vertexShader, geometryPointsShader, fragmentShaderPoints, 0});
9295
}
9396

9497
void ShaderManager::createComputeProgram() {
@@ -102,11 +105,11 @@ void ShaderManager::createUIProgram() {
102105
void ShaderManager::detachShaders() {
103106
glDetachShader(shaderLinesProgram, vertexShader);
104107
glDetachShader(shaderLinesProgram, geometryLinesShader);
105-
glDetachShader(shaderLinesProgram, fragmentShader);
108+
glDetachShader(shaderLinesProgram, fragmentShaderLines);
106109

107110
glDetachShader(shaderPointsProgram, vertexShader);
108111
glDetachShader(shaderPointsProgram, geometryPointsShader);
109-
glDetachShader(shaderPointsProgram, fragmentShader);
112+
glDetachShader(shaderPointsProgram, fragmentShaderPoints);
110113

111114
glDetachShader(shaderComputeProgram, computeShader);
112115

@@ -119,7 +122,8 @@ void ShaderManager::deleteShaders() {
119122
glDeleteShader(vertexShader);
120123
glDeleteShader(geometryPointsShader);
121124
glDeleteShader(geometryLinesShader);
122-
glDeleteShader(fragmentShader);
125+
glDeleteShader(fragmentShaderLines);
126+
glDeleteShader(fragmentShaderPoints);
123127
glDeleteShader(computeShader);
124128
glDeleteShader(uiVertexShader);
125129
glDeleteShader(uiFragmentShader);
@@ -144,7 +148,8 @@ void ShaderManager::compileAndLinkShaders() {
144148

145149
void ShaderManager::loadShaderSources() {
146150
vertexShaderSource = loadShaderFile("vertex_shader.glsl");
147-
fragmentShaderSource = loadShaderFile("fragment_shader.glsl");
151+
fragmentShaderLinesSource = loadShaderFile("fragment_shader_lines.glsl");
152+
fragmentShaderPointsSource = loadShaderFile("fragment_shader_points.glsl");
148153
geometryLinesShaderSource = loadShaderFile("geometry_lines_shader.glsl");
149154
geometryPointsShaderSource = loadShaderFile("geometry_points_shader.glsl");
150155
computeShaderSource = loadShaderFile("compute_shader.glsl");
@@ -180,7 +185,8 @@ void ShaderManager::checkShaderProgramLinkStatus() {
180185

181186
void ShaderManager::cleanShaderSources() {
182187
vertexShaderSource.clear();
183-
fragmentShaderSource.clear();
188+
fragmentShaderLinesSource.clear();
189+
fragmentShaderPointsSource.clear();
184190
geometryLinesShaderSource.clear();
185191
geometryPointsShaderSource.clear();
186192
computeShaderSource.clear();

0 commit comments

Comments
 (0)