diff --git a/.clang-format b/.clang-format
index 7c5883a..a600b74 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,5 +1,5 @@
{
- ColumnLimit: 100,
+ ColumnLimit: 80,
TabWidth: 4,
IndentWidth: 4, # 1 tab
UseTab: ForIndentation,
diff --git a/Dengine.vcxproj b/Dengine.vcxproj
index 0f42669..1e3fbcd 100644
--- a/Dengine.vcxproj
+++ b/Dengine.vcxproj
@@ -122,7 +122,6 @@
-
diff --git a/Dengine.vcxproj.filters b/Dengine.vcxproj.filters
index 4012670..19a8c89 100644
--- a/Dengine.vcxproj.filters
+++ b/Dengine.vcxproj.filters
@@ -36,9 +36,6 @@
Source Files
-
- Source Files
-
diff --git a/src/AssetManager.cpp b/src/AssetManager.cpp
index 1f510b2..028d62d 100644
--- a/src/AssetManager.cpp
+++ b/src/AssetManager.cpp
@@ -1,17 +1,14 @@
-#include
+#include
#define STBI_FAILURE_USERMSG
#define STB_IMAGE_IMPLEMENTATION
#include
#include
-namespace Dengine
-{
+std::map textures;
+std::map shaders;
-std::map AssetManager::textures;
-std::map AssetManager::shaders;
-
-Texture *AssetManager::getTexture(const std::string name)
+Texture *asset_getTexture(const std::string name)
{
// NOTE(doyle): Since we're using a map, the count of an object can
// only be 1 or 0
@@ -21,29 +18,31 @@ Texture *AssetManager::getTexture(const std::string name)
return nullptr;
}
-const i32 AssetManager::loadTextureImage(const std::string path, const std::string name)
+const i32 asset_loadTextureImage(const std::string path, const std::string name)
{
/* Open the texture image */
i32 imgWidth, imgHeight, bytesPerPixel;
stbi_set_flip_vertically_on_load(TRUE);
- u8 *image = stbi_load(path.c_str(), &imgWidth, &imgHeight, &bytesPerPixel, 0);
+ u8 *image =
+ stbi_load(path.c_str(), &imgWidth, &imgHeight, &bytesPerPixel, 0);
if (!image)
{
- std::cerr << "stdbi_load() failed: " << stbi_failure_reason() << std::endl;
+ std::cerr << "stdbi_load() failed: " << stbi_failure_reason()
+ << std::endl;
return -1;
}
- Texture tex;
- tex.generate(static_cast(imgWidth), static_cast(imgHeight),
- static_cast(bytesPerPixel), image);
+ Texture tex = genTexture(CAST(GLuint)(imgWidth), CAST(GLuint)(imgHeight),
+ CAST(GLint)(bytesPerPixel), image);
+ glCheckError();
stbi_image_free(image);
textures[name] = tex;
return 0;
}
-Shader *AssetManager::getShader(const std::string name)
+Shader *asset_getShader(const std::string name)
{
if (shaders.count(name) == 1)
return &shaders[name];
@@ -96,19 +95,19 @@ INTERNAL GLuint createShaderFromPath(std::string path, GLuint shadertype)
return result;
}
-const i32 AssetManager::loadShaderFiles(const std::string vertexPath,
- const std::string fragmentPath, const std::string name)
+const i32 asset_loadShaderFiles(const std::string vertexPath,
+ const std::string fragmentPath,
+ const std::string name)
{
-
- GLuint vertexShader = createShaderFromPath(vertexPath, GL_VERTEX_SHADER);
- GLuint fragmentShader = createShaderFromPath(fragmentPath, GL_FRAGMENT_SHADER);
+ GLuint vertexShader = createShaderFromPath(vertexPath, GL_VERTEX_SHADER);
+ GLuint fragmentShader =
+ createShaderFromPath(fragmentPath, GL_FRAGMENT_SHADER);
Shader shader;
- i32 result = shader.loadProgram(vertexShader, fragmentShader);
+ i32 result = shader_loadProgram(&shader, vertexShader, fragmentShader);
if (result)
return result;
shaders[name] = shader;
return 0;
}
-}
diff --git a/src/Entity.cpp b/src/Entity.cpp
deleted file mode 100644
index 521d72f..0000000
--- a/src/Entity.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include
-#include
-
-namespace Dengine
-{
-
-Entity::Entity()
-: pos(glm::vec2(0, 0))
-, dPos(glm::vec2(0, 0))
-, size(glm::vec2(0, 0))
-, tex(nullptr)
-{
-}
-
-Entity::Entity(const glm::vec2 pos, const Texture *tex)
-{
- this->pos = pos;
- this->dPos = glm::vec2(0, 0);
- this->tex = tex;
- this->size = glm::vec2(tex->getWidth(), tex->getHeight());
-}
-
-Entity::Entity(const glm::vec2 pos, glm::vec2 size, const Texture *tex)
-{
- this->pos = pos;
- this->dPos = glm::vec2(0, 0);
- this->tex = tex;
- this->size = size;
-}
-
-Entity::Entity(const glm::vec2 pos, const std::string texName)
-{
- Texture *tex = AssetManager::getTexture(texName);
- this->pos = pos;
- this->dPos = glm::vec2(0, 0);
- this->tex = tex;
- this->size = glm::vec2(tex->getWidth(), tex->getHeight());
-
-}
-
-Entity::~Entity()
-{
-}
-}
diff --git a/src/Renderer.cpp b/src/Renderer.cpp
index 33e6229..b1d354e 100644
--- a/src/Renderer.cpp
+++ b/src/Renderer.cpp
@@ -4,74 +4,35 @@
#include
#include
-namespace Dengine
+void renderer_entity(Renderer *renderer, Entity *entity, GLfloat rotate,
+ glm::vec3 color)
{
-Renderer::Renderer(Shader *shader)
-{
- this->shader = shader;
- this->initRenderData();
-}
-
-Renderer::~Renderer() { glDeleteVertexArrays(1, &this->quadVAO); }
-void Renderer::drawEntity(Entity *entity, GLfloat rotate, glm::vec3 color)
-{
- this->shader->use();
+ shader_use(renderer->shader);
glm::mat4 transMatrix = glm::translate(glm::vec3(entity->pos, 0.0f));
glm::mat4 rotateMatrix = glm::rotate(rotate, glm::vec3(0.0f, 0.0f, 1.0f));
+ glCheckError();
// NOTE(doyle): We draw everything as a unit square in OGL. Scale it to size
glm::mat4 scaleMatrix = glm::scale(glm::vec3(entity->size, 1.0f));
glm::mat4 model = transMatrix * rotateMatrix * scaleMatrix;
-
- this->shader->uniformSetMat4fv("model", model);
+ shader_uniformSetMat4fv(renderer->shader, "model", model);
+ glCheckError();
// TODO(doyle): Unimplemented
// this->shader->uniformSetVec3f("spriteColor", color);
glActiveTexture(GL_TEXTURE0);
- entity->tex->bind();
- this->shader->uniformSet1i("tex", 0);
+ glCheckError();
+ glBindTexture(GL_TEXTURE_2D, entity->tex->id);
+ glCheckError();
+ shader_uniformSet1i(renderer->shader, "tex", 0);
+ glCheckError();
- glBindVertexArray(this->quadVAO);
+ glBindVertexArray(renderer->quadVAO);
+ glCheckError();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ glCheckError();
glBindVertexArray(0);
-}
-
-void Renderer::initRenderData()
-{
- // NOTE(doyle): Draws a series of triangles (three-sided polygons) using
- // vertices v0, v1, v2, then v2, v1, v3 (note the order)
- glm::vec4 vertices[] = {
- // x y s t
- {0.0f, 1.0f, 0.0f, 1.0f}, // Top left
- {0.0f, 0.0f, 0.0f, 0.0f}, // Bottom left
- {1.0f, 1.0f, 1.0f, 1.0f}, // Top right
- {1.0f, 0.0f, 1.0f, 0.0f}, // Bottom right
- };
-
- GLuint VBO;
-
- /* Create buffers */
- glGenVertexArrays(1, &this->quadVAO);
- glGenBuffers(1, &VBO);
-
- /* Bind buffers */
- glBindBuffer(GL_ARRAY_BUFFER, VBO);
- glBindVertexArray(this->quadVAO);
-
- /* Configure VBO */
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
-
- /* Configure VAO */
- const GLuint numVertexElements = 4;
- const GLuint vertexSize = sizeof(glm::vec4);
-
- glEnableVertexAttribArray(0);
- glVertexAttribPointer(0, numVertexElements, GL_FLOAT, GL_FALSE, vertexSize, (GLvoid *)0);
-
- /* Unbind */
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindVertexArray(0);
-}
+ glCheckError();
}
diff --git a/src/Shader.cpp b/src/Shader.cpp
index 5a427bd..987f810 100644
--- a/src/Shader.cpp
+++ b/src/Shader.cpp
@@ -1,55 +1,46 @@
-#include
+#include
#include
#include
#include
-namespace Dengine
+const i32 shader_loadProgram(Shader *const shader, const GLuint vertexShader,
+ const GLuint fragmentShader)
{
-Shader::Shader()
-: id(0)
-{
-}
-
-Shader::~Shader() {}
-
-const i32 Shader::loadProgram(const GLuint vertexShader, const GLuint fragmentShader)
-{
- this->id = glCreateProgram();
- glAttachShader(this->id, vertexShader);
- glAttachShader(this->id, fragmentShader);
- glLinkProgram(this->id);
+ shader->id = glCreateProgram();
+ glAttachShader(shader->id, vertexShader);
+ glAttachShader(shader->id, fragmentShader);
+ glLinkProgram(shader->id);
glDeleteShader(fragmentShader);
glDeleteShader(vertexShader);
GLint success;
GLchar infoLog[512];
- glGetProgramiv(this->id, GL_LINK_STATUS, &success);
+ glGetProgramiv(shader->id, GL_LINK_STATUS, &success);
if (!success)
{
- glGetProgramInfoLog(this->id, 512, NULL, infoLog);
- std::cout << "glLinkProgram failed: " << infoLog << std::endl;
+ glGetProgramInfoLog(shader->id, 512, NULL, infoLog);
+ printf("glLinkProgram failed: %s\n", infoLog);
return -1;
}
return 0;
}
-void Shader::uniformSet1i(const GLchar *name, const GLuint data)
+void shader_uniformSet1i(Shader *const shader, const GLchar *name,
+ const GLuint data)
{
- GLint uniformLoc = glGetUniformLocation(this->id, name);
+ GLint uniformLoc = glGetUniformLocation(shader->id, name);
glUniform1i(uniformLoc, data);
}
-void Shader::uniformSetMat4fv(const GLchar *name, const glm::mat4 data)
+void shader_uniformSetMat4fv(Shader *const shader, const GLchar *name,
+ const glm::mat4 data)
{
- GLint uniformLoc = glGetUniformLocation(this->id, name);
- glCheckError();
+ GLint uniformLoc = glGetUniformLocation(shader->id, name);
glUniformMatrix4fv(uniformLoc, 1, GL_FALSE, glm::value_ptr(data));
- glCheckError();
}
-void Shader::use() const { glUseProgram(this->id); }
-}
+void shader_use(const Shader *const shader) { glUseProgram(shader->id); }
diff --git a/src/Texture.cpp b/src/Texture.cpp
index e185981..7626b1c 100644
--- a/src/Texture.cpp
+++ b/src/Texture.cpp
@@ -1,21 +1,5 @@
#include
-namespace Dengine
-{
-Texture::Texture()
-: id(0)
-, width(0)
-, height(0)
-, internalFormat(GL_RGBA)
-, imageFormat(GL_RGB)
-, wrapS(GL_REPEAT)
-, wrapT(GL_REPEAT)
-, filterMinification(GL_LINEAR)
-, filterMagnification(GL_LINEAR)
-{
- glGenTextures(1, &this->id);
-}
-
enum BytesPerPixel
{
Greyscale = 1,
@@ -24,7 +8,7 @@ enum BytesPerPixel
RGBA = 4,
};
-INTERNAL GLint getGLFormat(BytesPerPixel bytesPerPixel, b32 srgb)
+INTERNAL GLint getGLFormat(i32 bytesPerPixel, b32 srgb)
{
switch (bytesPerPixel)
{
@@ -44,32 +28,54 @@ INTERNAL GLint getGLFormat(BytesPerPixel bytesPerPixel, b32 srgb)
}
}
-void Texture::generate(const GLuint width, const GLuint height, const GLint bytesPerPixel,
- const u8 *const image)
+Texture genTexture(const GLuint width, const GLuint height,
+ const GLint bytesPerPixel, const u8 *const image)
{
// TODO(doyle): Let us set the parameters gl params as well
- this->width = width;
- this->height = height;
+ glCheckError();
+ Texture tex = {};
+ tex.width = width;
+ tex.height = height;
+ tex.internalFormat = GL_RGBA;
+ tex.wrapS = GL_REPEAT;
+ tex.wrapT = GL_REPEAT;
+ tex.filterMinification = GL_LINEAR;
+ tex.filterMagnification = GL_LINEAR;
- glBindTexture(GL_TEXTURE_2D, this->id);
+ glGenTextures(1, &tex.id);
+ glCheckError();
+
+
+ glBindTexture(GL_TEXTURE_2D, tex.id);
+ glCheckError();
/* Load image into texture */
// TODO(doyle) Figure out the gl format
- this->imageFormat = getGLFormat(static_cast(bytesPerPixel), FALSE);
+ tex.imageFormat = getGLFormat(bytesPerPixel, FALSE);
+ glCheckError();
- glTexImage2D(GL_TEXTURE_2D, 0, this->internalFormat, this->width, this->height, 0,
- this->imageFormat, GL_UNSIGNED_BYTE, image);
+ glTexImage2D(GL_TEXTURE_2D, 0, tex.internalFormat, tex.width, tex.height, 0,
+ tex.imageFormat, GL_UNSIGNED_BYTE, image);
+ glCheckError();
+ glActiveTexture(GL_TEXTURE0);
+ // TODO(doyle): Don't forget about thsi!
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 3, 3, 55, 55, GL_RGBA, GL_UNSIGNED_BYTE,
+ image);
+ glCheckError();
glGenerateMipmap(GL_TEXTURE_2D);
/* Set parameter of currently bound texture */
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, this->wrapS);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, this->wrapT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, this->filterMinification);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, this->filterMagnification);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, tex.wrapS);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, tex.wrapT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+ tex.filterMinification);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
+ tex.filterMagnification);
+ glCheckError();
/* Unbind and clean up */
glBindTexture(GL_TEXTURE_2D, 0);
-}
+ glCheckError();
-void Texture::bind() const { glBindTexture(GL_TEXTURE_2D, this->id); }
+ return tex;
}
diff --git a/src/WorldTraveller.cpp b/src/WorldTraveller.cpp
index 16e099c..caaa667 100644
--- a/src/WorldTraveller.cpp
+++ b/src/WorldTraveller.cpp
@@ -4,65 +4,85 @@
#include
#include
-#include
-
-namespace WorldTraveller
-{
-
-// TODO(doyle): Entity list for each world
-// TODO(doyle): Jumping mechanics
-// TODO(doyle): Collision
-
-
-Game::Game(i32 width, i32 height)
-{
- this->width = width;
- this->height = height;
-
- for (i32 i = 0; i < NUM_KEYS; i++)
- this->keys[i] = FALSE;
-}
-
-Game::~Game() { delete this->renderer; }
-
-void Game::init()
+void worldTraveller_gameInit(GameState *state)
{
/* Initialise assets */
- std::string texFolder = "data/textures/WorldTraveller/";
- Dengine::AssetManager::loadShaderFiles("data/shaders/sprite.vert.glsl",
- "data/shaders/sprite.frag.glsl", "sprite");
- Dengine::AssetManager::loadTextureImage(texFolder + "hero.png", "hero");
- Dengine::AssetManager::loadTextureImage(texFolder + "wall.png", "wall");
- Dengine::AssetManager::loadTextureImage(texFolder + "hitMarker.png", "hitMarker");
+ asset_loadTextureImage("data/textures/WorldTraveller/elisa-spritesheet1.png",
+ "hero");
+ glCheckError();
- this->shader = Dengine::AssetManager::getShader("sprite");
- this->shader->use();
+ state->state = state_active;
+ Renderer *renderer = &state->renderer;
+ asset_loadShaderFiles("data/shaders/sprite.vert.glsl",
+ "data/shaders/sprite.frag.glsl", "sprite");
+ glCheckError();
- glm::mat4 projection = glm::ortho(0.0f, static_cast(this->width), 0.0f,
- static_cast(this->height), 0.0f, 1.0f);
- this->shader->uniformSetMat4fv("projection", projection);
+ renderer->shader = asset_getShader("sprite");
+ shader_use(renderer->shader);
+ glm::mat4 projection = glm::ortho(0.0f, CAST(GLfloat) state->width, 0.0f,
+ CAST(GLfloat) state->height, 0.0f, 1.0f);
+ shader_uniformSetMat4fv(renderer->shader, "projection", projection);
+ glCheckError();
- GLuint projectionLoc = glGetUniformLocation(this->shader->id, "projection");
- glUniformMatrix4fv(projectionLoc, 1, GL_FALSE, glm::value_ptr(projection));
+ /* Init renderer */
+ // NOTE(doyle): Draws a series of triangles (three-sided polygons) using
+ // vertices v0, v1, v2, then v2, v1, v3 (note the order)
+ glm::vec4 vertices[] = {
+ // x y s t
+ {0.0f, 1.0f, 0.0f, 1.0f}, // Top left
+ {0.0f, 0.0f, 0.0f, 0.0f}, // Bottom left
+ {1.0f, 1.0f, 1.0f, 1.0f}, // Top right
+ {1.0f, 0.0f, 1.0f, 0.0f}, // Bottom right
+ };
- /* Init game state */
- this->state = state_active;
- this->renderer = new Dengine::Renderer(this->shader);
+ GLuint VBO;
+ /* Create buffers */
+ glGenVertexArrays(1, &renderer->quadVAO);
+ glGenBuffers(1, &VBO);
+ glCheckError();
+ /* Bind buffers */
+ glBindBuffer(GL_ARRAY_BUFFER, VBO);
+ glBindVertexArray(renderer->quadVAO);
+
+ /* Configure VBO */
+ glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+ glCheckError();
+
+ /* Configure VAO */
+ const GLuint numVertexElements = 4;
+ const GLuint vertexSize = sizeof(glm::vec4);
+
+ glEnableVertexAttribArray(0);
+ glVertexAttribPointer(0, numVertexElements, GL_FLOAT, GL_FALSE, vertexSize,
+ (GLvoid *)0);
+ glCheckError();
+
+ /* Unbind */
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ glBindVertexArray(0);
+
+ glCheckError();
/* Init hero */
- this->hero = Dengine::Entity(glm::vec2(0, 0), "hero");
- glm::vec2 screenCentre = glm::vec2(this->width / 2.0f, this->height / 2.0f);
- glm::vec2 heroOffsetToCentre = glm::vec2(-((i32)hero.size.x / 2), -((i32)hero.size.y / 2));
+ Entity *hero = &state->hero;
+ hero->tex = asset_getTexture("hero");
+ hero->size = glm::vec2(100, 100);
+
+ glm::vec2 screenCentre =
+ glm::vec2(state->width / 2.0f, state->height / 2.0f);
+ glm::vec2 heroOffsetToCentre =
+ glm::vec2(-((i32)hero->size.x / 2), -((i32)hero->size.y / 2));
glm::vec2 heroCentered = screenCentre + heroOffsetToCentre;
- hero.pos = heroCentered;
+ hero->pos = heroCentered;
- srand(static_cast(glfwGetTime()));
+ srand(CAST(u32)(glfwGetTime()));
+ glCheckError();
}
-void Game::update(const f32 dt)
+INTERNAL void parseInput(GameState *state, const f32 dt)
{
/*
Equations of Motion
@@ -78,24 +98,24 @@ void Game::update(const f32 dt)
glm::vec2 ddPos = glm::vec2(0, 0);
- if (this->keys[GLFW_KEY_SPACE])
+ if (state->keys[GLFW_KEY_SPACE])
{
}
- if (this->keys[GLFW_KEY_RIGHT])
+ if (state->keys[GLFW_KEY_RIGHT])
{
ddPos.x = 1.0f;
}
- if (this->keys[GLFW_KEY_LEFT])
+ if (state->keys[GLFW_KEY_LEFT])
{
ddPos.x = -1.0f;
}
- if (this->keys[GLFW_KEY_UP])
+ if (state->keys[GLFW_KEY_UP])
{
ddPos.y = 1.0f;
}
- if (this->keys[GLFW_KEY_DOWN])
+ if (state->keys[GLFW_KEY_DOWN])
{
ddPos.y = -1.0f;
}
@@ -108,42 +128,33 @@ void Game::update(const f32 dt)
ddPos *= 0.70710678118f;
}
- const f32 heroSpeed = static_cast((22.0f * METERS_TO_PIXEL)); // m/s^2
+ f32 heroSpeed = CAST(f32)(22.0f * METERS_TO_PIXEL); // m/s^2
+ if (state->keys[GLFW_KEY_LEFT_SHIFT])
+ {
+ heroSpeed = CAST(f32)(22.0f * 5.0f * METERS_TO_PIXEL);
+ }
ddPos *= heroSpeed;
// TODO(doyle): Counteracting force on player's acceleration is arbitrary
- ddPos += -(5.5f * hero.dPos);
+ Entity *hero = &state->hero;
+ ddPos += -(5.5f * hero->dPos);
- glm::vec2 newHeroP = (0.5f * ddPos) * Dengine::Math::squared(dt) + (hero.dPos * dt) + hero.pos;
+ glm::vec2 newHeroP =
+ (0.5f * ddPos) * squared(dt) + (hero->dPos * dt) + hero->pos;
- hero.dPos = (ddPos * dt) + hero.dPos;
- hero.pos = newHeroP;
+ hero->dPos = (ddPos * dt) + hero->dPos;
+ hero->pos = newHeroP;
}
-void Game::render()
+void worldTraveller_gameUpdateAndRender(GameState *state, const f32 dt)
{
+ /* Update */
+ parseInput(state, dt);
+ glCheckError();
- Dengine::Renderer *renderer = this->renderer;
-
- Dengine::Entity wall = Dengine::Entity(glm::vec2(0, 0), "wall");
- glm::vec2 maxTilesOnScreen =
- glm::vec2((this->width / wall.size.x), (this->height / wall.size.y));
-
- Dengine::Entity hitMarker = Dengine::Entity(glm::vec2(100, 100), "hitMarker");
-
- for (i32 x = 0; x < maxTilesOnScreen.x; x++)
- {
- for (i32 y = 0; y < maxTilesOnScreen.y; y++)
- {
- if (x == 0 || x == maxTilesOnScreen.x - 1 || y == 0 || y == maxTilesOnScreen.y - 1)
- {
- wall.pos = glm::vec2(x * wall.tex->getWidth(), y * wall.tex->getHeight());
-
- renderer->drawEntity(&wall);
- }
- }
- }
- renderer->drawEntity(&hero);
- renderer->drawEntity(&hitMarker);
+ /* Render */
+ renderer_entity(&state->renderer, &state->hero);
+ // TODO(doyle): Clean up lines
+ // Renderer::~Renderer() { glDeleteVertexArrays(1, &this->quadVAO); }
}
-} // namespace Dengine
+
diff --git a/src/dengine.cpp b/src/dengine.cpp
index 3fc2745..b5a1c89 100644
--- a/src/dengine.cpp
+++ b/src/dengine.cpp
@@ -11,23 +11,18 @@
#include
#include
-#include
-#include
-#include
-#include
-#include
+#include
void key_callback(GLFWwindow *window, int key, int scancode, int action, int mode)
{
- WorldTraveller::Game *game =
- static_cast(glfwGetWindowUserPointer(window));
+ GameState *game = CAST(GameState *)(glfwGetWindowUserPointer(window));
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
{
glfwSetWindowShouldClose(window, GL_TRUE);
}
- if (key >= 0 && key < WorldTraveller::NUM_KEYS)
+ if (key >= 0 && key < NUM_KEYS)
{
if (action == GLFW_PRESS)
game->keys[key] = TRUE;
@@ -50,11 +45,11 @@ int main()
glm::ivec2 windowSize = glm::ivec2(1280, 720);
- GLFWwindow *window = glfwCreateWindow(windowSize.x, windowSize.y, "Dengine", nullptr, nullptr);
+ GLFWwindow *window = glfwCreateWindow(windowSize.x, windowSize.y, "Dengine", NULL, NULL);
if (!window)
{
- std::cout << "glfwCreateWindow() failed: Failed to create window" << std::endl;
+ printf("glfwCreateWindow() failed: Failed to create window\n");
glfwTerminate();
return -1;
}
@@ -65,7 +60,7 @@ int main()
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
- std::cout << "glewInit() failed: Failed to initialise GLEW" << std::endl;
+ printf("glewInit() failed: Failed to initialise GLEW\n");
return -1;
}
// NOTE(doyle): glewInit() bug that sets the gl error flag after init
@@ -87,12 +82,16 @@ int main()
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glCullFace(GL_BACK);
- WorldTraveller::Game game = WorldTraveller::Game(frameBufferSize.x, frameBufferSize.y);
- game.init();
+ GameState worldTraveller = {};
+ worldTraveller.state = state_active;
+ worldTraveller.width = frameBufferSize.x;
+ worldTraveller.height = frameBufferSize.y;
- glfwSetWindowUserPointer(window, static_cast(&game));
+ worldTraveller_gameInit(&worldTraveller);
- f32 startTime = static_cast(glfwGetTime());
+ glfwSetWindowUserPointer(window, CAST(void *)(&worldTraveller));
+
+ f32 startTime = CAST(f32)(glfwGetTime());
f32 secondsElapsed = 0.0f; // Time between current frame and last frame
#if 0
@@ -109,23 +108,20 @@ int main()
/* Main game loop */
while (!glfwWindowShouldClose(window))
{
-
/* Check and call events */
glfwPollEvents();
- game.update(secondsElapsed);
-
/* Rendering commands here*/
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- game.render();
+ worldTraveller_gameUpdateAndRender(&worldTraveller, secondsElapsed);
glCheckError();
/* Swap the buffers */
glfwSwapBuffers(window);
- f32 endTime = static_cast(glfwGetTime());
+ f32 endTime = (f32)glfwGetTime();
secondsElapsed = endTime - startTime;
#if 0
@@ -144,9 +140,12 @@ int main()
{
f32 msPerFrame = secondsElapsed * 1000.0f;
f32 framesPerSecond = 1.0f / secondsElapsed;
- std::stringstream ss;
- ss << "Dengine | " << msPerFrame << " ms/f | " << framesPerSecond << " fps";
- glfwSetWindowTitle(window, ss.str().c_str());
+
+ char textBuffer[256];
+ snprintf(textBuffer, ARRAY_COUNT(textBuffer), "Dengine | %f ms/f | %f fps", msPerFrame,
+ framesPerSecond);
+
+ glfwSetWindowTitle(window, textBuffer);
titleUpdateFrequencyInSeconds = 0.5f;
}
diff --git a/src/include/Dengine/AssetManager.h b/src/include/Dengine/AssetManager.h
index ef99525..a7198c4 100644
--- a/src/include/Dengine/AssetManager.h
+++ b/src/include/Dengine/AssetManager.h
@@ -9,22 +9,30 @@
#include