80 lines
1.7 KiB
C++
80 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include <glm/glm.hpp>
|
|
#include <glm/gtx/quaternion.hpp>
|
|
#include <iostream>
|
|
|
|
#include "mesh.h"
|
|
|
|
namespace kek {
|
|
|
|
template <typename... Args>
|
|
using GenericFunction = void (*)(Args... args);
|
|
|
|
template <typename... Args>
|
|
struct GenericCallable {
|
|
GenericFunction<Args..., void *> function;
|
|
void *data;
|
|
|
|
GenericCallable()
|
|
: function(nullptr),
|
|
data(nullptr) {}
|
|
|
|
GenericCallable(GenericFunction<Args...> function)
|
|
: GenericCallable([](Args... args, void *f) { ((GenericFunction<Args...>) f)(args...); }, (void *) function) {}
|
|
|
|
GenericCallable(GenericFunction<Args..., void *> function, void *data)
|
|
: function(function),
|
|
data(data) {}
|
|
|
|
void operator()(Args... args) {
|
|
if(function == nullptr) return;
|
|
function(args..., data);
|
|
}
|
|
};
|
|
|
|
typedef GenericCallable<> Callable;
|
|
|
|
float clampCyclic(float value, float min, float max);
|
|
|
|
float clamp(float value, float min, float max);
|
|
|
|
int clampCyclic(int value, int min, int max);
|
|
|
|
int clamp(int value, int min, int max);
|
|
|
|
template <typename T>
|
|
T clamp(T value, T min, T max) {
|
|
if(value > max) value = max;
|
|
if(value < min) value = min;
|
|
return value;
|
|
}
|
|
|
|
template <typename T>
|
|
T clampCyclic(T value, T min, T max) {
|
|
while(value > max) value -= (max - min);
|
|
while(value < min) value += (max - min);
|
|
return value;
|
|
}
|
|
|
|
enum class CubeFace {
|
|
FRONT,
|
|
BACK,
|
|
UP,
|
|
DOWN,
|
|
LEFT,
|
|
RIGHT
|
|
};
|
|
|
|
glm::vec3 faceNormal(CubeFace face);
|
|
|
|
void genCubeVertices(float w, float h, float d, bool texCoords, float **outVerts, size_t *outSize, size_t *vertexCount);
|
|
|
|
std::vector<Vertex> genCubeVertices(float w, float h, float d, bool texCoords);
|
|
|
|
Mesh *genCubeMesh(float w, float h, float d, std::shared_ptr<Texture> ambient, std::shared_ptr<Texture> diffuse, std::shared_ptr<Texture> specular);
|
|
|
|
std::string toString(glm::vec3 vector);
|
|
|
|
}
|