Skip to content

Commit ca73f54

Browse files
committed
Added Error catching for not enough memory for massive resolutions
Signed-off-by: Daniel Rosser <[email protected]>
1 parent bd3e658 commit ca73f54

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

wxRaytracer/raytracer/UserInterface/wxraytracer.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,7 +1195,20 @@ void RenderCanvas::renderStart(void)
11951195
renderMode == this->SPIRAL_IN_AND_OUT2 )
11961196
{
11971197
vector<Pixel> toRender;
1198-
toRender.reserve(pixelsToRender);
1198+
try
1199+
{
1200+
toRender.reserve(pixelsToRender);
1201+
}
1202+
catch(...)
1203+
{
1204+
unsigned int size = sizeof(Pixel((unsigned) w->vp.hres/2,(unsigned) w->vp.vres/2));
1205+
unsigned long memory = ((pixelsToRender * size) * 0.0009765625); // KB
1206+
memory = memory * 0.0009765625; // MB
1207+
1208+
wxMessageBox(wxT(wxString::Format(wxT("Error: Not enough memory space! Need: %ld MB free RAM"), memory)) );
1209+
wxMessageBox(wxT("Resolution may be too great"));
1210+
throw 1;
1211+
}
11991212

12001213
// Generate Points for Spiral
12011214
if(renderMode == this->SPIRAL_IN || renderMode == this->SPIRAL_OUT || renderMode == SPIRAL_IN_AND_OUT || renderMode == SPIRAL_IN_AND_OUT2)
@@ -1676,7 +1689,7 @@ void RenderCanvas::OnQuit()
16761689
{ wxCriticalSectionLocker enter(*threadsCS[id]);
16771690
if((*iter) != NULL)
16781691
{ if ((*iter)->Delete() != wxTHREAD_NO_ERROR )
1679-
wxLogError("Can't delete the thread!");
1692+
wxLogError((wxChar*)"Can't delete the thread!");
16801693
}
16811694
}
16821695
}

wxRaytracer/raytracer/Utilities/MultiThread.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ struct RenderedInt {
3030
int x, y, r, g, b;
3131
} ;
3232

33-
class Pixel
33+
struct Pixel
3434
{
3535
public:
36-
Pixel(int xi, int yi) : x(xi), y(yi)
36+
Pixel(unsigned short xi, unsigned short yi) : x(xi), y(yi)
3737
{ }
3838

39-
int x, y;
39+
unsigned short x, y;
4040
};
4141

4242

wxRaytracer/raytracer/build/BuildShadedObjects.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ World::build(void) {
1212
int num_samples = 1;
1313

1414
// view plane
15-
16-
vp.set_hres(400);
17-
vp.set_vres(400);
15+
int size = 1;
16+
vp.set_hres(400 * size);
17+
vp.set_vres(400 * size);
1818
vp.set_pixel_size(0.5);
1919
vp.set_samples(num_samples);
2020

@@ -36,7 +36,7 @@ World::build(void) {
3636
pinhole_ptr->set_eye(0, 0, 500);
3737
pinhole_ptr->set_lookat(0.0);
3838
pinhole_ptr->set_view_distance(600.0);
39-
// pinhole_ptr->set_zoom(1.0f);
39+
pinhole_ptr->set_zoom(1.0f * size);
4040
pinhole_ptr->compute_uvw();
4141
set_camera(pinhole_ptr);
4242

0 commit comments

Comments
 (0)