=== modified file 'src/scene-conditionals.cpp'
@@ -41,7 +41,7 @@
static const std::string frg_file_epilogue(shader_file_base + "epilogue.frag");
SceneConditionals::SceneConditionals(Canvas &pCanvas) :
- Scene(pCanvas, "conditionals")
+ SceneGrid(pCanvas, "conditionals")
{
mOptions["fragment-steps"] = Scene::Option("fragment-steps", "1",
"The number of computational steps in the fragment shader");
@@ -51,10 +51,6 @@
"The number of computational steps in the vertex shader");
mOptions["vertex-conditionals"] = Scene::Option("vertex-conditionals", "true",
"Whether each computational step includes an if-else clause");
- mOptions["grid-size"] = Scene::Option("grid-size", "32",
- "The number of squares per side of the grid (controls the number of vertices)");
- mOptions["grid-length"] = Scene::Option("grid-length", "5.0",
- "The length of each side of the grid (normalized) (controls the area drawn to)");
}
SceneConditionals::~SceneConditionals()
@@ -115,29 +111,15 @@
return ss.str();
}
-int SceneConditionals::load()
-{
- mRotationSpeed = 36.0f;
- mRunning = false;
-
- return 1;
-}
-
-void SceneConditionals::unload()
-{
-}
-
void SceneConditionals::setup()
{
- Scene::setup();
+ SceneGrid::setup();
/* Parse options */
bool vtx_conditionals = mOptions["vertex-conditionals"].value == "true";
bool frg_conditionals = mOptions["fragment-conditionals"].value == "true";
int vtx_steps = 0;
int frg_steps = 0;
- int grid_size = 0;
- double grid_length = 0;
std::stringstream ss;
@@ -146,12 +128,6 @@
ss.clear();
ss << mOptions["fragment-steps"].value;
ss >> frg_steps;
- ss.clear();
- ss << mOptions["grid-size"].value;
- ss >> grid_size;
- ss.clear();
- ss << mOptions["grid-length"].value;
- ss >> grid_length;
/* Load shaders */
std::string vtx_shader(get_vertex_shader_source(vtx_steps, vtx_conditionals));
@@ -162,76 +138,11 @@
mProgram.start();
- /* Create and configure the grid mesh */
- std::vector<int> vertex_format;
- vertex_format.push_back(3);
- mMesh.set_vertex_format(vertex_format);
-
- /*
- * The spacing needed in order for the area of the requested grid
- * to be the same as the area of a grid with size 32 and spacing 0.02.
- */
- double spacing = grid_length * (1 - 4.38 / 5.0) / (grid_size - 1.0);
-
- mMesh.make_grid(grid_size, grid_size, grid_length, grid_length,
- grid_size > 1 ? spacing : 0);
- mMesh.build_vbo();
-
std::vector<GLint> attrib_locations;
attrib_locations.push_back(mProgram.getAttribIndex("position"));
mMesh.set_attrib_locations(attrib_locations);
- mCurrentFrame = 0;
- mRotation = 0.0f;
mRunning = true;
mStartTime = Scene::get_timestamp_us() / 1000000.0;
mLastUpdateTime = mStartTime;
}
-
-void SceneConditionals::teardown()
-{
- mProgram.stop();
- mProgram.release();
- mMesh.reset();
-
- Scene::teardown();
-}
-
-void SceneConditionals::update()
-{
- double current_time = Scene::get_timestamp_us() / 1000000.0;
- double dt = current_time - mLastUpdateTime;
- double elapsed_time = current_time - mStartTime;
-
- mLastUpdateTime = current_time;
-
- if (elapsed_time >= mDuration) {
- mAverageFPS = mCurrentFrame / elapsed_time;
- mRunning = false;
- }
-
- mRotation += mRotationSpeed * dt;
-
- mCurrentFrame++;
-}
-
-void SceneConditionals::draw()
-{
- // Load the ModelViewProjectionMatrix uniform in the shader
- LibMatrix::Stack4 model_view;
- LibMatrix::mat4 model_view_proj(mCanvas.projection());
-
- model_view.translate(0.0f, 0.0f, -5.0f);
- model_view.rotate(mRotation, 0.0f, 0.0f, 1.0f);
- model_view_proj *= model_view.getCurrent();
-
- mProgram.loadUniformMatrix(model_view_proj, "ModelViewProjectionMatrix");
-
- mMesh.render_vbo();
-}
-
-Scene::ValidationResult
-SceneConditionals::validate()
-{
- return Scene::ValidationUnknown;
-}
=== modified file 'src/scene.h'
@@ -227,26 +227,13 @@
float mRotationSpeed;
};
-class SceneConditionals : public Scene
+class SceneConditionals : public SceneGrid
{
public:
SceneConditionals(Canvas &pCanvas);
- int load();
- void unload();
void setup();
- void teardown();
- void update();
- void draw();
- ValidationResult validate();
~SceneConditionals();
-
-protected:
- Program mProgram;
-
- Mesh mMesh;
- float mRotation;
- float mRotationSpeed;
};
class SceneFunction : public SceneGrid