add new Photo class

This commit is contained in:
Colin McMillen 2023-07-16 19:23:03 -04:00
parent 8600a7e490
commit 75e186c392

View File

@ -138,6 +138,15 @@ void main() {
} }
public class Photo {
public Texture Texture;
public Photo(string filename) {
Image<Rgba32> image = Image.Load<Rgba32>(filename);
Texture = new Texture(image);
}
}
public class Texture : IDisposable { public class Texture : IDisposable {
public int Handle; public int Handle;
public Vector2i Size; public Vector2i Size;
@ -247,8 +256,8 @@ public class Game : GameWindow {
int VertexBufferObject; int VertexBufferObject;
int ElementBufferObject; int ElementBufferObject;
int VertexArrayObject; int VertexArrayObject;
List<Texture> textures = new(); List<Photo> photos = new();
int textureIndex = 0; int textureIndex = 0; // FIXME: rename to photoIndex
Shader shader = new(); Shader shader = new();
Matrix4 projection; Matrix4 projection;
@ -268,7 +277,7 @@ public class Game : GameWindow {
for (int i = 0; i < geometry.ThumbnailBoxes.Count; i++) { for (int i = 0; i < geometry.ThumbnailBoxes.Count; i++) {
Box2i box = geometry.ThumbnailBoxes[i]; Box2i box = geometry.ThumbnailBoxes[i];
if (box.ContainsInclusive((Vector2i) MouseState.Position)) { if (box.ContainsInclusive((Vector2i) MouseState.Position)) {
if (0 <= i && i < textures.Count) { if (0 <= i && i < photos.Count) {
textureIndex = i; textureIndex = i;
} }
} }
@ -287,7 +296,7 @@ public class Game : GameWindow {
// FIXME: make a proper Model class for tracking the state of the controls? // FIXME: make a proper Model class for tracking the state of the controls?
if (input.IsKeyPressed(Keys.Down) || now > downTimer) { if (input.IsKeyPressed(Keys.Down) || now > downTimer) {
if (textureIndex < textures.Count - 1) { if (textureIndex < photos.Count - 1) {
downTimer = now + 10000 * 200; downTimer = now + 10000 * 200;
textureIndex++; textureIndex++;
} }
@ -338,9 +347,8 @@ public class Game : GameWindow {
string[] files = Directory.GetFiles(@"c:\users\colin\pictures\photos\2023\07\14\"); string[] files = Directory.GetFiles(@"c:\users\colin\pictures\photos\2023\07\14\");
foreach (string file in files) { foreach (string file in files) {
if (file.ToLower().EndsWith(".jpg")) { if (file.ToLower().EndsWith(".jpg")) {
Image<Rgba32> image = Image.Load<Rgba32>(file); photos.Add(new Photo(file));
textures.Add(new Texture(image)); if (photos.Count > 10) {
if (textures.Count > 10) {
break; break;
} }
} }
@ -357,7 +365,7 @@ public class Game : GameWindow {
GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject); GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
GL.ActiveTexture(TextureUnit.Texture0); GL.ActiveTexture(TextureUnit.Texture0);
Texture active = textures[textureIndex]; Texture active = photos[textureIndex].Texture;
// FIXME: make a function for scaling & centering one box on another. // FIXME: make a function for scaling & centering one box on another.
float scaleX = 1f * geometry.PhotoBox.Size.X / active.Size.X; float scaleX = 1f * geometry.PhotoBox.Size.X / active.Size.X;
@ -368,9 +376,9 @@ public class Game : GameWindow {
Vector2i center = (Vector2i) geometry.PhotoBox.Center; Vector2i center = (Vector2i) geometry.PhotoBox.Center;
Box2i photoBox = Util.makeBox(center.X - renderSize.X / 2, center.Y - renderSize.Y / 2, renderSize.X, renderSize.Y); Box2i photoBox = Util.makeBox(center.X - renderSize.X / 2, center.Y - renderSize.Y / 2, renderSize.X, renderSize.Y);
DrawTexture(active, photoBox); DrawTexture(active, photoBox);
for (int i = 0; i < textures.Count; i++) { for (int i = 0; i < photos.Count; i++) {
Box2i box = geometry.ThumbnailBoxes[i]; Box2i box = geometry.ThumbnailBoxes[i];
DrawTexture(textures[i], box); DrawTexture(photos[i].Texture, box);
if (i == textureIndex) { if (i == textureIndex) {
DrawBox(box, 5, Color4.Black); DrawBox(box, 5, Color4.Black);
DrawBox(box, 3, Color4.White); DrawBox(box, 3, Color4.White);