diff --git a/.gitignore b/.gitignore index 2bce6b8..e540b07 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .vs/ bin/ int/ -*aps \ No newline at end of file +*aps +*res \ No newline at end of file diff --git a/Game/Game.vcxproj b/Game/Game.vcxproj index 622e1f0..de3235c 100644 --- a/Game/Game.vcxproj +++ b/Game/Game.vcxproj @@ -105,6 +105,8 @@ mainCRTStartup libcmt.lib /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) @@ -126,6 +128,8 @@ mainCRTStartup libcmt.lib /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) @@ -143,6 +147,8 @@ mainCRTStartup libcmt.lib /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) @@ -164,6 +170,8 @@ mainCRTStartup libcmt.lib /ignore:4099 %(AdditionalOptions) + $(ProjectDir)dep\;%(AdditionalLibraryDirectories) + nf.res;%(AdditionalDependencies) diff --git a/Game/src/Game.cpp b/Game/src/Game.cpp index 255ec8f..9fdcbee 100644 --- a/Game/src/Game.cpp +++ b/Game/src/Game.cpp @@ -1,11 +1,9 @@ #include "NothinFancy.h" #include "MainState.h" -using namespace nf; - int main(int argc, char* argv[]) { - Config conf = { 1280, 720, false, "Example Game"}; - Application app(conf); + nf::Config conf = { 1280, 720, false, "Example Game"}; + nf::Application app(conf); //app.setWindowIcon(...); // app.setWindowCursor(...); diff --git a/Game/src/MainState.cpp b/Game/src/MainState.cpp index 061c9fe..ce41b83 100644 --- a/Game/src/MainState.cpp +++ b/Game/src/MainState.cpp @@ -1,6 +1,6 @@ #include "MainState.h" -MainState::MainState(Application* app) : +MainState::MainState(nf::Application* app) : Gamestate(app) { } @@ -13,7 +13,7 @@ void MainState::update(double deltaTime) { } void MainState::render() { - static Renderer& renderer = *m_app->getRenderer(); + static nf::Renderer& renderer = *m_app->getRenderer(); } void MainState::onExit() { diff --git a/Game/src/include/MainState.h b/Game/src/include/MainState.h index 83813c3..194391d 100644 --- a/Game/src/include/MainState.h +++ b/Game/src/include/MainState.h @@ -3,7 +3,7 @@ class MainState : public nf::Gamestate { public: - MainState(Application* app); + MainState(nf::Application* app); void onEnter() override; diff --git a/NothinFancy/NothinFancy.rc b/NothinFancy/NothinFancy.rc new file mode 100644 index 0000000..660c9ab --- /dev/null +++ b/NothinFancy/NothinFancy.rc @@ -0,0 +1,71 @@ +// Microsoft Visual C++ generated resource script. +// +#include "src/include/resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "src/include/resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// SHADER +// + +IDR_DEFAULTVERTEX RCDATA "res\\defaultShader\\vertex.shader" + +IDR_DEFAULTFRAGMENT RCDATA "res\\defaultShader\\fragment.shader" + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/NothinFancy/NothinFancy.vcxproj b/NothinFancy/NothinFancy.vcxproj index bd31894..f2c0745 100644 --- a/NothinFancy/NothinFancy.vcxproj +++ b/NothinFancy/NothinFancy.vcxproj @@ -112,6 +112,10 @@ true + + copy "$(IntDir)$(ProjectName).res" "$(SolutionDir)Game\dep\nf.res" + Copying default NF resources + @@ -139,6 +143,10 @@ true + + copy "$(IntDir)$(ProjectName).res" "$(SolutionDir)Game\dep\nf.res" + Copying default NF resources + @@ -162,6 +170,10 @@ true + + copy "$(IntDir)$(ProjectName).res" "$(SolutionDir)Game\dep\nf.res" + Copying default NF resources + @@ -189,12 +201,17 @@ true + + copy "$(IntDir)$(ProjectName).res" "$(SolutionDir)Game\dep\nf.res" + Copying default NF resources + - + + @@ -203,6 +220,7 @@ + @@ -210,6 +228,7 @@ + @@ -220,6 +239,13 @@ + + + + + + + diff --git a/NothinFancy/NothinFancy.vcxproj.filters b/NothinFancy/NothinFancy.vcxproj.filters index 34dc2e7..bdf998b 100644 --- a/NothinFancy/NothinFancy.vcxproj.filters +++ b/NothinFancy/NothinFancy.vcxproj.filters @@ -39,12 +39,15 @@ Source Files - + Source Files Source Files + + Source Files + @@ -86,8 +89,23 @@ Header Files + + Header Files + + + Header Files + + + + + + + + Resource Files + + \ No newline at end of file diff --git a/NothinFancy/src/Renderer/Drawable.cpp b/NothinFancy/src/Renderer/Drawable.cpp deleted file mode 100644 index d2f8260..0000000 --- a/NothinFancy/src/Renderer/Drawable.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "Drawable.h" - -namespace nf { - Drawable::Drawable(const char* vertexShader, const char* fragmentShader, const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount) : - m_shader(vertexShader, fragmentShader), - m_vao(), - m_ib(indexBufferData, indexBufferCount) - { - m_vao.addBuffer(vertexBufferData, vertexBufferSize); - m_vao.push(2); - m_vao.finishBufferLayout(); - } - - unsigned int Drawable::getIndexCount() { - return m_ib.getCount(); - } - - void Drawable::bind() { - m_shader.bind(); - m_vao.bind(); - m_ib.bind(); - } - - Drawable::DrawableType Drawable::identity() { - return DrawableType::NF_NONE; - } - - Drawable::~Drawable() { - - } -} \ No newline at end of file diff --git a/NothinFancy/src/Renderer/Drawable/Drawable.cpp b/NothinFancy/src/Renderer/Drawable/Drawable.cpp new file mode 100644 index 0000000..6b2607c --- /dev/null +++ b/NothinFancy/src/Renderer/Drawable/Drawable.cpp @@ -0,0 +1,27 @@ +#include "Drawable.h" + +#include "Utility.h" + +namespace nf { + Drawable::Drawable() { + Log("Drawable constructor"); + } + + Drawable::DrawableType Drawable::identity() { + return DrawableType::NF_NONE; + } + + void Drawable::bind() { + Error("Tried to bind an invalid object!"); + } + + unsigned int Drawable::getIndexCount() { + return m_ib->getCount(); + } + + Drawable::~Drawable() { + delete m_vao; + delete m_ib; + delete m_shader; + } +} \ No newline at end of file diff --git a/NothinFancy/src/Renderer/Drawable/Model.cpp b/NothinFancy/src/Renderer/Drawable/Model.cpp new file mode 100644 index 0000000..06e8383 --- /dev/null +++ b/NothinFancy/src/Renderer/Drawable/Model.cpp @@ -0,0 +1,44 @@ +#include "Model.h" + +#include "Utility.h" + +namespace nf { + Model::Model() { + } + + void Model::create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount, const char* vertexShader, const char* fragmentShader) { + m_vao = new VertexArray; + m_vao->addBuffer(vertexBufferData, vertexBufferSize); + m_vao->push(2); + //TODO: Change this to 3 + m_vao->finishBufferLayout(); + m_ib = new IndexBuffer(indexBufferData, indexBufferCount); + if (vertexShader && fragmentShader) + m_shader = new Shader(vertexShader, fragmentShader); + } + + Drawable::DrawableType Model::identity() { + return DrawableType::NF_GAME; + } + + void Model::bind() { + if (m_vao == nullptr) + Error("Tried to bind uninitialized model!"); + m_vao->bind(); + m_ib->bind(); + if (m_shader) { + m_shader->bind(); + //TODO: Set uniforms here such as position and texture + } + } + + bool Model::hasCustomShader() { + if (m_shader) + return true; + return false; + } + + Model::~Model() { + + } +} \ No newline at end of file diff --git a/NothinFancy/src/Renderer/Renderer.cpp b/NothinFancy/src/Renderer/Renderer.cpp index b05b3f9..8b9b28e 100644 --- a/NothinFancy/src/Renderer/Renderer.cpp +++ b/NothinFancy/src/Renderer/Renderer.cpp @@ -5,6 +5,7 @@ #include "Application.h" #include "Utility.h" +#include "resource.h" namespace nf { Renderer::Renderer(Application* app) { @@ -51,15 +52,21 @@ namespace nf { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + + Win32Res vs(IDR_DEFAULTVERTEX); + m_defaultVertex = (const char*)vs.ptr; + Win32Res fs(IDR_DEFAULTFRAGMENT); + m_defaultFragment = (const char*)fs.ptr; + m_defaultShader = new Shader(m_defaultVertex, m_defaultFragment); } - void Renderer::render(Drawable* in) { - if (in == nullptr) + void Renderer::render(Drawable& in) { + if (&in == nullptr) Error("Drawable object tried to render before being constructed!"); - if (in->identity() == Drawable::DrawableType::NF_UI) - m_lUI.push_back(in); + if (in.identity() == Drawable::DrawableType::NF_UI) + m_lUI.push_back(&in); else - m_lGame.push_back(in); + m_lGame.push_back(&in); } void Renderer::doFrame() { @@ -67,8 +74,10 @@ namespace nf { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (Drawable* draw : m_lGame) { - Drawable& curr = *draw; + Model& curr = (Model&)*draw; curr.bind(); + if (!curr.hasCustomShader()) + m_defaultShader->bind(); glDrawElements(GL_TRIANGLES, curr.getIndexCount(), GL_UNSIGNED_INT, nullptr); } diff --git a/NothinFancy/src/Renderer/VertexArray.cpp b/NothinFancy/src/Renderer/VertexArray.cpp index 397ac9c..68677f6 100644 --- a/NothinFancy/src/Renderer/VertexArray.cpp +++ b/NothinFancy/src/Renderer/VertexArray.cpp @@ -42,7 +42,7 @@ namespace nf { m_lastStride = 0; } - void VertexArray::bind(unsigned int buffer) { + void VertexArray::bind() { if (m_buffers.empty()) Error("No buffers and layouts added to vertex array before being bound!"); if (!m_lastBufferHasLayout) diff --git a/NothinFancy/src/Utility.cpp b/NothinFancy/src/Utility.cpp index f840c18..201ca75 100644 --- a/NothinFancy/src/Utility.cpp +++ b/NothinFancy/src/Utility.cpp @@ -54,6 +54,20 @@ namespace nf { } #endif + Win32Res::Win32Res(int id) : + ptr(nullptr), + size(0) + { + HRSRC src = FindResource(NULL, MAKEINTRESOURCE(id), RT_RCDATA); + if (src) { + HGLOBAL temp = LoadResource(NULL, src); + if (temp) { + ptr = LockResource(temp); + size = (size_t)SizeofResource(NULL, src); + } + } + } + const wchar_t* toWide(const char* in) { int length = std::strlen(in) + 1; wchar_t* out = new wchar_t[length]; diff --git a/NothinFancy/src/include/Drawable.h b/NothinFancy/src/include/Drawable.h index 7ca8e05..7a6d13e 100644 --- a/NothinFancy/src/include/Drawable.h +++ b/NothinFancy/src/include/Drawable.h @@ -9,17 +9,17 @@ namespace nf { enum class DrawableType { NF_NONE, NF_GAME, NF_UI }; - Drawable(const char* vertexShader, const char* fragmentShader, const void* vertexBuffer, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount); + //TODO: Construct using Shader code and data from obj + Drawable(); - unsigned int getIndexCount(); - void bind(); virtual DrawableType identity(); + virtual void bind(); + unsigned int getIndexCount(); ~Drawable(); protected: - //TODO: Add VAO, Shader, index buffer, etc. - Shader m_shader; - VertexArray m_vao; - IndexBuffer m_ib; + VertexArray* m_vao; + IndexBuffer* m_ib; + Shader* m_shader; }; } \ No newline at end of file diff --git a/NothinFancy/src/include/Model.h b/NothinFancy/src/include/Model.h new file mode 100644 index 0000000..841d22c --- /dev/null +++ b/NothinFancy/src/include/Model.h @@ -0,0 +1,18 @@ +#pragma once +#include "Drawable.h" + +namespace nf { + class Model : public Drawable { + public: + Model(); + + void create(const void* vertexBufferData, const size_t vertexBufferSize, const void* indexBufferData, size_t indexBufferCount, const char* vertexShader = nullptr, const char* fragmentShader = nullptr); + DrawableType identity() override; + void bind() override; + bool hasCustomShader(); + + ~Model(); + private: + + }; +} \ No newline at end of file diff --git a/NothinFancy/src/include/NothinFancy.h b/NothinFancy/src/include/NothinFancy.h index c782751..f76b396 100644 --- a/NothinFancy/src/include/NothinFancy.h +++ b/NothinFancy/src/include/NothinFancy.h @@ -2,6 +2,4 @@ #include "Application.h" #include "Input.h" -#include "Utility.h" - -using namespace nf; \ No newline at end of file +#include "Utility.h" \ No newline at end of file diff --git a/NothinFancy/src/include/Renderer.h b/NothinFancy/src/include/Renderer.h index 3fc2412..1c1cdc3 100644 --- a/NothinFancy/src/include/Renderer.h +++ b/NothinFancy/src/include/Renderer.h @@ -2,7 +2,7 @@ #include #include -#include "Drawable.h" +#include "Model.h" namespace nf { class Application; @@ -11,7 +11,7 @@ namespace nf { public: Renderer(Application* app); - void render(Drawable* in); + void render(Drawable& in); void doFrame(); @@ -24,5 +24,8 @@ namespace nf { std::vector m_lGame; std::vector m_lUI; + const char* m_defaultVertex; + const char* m_defaultFragment; + Shader* m_defaultShader; }; } \ No newline at end of file diff --git a/NothinFancy/src/include/Shader.h b/NothinFancy/src/include/Shader.h index f10e0c3..73171a2 100644 --- a/NothinFancy/src/include/Shader.h +++ b/NothinFancy/src/include/Shader.h @@ -15,6 +15,5 @@ namespace nf { private: unsigned int m_id; std::unordered_map m_uniformLocations; - //TODO: Load from resource }; } \ No newline at end of file diff --git a/NothinFancy/src/include/Utility.h b/NothinFancy/src/include/Utility.h index dcd9705..60eaa0a 100644 --- a/NothinFancy/src/include/Utility.h +++ b/NothinFancy/src/include/Utility.h @@ -38,8 +38,15 @@ __debugbreak();} std::exit(-1);} #endif + struct Win32Res { + Win32Res(int id); + void* ptr; + size_t size; + }; + const wchar_t* toWide(const char* in); const wchar_t* toWide(const std::string& in); bool writeFile(const char* filename, const std::string& in); std::string readFile(const char* filename); + } \ No newline at end of file diff --git a/NothinFancy/src/include/VertexArray.h b/NothinFancy/src/include/VertexArray.h index 1a4f10c..e13c72b 100644 --- a/NothinFancy/src/include/VertexArray.h +++ b/NothinFancy/src/include/VertexArray.h @@ -18,7 +18,7 @@ namespace nf { template void push(unsigned int count); void finishBufferLayout(); - void bind(unsigned int buffer = 1); + void bind(); ~VertexArray(); private: diff --git a/NothinFancy/src/include/resource.h b/NothinFancy/src/include/resource.h new file mode 100644 index 0000000..52df288 --- /dev/null +++ b/NothinFancy/src/include/resource.h @@ -0,0 +1,17 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by NothinFancy.rc +// +#define IDR_DEFAULTVERTEX 201 +#define IDR_DEFAULTFRAGMENT 202 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/notes.txt b/notes.txt index 3bc7bbe..630665b 100644 --- a/notes.txt +++ b/notes.txt @@ -16,14 +16,16 @@ Remember to use tasks (//TODO: ) *Separate project *Namespaced Refactor NothinFancy.h to ONLY include stuff the frontend needs -AND get rid of NFENGINE -High CPU usage? +*AND get rid of NFENGINE +*High CPU usage? *Debug and log system *NatVis *Config changing *Alt-Enter *File IO functions *Keyboard and mouse click input +Separate Model and UIElement from Drawable +Entity and Camera classes Mouse position input Audio *Game states