WindOWIng AnD OpEnGl
This commit is contained in:
@@ -1,13 +1,25 @@
|
|||||||
#include "Aeon/Aeon.hpp"
|
#include "Aeon/Aeon.hpp"
|
||||||
|
|
||||||
Aeon::Core::App::App(const AppProperties& props)
|
using Aeon::Core::App;
|
||||||
{
|
using Aeon::Core::Display;
|
||||||
|
using Aeon::Core::DisplayProperties;
|
||||||
|
|
||||||
Aeon::Core::Display::GetInstance();
|
App::App( const DisplayProperties& props )
|
||||||
|
: mDisplay()
|
||||||
|
{
|
||||||
|
mDisplay.Create( props );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const Aeon::Core::Display& Aeon::Core::App::GetDisplay()
|
void App::Run()
|
||||||
{
|
{
|
||||||
return Aeon::Core::Display::GetInstance();
|
while ( !mSIGTERM )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Display& App::GetDisplay()
|
||||||
|
{
|
||||||
|
return mDisplay;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,33 +7,24 @@
|
|||||||
|
|
||||||
namespace Aeon::Core {
|
namespace Aeon::Core {
|
||||||
|
|
||||||
class AppProperties
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
std::string Name;
|
|
||||||
int Width, Height;
|
|
||||||
bool VSync;
|
|
||||||
|
|
||||||
AppProperties(std::string name, int width = 1200, int height = 900, bool vSync = true)
|
|
||||||
: Name(name),
|
|
||||||
Width(width),
|
|
||||||
Height(height),
|
|
||||||
VSync(vSync) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
class App {
|
class App {
|
||||||
public:
|
public:
|
||||||
App(const AppProperties& props);
|
App( const DisplayProperties& props );
|
||||||
virtual ~App();
|
|
||||||
|
|
||||||
|
void Run();
|
||||||
|
|
||||||
|
void PushLayer();
|
||||||
|
void PopLayer();
|
||||||
|
|
||||||
const Display& GetDisplay();
|
const Display& GetDisplay();
|
||||||
|
private:
|
||||||
|
|
||||||
|
Display mDisplay;
|
||||||
|
|
||||||
|
bool mSIGTERM = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
18
Aeon/Assert.hpp
Normal file
18
Aeon/Assert.hpp
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef AEON_ASSERT_H_
|
||||||
|
#define AEON_ASSERT_H_
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#define AEON_ASSERT(x, m) \
|
||||||
|
if (! (x)) { \
|
||||||
|
std::cerr << "Assertion `" #x "` failed in " << __FILE__ \
|
||||||
|
<< " line " << __LINE__ << ": " << m << std::endl; \
|
||||||
|
std::terminate(); \
|
||||||
|
}
|
||||||
|
#define AEON_ASSERT_NO_BRK(x) \
|
||||||
|
if (! (x)) { \
|
||||||
|
std::cerr << "Assertion `" #x "` failed in " << __FILE__ \
|
||||||
|
<< " line " << __LINE__ << ": " << m << std::endl; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,7 +2,74 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
Aeon::Core::Display::Display()
|
#include "Aeon/Assert.hpp"
|
||||||
|
|
||||||
|
using Aeon::Core::Display;
|
||||||
|
|
||||||
|
Display::Display()
|
||||||
|
: mWindow( nullptr ),
|
||||||
|
mContext( NULL )
|
||||||
{
|
{
|
||||||
std::cout << "bruh" << std::endl;
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Display::Create( const DisplayProperties& properties )
|
||||||
|
{
|
||||||
|
SDL_Init( SDL_INIT_VIDEO );
|
||||||
|
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_BUFFER_SIZE, 32 );
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
|
||||||
|
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_MULTISAMPLEBUFFERS, 1 );
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_MULTISAMPLESAMPLES, 4 );
|
||||||
|
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 4 );
|
||||||
|
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 5 );
|
||||||
|
|
||||||
|
mWindow = SDL_CreateWindow( properties.Name.c_str(),
|
||||||
|
SDL_WINDOWPOS_CENTERED,
|
||||||
|
SDL_WINDOWPOS_CENTERED, properties.Width, properties.Height,
|
||||||
|
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE );
|
||||||
|
|
||||||
|
AEON_ASSERT( mWindow, "Can't initialise window" );
|
||||||
|
|
||||||
|
mContext = SDL_GL_CreateContext( mWindow );
|
||||||
|
|
||||||
|
AEON_ASSERT( mContext, "Can't initialise context" );
|
||||||
|
|
||||||
|
SDL_GL_SetSwapInterval( static_cast<int>(!properties.VSync) );
|
||||||
|
|
||||||
|
gladLoadGLLoader( SDL_GL_GetProcAddress );
|
||||||
|
glEnable( GL_MULTISAMPLE );
|
||||||
|
glCullFace( GL_BACK );
|
||||||
|
glEnable( GL_DEPTH_TEST );
|
||||||
|
|
||||||
|
mWidth = properties.Width;
|
||||||
|
mHeight = properties.Height;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Display::~Display()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int Display::GetWidth()
|
||||||
|
{
|
||||||
|
return mWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int Display::GetHeight()
|
||||||
|
{
|
||||||
|
return mHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Display::Destroy()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,45 @@
|
|||||||
#ifndef AEON_CORE_DISPLAY_H_
|
#ifndef AEON_CORE_DISPLAY_H_
|
||||||
#define AEON_CORE_DISPLAY_H_
|
#define AEON_CORE_DISPLAY_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
#include <ThirdParty/glad.h>
|
||||||
|
|
||||||
namespace Aeon::Core {
|
namespace Aeon::Core {
|
||||||
|
|
||||||
|
class DisplayProperties
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string Name;
|
||||||
|
int Width, Height;
|
||||||
|
bool VSync;
|
||||||
|
|
||||||
|
DisplayProperties( std::string name, int width = 1200, int height = 900, bool vSync = true )
|
||||||
|
: Name( name ),
|
||||||
|
Width( width ),
|
||||||
|
Height( height ),
|
||||||
|
VSync( vSync ) { }
|
||||||
|
};
|
||||||
|
|
||||||
class Display
|
class Display
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Display();
|
Display();
|
||||||
|
~Display();
|
||||||
|
|
||||||
static inline Display& GetInstance()
|
bool Create( const DisplayProperties& properties );
|
||||||
{
|
|
||||||
static Display instance;
|
unsigned int GetWidth();
|
||||||
return instance;
|
unsigned int GetHeight();
|
||||||
}
|
|
||||||
|
void Destroy();
|
||||||
|
|
||||||
|
private:
|
||||||
|
SDL_Window* mWindow;
|
||||||
|
SDL_GLContext mContext;
|
||||||
|
|
||||||
|
unsigned int mWidth, mHeight;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Display( Display const& ) = delete;
|
Display( Display const& ) = delete;
|
||||||
|
|||||||
@@ -14,12 +14,6 @@
|
|||||||
|
|
||||||
namespace Aeon::Core {
|
namespace Aeon::Core {
|
||||||
|
|
||||||
|
|
||||||
enum EventSystem
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class GenericEvent
|
class GenericEvent
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
1838
Aeon/ThirdParty/glad.c
vendored
Normal file
1838
Aeon/ThirdParty/glad.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3617
Aeon/ThirdParty/glad.h
vendored
Normal file
3617
Aeon/ThirdParty/glad.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
282
Aeon/ThirdParty/khrplatform.h
vendored
Normal file
282
Aeon/ThirdParty/khrplatform.h
vendored
Normal file
@@ -0,0 +1,282 @@
|
|||||||
|
#ifndef __khrplatform_h_
|
||||||
|
#define __khrplatform_h_
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2008-2018 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
** copy of this software and/or associated documentation files (the
|
||||||
|
** "Materials"), to deal in the Materials without restriction, including
|
||||||
|
** without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
** distribute, sublicense, and/or sell copies of the Materials, and to
|
||||||
|
** permit persons to whom the Materials are furnished to do so, subject to
|
||||||
|
** the following conditions:
|
||||||
|
**
|
||||||
|
** The above copyright notice and this permission notice shall be included
|
||||||
|
** in all copies or substantial portions of the Materials.
|
||||||
|
**
|
||||||
|
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Khronos platform-specific types and definitions.
|
||||||
|
*
|
||||||
|
* The master copy of khrplatform.h is maintained in the Khronos EGL
|
||||||
|
* Registry repository at https://github.com/KhronosGroup/EGL-Registry
|
||||||
|
* The last semantic modification to khrplatform.h was at commit ID:
|
||||||
|
* 67a3e0864c2d75ea5287b9f3d2eb74a745936692
|
||||||
|
*
|
||||||
|
* Adopters may modify this file to suit their platform. Adopters are
|
||||||
|
* encouraged to submit platform specific modifications to the Khronos
|
||||||
|
* group so that they can be included in future versions of this file.
|
||||||
|
* Please submit changes by filing pull requests or issues on
|
||||||
|
* the EGL Registry repository linked above.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* See the Implementer's Guidelines for information about where this file
|
||||||
|
* should be located on your system and for more details of its use:
|
||||||
|
* http://www.khronos.org/registry/implementers_guide.pdf
|
||||||
|
*
|
||||||
|
* This file should be included as
|
||||||
|
* #include <KHR/khrplatform.h>
|
||||||
|
* by Khronos client API header files that use its types and defines.
|
||||||
|
*
|
||||||
|
* The types in khrplatform.h should only be used to define API-specific types.
|
||||||
|
*
|
||||||
|
* Types defined in khrplatform.h:
|
||||||
|
* khronos_int8_t signed 8 bit
|
||||||
|
* khronos_uint8_t unsigned 8 bit
|
||||||
|
* khronos_int16_t signed 16 bit
|
||||||
|
* khronos_uint16_t unsigned 16 bit
|
||||||
|
* khronos_int32_t signed 32 bit
|
||||||
|
* khronos_uint32_t unsigned 32 bit
|
||||||
|
* khronos_int64_t signed 64 bit
|
||||||
|
* khronos_uint64_t unsigned 64 bit
|
||||||
|
* khronos_intptr_t signed same number of bits as a pointer
|
||||||
|
* khronos_uintptr_t unsigned same number of bits as a pointer
|
||||||
|
* khronos_ssize_t signed size
|
||||||
|
* khronos_usize_t unsigned size
|
||||||
|
* khronos_float_t signed 32 bit floating point
|
||||||
|
* khronos_time_ns_t unsigned 64 bit time in nanoseconds
|
||||||
|
* khronos_utime_nanoseconds_t unsigned time interval or absolute time in
|
||||||
|
* nanoseconds
|
||||||
|
* khronos_stime_nanoseconds_t signed time interval in nanoseconds
|
||||||
|
* khronos_boolean_enum_t enumerated boolean type. This should
|
||||||
|
* only be used as a base type when a client API's boolean type is
|
||||||
|
* an enum. Client APIs which use an integer or other type for
|
||||||
|
* booleans cannot use this as the base type for their boolean.
|
||||||
|
*
|
||||||
|
* Tokens defined in khrplatform.h:
|
||||||
|
*
|
||||||
|
* KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
|
||||||
|
*
|
||||||
|
* KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
|
||||||
|
* KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
|
||||||
|
*
|
||||||
|
* Calling convention macros defined in this file:
|
||||||
|
* KHRONOS_APICALL
|
||||||
|
* KHRONOS_APIENTRY
|
||||||
|
* KHRONOS_APIATTRIBUTES
|
||||||
|
*
|
||||||
|
* These may be used in function prototypes as:
|
||||||
|
*
|
||||||
|
* KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
|
||||||
|
* int arg1,
|
||||||
|
* int arg2) KHRONOS_APIATTRIBUTES;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APICALL
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This precedes the return type of the function in the function prototype.
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32) && !defined(__SCITECH_SNAP__)
|
||||||
|
# define KHRONOS_APICALL __declspec(dllimport)
|
||||||
|
#elif defined (__SYMBIAN32__)
|
||||||
|
# define KHRONOS_APICALL IMPORT_C
|
||||||
|
#elif defined(__ANDROID__)
|
||||||
|
# define KHRONOS_APICALL __attribute__((visibility("default")))
|
||||||
|
#else
|
||||||
|
# define KHRONOS_APICALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APIENTRY
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This follows the return type of the function and precedes the function
|
||||||
|
* name in the function prototype.
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
|
||||||
|
/* Win32 but not WinCE */
|
||||||
|
# define KHRONOS_APIENTRY __stdcall
|
||||||
|
#else
|
||||||
|
# define KHRONOS_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* Definition of KHRONOS_APIATTRIBUTES
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
* This follows the closing parenthesis of the function prototype arguments.
|
||||||
|
*/
|
||||||
|
#if defined (__ARMCC_2__)
|
||||||
|
#define KHRONOS_APIATTRIBUTES __softfp
|
||||||
|
#else
|
||||||
|
#define KHRONOS_APIATTRIBUTES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
* basic type definitions
|
||||||
|
*-----------------------------------------------------------------------*/
|
||||||
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Using <stdint.h>
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(__VMS ) || defined(__sgi)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Using <inttypes.h>
|
||||||
|
*/
|
||||||
|
#include <inttypes.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Win32
|
||||||
|
*/
|
||||||
|
typedef __int32 khronos_int32_t;
|
||||||
|
typedef unsigned __int32 khronos_uint32_t;
|
||||||
|
typedef __int64 khronos_int64_t;
|
||||||
|
typedef unsigned __int64 khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif defined(__sun__) || defined(__digital__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sun or Digital
|
||||||
|
*/
|
||||||
|
typedef int khronos_int32_t;
|
||||||
|
typedef unsigned int khronos_uint32_t;
|
||||||
|
#if defined(__arch64__) || defined(_LP64)
|
||||||
|
typedef long int khronos_int64_t;
|
||||||
|
typedef unsigned long int khronos_uint64_t;
|
||||||
|
#else
|
||||||
|
typedef long long int khronos_int64_t;
|
||||||
|
typedef unsigned long long int khronos_uint64_t;
|
||||||
|
#endif /* __arch64__ */
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#elif 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hypothetical platform with no float or int64 support
|
||||||
|
*/
|
||||||
|
typedef int khronos_int32_t;
|
||||||
|
typedef unsigned int khronos_uint32_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 0
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 0
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic fallback
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
typedef int32_t khronos_int32_t;
|
||||||
|
typedef uint32_t khronos_uint32_t;
|
||||||
|
typedef int64_t khronos_int64_t;
|
||||||
|
typedef uint64_t khronos_uint64_t;
|
||||||
|
#define KHRONOS_SUPPORT_INT64 1
|
||||||
|
#define KHRONOS_SUPPORT_FLOAT 1
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types that are (so far) the same on all platforms
|
||||||
|
*/
|
||||||
|
typedef signed char khronos_int8_t;
|
||||||
|
typedef unsigned char khronos_uint8_t;
|
||||||
|
typedef signed short int khronos_int16_t;
|
||||||
|
typedef unsigned short int khronos_uint16_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types that differ between LLP64 and LP64 architectures - in LLP64,
|
||||||
|
* pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
|
||||||
|
* to be the only LLP64 architecture in current use.
|
||||||
|
*/
|
||||||
|
#ifdef _WIN64
|
||||||
|
typedef signed long long int khronos_intptr_t;
|
||||||
|
typedef unsigned long long int khronos_uintptr_t;
|
||||||
|
typedef signed long long int khronos_ssize_t;
|
||||||
|
typedef unsigned long long int khronos_usize_t;
|
||||||
|
#else
|
||||||
|
typedef signed long int khronos_intptr_t;
|
||||||
|
typedef unsigned long int khronos_uintptr_t;
|
||||||
|
typedef signed long int khronos_ssize_t;
|
||||||
|
typedef unsigned long int khronos_usize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if KHRONOS_SUPPORT_FLOAT
|
||||||
|
/*
|
||||||
|
* Float type
|
||||||
|
*/
|
||||||
|
typedef float khronos_float_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if KHRONOS_SUPPORT_INT64
|
||||||
|
/* Time types
|
||||||
|
*
|
||||||
|
* These types can be used to represent a time interval in nanoseconds or
|
||||||
|
* an absolute Unadjusted System Time. Unadjusted System Time is the number
|
||||||
|
* of nanoseconds since some arbitrary system event (e.g. since the last
|
||||||
|
* time the system booted). The Unadjusted System Time is an unsigned
|
||||||
|
* 64 bit value that wraps back to 0 every 584 years. Time intervals
|
||||||
|
* may be either signed or unsigned.
|
||||||
|
*/
|
||||||
|
typedef khronos_uint64_t khronos_utime_nanoseconds_t;
|
||||||
|
typedef khronos_int64_t khronos_stime_nanoseconds_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Dummy value used to pad enum types to 32 bits.
|
||||||
|
*/
|
||||||
|
#ifndef KHRONOS_MAX_ENUM
|
||||||
|
#define KHRONOS_MAX_ENUM 0x7FFFFFFF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enumerated boolean type
|
||||||
|
*
|
||||||
|
* Values other than zero should be considered to be true. Therefore
|
||||||
|
* comparisons should not be made against KHRONOS_TRUE.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
KHRONOS_FALSE = 0,
|
||||||
|
KHRONOS_TRUE = 1,
|
||||||
|
KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
|
||||||
|
} khronos_boolean_enum_t;
|
||||||
|
|
||||||
|
#endif /* __khrplatform_h_ */
|
||||||
@@ -1,50 +1,53 @@
|
|||||||
cmake_minimum_required(VERSION 3.7)
|
cmake_minimum_required(VERSION 3.7)
|
||||||
project(AEON CXX)
|
project(AEON)
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} CMakeModules/)
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules/")
|
||||||
cmake_policy(SET CMP0037 OLD) # alow for spaces in file names
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
|
||||||
|
|
||||||
# set(CMAKE_BUILD_TYPE Debug)
|
|
||||||
# set(CMAKE_CXX_FLAGS "-Ofast")
|
|
||||||
|
|
||||||
# Adds RESOURCES constant in C++
|
|
||||||
add_definitions(-DRESOURCES="${CMAKE_SOURCE_DIR}/resources/")
|
|
||||||
message(${CMAKE_SOURCE_DIR}/resources)
|
|
||||||
|
|
||||||
set(exe out)
|
|
||||||
|
|
||||||
file(GLOB EngineSource
|
|
||||||
Aeon/*.cpp
|
|
||||||
Aeon/ThirdParty/*.cpp
|
|
||||||
Aeon/Maths/*.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
#temp
|
|
||||||
file (GLOB GameSource
|
|
||||||
Game/*.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set(THREADS_PREFER_PTHREAD_FLAD ON)
|
set(THREADS_PREFER_PTHREAD_FLAD ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
# Find GL and GLX package
|
# Find GL and GLX package
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
|
find_package(SDL2 REQUIRED)
|
||||||
|
|
||||||
include_directories(".")
|
# Adds RESOURCES constant in C++
|
||||||
include_directories(${WinSDK})
|
add_definitions(-DRESOURCES="${CMAKE_SOURCE_DIR}/resources/")
|
||||||
|
message(${CMAKE_SOURCE_DIR}/resources)
|
||||||
|
|
||||||
add_executable(Aeon
|
set(Aeon Aeon)
|
||||||
${EngineSource} ${GameSource}
|
|
||||||
|
file(GLOB EngineSource
|
||||||
|
Aeon/*.cpp
|
||||||
|
Aeon/Core/*.cpp
|
||||||
|
Aeon/Maths/*.cpp
|
||||||
|
Aeon/Profiling/*.cpp
|
||||||
|
Aeon/ThirdParty/*.cpp
|
||||||
|
Aeon/ThirdParty/*.c
|
||||||
)
|
)
|
||||||
|
|
||||||
link_libraries(${exe}
|
#temp
|
||||||
Threads::Threads
|
file(GLOB GameSource
|
||||||
OpenGL::OpenGL
|
Game/*.cpp
|
||||||
OpenGL::GL
|
)
|
||||||
OpenGL::GLX
|
|
||||||
|
include_directories(${Aeon}
|
||||||
|
"."
|
||||||
${WinSDK}
|
${WinSDK}
|
||||||
|
${SDL2_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(${Aeon}
|
||||||
|
${EngineSource}
|
||||||
|
${GameSource}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${Aeon}
|
||||||
|
${WinSDK}
|
||||||
|
${SDL2_LIBRARIES}
|
||||||
|
Threads::Threads
|
||||||
|
OpenGL::GL
|
||||||
)
|
)
|
||||||
|
|||||||
197
CMakeModules/FindSDL2.cmake
Normal file
197
CMakeModules/FindSDL2.cmake
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||||
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||||
|
|
||||||
|
#.rst:
|
||||||
|
# FindSDL2
|
||||||
|
# -------
|
||||||
|
#
|
||||||
|
# Locate SDL2 library
|
||||||
|
#
|
||||||
|
# This module defines
|
||||||
|
#
|
||||||
|
# ::
|
||||||
|
#
|
||||||
|
# SDL2_LIBRARY, the name of the library to link against
|
||||||
|
# SDL2_FOUND, if false, do not try to link to SDL
|
||||||
|
# SDL2_INCLUDE_DIR, where to find SDL.h
|
||||||
|
# SDL2_VERSION_STRING, human-readable string containing the version of SDL
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This module responds to the flag:
|
||||||
|
#
|
||||||
|
# ::
|
||||||
|
#
|
||||||
|
# SDL2_BUILDING_LIBRARY
|
||||||
|
# If this is defined, then no SDL2_main will be linked in because
|
||||||
|
# only applications need main().
|
||||||
|
# Otherwise, it is assumed you are building an application and this
|
||||||
|
# module will attempt to locate and set the proper link flags
|
||||||
|
# as part of the returned SDL2_LIBRARY variable.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Don't forget to include SDLmain.h and SDLmain.m your project for the
|
||||||
|
# OS X framework based version. (Other versions link to -lSDLmain which
|
||||||
|
# this module will try to find on your behalf.) Also for OS X, this
|
||||||
|
# module will automatically add the -framework Cocoa on your behalf.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your
|
||||||
|
# configuration and no SDL2_LIBRARY, it means CMake did not find your SDL
|
||||||
|
# library (SDL.dll, libsdl.so, SDL.framework, etc). Set
|
||||||
|
# SDL2_LIBRARY_TEMP to point to your SDL library, and configure again.
|
||||||
|
# Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this
|
||||||
|
# value as appropriate. These values are used to generate the final
|
||||||
|
# SDL2_LIBRARY variable, but when these values are unset, SDL2_LIBRARY
|
||||||
|
# does not get created.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# $SDL2DIR is an environment variable that would correspond to the
|
||||||
|
# ./configure --prefix=$SDL2DIR used in building SDL. l.e.galup 9-20-02
|
||||||
|
#
|
||||||
|
# Modified by Eric Wing. Added code to assist with automated building
|
||||||
|
# by using environmental variables and providing a more
|
||||||
|
# controlled/consistent search behavior. Added new modifications to
|
||||||
|
# recognize OS X frameworks and additional Unix paths (FreeBSD, etc).
|
||||||
|
# Also corrected the header search path to follow "proper" SDL
|
||||||
|
# guidelines. Added a search for SDLmain which is needed by some
|
||||||
|
# platforms. Added a search for threads which is needed by some
|
||||||
|
# platforms. Added needed compile switches for MinGW.
|
||||||
|
#
|
||||||
|
# On OSX, this will prefer the Framework version (if found) over others.
|
||||||
|
# People will have to manually change the cache values of SDL2_LIBRARY to
|
||||||
|
# override this selection or set the CMake environment
|
||||||
|
# CMAKE_INCLUDE_PATH to modify the search paths.
|
||||||
|
#
|
||||||
|
# Note that the header path has changed from SDL/SDL.h to just SDL.h
|
||||||
|
# This needed to change because "proper" SDL convention is #include
|
||||||
|
# "SDL.h", not <SDL/SDL.h>. This is done for portability reasons
|
||||||
|
# because not all systems place things in SDL/ (see FreeBSD).
|
||||||
|
|
||||||
|
if(NOT SDL2_DIR)
|
||||||
|
set(SDL2_DIR "" CACHE PATH "SDL2 directory")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(SDL2_INCLUDE_DIR SDL.h
|
||||||
|
HINTS
|
||||||
|
ENV SDL2DIR
|
||||||
|
${SDL2_DIR}
|
||||||
|
PATH_SUFFIXES SDL2
|
||||||
|
# path suffixes to search inside ENV{SDL2DIR}
|
||||||
|
include/SDL2 include
|
||||||
|
)
|
||||||
|
|
||||||
|
# AWLAYS 64 bit
|
||||||
|
set(VC_LIB_PATH_SUFFIX lib/x64)
|
||||||
|
|
||||||
|
find_library(SDL2_LIBRARY_TEMP
|
||||||
|
NAMES SDL2
|
||||||
|
HINTS
|
||||||
|
ENV SDL2DIR
|
||||||
|
${SDL2_DIR}
|
||||||
|
PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Hide this cache variable from the user, it's an internal implementation
|
||||||
|
# detail. The documented library variable for the user is SDL2_LIBRARY
|
||||||
|
# which is derived from SDL2_LIBRARY_TEMP further below.
|
||||||
|
set_property(CACHE SDL2_LIBRARY_TEMP PROPERTY TYPE INTERNAL)
|
||||||
|
|
||||||
|
if(NOT SDL2_BUILDING_LIBRARY)
|
||||||
|
if(NOT SDL2_INCLUDE_DIR MATCHES ".framework")
|
||||||
|
# Non-OS X framework versions expect you to also dynamically link to
|
||||||
|
# SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms
|
||||||
|
# seem to provide SDLmain for compatibility even though they don't
|
||||||
|
# necessarily need it.
|
||||||
|
find_library(SDL2MAIN_LIBRARY
|
||||||
|
NAMES SDL2main
|
||||||
|
HINTS
|
||||||
|
ENV SDL2DIR
|
||||||
|
${SDL2_DIR}
|
||||||
|
PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
|
||||||
|
PATHS
|
||||||
|
/sw
|
||||||
|
/opt/local
|
||||||
|
/opt/csw
|
||||||
|
/opt
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# SDL may require threads on your system.
|
||||||
|
# The Apple build may not need an explicit flag because one of the
|
||||||
|
# frameworks may already provide it.
|
||||||
|
# But for non-OSX systems, I will use the CMake Threads package.
|
||||||
|
if(NOT APPLE)
|
||||||
|
find_package(Threads)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# MinGW needs an additional link flag, -mwindows
|
||||||
|
# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -mwindows
|
||||||
|
if(MINGW)
|
||||||
|
set(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "link flags for MinGW")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SDL2_LIBRARY_TEMP)
|
||||||
|
# For SDLmain
|
||||||
|
if(SDL2MAIN_LIBRARY AND NOT SDL2_BUILDING_LIBRARY)
|
||||||
|
list(FIND SDL2_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" _SDL2_MAIN_INDEX)
|
||||||
|
if(_SDL2_MAIN_INDEX EQUAL -1)
|
||||||
|
set(SDL2_LIBRARY_TEMP "${SDLMAIN_LIBRARY}" ${SDL2_LIBRARY_TEMP})
|
||||||
|
endif()
|
||||||
|
unset(_SDL2_MAIN_INDEX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# For OS X, SDL uses Cocoa as a backend so it must link to Cocoa.
|
||||||
|
# CMake doesn't display the -framework Cocoa string in the UI even
|
||||||
|
# though it actually is there if I modify a pre-used variable.
|
||||||
|
# I think it has something to do with the CACHE STRING.
|
||||||
|
# So I use a temporary variable until the end so I can set the
|
||||||
|
# "real" variable in one-shot.
|
||||||
|
if(APPLE)
|
||||||
|
set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# For threads, as mentioned Apple doesn't need this.
|
||||||
|
# In fact, there seems to be a problem if I used the Threads package
|
||||||
|
# and try using this line, so I'm just skipping it entirely for OS X.
|
||||||
|
if(NOT APPLE)
|
||||||
|
set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# For MinGW library
|
||||||
|
if(MINGW)
|
||||||
|
set(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set the final string here so the GUI reflects the final state.
|
||||||
|
set(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SDL2_INCLUDE_DIR AND EXISTS "${SDL2_INCLUDE_DIR}/SDL2_version.h")
|
||||||
|
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+[0-9]+$")
|
||||||
|
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+[0-9]+$")
|
||||||
|
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+[0-9]+$")
|
||||||
|
string(REGEX REPLACE "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MAJOR "${SDL2_VERSION_MAJOR_LINE}")
|
||||||
|
string(REGEX REPLACE "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MINOR "${SDL2_VERSION_MINOR_LINE}")
|
||||||
|
string(REGEX REPLACE "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_PATCH "${SDL2_VERSION_PATCH_LINE}")
|
||||||
|
set(SDL2_VERSION_STRING ${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH})
|
||||||
|
unset(SDL2_VERSION_MAJOR_LINE)
|
||||||
|
unset(SDL2_VERSION_MINOR_LINE)
|
||||||
|
unset(SDL2_VERSION_PATCH_LINE)
|
||||||
|
unset(SDL2_VERSION_MAJOR)
|
||||||
|
unset(SDL2_VERSION_MINOR)
|
||||||
|
unset(SDL2_VERSION_PATCH)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SDL2_LIBRARIES ${SDL2_LIBRARY} ${SDL2MAIN_LIBRARY})
|
||||||
|
set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR})
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL
|
||||||
|
REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR
|
||||||
|
VERSION_VAR SDL2_VERSION_STRING)
|
||||||
@@ -9,8 +9,7 @@
|
|||||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||||
"cmakeCommandArgs": "",
|
"cmakeCommandArgs": "",
|
||||||
"buildCommandArgs": "-v",
|
"buildCommandArgs": "-v",
|
||||||
"ctestCommandArgs": "",
|
"ctestCommandArgs": ""
|
||||||
"variables": []
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "x64-Release",
|
"name": "x64-Release",
|
||||||
@@ -21,8 +20,7 @@
|
|||||||
"cmakeCommandArgs": "",
|
"cmakeCommandArgs": "",
|
||||||
"buildCommandArgs": "-v",
|
"buildCommandArgs": "-v",
|
||||||
"ctestCommandArgs": "",
|
"ctestCommandArgs": "",
|
||||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
"inheritEnvironments": [ "msvc_x64_x64" ]
|
||||||
"variables": []
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -8,13 +8,14 @@ class ExampleGame : public Aeon::Core::App
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
// take command line args better (parse them first!)
|
// take command line args better (parse them first!)
|
||||||
ExampleGame( int argc, char** argv )
|
ExampleGame()
|
||||||
: App( { "Game with AEON!" } )
|
: App( { "Game with AEON!" } )
|
||||||
{
|
{
|
||||||
|
Run();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
~ExampleGame() override
|
~ExampleGame()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -23,5 +24,7 @@ public:
|
|||||||
|
|
||||||
int main( int argc, char** argv )
|
int main( int argc, char** argv )
|
||||||
{
|
{
|
||||||
ExampleGame game(argc, argv);
|
ExampleGame game;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user