Skip to content

Commit

Permalink
camera fix, ImGui added (restyle!), perf measure
Browse files Browse the repository at this point in the history
  • Loading branch information
mtiapko committed Feb 3, 2019
1 parent 13b1fd4 commit fcf3933
Show file tree
Hide file tree
Showing 33 changed files with 35,331 additions and 88 deletions.
14 changes: 12 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
CC := g++
LD := g++

CC_FLAGS := -std=c++2a -Wall -Wextra -MMD -MP -g -msse3
CC_FLAGS := -std=c++2a -Wall -Wextra -MMD -MP -g
CC_INCLUDES := -I./include
CC_DEFINES :=

LD_FLAGS :=
LD_LIBS := -lEGL -lX11 -lGLEW -lGL -lopenal -lsoil2

SRC_DIR := src src/fs src/sys src/sys/loaders src/util src/allocs src/graph src/audio src/math
SRC_DIR := src \
src/fs \
src/sys \
src/sys/loaders \
src/util \
src/allocs \
src/graph \
src/graph/imgui \
src/audio \
src/math

OBJ_DIR := obj

SRC := $(wildcard $(addsuffix /*.cpp, $(SRC_DIR)))
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
# Dvokutnik()

## Fonts sources
- [ProggyVector Regular](https://github.com/bluescan/proggyfonts)
8 changes: 6 additions & 2 deletions include/graph/Camera.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,17 @@ namespace dk::graph
class Camera
{
private:
static constexpr float MOVE_SPEED = 0.05f;
static constexpr float ROT_SPEED = 0.05f;
static constexpr float MOVE_SPEED = 0.085f;
static constexpr float ROT_SPEED = 0.5f;

math::Vec3f m_pos;
math::Vec3f m_dir;
math::Vec3f m_right;
math::Vec3f m_up;

float m_yaw;
float m_pitch;

public:
Camera() noexcept;

Expand Down
43 changes: 43 additions & 0 deletions include/graph/GUI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#ifndef __DK_GRAPH_GUI_H__
#define __DK_GRAPH_GUI_H__

#include "graph/imgui/imgui.h" // TODO: remove
#include "sys/events/MouseMoveEvent.h"
#include "sys/events/MousePressEvent.h"
#include "sys/events/MouseReleaseEvent.h"
#include "sys/events/KeyPressEvent.h"
#include "sys/events/KeyReleaseEvent.h"

namespace dk::graph
{

class GUI : public
sys::EventListener<sys::MouseMoveEvent>,
sys::EventListener<sys::MousePressEvent>,
sys::EventListener<sys::MouseReleaseEvent>,
sys::EventListener<sys::KeyPressEvent>,
sys::EventListener<sys::KeyReleaseEvent>
{
private:
static GUI s_this; // TODO: remove. GUI must be one per window

static int convert_mouse_btn(sys::MouseBtn btn) noexcept;

public:
static void update() noexcept;
static void render() noexcept;

void handle(const sys::MouseMoveEvent& e) noexcept override;
void handle(const sys::MousePressEvent& e) noexcept override;
void handle(const sys::MouseReleaseEvent& e) noexcept override;

void handle(const sys::KeyPressEvent& e) noexcept override;
void handle(const sys::KeyReleaseEvent& e) noexcept override;

// TODO: get window ptr. not static
static Status create() noexcept;
};

}

#endif // !__DK_GRAPH_H__
73 changes: 73 additions & 0 deletions include/graph/imgui/imconfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
//-----------------------------------------------------------------------------
// COMPILE-TIME OPTIONS FOR DEAR IMGUI
// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure.
// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions.
//-----------------------------------------------------------------------------
// A) You may edit imconfig.h (and not overwrite it when updating imgui, or maintain a patch/branch with your modifications to imconfig.h)
// B) or add configuration directives in your own file and compile with #define IMGUI_USER_CONFIG "myfilename.h"
// If you do so you need to make sure that configuration settings are defined consistently _everywhere_ dear imgui is used, which include
// the imgui*.cpp files but also _any_ of your code that uses imgui. This is because some compile-time options have an affect on data structures.
// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts.
// Call IMGUI_CHECKVERSION() from your .cpp files to verify that the data structures your files are using are matching the ones imgui.cpp is using.
//-----------------------------------------------------------------------------

#pragma once

//---- Define assertion handler. Defaults to calling assert().
//#define IM_ASSERT(_EXPR) MyAssert(_EXPR)
//#define IM_ASSERT(_EXPR) ((void)(_EXPR)) // Disable asserts

//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows.
//#define IMGUI_API __declspec( dllexport )
//#define IMGUI_API __declspec( dllimport )

//---- Don't define obsolete functions/enums names. Consider enabling from time to time after updating to avoid using soon-to-be obsolete function/names.
//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS

//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty)
//---- It is very strongly recommended to NOT disable the demo windows during development. Please read the comments in imgui_demo.cpp.
//#define IMGUI_DISABLE_DEMO_WINDOWS

//---- Don't implement some functions to reduce linkage requirements.
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc.
//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow.
//#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function.
//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself if you don't want to link with vsnprintf.
//#define IMGUI_DISABLE_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 wrapper so you can implement them yourself. Declare your prototypes in imconfig.h.
//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().

//---- Include imgui_user.h at the end of imgui.h as a convenience
//#define IMGUI_INCLUDE_IMGUI_USER_H

//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another)
//#define IMGUI_USE_BGRA_PACKED_COLOR

//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version
// By default the embedded implementations are declared static and not available outside of imgui cpp files.
//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h"
//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h"
//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION

//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4.
// This will be inlined as part of ImVec2 and ImVec4 class declarations.
/*
#define IM_VEC2_CLASS_EXTRA \
ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \
operator MyVec2() const { return MyVec2(x,y); }
#define IM_VEC4_CLASS_EXTRA \
ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \
operator MyVec4() const { return MyVec4(x,y,z,w); }
*/

//---- Use 32-bit vertex indices (default is 16-bit) to allow meshes with more than 64K vertices. Render function needs to support it.
//#define ImDrawIdx unsigned int

//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files.
/*
namespace ImGui
{
void MyFunction(const char* name, const MyMatrix44& v);
}
*/
Loading

0 comments on commit fcf3933

Please sign in to comment.