mirror of
https://github.com/Ed94/DuctTaped_GL.git
synced 2024-11-12 21:34:53 -08:00
"Drips in Elmer's Glue", Cameras are hard.
This commit is contained in:
parent
2b71f57284
commit
b3b81b65fe
@ -21,6 +21,10 @@ This merely removes the need to use operators I don't like and wraps them in eas
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <chrono>
|
||||||
|
#include <thread>
|
||||||
|
#include <memory>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -53,6 +57,12 @@ using ptr = Type*;
|
|||||||
template<typename ReturnType, typename... ParamTypes>
|
template<typename ReturnType, typename... ParamTypes>
|
||||||
using FnPtr = ReturnType(*)(ParamTypes...);
|
using FnPtr = ReturnType(*)(ParamTypes...);
|
||||||
|
|
||||||
|
template<typename FnType>
|
||||||
|
using Delegate = std::function<FnType>;
|
||||||
|
|
||||||
|
template<typename ReturnType, typename... ParamTypes>
|
||||||
|
using Func = ReturnType(ParamTypes...);
|
||||||
|
|
||||||
// Strings
|
// Strings
|
||||||
|
|
||||||
template<typename CharType>
|
template<typename CharType>
|
||||||
|
74
DGL.hpp
74
DGL.hpp
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
// Aliases
|
// Aliases
|
||||||
|
|
||||||
@ -31,10 +31,10 @@ namespace GL
|
|||||||
|
|
||||||
// GLFW
|
// GLFW
|
||||||
|
|
||||||
using Monitor = GLFWmonitor ;
|
using Monitor = GLFWmonitor;
|
||||||
using TimeValInt = uint64_t ;
|
using TimeValInt = uint64_t;
|
||||||
using TimeValDec = double ;
|
using TimeValDec = double;
|
||||||
using Window = GLFWwindow ;
|
using Window = GLFWwindow;
|
||||||
using WindowRefList = std::vector< ptr<Window> >;
|
using WindowRefList = std::vector< ptr<Window> >;
|
||||||
|
|
||||||
|
|
||||||
@ -65,12 +65,12 @@ namespace GL
|
|||||||
|
|
||||||
sfn CreateWindow
|
sfn CreateWindow
|
||||||
(
|
(
|
||||||
int _width ,
|
int _width,
|
||||||
int _height ,
|
int _height,
|
||||||
RawString<const char> _title ,
|
RawString<const char> _title,
|
||||||
ptr <Monitor > _monitorToFullscreen ,
|
ptr <Monitor > _monitorToFullscreen,
|
||||||
ptr <Window > _windowToShareResourcesWith
|
ptr <Window > _windowToShareResourcesWith
|
||||||
)
|
)
|
||||||
-> ptr<Window>
|
-> ptr<Window>
|
||||||
{
|
{
|
||||||
Windows.push_back(glfwCreateWindow(_width, _height, _title, _monitorToFullscreen, _windowToShareResourcesWith));
|
Windows.push_back(glfwCreateWindow(_width, _height, _title, _monitorToFullscreen, _windowToShareResourcesWith));
|
||||||
@ -109,6 +109,16 @@ namespace GL
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sfn CanUseRawMouse()
|
||||||
|
{
|
||||||
|
return glfwRawMouseMotionSupported();
|
||||||
|
}
|
||||||
|
|
||||||
|
sfn CursorPositionUpdateBind(ptr<Window> _window, FnPtr<void, double, double> _functionToCall)
|
||||||
|
{
|
||||||
|
glfwSetCursorPosCallback(_window, GLFWcursorposfun(_functionToCall));
|
||||||
|
}
|
||||||
|
|
||||||
sfn DrawArrays(EPrimitives _primitive, gInt _startingIndex, gInt _numToRender)
|
sfn DrawArrays(EPrimitives _primitive, gInt _startingIndex, gInt _numToRender)
|
||||||
{
|
{
|
||||||
glDrawArrays(GLenum(_primitive), _startingIndex, _numToRender); // Starting from vertex 0; 3 vertices total -> 1 triangle.
|
glDrawArrays(GLenum(_primitive), _startingIndex, _numToRender); // Starting from vertex 0; 3 vertices total -> 1 triangle.
|
||||||
@ -119,6 +129,22 @@ namespace GL
|
|||||||
glDrawElements(GLenum(_primitive), _numElements, GLenum(_dataType), _offfsetAddressFromFirstIndex);
|
glDrawElements(GLenum(_primitive), _numElements, GLenum(_dataType), _offfsetAddressFromFirstIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sfn KeyPressed(ptr<Window> _contextWindowRef, EKeyCodes _keyToCheck) -> bool
|
||||||
|
{
|
||||||
|
return glfwGetKey(_contextWindowRef, int(_keyToCheck)) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... CodeType, typename = EKeyCodes>
|
||||||
|
sfn KeysPressed(ptr<Window> _contextWindowRef, CodeType... _otherKeys) -> bool
|
||||||
|
{
|
||||||
|
return ( KeyPressed(_contextWindowRef, _otherKeys) && ... ) == true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sfn GetMouseInputMode(ptr<Window> _contextWindowRef, EMouseMode _mode)
|
||||||
|
{
|
||||||
|
return glfwGetInputMode(_contextWindowRef, GLenum(_mode));
|
||||||
|
}
|
||||||
|
|
||||||
sfn GetTime() -> TimeValDec
|
sfn GetTime() -> TimeValDec
|
||||||
{
|
{
|
||||||
return glfwGetTime();
|
return glfwGetTime();
|
||||||
@ -129,6 +155,19 @@ namespace GL
|
|||||||
return glfwGetTimerValue();
|
return glfwGetTimerValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sfn GetCursorPosition(ptr<Window> _window, ptr<double> _xAxis, ptr<double> _yAxis)
|
||||||
|
{
|
||||||
|
glfwGetCursorPos(_window, _xAxis, _yAxis);
|
||||||
|
}
|
||||||
|
|
||||||
|
sfn ResetCursor(ptr<Window> _window, gFloat _screenCenterWidth, gFloat _screenCenterHeight)
|
||||||
|
{
|
||||||
|
glfwSetCursorPos(_window, _screenCenterWidth, _screenCenterHeight);
|
||||||
|
|
||||||
|
|
||||||
|
glfwSetCursorPos(_window, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
sfn InitalizeGLFW()
|
sfn InitalizeGLFW()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -202,7 +241,7 @@ namespace GL
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn RunBasicWindowLoop_Timed(const ptr<Window> _window, TimeValDec _interval, FnPtr<void> _renderProcedure)
|
sfn RunBasicWindowLoop_Timed(const ptr<Window> _window, TimeValDec _interval, Delegate< Func<void>> _renderProcedure)
|
||||||
{
|
{
|
||||||
TimeValDec start, end, deltaSinceClear = 0.0;
|
TimeValDec start, end, deltaSinceClear = 0.0;
|
||||||
|
|
||||||
@ -236,6 +275,17 @@ namespace GL
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sfn SetClearColor(LinearColor _colorToSet)
|
||||||
|
{
|
||||||
|
glClearColor(_colorToSet.Red, _colorToSet.Green, _colorToSet.Blue, _colorToSet.Alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ModeParam>
|
||||||
|
sfn SetInputMode(ptr<Window> _window, EMouseMode _mouseMode, ModeParam _modeParam)
|
||||||
|
{
|
||||||
|
glfwSetInputMode(_window, GLenum(_mouseMode), GLenum(_modeParam));
|
||||||
|
}
|
||||||
|
|
||||||
sfn RunTimingLoop()
|
sfn RunTimingLoop()
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -266,7 +316,7 @@ namespace GL
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn SetPolygonMode(EFace _desiredFaces, EMode _desiredMode)
|
sfn SetPolygonMode(EFace _desiredFaces, ERenderMode _desiredMode)
|
||||||
{
|
{
|
||||||
glPolygonMode(GLenum(_desiredFaces), GLenum(_desiredMode));
|
glPolygonMode(GLenum(_desiredFaces), GLenum(_desiredMode));
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
sfn BindBuffer(const EBufferTarget _targetType, const ID<Buffer> _buffer)
|
sfn BindBuffer(const EBufferTarget _targetType, const ID<Buffer> _buffer)
|
||||||
{
|
{
|
||||||
|
64
DGL_Enum.hpp
64
DGL_Enum.hpp
@ -5,13 +5,39 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
|
enum class EAxis
|
||||||
|
{
|
||||||
|
X, Y, Z
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class ERotationAxis
|
||||||
|
{
|
||||||
|
Pitch, Yaw, Roll
|
||||||
|
};
|
||||||
|
|
||||||
enum class EBool
|
enum class EBool
|
||||||
{
|
{
|
||||||
True = GL_TRUE ,
|
True = GL_TRUE ,
|
||||||
False = GL_FALSE
|
False = GL_FALSE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class EMouseMode
|
||||||
|
{
|
||||||
|
Cursor = GLFW_CURSOR ,
|
||||||
|
RawMouse = GLFW_RAW_MOUSE_MOTION ,
|
||||||
|
StickyKeys = GLFW_STICKY_KEYS ,
|
||||||
|
StickMouse = GLFW_STICKY_MOUSE_BUTTONS,
|
||||||
|
LockKey = GLFW_LOCK_KEY_MODS ,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class ECursorMode
|
||||||
|
{
|
||||||
|
Normal = GLFW_CURSOR_NORMAL ,
|
||||||
|
Hidden = GLFW_CURSOR_HIDDEN ,
|
||||||
|
Disable = GLFW_CURSOR_DISABLED
|
||||||
|
};
|
||||||
|
|
||||||
enum class EBufferTarget
|
enum class EBufferTarget
|
||||||
{
|
{
|
||||||
@ -66,10 +92,20 @@ namespace GL
|
|||||||
Double = GL_DOUBLE
|
Double = GL_DOUBLE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class EDirection
|
||||||
|
{
|
||||||
|
Up ,
|
||||||
|
Down ,
|
||||||
|
Left ,
|
||||||
|
Right ,
|
||||||
|
Forward ,
|
||||||
|
Backward
|
||||||
|
};
|
||||||
|
|
||||||
enum class EFace
|
enum class EFace
|
||||||
{
|
{
|
||||||
Front = GL_FRONT,
|
Front = GL_FRONT ,
|
||||||
Back = GL_BACK,
|
Back = GL_BACK ,
|
||||||
Front_and_Back = GL_FRONT_AND_BACK
|
Front_and_Back = GL_FRONT_AND_BACK
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -81,6 +117,24 @@ namespace GL
|
|||||||
Stencil = GL_STENCIL_BUFFER_BIT
|
Stencil = GL_STENCIL_BUFFER_BIT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class EKeyCodes
|
||||||
|
{
|
||||||
|
F1 = GLFW_KEY_F1 ,
|
||||||
|
A = GLFW_KEY_A ,
|
||||||
|
D = GLFW_KEY_D ,
|
||||||
|
E = GLFW_KEY_E ,
|
||||||
|
Q = GLFW_KEY_Q ,
|
||||||
|
S = GLFW_KEY_S ,
|
||||||
|
W = GLFW_KEY_W ,
|
||||||
|
LeftShift = GLFW_KEY_LEFT_SHIFT
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class EKeyState
|
||||||
|
{
|
||||||
|
Pressed = GLFW_PRESS ,
|
||||||
|
Released = GLFW_RELEASE
|
||||||
|
};
|
||||||
|
|
||||||
enum class ELODBias
|
enum class ELODBias
|
||||||
{
|
{
|
||||||
Max = GL_MAX_TEXTURE_LOD_BIAS
|
Max = GL_MAX_TEXTURE_LOD_BIAS
|
||||||
@ -102,13 +156,15 @@ namespace GL
|
|||||||
LinearToLinear = GL_LINEAR_MIPMAP_LINEAR
|
LinearToLinear = GL_LINEAR_MIPMAP_LINEAR
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class EMode
|
enum class ERenderMode
|
||||||
{
|
{
|
||||||
Point = GL_POINT,
|
Point = GL_POINT,
|
||||||
Line = GL_LINE ,
|
Line = GL_LINE ,
|
||||||
Fill = GL_FILL
|
Fill = GL_FILL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum class EPrimitives
|
enum class EPrimitives
|
||||||
{
|
{
|
||||||
Points = GL_POINTS,
|
Points = GL_POINTS,
|
||||||
|
@ -5,14 +5,15 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
// Fundamental Types
|
// Fundamental Types
|
||||||
|
|
||||||
using gChar = GLchar ;
|
using gChar = GLchar ;
|
||||||
using gBitfield = GLbitfield;
|
using gBitfield = GLbitfield;
|
||||||
using gFloat = GLfloat ;
|
using gFloat = GLfloat ;
|
||||||
using gInt = GLint ;
|
using gFloatClamped = GLclampf ;
|
||||||
using gUInt = GLuint ;
|
using gInt = GLint ;
|
||||||
using gSize = GLsizei ;
|
using gUInt = GLuint ;
|
||||||
|
using gSize = GLsizei ;
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
namespace Generic
|
namespace Generic
|
||||||
{
|
{
|
||||||
@ -26,6 +26,15 @@ namespace GL
|
|||||||
template<typename ReferenceType>
|
template<typename ReferenceType>
|
||||||
using ID = gUInt;
|
using ID = gUInt;
|
||||||
|
|
||||||
|
|
||||||
|
struct LinearColor
|
||||||
|
{
|
||||||
|
gFloatClamped Red, Green, Blue, Alpha;
|
||||||
|
|
||||||
|
LinearColor(gFloatClamped _red, gFloatClamped _green, gFloatClamped _blue, gFloatClamped _alpha) :
|
||||||
|
Red(_red), Green(_green), Blue(_blue), Alpha(_alpha) {};
|
||||||
|
};
|
||||||
|
|
||||||
// ID Reference Types
|
// ID Reference Types
|
||||||
|
|
||||||
class Buffer;
|
class Buffer;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
|
|
||||||
struct Primitive
|
struct Primitive
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
// Some Raw Source Defaults:
|
// Some Raw Source Defaults:
|
||||||
|
|
||||||
@ -45,10 +45,10 @@ namespace GL
|
|||||||
|
|
||||||
// Forward Declarations
|
// Forward Declarations
|
||||||
|
|
||||||
sfn GetShaderInfo(ID<Shader> _shader , gSize _logLength , ptr<gSize> _infoLengthRef , RawString<gChar> _infoLogRef) -> void;
|
sfn GetShaderInfo ( ID<Shader > _shader , gSize _logLength , ptr<gSize> _infoLengthRef , RawString<gChar> _infoLogRef) -> void;
|
||||||
sfn QueryShader (ID<Shader> _shaderToQuery, EShaderInfo _shaderInfoDesired, ptr<gInt > _requestedInfoObject ) -> void;
|
sfn QueryShader ( ID<Shader > _shaderToQuery , EShaderInfo _shaderInfoDesired, ptr<gInt > _requestedInfoObject ) -> void;
|
||||||
sfn MakeShader(Ref(ID<Shader>) _shaderIDHolder, EShaderType _typeOfShader, uInt64 _numberOfStringElements, ptr<RawString<const gChar>> _sourceCode, ptr<const gInt> _lengthsOfStrings) -> void;
|
sfn MakeShader (Ref(ID<Shader >) _shaderIDHolder , EShaderType _typeOfShader , uInt64 _numberOfStringElements, ptr<RawString<const gChar>> _sourceCode, ptr<const gInt> _lengthsOfStrings) -> void;
|
||||||
sfn MakeShaderProgram(Ref(ID<ShaderProgram>) _shaderProgramIDHolder, const ID<Shader> _vertexShader, const ID<Shader> _fragShader) -> void;
|
sfn MakeShaderProgram(Ref(ID<ShaderProgram>) _shaderProgramIDHolder, const ID<Shader> _vertexShader, const ID<Shader> _fragShader) -> void;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -155,6 +155,8 @@ namespace GL
|
|||||||
sfn GetShaderProgramInfo(ID<ShaderProgram> _shaderProgram, gSize _logLength, ptr<gSize> _infoLengthRef, RawString<gChar> _infoLogRef) -> void
|
sfn GetShaderProgramInfo(ID<ShaderProgram> _shaderProgram, gSize _logLength, ptr<gSize> _infoLengthRef, RawString<gChar> _infoLogRef) -> void
|
||||||
{
|
{
|
||||||
glGetProgramInfoLog(_shaderProgram, _logLength, _infoLengthRef, _infoLogRef);
|
glGetProgramInfoLog(_shaderProgram, _logLength, _infoLengthRef, _infoLogRef);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn GetUniformVariable(const ID<ShaderProgram> _programID, RawString<const char> _nameOfVariable) -> ID<Matrix>
|
sfn GetUniformVariable(const ID<ShaderProgram> _programID, RawString<const char> _nameOfVariable) -> ID<Matrix>
|
||||||
@ -172,11 +174,15 @@ namespace GL
|
|||||||
sfn QueryShader(ID<Shader> _shaderToQuery, EShaderInfo _shaderInfoDesired, ptr<gInt> _requestedInfoObject) -> void
|
sfn QueryShader(ID<Shader> _shaderToQuery, EShaderInfo _shaderInfoDesired, ptr<gInt> _requestedInfoObject) -> void
|
||||||
{
|
{
|
||||||
glGetShaderiv(_shaderToQuery, GLenum(_shaderInfoDesired), _requestedInfoObject);
|
glGetShaderiv(_shaderToQuery, GLenum(_shaderInfoDesired), _requestedInfoObject);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn QueryShaderProgram(ID<ShaderProgram> _shaderToQuery, EShaderProgramInfo _shaderProgramInfoDesired, ptr<gInt> _requestedInfoObject) -> void
|
sfn QueryShaderProgram(ID<ShaderProgram> _shaderToQuery, EShaderProgramInfo _shaderProgramInfoDesired, ptr<gInt> _requestedInfoObject) -> void
|
||||||
{
|
{
|
||||||
glGetProgramiv(_shaderToQuery, GLenum(_shaderProgramInfoDesired), _requestedInfoObject);
|
glGetProgramiv(_shaderToQuery, GLenum(_shaderProgramInfoDesired), _requestedInfoObject);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn LoadShaders(RawString<const char> _vertexShaderFilePath, RawString<const char> _fragmentShaderFilePath) -> ID<ShaderProgram>
|
sfn LoadShaders(RawString<const char> _vertexShaderFilePath, RawString<const char> _fragmentShaderFilePath) -> ID<ShaderProgram>
|
||||||
@ -263,25 +269,31 @@ namespace GL
|
|||||||
ID<Shader> VertexShader ;
|
ID<Shader> VertexShader ;
|
||||||
ID<Shader> FragmentShader;
|
ID<Shader> FragmentShader;
|
||||||
|
|
||||||
MakeShader(VertexShader , EShaderType::Vertex , 1, Address(GL::RawVertextShaderSource ), NULL);
|
MakeShader(VertexShader , EShaderType::Vertex , 1, Address(DGL::RawVertextShaderSource ), NULL);
|
||||||
MakeShader(FragmentShader, EShaderType::Fragment, 1, Address(GL::RawFragmentShaderSource), NULL);
|
MakeShader(FragmentShader, EShaderType::Fragment, 1, Address(DGL::RawFragmentShaderSource), NULL);
|
||||||
|
|
||||||
GL::MakeShaderProgram(RawShader, VertexShader, FragmentShader);
|
DGL::MakeShaderProgram(RawShader, VertexShader, FragmentShader);
|
||||||
|
|
||||||
GL::DeleteShader(VertexShader );
|
DGL::DeleteShader(VertexShader );
|
||||||
GL::DeleteShader(FragmentShader);
|
DGL::DeleteShader(FragmentShader);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn LoadSimpleShader()
|
sfn LoadSimpleShader()
|
||||||
{
|
{
|
||||||
SimpleShader = LoadShaders("SimpleVertexShader.vert", "SimpleFragmentShader.frag");
|
SimpleShader = LoadShaders("SimpleVertexShader.vert", "SimpleFragmentShader.frag");
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn LoadSimpleShader_Transformed()
|
sfn LoadSimpleShader_Transformed()
|
||||||
{
|
{
|
||||||
SimpleShader_Transformed = LoadShaders("SimpleTransform.vert", "SingleColor.frag");
|
SimpleShader_Transformed = LoadShaders("SimpleTransform.vert", "SingleColor.frag");
|
||||||
|
|
||||||
ScreenSpaceVarID = GL::GetUniformVariable(GL::SimpleShader_Transformed, "modelViewProjection");
|
ScreenSpaceVarID = DGL::GetUniformVariable(DGL::SimpleShader_Transformed, "modelViewProjection");
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn LoadDefaultShaders()
|
sfn LoadDefaultShaders()
|
||||||
@ -289,6 +301,8 @@ namespace GL
|
|||||||
LoadRawShader ();
|
LoadRawShader ();
|
||||||
LoadSimpleShader ();
|
LoadSimpleShader ();
|
||||||
LoadSimpleShader_Transformed();
|
LoadSimpleShader_Transformed();
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn MakeShader
|
sfn MakeShader
|
||||||
@ -306,6 +320,8 @@ namespace GL
|
|||||||
BindShaderSource(_shaderIDHolder, _numberOfStringElements, _sourceCode, _lengthsOfStrings);
|
BindShaderSource(_shaderIDHolder, _numberOfStringElements, _sourceCode, _lengthsOfStrings);
|
||||||
|
|
||||||
CompileShader(_shaderIDHolder);
|
CompileShader(_shaderIDHolder);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn MakeShaderProgram(Ref(ID<ShaderProgram>) _shaderProgramIDHolder, const ID<Shader> _vertexShader, const ID<Shader> _fragShader) -> void
|
sfn MakeShaderProgram(Ref(ID<ShaderProgram>) _shaderProgramIDHolder, const ID<Shader> _vertexShader, const ID<Shader> _fragShader) -> void
|
||||||
@ -350,6 +366,8 @@ namespace GL
|
|||||||
sfn SetUniformVariable_MatrixVariableArray(const ID<Matrix> _matrixID, const gSize _numMatricies, const EBool _shouldTransposeValues, ptr<const float> _dataPtr)
|
sfn SetUniformVariable_MatrixVariableArray(const ID<Matrix> _matrixID, const gSize _numMatricies, const EBool _shouldTransposeValues, ptr<const float> _dataPtr)
|
||||||
{
|
{
|
||||||
glUniformMatrix4fv(_matrixID, _numMatricies, GLenum(_shouldTransposeValues), _dataPtr);
|
glUniformMatrix4fv(_matrixID, _numMatricies, GLenum(_shouldTransposeValues), _dataPtr);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn UseProgramShader(ID<ShaderProgram> _shaderProgramToUse)
|
sfn UseProgramShader(ID<ShaderProgram> _shaderProgramToUse)
|
||||||
|
239
DGL_Space.hpp
239
DGL_Space.hpp
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace GL
|
namespace DGL
|
||||||
{
|
{
|
||||||
using CoordSpace = Matrix4x4;
|
using CoordSpace = Matrix4x4;
|
||||||
using Projection = Matrix4x4;
|
using Projection = Matrix4x4;
|
||||||
@ -18,6 +18,16 @@ namespace GL
|
|||||||
|
|
||||||
// Function
|
// Function
|
||||||
|
|
||||||
|
sfn Cosine(gFloat _angleInRadians)
|
||||||
|
{
|
||||||
|
return glm::cos(_angleInRadians);
|
||||||
|
}
|
||||||
|
|
||||||
|
sfn Sine(gFloat _angleInRadians)
|
||||||
|
{
|
||||||
|
return glm::sin(_angleInRadians);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename Type>
|
template<typename Type>
|
||||||
sfn CreateLookAtView(const Generic::Vector3<Type> _viewPosition, const Generic::Vector3<Type> _lookAtPosition, const Generic::Vector3<Type> _upDirection) -> Matrix4x4
|
sfn CreateLookAtView(const Generic::Vector3<Type> _viewPosition, const Generic::Vector3<Type> _lookAtPosition, const Generic::Vector3<Type> _upDirection) -> Matrix4x4
|
||||||
{
|
{
|
||||||
@ -35,6 +45,11 @@ namespace GL
|
|||||||
return glm::perspective(_fieldOfView, _aspectRatio, _nearPlane, _farPlane);
|
return glm::perspective(_fieldOfView, _aspectRatio, _nearPlane, _farPlane);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sfn Translate(const Matrix4x4 _matrix, Vector3 _translationAmount)
|
||||||
|
{
|
||||||
|
return glm::translate(_matrix, _translationAmount);
|
||||||
|
}
|
||||||
|
|
||||||
sfn Rotate(const Matrix4x4 _matrix, gFloat _rotationAngleAmount, Vector3 _axis) -> Matrix4x4
|
sfn Rotate(const Matrix4x4 _matrix, gFloat _rotationAngleAmount, Vector3 _axis) -> Matrix4x4
|
||||||
{
|
{
|
||||||
return glm::rotate(_matrix, _rotationAngleAmount, _axis);
|
return glm::rotate(_matrix, _rotationAngleAmount, _axis);
|
||||||
@ -46,6 +61,18 @@ namespace GL
|
|||||||
return glm::radians(_degrees);
|
return glm::radians(_degrees);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sfn GetCrossNormal(Vector3 _subj, Vector3 _ref) -> Vector3
|
||||||
|
{
|
||||||
|
return glm::cross(_subj, _ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
sfn GetDirection(Vector3 _vectorSpecified)
|
||||||
|
{
|
||||||
|
return glm::normalize(_vectorSpecified);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct ClippingPlanes
|
struct ClippingPlanes
|
||||||
{
|
{
|
||||||
gFloat Near, Far;
|
gFloat Near, Far;
|
||||||
@ -61,24 +88,28 @@ namespace GL
|
|||||||
NearClippingPlane = 0.1f ,
|
NearClippingPlane = 0.1f ,
|
||||||
FarClippingPlane = 100.0f ;
|
FarClippingPlane = 100.0f ;
|
||||||
|
|
||||||
Vector3 CameraPosition(-3, 0, 0),
|
Vector3 CameraPosition( 0, 0, 2),
|
||||||
LookAtPosition( 0, 0, 0),
|
LookAtPosition( 0, 0, 0),
|
||||||
UpDirection ( 0, 1, 0) ;
|
RightDirection( 1, 0, 0),
|
||||||
|
UpDirection ( 0, 1, 0),
|
||||||
|
FrontDirection( 0, 0, 1) ;
|
||||||
|
|
||||||
gFloat ScreenWidth = 720.0f, ScreenHeight = 450.0f;
|
gFloat ScreenWidth = 720.0f, ScreenHeight = 540.0f, ScreenCenterWidth = ScreenWidth / 2, ScreenCenterHeight = ScreenHeight / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using std::cout; using std::endl;
|
||||||
|
|
||||||
struct Camera
|
struct Camera
|
||||||
{
|
{
|
||||||
gFloat AspectRatio, FieldOfView;
|
gFloat AspectRatio, FieldOfView, Yaw, Pitch, Roll;
|
||||||
|
|
||||||
ClippingPlanes ClipSpace;
|
ClippingPlanes ClipSpace;
|
||||||
|
|
||||||
CoordSpace ViewPort;
|
CoordSpace Viewport;
|
||||||
|
|
||||||
Projection Orthographic, Perspective;
|
Projection Orthographic, Perspective;
|
||||||
|
|
||||||
Vector3 Position, LookAtPosition, UpDirection;
|
Vector3 Position, LookAtPosition, UpDirection, FrontDirection, RightDirection;
|
||||||
|
|
||||||
|
|
||||||
Camera
|
Camera
|
||||||
@ -88,29 +119,211 @@ namespace GL
|
|||||||
ClippingPlanes _clippingPlanes,
|
ClippingPlanes _clippingPlanes,
|
||||||
Vector3 _position ,
|
Vector3 _position ,
|
||||||
Vector3 _lookAtPosition,
|
Vector3 _lookAtPosition,
|
||||||
Vector3 _upDirection
|
Vector3 _upDirection ,
|
||||||
|
Vector3 _frontDirection
|
||||||
) :
|
) :
|
||||||
AspectRatio (_aspectRatio ),
|
AspectRatio (_aspectRatio ),
|
||||||
FieldOfView (_fieldOfView ),
|
FieldOfView (_fieldOfView ),
|
||||||
ClipSpace (_clippingPlanes),
|
ClipSpace (_clippingPlanes),
|
||||||
Position (_position ),
|
Position (_position ),
|
||||||
LookAtPosition(_lookAtPosition),
|
LookAtPosition(_lookAtPosition),
|
||||||
UpDirection (_upDirection )
|
UpDirection (_upDirection ),
|
||||||
|
FrontDirection(_frontDirection)
|
||||||
{
|
{
|
||||||
ViewPort = CreateLookAtView(Position, LookAtPosition, UpDirection);
|
std::cout << UpDirection.x << ", " << UpDirection.y << ", " << UpDirection.z << std::endl;
|
||||||
|
|
||||||
|
Yaw = -90.0f; Pitch = 0; Roll = 0;
|
||||||
|
|
||||||
|
//Yaw = 0;
|
||||||
|
|
||||||
|
UpdateCamera();
|
||||||
|
|
||||||
|
std::cout << UpDirection.x << ", " << UpDirection.y << ", " << UpDirection.z << std::endl;
|
||||||
|
|
||||||
Orthographic = CreateOrthographic(0.0f, DefaultSpace::ScreenWidth, 0.0f, DefaultSpace::ScreenHeight, ClipSpace.Near, ClipSpace.Far);
|
Orthographic = CreateOrthographic(0.0f, DefaultSpace::ScreenWidth, 0.0f, DefaultSpace::ScreenHeight, ClipSpace.Near, ClipSpace.Far);
|
||||||
|
|
||||||
Perspective = CreatePerspective<gFloat>(ToRadians(FieldOfView), AspectRatio, ClipSpace.Near, ClipSpace.Far);
|
Perspective = CreatePerspective<gFloat>(ToRadians(FieldOfView), AspectRatio, ClipSpace.Near, ClipSpace.Far);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sfn Move(EDirection _direction, gFloat _translationAmount, gFloat _deltaTime)
|
||||||
|
{
|
||||||
|
switch (_direction)
|
||||||
|
{
|
||||||
|
case EDirection::Up:
|
||||||
|
{
|
||||||
|
Position += UpDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
LookAtPosition += UpDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EDirection::Down:
|
||||||
|
{
|
||||||
|
Position -= UpDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
LookAtPosition -= UpDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EDirection::Left:
|
||||||
|
{
|
||||||
|
Position += GetDirection(GetCrossNormal(FrontDirection, UpDirection)) * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
//LookAtPosition += GetDirection(GetCrossNormal(FrontDirection, UpDirection)) * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EDirection::Right:
|
||||||
|
{
|
||||||
|
Position -= GetDirection(GetCrossNormal(FrontDirection, UpDirection)) * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
//LookAtPosition -= GetDirection(GetCrossNormal(FrontDirection, UpDirection)) * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EDirection::Forward:
|
||||||
|
{
|
||||||
|
Position -= FrontDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
LookAtPosition -= FrontDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EDirection::Backward:
|
||||||
|
{
|
||||||
|
Position += FrontDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
LookAtPosition += FrontDirection * _translationAmount * _deltaTime;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
throw std::logic_error("Direction move not defined.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sfn Move(Vector3 _translationAmount, Ref(gFloat) _deltaTime)
|
||||||
|
{
|
||||||
|
Position += _translationAmount * _deltaTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
sfn Rotate(ERotationAxis _pivot, gFloat _rotationAmount, gFloat _deltaTime)
|
||||||
|
{
|
||||||
|
switch (_pivot)
|
||||||
|
{
|
||||||
|
case ERotationAxis::Pitch:
|
||||||
|
{
|
||||||
|
Pitch -= _rotationAmount * _deltaTime;
|
||||||
|
|
||||||
|
if (Pitch > 89.9f)
|
||||||
|
{
|
||||||
|
Pitch = 89.9f;
|
||||||
|
}
|
||||||
|
else if (Pitch < -89.9f)
|
||||||
|
{
|
||||||
|
Pitch = -89.9f;
|
||||||
|
}
|
||||||
|
|
||||||
|
//std::cout << "Pitch: " << Pitch << std::endl;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ERotationAxis::Roll:
|
||||||
|
{
|
||||||
|
Roll += _rotationAmount * _deltaTime;
|
||||||
|
|
||||||
|
if (Roll > 89.9f)
|
||||||
|
{
|
||||||
|
Roll = 89.9f;
|
||||||
|
}
|
||||||
|
else if (Roll < -89.9f)
|
||||||
|
{
|
||||||
|
Roll = -89.9f;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ERotationAxis::Yaw:
|
||||||
|
{
|
||||||
|
Yaw += _rotationAmount * _deltaTime;
|
||||||
|
|
||||||
|
/*if (Yaw > 89.9f)
|
||||||
|
{
|
||||||
|
Yaw = 89.9f;
|
||||||
|
}
|
||||||
|
else if (Yaw < -89.9f)
|
||||||
|
{
|
||||||
|
Pitch = -89.9f;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//std::cout << "Yaw: " << Yaw << std::endl;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*std::cout << "Front Direction: " << FrontDirection.x << ", " << FrontDirection.y << ", " << FrontDirection.z << std::endl;
|
||||||
|
std::cout << "Right Direction: " << RightDirection.x << ", " << RightDirection.y << ", " << RightDirection.z << std::endl;
|
||||||
|
std::cout << "Up Direction: " << UpDirection.x << ", " << UpDirection.y << ", " << UpDirection.z << std::endl;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sfn UpdateCamera() -> void
|
||||||
|
{
|
||||||
|
//cout << Pitch << Yaw << Roll << endl;
|
||||||
|
|
||||||
|
//cout << "Cosine: " << Cosine(ToRadians(Yaw)) << endl;
|
||||||
|
|
||||||
|
FrontDirection.x = Cosine(ToRadians(Yaw )) * Cosine(ToRadians(Pitch));
|
||||||
|
FrontDirection.y = Sine (ToRadians(Pitch)) ;
|
||||||
|
FrontDirection.z = Sine (ToRadians(Yaw )) * Cosine(ToRadians(Pitch));
|
||||||
|
|
||||||
|
FrontDirection = GetDirection(FrontDirection );
|
||||||
|
RightDirection = GetDirection(GetCrossNormal(FrontDirection, DefaultSpace::UpDirection ));
|
||||||
|
UpDirection = GetDirection(GetCrossNormal(RightDirection, FrontDirection));
|
||||||
|
|
||||||
|
//Matrix4x4 mRoll = glm::rotate(mRoll , Roll , DefaultSpace::FrontDirection);
|
||||||
|
//Matrix4x4 mPitch = glm::rotate(mPitch, Pitch, DefaultSpace::RightDirection);
|
||||||
|
//Matrix4x4 mYaw = glm::rotate(mYaw , Roll , DefaultSpace::UpDirection );
|
||||||
|
|
||||||
|
//Matrix4x4 rotation = mPitch * mYaw;
|
||||||
|
|
||||||
|
Viewport = CreateLookAtView(Position, LookAtPosition - FrontDirection, UpDirection);
|
||||||
|
|
||||||
|
//glm::mat4 translate = glm::mat4(1.0f);
|
||||||
|
|
||||||
|
//translate = glm::translate(translate, -LookAtPosition);
|
||||||
|
|
||||||
|
//Viewport = rotation * translate;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace DefaultSpace
|
namespace DefaultSpace
|
||||||
{
|
{
|
||||||
Camera WorldCamera(AspectRatio, FieldOfView, ClippingPlanes(NearClippingPlane, FarClippingPlane), CameraPosition, LookAtPosition, UpDirection);
|
Camera WorldCamera
|
||||||
|
(
|
||||||
|
AspectRatio,
|
||||||
|
FieldOfView,
|
||||||
|
ClippingPlanes(NearClippingPlane, FarClippingPlane),
|
||||||
|
CameraPosition,
|
||||||
|
LookAtPosition,
|
||||||
|
UpDirection,
|
||||||
|
FrontDirection
|
||||||
|
);
|
||||||
|
|
||||||
CoordSpace WorldSpace(Matrix4x4(1.0f));
|
CoordSpace WorldSpace(Matrix4x4(1.0f));
|
||||||
|
|
||||||
CoordSpace Screenspace = WorldCamera.Perspective * WorldCamera.ViewPort * WorldSpace;
|
CoordSpace Screenspace = WorldCamera.Perspective * WorldCamera.Viewport * WorldSpace;
|
||||||
|
|
||||||
|
sfn UpdateScreenspace()
|
||||||
|
{
|
||||||
|
//Screenspace = WorldCamera.Perspective * WorldCamera.Viewport * WorldSpace;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
312
Execution.cpp
312
Execution.cpp
@ -1,9 +1,4 @@
|
|||||||
// Cpp STL
|
// Cpp STL
|
||||||
#include <chrono>
|
|
||||||
#include <thread>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Project
|
// Project
|
||||||
#include "DGL.hpp"
|
#include "DGL.hpp"
|
||||||
@ -22,6 +17,8 @@ namespace Execution
|
|||||||
// C++ STL
|
// C++ STL
|
||||||
|
|
||||||
using std::thread;
|
using std::thread;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename Type>
|
template<typename Type>
|
||||||
using UPtr = std::unique_ptr<Type>;
|
using UPtr = std::unique_ptr<Type>;
|
||||||
@ -36,53 +33,92 @@ namespace Execution
|
|||||||
|
|
||||||
// GL
|
// GL
|
||||||
|
|
||||||
using GL::TimeValDec;
|
using DGL::TimeValDec;
|
||||||
using GL::Window ;
|
using DGL::Window ;
|
||||||
using GL::Matrix ;
|
using DGL::Matrix ;
|
||||||
using GL::Matrix4x4 ;
|
using DGL::Matrix4x4 ;
|
||||||
using GL::Vector3 ;
|
using DGL::Vector3 ;
|
||||||
using GL::gFloat ;
|
using DGL::gFloat ;
|
||||||
|
|
||||||
|
|
||||||
bool Exist = true;
|
bool Exist = true;
|
||||||
|
|
||||||
TimeValDec CycleStart, CycleEnd, DeltaTime, InputPollingInterval = 1.0f / 240.0f, RenderInterval = 1.0f / 60.0f;
|
TimeValDec CycleStart, CycleEnd, DeltaTime, InputPollingInterval = 1.0f / 240.0f, PhysicsInterval = 1.0f / 120.0f, RenderInterval = 1.0f / 60.0f;
|
||||||
|
|
||||||
UPtr<thread> BasicLoop, BasicTimedLoop;
|
UPtr<thread> BasicLoop, BasicTimedLoop;
|
||||||
|
|
||||||
|
ptr<Window> DefaultWindow;
|
||||||
|
|
||||||
|
|
||||||
|
gFloat CamMoveSpeed = 3.0f, CamRotationSpeed = 1.0f;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum class CameraActions
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class EMovement
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<typename Device>
|
||||||
|
struct ActionBind
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
Delegate< Func<void>> Action;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct Keyboard
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ActionBinds
|
||||||
|
{
|
||||||
|
static ActionBind<Keyboard> MoveFoward;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Testing
|
// Testing
|
||||||
|
|
||||||
// Foward Declares
|
// Forward Declares
|
||||||
|
|
||||||
sfn RenderProcedure () -> void;
|
sfn RenderProcedure () -> void;
|
||||||
sfn PrepareRenderObjects() -> void;
|
sfn PrepareRenderObjects() -> void;
|
||||||
|
|
||||||
sfn CreateWindow_BasicLoop()
|
sfn CreateWindow_BasicLoop()
|
||||||
{
|
{
|
||||||
GL::InitalizeGLFW();
|
DGL::InitalizeGLFW();
|
||||||
|
|
||||||
deduce windowObj = GL::CreateWindow(720, 450, "Assignment 1: RawLoop", GL::WindowedMode(), GL::NotShared());
|
deduce windowObj = DGL::CreateWindow(720, 540, "Assignment 1: RawLoop", DGL::WindowedMode(), DGL::NotShared());
|
||||||
|
|
||||||
GL::SetCurrentContext(windowObj);
|
DGL::SetCurrentContext(windowObj);
|
||||||
|
|
||||||
GL::RunBasicWindowLoop(windowObj);
|
DGL::RunBasicWindowLoop(windowObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn CreateWindow_TimedRender()
|
sfn CreateWindow_TimedRender()
|
||||||
{
|
{
|
||||||
GL::InitalizeGLFW();
|
DGL::InitalizeGLFW();
|
||||||
|
|
||||||
deduce windowObj = GL::CreateWindow(720, 540, "Assignment 1: Timed Render", GL::WindowedMode(), GL::NotShared());
|
deduce windowObj = DGL::CreateWindow(720, 540, "Assignment 1: Timed Render", DGL::WindowedMode(), DGL::NotShared());
|
||||||
|
|
||||||
GL::SetCurrentContext(windowObj);
|
DGL::SetCurrentContext(windowObj);
|
||||||
|
|
||||||
GL::InitalizeGLEW();
|
DGL::InitalizeGLEW();
|
||||||
|
|
||||||
PrepareRenderObjects();
|
PrepareRenderObjects();
|
||||||
|
|
||||||
GL::RunBasicWindowLoop_Timed(windowObj, 1.0 / 60.0, Address(RenderProcedure));
|
DGL::RunBasicWindowLoop_Timed(windowObj, 1.0 / 60.0, Address(RenderProcedure));
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn PrepareRenderObjects() -> void
|
sfn PrepareRenderObjects() -> void
|
||||||
@ -91,70 +127,248 @@ namespace Execution
|
|||||||
|
|
||||||
RAW_BindAndBufferDataToIDs();
|
RAW_BindAndBufferDataToIDs();
|
||||||
|
|
||||||
GL::LoadDefaultShaders();
|
DGL::LoadDefaultShaders();
|
||||||
|
|
||||||
GL::FormatVertexAttributes<Vertex3>(VertexAttributeIndex, EDataType::Float, ZeroOffset(), Vertex3::ValueCount(), EBool::True);
|
DGL::FormatVertexAttributes<Vertex3>(VertexAttributeIndex, EDataType::Float, ZeroOffset(), Vertex3::ValueCount(), EBool::False);
|
||||||
|
|
||||||
GL::BindBuffer(EBufferTarget::VertexAttributes, 0); // Dunno. Prob unbinding...
|
DGL::BindBuffer(EBufferTarget::VertexAttributes, 0); // Dunno. Prob unbinding...
|
||||||
|
|
||||||
GL::BindVertexArray(0);
|
DGL::BindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn Cycler(FnPtr<void> _inputProcedure, FnPtr<void> _renderProcedure)
|
using DGL::EFrameBuffer;
|
||||||
|
using DGL::LinearColor;
|
||||||
|
using DGL::DefaultSpace::WorldCamera;
|
||||||
|
|
||||||
|
using std::cout; using std::endl;
|
||||||
|
|
||||||
|
using DGL::KeyPressed;
|
||||||
|
using DGL::EKeyCodes;
|
||||||
|
|
||||||
|
using DGL::DefaultSpace::WorldCamera;
|
||||||
|
using DGL::EDirection;
|
||||||
|
|
||||||
|
|
||||||
|
struct CamShouldMove
|
||||||
|
{
|
||||||
|
bool Up, Down, Left, Right, Forward, Backward;
|
||||||
|
|
||||||
|
short int numActive;
|
||||||
|
};
|
||||||
|
|
||||||
|
CamShouldMove CamMoveRequests = { false, false, false, false, false, false, 0 };
|
||||||
|
|
||||||
|
double CursorX, CursorY;
|
||||||
|
|
||||||
|
using DGL::DefaultSpace::ScreenCenterWidth; using DGL::DefaultSpace::ScreenCenterHeight;
|
||||||
|
|
||||||
|
|
||||||
|
TimeValDec InputDelta = 0.0, PhysicsDelta = 0.0, RenderDelta = 0.0;
|
||||||
|
|
||||||
|
using DGL::DefaultSpace::Screenspace;
|
||||||
|
|
||||||
|
sfn Cycler(Delegate< Func<void, ptr<Window>> > _inputProcedure, Delegate< Func<void>> _renderProcedure)
|
||||||
{
|
{
|
||||||
while (Exist)
|
while (Exist)
|
||||||
{
|
{
|
||||||
CycleStart = GL::GetTime();
|
CycleStart = DGL::GetTime();
|
||||||
|
|
||||||
if (DeltaTime >= InputPollingInterval)
|
if (InputDelta >= InputPollingInterval)
|
||||||
{
|
{
|
||||||
GL::PollEvents();
|
DGL::PollEvents();
|
||||||
|
|
||||||
_inputProcedure();
|
glfwGetCursorPos(DefaultWindow, Address(CursorX), Address(CursorY));
|
||||||
|
|
||||||
|
_inputProcedure(DefaultWindow);
|
||||||
|
|
||||||
|
DGL::ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight);
|
||||||
|
|
||||||
|
InputDelta = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DeltaTime >= RenderInterval)
|
if (PhysicsDelta >= PhysicsInterval)
|
||||||
{
|
{
|
||||||
|
if (CamMoveRequests.Up ) WorldCamera.Move(EDirection::Up , CamMoveSpeed / CamMoveRequests.numActive, PhysicsDelta);
|
||||||
|
if (CamMoveRequests.Down ) WorldCamera.Move(EDirection::Down , CamMoveSpeed / CamMoveRequests.numActive, PhysicsDelta);
|
||||||
|
if (CamMoveRequests.Left ) WorldCamera.Move(EDirection::Left , CamMoveSpeed / CamMoveRequests.numActive, PhysicsDelta);
|
||||||
|
if (CamMoveRequests.Right ) WorldCamera.Move(EDirection::Right , CamMoveSpeed / CamMoveRequests.numActive, PhysicsDelta);
|
||||||
|
if (CamMoveRequests.Forward ) WorldCamera.Move(EDirection::Forward , CamMoveSpeed / CamMoveRequests.numActive, PhysicsDelta);
|
||||||
|
if (CamMoveRequests.Backward) WorldCamera.Move(EDirection::Backward, CamMoveSpeed / CamMoveRequests.numActive, PhysicsDelta);
|
||||||
|
|
||||||
|
WorldCamera.UpdateCamera();
|
||||||
|
|
||||||
|
//WorldCamera.Position.y = 0.0;
|
||||||
|
//WorldCamera.LookAtPosition.y = 0.0;
|
||||||
|
|
||||||
|
DGL::DefaultSpace::UpdateScreenspace();
|
||||||
|
|
||||||
|
CamMoveRequests = { false, false, false, false, false, false, 0 };
|
||||||
|
|
||||||
|
PhysicsDelta = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RenderDelta >= RenderInterval)
|
||||||
|
{
|
||||||
|
DGL::ClearBuffer(EFrameBuffer::Color, EFrameBuffer::Depth);
|
||||||
|
|
||||||
|
DGL::SetClearColor(LinearColor(0.12f, 0.12f, 0.12f, 1.0f));
|
||||||
|
|
||||||
_renderProcedure();
|
_renderProcedure();
|
||||||
|
|
||||||
|
DGL::SwapBuffers(DefaultWindow);
|
||||||
|
|
||||||
|
RenderDelta = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CycleEnd = GL::GetTime();
|
CycleEnd = DGL::GetTime();
|
||||||
|
|
||||||
DeltaTime = DeltaTime + CycleEnd - CycleStart;
|
DeltaTime = CycleEnd - CycleStart;
|
||||||
|
|
||||||
|
InputDelta += DeltaTime;
|
||||||
|
PhysicsDelta += DeltaTime;
|
||||||
|
RenderDelta += DeltaTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn InputProcedure()
|
using DGL::EMouseMode; using DGL::ECursorMode;
|
||||||
{
|
|
||||||
|
|
||||||
|
using DGL::DefaultSpace::ScreenCenterWidth; using DGL::DefaultSpace::ScreenCenterHeight;
|
||||||
|
|
||||||
|
sfn InputProcedure(ptr<Window> _currentWindowContext)
|
||||||
|
{
|
||||||
|
if (KeysPressed(_currentWindowContext, EKeyCodes::LeftShift, EKeyCodes::F1))
|
||||||
|
{
|
||||||
|
ECursorMode cursorMode = ECursorMode(GetMouseInputMode(DefaultWindow, EMouseMode::Cursor));
|
||||||
|
|
||||||
|
if (cursorMode == ECursorMode::Normal || cursorMode == ECursorMode::Hidden)
|
||||||
|
{
|
||||||
|
SetInputMode(_currentWindowContext, EMouseMode::Cursor, ECursorMode::Disable);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetInputMode(_currentWindowContext, EMouseMode::Cursor, ECursorMode::Normal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CursorX != 0)//!= ScreenCenterWidth)
|
||||||
|
{
|
||||||
|
WorldCamera.Rotate(DGL::ERotationAxis::Yaw, CursorX * CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
//cout << "Cursor X: " << CursorX << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CursorY != 0)
|
||||||
|
{
|
||||||
|
WorldCamera.Rotate(DGL::ERotationAxis::Pitch, CursorY * CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
//cout << "Cursor Y: " << CursorX << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KeyPressed(_currentWindowContext, EKeyCodes::E))
|
||||||
|
{
|
||||||
|
WorldCamera.Move(EDirection::Up, CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
CamMoveRequests.Up = true;
|
||||||
|
|
||||||
|
CamMoveRequests.numActive++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KeyPressed(_currentWindowContext, EKeyCodes::Q))
|
||||||
|
{
|
||||||
|
WorldCamera.Move(EDirection::Down, CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
CamMoveRequests.Down = true;
|
||||||
|
|
||||||
|
CamMoveRequests.numActive++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KeyPressed(_currentWindowContext, EKeyCodes::A))
|
||||||
|
{
|
||||||
|
WorldCamera.Move(EDirection::Left, CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
CamMoveRequests.Left = true;
|
||||||
|
|
||||||
|
CamMoveRequests.numActive++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KeyPressed(_currentWindowContext, EKeyCodes::D))
|
||||||
|
{
|
||||||
|
WorldCamera.Move(EDirection::Right, CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
CamMoveRequests.Right = true;
|
||||||
|
|
||||||
|
CamMoveRequests.numActive++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KeyPressed(_currentWindowContext, EKeyCodes::W))
|
||||||
|
{
|
||||||
|
WorldCamera.Move(EDirection::Forward, CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
CamMoveRequests.Forward = true;
|
||||||
|
|
||||||
|
CamMoveRequests.numActive++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KeyPressed(_currentWindowContext, EKeyCodes::S))
|
||||||
|
{
|
||||||
|
WorldCamera.Move(EDirection::Backward, CamMoveSpeed, InputDelta);
|
||||||
|
|
||||||
|
CamMoveRequests.Backward = true;
|
||||||
|
|
||||||
|
CamMoveRequests.numActive++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn RenderProcedure() -> void
|
sfn RenderProcedure() -> void
|
||||||
{
|
{
|
||||||
GL::EnableVertexAttributeArray(VertexAttributeIndex);
|
DGL::EnableVertexAttributeArray(VertexAttributeIndex);
|
||||||
|
|
||||||
GL::SetPolygonMode(GL::EFace::Front_and_Back, GL::EMode::Fill);
|
DGL::SetPolygonMode(DGL::EFace::Front_and_Back, DGL::ERenderMode::Line);
|
||||||
|
|
||||||
GL::DefaultSpace::WorldSpace = GL::Rotate(GL::DefaultSpace::WorldSpace, 0.0035f, Vector3(0.0f, 0.5f, 0.0f));
|
DGL::DefaultSpace::WorldSpace = DGL::Rotate(DGL::DefaultSpace::WorldSpace, 0.0035f, Vector3(0.0f, 0.5f, 0.0f));
|
||||||
|
|
||||||
GL::DefaultSpace::Screenspace = GL::DefaultSpace::WorldCamera.Perspective * GL::DefaultSpace::WorldCamera.ViewPort * GL::DefaultSpace::WorldSpace;
|
DGL::DefaultSpace::Screenspace = DGL::DefaultSpace::WorldCamera.Perspective * DGL::DefaultSpace::WorldCamera.Viewport * DGL::DefaultSpace::WorldSpace;
|
||||||
|
|
||||||
GL::UseProgramShader(GL::SimpleShader_Transformed);
|
DGL::UseProgramShader(DGL::SimpleShader_Transformed);
|
||||||
|
|
||||||
GL::SetUniformVariable_MatrixVariableArray(GL::ScreenSpaceVarID, 1, GL::EBool::False, Address(GL::DefaultSpace::Screenspace[0][0]));
|
DGL::SetUniformVariable_MatrixVariableArray(DGL::ScreenSpaceVarID, 1, DGL::EBool::False, Address(DGL::DefaultSpace::Screenspace[0][0]));
|
||||||
|
|
||||||
GL::BindVertexArray(VertexArrayObj);
|
DGL::BindVertexArray(VertexArrayObj);
|
||||||
|
|
||||||
GL::DrawArrays(GL::EPrimitives::Triangles, 0, TriangleRaw::VertexCount());
|
DGL::DrawArrays(DGL::EPrimitives::Triangles, 0, TriangleRaw::VertexCount());
|
||||||
|
|
||||||
GL::DisableVertexAttributeArray(VertexAttributeIndex);
|
DGL::DrawElements(DGL::EPrimitives::Triangles, 6, EDataType::UnsignedInt, ZeroOffset());
|
||||||
|
|
||||||
|
//GL::BindVertexArray(0);
|
||||||
|
|
||||||
|
DGL::DisableVertexAttributeArray(VertexAttributeIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn PrepWorkspace()
|
sfn PrepWorkspace()
|
||||||
{
|
{
|
||||||
|
using DGL::DefaultSpace::ScreenWidth ;
|
||||||
|
using DGL::DefaultSpace::ScreenHeight;
|
||||||
|
|
||||||
|
DGL::InitalizeGLFW();
|
||||||
|
|
||||||
|
DefaultWindow = DGL::CreateWindow(ScreenWidth, ScreenHeight, "Assignment 1: Cam Movement Test", DGL::WindowedMode(), DGL::NotShared());
|
||||||
|
|
||||||
|
DGL::SetCurrentContext(DefaultWindow);
|
||||||
|
|
||||||
|
DGL::SetInputMode(DefaultWindow, DGL::EMouseMode::Cursor, DGL::ECursorMode::Disable);
|
||||||
|
|
||||||
|
DGL::ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight);
|
||||||
|
|
||||||
|
if (DGL::CanUseRawMouse())
|
||||||
|
{
|
||||||
|
DGL::SetInputMode(DefaultWindow, DGL::EMouseMode::RawMouse, DGL::EBool::True);
|
||||||
|
}
|
||||||
|
|
||||||
|
DGL::InitalizeGLEW();
|
||||||
|
|
||||||
|
PrepareRenderObjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -162,13 +376,11 @@ namespace Execution
|
|||||||
|
|
||||||
sfn Execute() -> ExitCode
|
sfn Execute() -> ExitCode
|
||||||
{
|
{
|
||||||
/*PrepWorkspace();*/
|
PrepWorkspace();
|
||||||
|
|
||||||
//Cycler(Address(InputProcedure), Address(RenderProcedure));
|
Cycler(InputProcedure, RenderProcedure);
|
||||||
|
|
||||||
CreateWindow_TimedRender();
|
DGL::TerminateGLFW();
|
||||||
|
|
||||||
GL::TerminateGLFW();
|
|
||||||
|
|
||||||
return ExitCode::Success;
|
return ExitCode::Success;
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ public:
|
|||||||
checkCompileErrors(geometry, "GEOMETRY");
|
checkCompileErrors(geometry, "GEOMETRY");
|
||||||
}
|
}
|
||||||
|
|
||||||
GL::MakeShaderProgram(ID, vertex, fragment);
|
DGL::MakeShaderProgram(ID, vertex, fragment);
|
||||||
|
|
||||||
// shader Program
|
// shader Program
|
||||||
/* ID = glCreateProgram();
|
/* ID = glCreateProgram();
|
||||||
|
@ -6,14 +6,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
using GL::gFloat;
|
using DGL::gFloat;
|
||||||
using GL::VertexBuffer;
|
using DGL::VertexBuffer;
|
||||||
using GL::EBufferTarget;
|
using DGL::EBufferTarget;
|
||||||
using GL::EBufferUsage;
|
using DGL::EBufferUsage;
|
||||||
using GL::Buffer;
|
using DGL::Buffer;
|
||||||
using GL::ID;
|
using DGL::ID;
|
||||||
using GL::gInt;
|
using DGL::gInt;
|
||||||
using GL::gSize;
|
using DGL::gSize;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -37,9 +37,9 @@ struct TriangleRaw
|
|||||||
|
|
||||||
TriangleRaw EquilateralTriangleVerticies =
|
TriangleRaw EquilateralTriangleVerticies =
|
||||||
{
|
{
|
||||||
{ -1.0f, -1.0f, 0.0f },
|
{ -1.0f, -1.0f, 0.0f }, // Vert1
|
||||||
{ 1.0f, -1.0f, 0.0f },
|
{ 1.0f, -1.0f, 0.0f }, // Vert2
|
||||||
{ 0.0f, 1.0f, 0.0f }
|
{ 0.0f, 1.0f, 0.0f } // Vert 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -87,10 +87,10 @@ struct RectangleIndices
|
|||||||
|
|
||||||
RectangleCompressed rectCompress =
|
RectangleCompressed rectCompress =
|
||||||
{
|
{
|
||||||
{ 0.5f, 0.5f, 0.0f },
|
{ 1.0f, 1.0f, 0.0f },
|
||||||
{ 0.5f, -0.5f, 0.0f },
|
{ 1.0f, -1.0f, 0.0f },
|
||||||
{ -0.5f, -0.5f, 0.0f },
|
{ -1.0f, -1.0f, 0.0f },
|
||||||
{ -0.5f, 0.5f, 0.0f }
|
{ -1.0f, 1.0f, 0.0f }
|
||||||
};
|
};
|
||||||
|
|
||||||
RectangleIndices rectIndices =
|
RectangleIndices rectIndices =
|
||||||
@ -99,7 +99,7 @@ RectangleIndices rectIndices =
|
|||||||
{ 1, 2, 3 }
|
{ 1, 2, 3 }
|
||||||
};
|
};
|
||||||
|
|
||||||
using GL::ElementBuffer;
|
using DGL::ElementBuffer;
|
||||||
|
|
||||||
ID<ElementBuffer> ElemBufferObj;
|
ID<ElementBuffer> ElemBufferObj;
|
||||||
|
|
||||||
@ -124,35 +124,35 @@ TriTexCoords textureCoords =
|
|||||||
|
|
||||||
sfn RAW_SetupBuffers()
|
sfn RAW_SetupBuffers()
|
||||||
{
|
{
|
||||||
GL::GenerateVertexBuffers(Address(VertexArrayObj ), 1);
|
DGL::GenerateVertexBuffers(Address(VertexArrayObj ), 1);
|
||||||
GL::GenerateBuffers (Address(VertexBufferObj), 1);
|
DGL::GenerateBuffers (Address(VertexBufferObj), 1);
|
||||||
GL::GenerateBuffers (Address(ElemBufferObj ), 1);
|
DGL::GenerateBuffers (Address(ElemBufferObj ), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn RAW_SetupTriangleBuffer()
|
sfn RAW_SetupTriangleBuffer()
|
||||||
{
|
{
|
||||||
GL::GenerateBuffers(Address(VertexBufferObj), 1);
|
DGL::GenerateBuffers(Address(VertexBufferObj), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
sfn RAW_BindAndBufferDataToIDs()
|
sfn RAW_BindAndBufferDataToIDs()
|
||||||
{
|
{
|
||||||
GL::BindVertexArray(VertexArrayObj);
|
DGL::BindVertexArray(VertexArrayObj);
|
||||||
|
|
||||||
GL::BindBuffer(EBufferTarget::VertexAttributes, VertexBufferObj);
|
DGL::BindBuffer(EBufferTarget::VertexAttributes, VertexBufferObj);
|
||||||
|
|
||||||
GL::BufferData<TriangleRaw>(Address(EquilateralTriangleVerticies), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
|
//GL::BufferData<TriangleRaw>(Address(EquilateralTriangleVerticies), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
|
||||||
|
|
||||||
//GL::BufferData<RectangleCompressed>(Address(rectCompress), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
|
DGL::BufferData<RectangleCompressed>(Address(rectCompress), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
|
||||||
|
|
||||||
//GL::BindBuffer(EBufferTarget::VertexIndices, ElemBufferObj);
|
DGL::BindBuffer(EBufferTarget::VertexIndices, ElemBufferObj);
|
||||||
|
|
||||||
//GL::BufferData<RectangleIndices>(Address(rectIndices), EBufferTarget::VertexIndices, EBufferUsage::StaticDraw);
|
DGL::BufferData<RectangleIndices>(Address(rectIndices), EBufferTarget::VertexIndices, EBufferUsage::StaticDraw);
|
||||||
}
|
}
|
||||||
|
|
||||||
GL::gInt VertexAttributeIndex = 0; // See shader source: (layout = 0).
|
DGL::gInt VertexAttributeIndex = 0; // See shader source: (layout = 0).
|
||||||
|
|
||||||
using GL::EBool ;
|
using DGL::EBool ;
|
||||||
using GL::EDataType;
|
using DGL::EDataType;
|
||||||
|
|
||||||
constexpr sfn ZeroOffset() -> ptr<void>
|
constexpr sfn ZeroOffset() -> ptr<void>
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user