add DrawTexture() and DrawBox() functions

This commit is contained in:
Colin McMillen 2023-07-06 21:26:50 -04:00
parent 4e0a15e3a0
commit 536abbf2b4

View File

@ -189,7 +189,7 @@ public class Game : GameWindow {
public Game(GameWindowSettings gwSettings, NativeWindowSettings nwSettings) : base(gwSettings, nwSettings) { }
static CameraInfo activeCamera = CameraInfo.NIKON_D7000;
static int thumbnailHeight = 100;
static int thumbnailHeight = 150;
static int thumbnailWidth = (int) 1.0 * thumbnailHeight * activeCamera.Resolution.X / activeCamera.Resolution.Y;
static Texture TEXTURE_WHITE;
@ -294,34 +294,44 @@ public class Game : GameWindow {
protected override void OnRenderFrame(FrameEventArgs e) {
base.OnRenderFrame(e);
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
GL.ActiveTexture(TextureUnit.Texture0);
int borderWidth = 2;
int borderWidth = 0;
int maxPhotoWidth = windowWidth - thumbnailWidth - borderWidth;
Texture active = textures[textureIndex];
// TODO: handle the case where we need to letterbox vertically instead.
// TODO: pull these geometry calculations out into an object.
int photoWidth = (int) (1.0 * windowHeight / active.Height * active.Width);
int letterboxWidth = (maxPhotoWidth - photoWidth) / 2;
SetVertices(letterboxWidth, 0, photoWidth, windowHeight);
GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.DynamicDraw);
GL.ActiveTexture(TextureUnit.Texture0);
GL.BindTexture(TextureTarget.Texture2D, active.Handle);
GL.DrawElements(PrimitiveType.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0);
DrawTexture(active, letterboxWidth, 0, photoWidth, windowHeight);
for (int i = 0; i < textures.Count; i++) {
SetVertices(windowWidth - thumbnailWidth, i * thumbnailHeight, thumbnailWidth, thumbnailHeight - borderWidth);
GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject);
GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.DynamicDraw);
GL.ActiveTexture(TextureUnit.Texture0);
GL.BindTexture(TextureTarget.Texture2D, textures[i].Handle);
GL.DrawElements(PrimitiveType.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0);
// FIXME: make this a rect or something
DrawTexture(textures[i], windowWidth - thumbnailWidth, i * thumbnailHeight, thumbnailWidth, thumbnailHeight - borderWidth);
if (i == textureIndex) {
DrawBox(windowWidth - thumbnailWidth, i * thumbnailHeight, thumbnailWidth, thumbnailHeight - borderWidth, 2);
}
}
SwapBuffers();
}
void DrawTexture(Texture texture, int left, int top, int width, int height) {
SetVertices(left, top, width, height);
GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.DynamicDraw);
GL.BindTexture(TextureTarget.Texture2D, texture.Handle);
GL.DrawElements(PrimitiveType.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0);
}
void DrawBox(int left, int top, int width, int height, int thickness) {
DrawTexture(TEXTURE_WHITE, left, top, width, thickness);
DrawTexture(TEXTURE_WHITE, left, top, thickness, height);
DrawTexture(TEXTURE_WHITE, left, top + height - thickness, width, thickness);
DrawTexture(TEXTURE_WHITE, left + width - thickness, top, thickness, height);
}
protected override void OnResize(ResizeEventArgs e) {
base.OnResize(e);
Console.WriteLine($"OnResize: {e.Width}x{e.Height}");