aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNicholas Bottone <nick@bottone.io>2023-12-13 01:33:39 -0500
committerNicholas Bottone <nick@bottone.io>2023-12-13 01:37:01 -0500
commit5bea9a70aa43b9a9ccc1c892255890d3df2339b8 (patch)
treefd100f84ff71b174ad38c15a7e6b804dc2e2651b /src
parent086dff023dc8a13d5e3a8867a845d6244409c8ef (diff)
Add image saving functionality
Diffstat (limited to 'src')
-rw-r--r--src/raytracer/raytracer.cpp17
-rw-r--r--src/raytracer/raytracer.h1
-rw-r--r--src/settings.h3
3 files changed, 20 insertions, 1 deletions
diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp
index d9d467d..66a6f73 100644
--- a/src/raytracer/raytracer.cpp
+++ b/src/raytracer/raytracer.cpp
@@ -68,7 +68,17 @@ void RayTracer::render(RGBA *imageData, const RayTraceScene &scene) {
}
}
}
- settings.rotation += 0.5f;
+
+ if (settings.bulkOutputFilePath.size() > 0) { // means we are doing bulk rendering
+ // save the image to the bulk directory
+ std::string filePath = settings.bulkOutputFilePath + QDir::separator().toLatin1() + std::to_string(settings.currentTime) + ".png";
+ saveViewportImage(filePath);
+ if (settings.currentTime < settings.maxTime) { // still more to render
+ // render the next frame
+ settings.currentTime++;
+ emit settingsChanged(m_imageLabel); // emit to allow the UI to update then render the next frame
+ }
+ }
}
@@ -197,6 +207,7 @@ void RayTracer::settingsChanged(QLabel* imageLabel) {
QImage image = QImage(576, 432, QImage::Format_RGBX8888);
image.fill(Qt::black);
RGBA *data = reinterpret_cast<RGBA *>(image.bits());
+ m_imageData = data;
imageLabel->setPixmap(QPixmap::fromImage(image));
return;
}
@@ -288,3 +299,7 @@ void RayTracer::keyReleaseEvent(QKeyEvent *event) {
m_keyMap[Qt::Key(event->key())] = false;
}
+void RayTracer::saveViewportImage(std::string filePath) {
+ QImage image = QImage((uchar *) m_imageData, 576, 432, QImage::Format_RGBX8888);
+ image.save(QString::fromStdString(filePath));
+}
diff --git a/src/raytracer/raytracer.h b/src/raytracer/raytracer.h
index cf32a99..da4ec2d 100644
--- a/src/raytracer/raytracer.h
+++ b/src/raytracer/raytracer.h
@@ -177,6 +177,7 @@ public:
int m_depth;
QImage m_image;
+ void saveViewportImage(std::string filename);
signals:
void xyRotationChanged(float value);
void xzRotationChanged(float value);
diff --git a/src/settings.h b/src/settings.h
index 1d9e358..0865e44 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -15,6 +15,9 @@ struct Settings {
float rotation = 0.f;
bool negative = false;
float w = 0.f;
+ int currentTime = 0;
+ int maxTime = 0;
+ std::string bulkOutputFilePath;
};