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