From 7a843386874e44959790be1ce0191722441af5b3 Mon Sep 17 00:00:00 2001 From: James Orson Date: Wed, 19 Jun 2024 08:37:51 -0700 Subject: [PATCH] Add issue markdown files. Prepare for texture feature branch. Small cleanup. (#44) --- .github/workflows/build.yaml | 1 - CONTRIBUTING.md | 11 ++++++- examples/Playground/Program.fs | 18 +---------- .../Resources/Textures/hello_world.bmp | Bin 0 -> 921656 bytes issues/closed.md | 5 +++ issues/in-progress.md | 29 ++++++++++++++++++ issues/open.md | 3 ++ 7 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 examples/Playground/Resources/Textures/hello_world.bmp create mode 100644 issues/closed.md create mode 100644 issues/in-progress.md create mode 100644 issues/open.md diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 50ebff8..9cb608a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -14,7 +14,6 @@ jobs: runs-on: ${{ matrix.os }} strategy: - max-parallel: 1 matrix: configuration: - Debug diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d130bea..24e56d4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,13 @@ # Contributing -# Technical Knowledge Prerequisite +## Technical Knowledge Prerequisite + - Understand the [Learn OpenGL tutorial up to and including this lesson](https://learnopengl.com/Getting-started/Hello-Triangle) + +## What can I work on? + +Check out the [open issues file](./issues/open.md) to understand what work needs to be done. + +## Why is there an issue tracker in the codebase and in our SCM solution? + +Github does provide nice linking to issues for PRs and for the community to add issues to the project without having code access. The issues markdown files in the repo should be represented in Github as well, but are usually of higher priority and more immediately available to be worked on. diff --git a/examples/Playground/Program.fs b/examples/Playground/Program.fs index 0a1935d..a13e008 100644 --- a/examples/Playground/Program.fs +++ b/examples/Playground/Program.fs @@ -26,22 +26,8 @@ type GameState = Triangles = Primitives.ShadedObject.Default } let private initHandler (config:Config) = - let state = config.State let fragmentPaths = ["Resources/Shaders/fragment.glsl"] let vertexPaths = ["Resources/Shaders/vertex.glsl"] - let vertices = [| - 0.0f; -0.5f; 0.0f; // shared vertex - // first triangle - -0.9f; -0.5f; 0.0f; // left vertex - -0.45f; 0.5f; 0.0f; // top vertex - // second triangle - 0.9f; -0.5f; 0.0f; // right vertex - 0.45f; 0.5f; 0.0f; // top vertex - |] - let indices = [| - 0u; 1u; 2u; // first triangle vertex order as array indices - 0u; 3u; 4u; // second triangle vertex order as array indices - |] let transform = { Transform.Default() with Scale = (1.0f, 1.0f, 1.0f) @@ -49,9 +35,7 @@ let private initHandler (config:Config) = match Primitives.ShadedObject.CreateQuad vertexPaths fragmentPaths transform 1.8f 1.0f with | Some primitive -> { config with - State = - { GameState.Default with - Triangles = primitive }} + State.Triangles = primitive } | None -> Logging.fail "Failed to create initial game state" config diff --git a/examples/Playground/Resources/Textures/hello_world.bmp b/examples/Playground/Resources/Textures/hello_world.bmp new file mode 100644 index 0000000000000000000000000000000000000000..def253177b94c59f4b0233e17a714fabea66f986 GIT binary patch literal 921656 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 j2tWV=5P$##AOHafKmY;|fB*y_009U<00J9