Skip to content

Commit 77431ea

Browse files
committed
Discarded ObservableImage, using Bitmap buffer instead
1 parent 7e90aae commit 77431ea

File tree

3 files changed

+26
-118
lines changed

3 files changed

+26
-118
lines changed

Engine/ObservableImage.cs

Lines changed: 0 additions & 97 deletions
This file was deleted.

Engine/Raytracer.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ private struct RayTraversalResult
2525
public delegate void UpdateCallback(int percent);
2626

2727
public UpdateCallback? Callback { get; set; } = null;
28+
29+
// The buffer we're rendering to
30+
public Bitmap? Buffer { get; set; } = null;
2831

2932
public Scene? Scene { get; set; } = null;
30-
private ObservableImage? mObservableImage = null;
3133
private Camera mCamera = new Camera();
3234
private Intersector mIntersector = new Intersector();
3335

@@ -164,10 +166,11 @@ private Matrix4 imageToViewportTransform(int imgWidth, int imgHeight, Camera cam
164166

165167
public void Render()
166168
{
167-
if (mObservableImage == null) return;
169+
if (Buffer == null)
170+
return;
168171

169-
int imgWidth = mObservableImage.Width;
170-
int imgHeight = mObservableImage.Height;
172+
int imgWidth = Buffer.Width;
173+
int imgHeight = Buffer.Height;
171174
long total = imgWidth * imgHeight;
172175
if (total <= 0) return;
173176

@@ -176,8 +179,7 @@ public void Render()
176179
long count = 0;
177180

178181
Matrix4 i2v = imageToViewportTransform(imgWidth, imgHeight, mCamera);
179-
mObservableImage.Clear();
180-
182+
181183
for (int p = 0; !mStopRender && p < imgWidth; ++p)
182184
{
183185
for (int q = 0; !mStopRender && q < imgHeight; ++q)
@@ -192,7 +194,12 @@ public void Render()
192194
Ray ray = new Ray(mCamera.Eye, dir);
193195

194196
Color c = trace(ray, 1);
195-
mObservableImage.SetRGB(p, q, c);
197+
198+
Buffer.SetPixel(p, q, System.Drawing.Color.FromArgb(
199+
(int)Math.Round(c.r * 255),
200+
(int)Math.Round(c.g * 255),
201+
(int)Math.Round(c.b * 255)
202+
));
196203

197204
++count;
198205
}
@@ -202,8 +209,8 @@ public void Render()
202209
mStopRender = false;
203210
}
204211

205-
public void setImage(ObservableImage img) => mObservableImage = img;
206212
public Camera getCamera() => mCamera;
213+
207214
public void setCamera(Camera camera) => mCamera = camera;
208215
}
209216
}

MainForm.cs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public class SettingsInfo
2020
public float height = 0;
2121
}
2222

23+
private Bitmap? mBuffer = null;
24+
2325
// stores created editors
2426
private EditorCache mCache = new();
2527

@@ -29,11 +31,14 @@ public class SettingsInfo
2931
public async Task Render()
3032
{
3133
await Task.Run(() =>
32-
{
33-
mImage.Clear(Color.black);
34+
{
3435
mRaytracer.Render();
35-
pictureRender.Image = mImage.GetBitmap();
3636

37+
pictureRender.BeginInvoke((System.Windows.Forms.MethodInvoker)(() =>
38+
{
39+
pictureRender.Image = mBuffer;
40+
pictureRender.Refresh();
41+
}));
3742
btnRender.BeginInvoke((System.Windows.Forms.MethodInvoker)(() => btnRender.Enabled = true));
3843

3944
});
@@ -45,7 +50,7 @@ public void UpdateRenderProgress(int percent)
4550
progressRender.Invoke(m);
4651
}
4752

48-
private ObservableImage mImage = new(800, 600);
53+
4954

5055
private void BuildScene()
5156
{
@@ -103,11 +108,7 @@ public MainForm()
103108

104109
RegisterEditors();
105110

106-
// Trigger Double Buffering
107-
/*typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty
108-
| BindingFlags.Instance | BindingFlags.NonPublic, null,
109-
panelRender, new object[] { true });*/
110-
// Storage storage = new SerializationStorage();
111+
mBuffer = new(800, 600);
111112

112113
// setup camera
113114
Camera cam = new()
@@ -122,7 +123,7 @@ public MainForm()
122123
mRaytracer.Scene = mScene;
123124
mRaytracer.Callback = UpdateRenderProgress;
124125
mRaytracer.setCamera(cam);
125-
mRaytracer.setImage(mImage);
126+
mRaytracer.Buffer = mBuffer;
126127
mRaytracer.ApplyGlobalReflection = true;
127128
mRaytracer.ComputeFog = false;
128129
mRaytracer.ComputeAmbient = true;
@@ -132,9 +133,6 @@ public MainForm()
132133

133134
LoadItemsList();
134135

135-
// add mainFrame as an observer for the image
136-
/*image.getSubject().addObserver(mainFrame);*/
137-
138136
editorGObject.ResetState();
139137
editorGObject.Enabled = false;
140138

0 commit comments

Comments
 (0)