Browse Source

cygnet stuff

feature/replace-renderer
Martin Dørum 3 years ago
parent
commit
93ea0dba7d

+ 6
- 6
include/swan-common/Vector2.h View File

@@ -23,27 +23,27 @@ struct Vector2 {
return *this;
}

constexpr T length() {
constexpr T length() const {
return (T)std::sqrt((double)squareLength());
}

constexpr T squareLength() {
constexpr T squareLength() const {
return this->x * this->x + this->y * this->y;
}

constexpr Vector2<T> sign() {
constexpr Vector2<T> sign() const {
return Vector2<T>(x > 0 ? 1 : -1, y > 0 ? 1 : -1);
}

constexpr Vector2<T> scale(T sx, T sy) {
constexpr Vector2<T> scale(T sx, T sy) const {
return Vector2<T>(x * sx, y * sy);
}

constexpr Vector2<T> scale(T s) {
constexpr Vector2<T> scale(T s) const {
return scale(s, s);
}

constexpr Vector2<T> norm() {
constexpr Vector2<T> norm() const {
return *this / length();
}


+ 5
- 1
libcygnet/src/Context.cc View File

@@ -2,6 +2,8 @@

#include <SDL.h>

#include "util.h"

namespace Cygnet {

Context::Context() {
@@ -13,7 +15,9 @@ Context::Context() {
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 16);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 8);

SDL_GL_SetSwapInterval(1);
}

Context::~Context() {

+ 1
- 1
libcygnet/src/Renderer.cc View File

@@ -151,7 +151,7 @@ Renderer::~Renderer() = default;

void Renderer::draw(const RenderCamera &cam) {
Mat3gf camMat;
camMat.translate({ -cam.pos.x, cam.pos.y }); // TODO: Change something to make this -cam.pos
camMat.translate(cam.pos.scale(-1, 1) * cam.zoom); // TODO: Change something to make this -cam.pos
camMat.scale({ cam.zoom, cam.zoom });
auto &chunkProg = state_->chunkProg;


+ 1
- 0
libcygnet/src/Window.cc View File

@@ -28,6 +28,7 @@ Window::Window(const char *name, int w, int h):
glEnable(GL_BLEND);
glCheck();

SDL_GetWindowSize(state_->window, &w, &h);
onResize(w, h);
}


+ 66
- 8
src/cygnet-test.cc View File

@@ -3,10 +3,18 @@
#include <cygnet/Renderer.h>
#include <swan-common/constants.h>

#include <time.h>
#include <stdint.h>
#include <iostream>
#include <SDL_image.h>
#include <SDL.h>

double getTime() {
struct timespec tv;
clock_gettime(CLOCK_MONOTONIC, &tv);
return tv.tv_sec + tv.tv_nsec / 1000000000.0;
}

void addTile(Cygnet::Renderer &rnd, const char *path) {
static size_t id = 0;
SDL_Surface *surf = IMG_Load(path);
@@ -17,7 +25,6 @@ void addTile(Cygnet::Renderer &rnd, const char *path) {
int main() {
Cygnet::Context ctx;
IMG_Init(IMG_INIT_PNG);
//Cygnet::Window win("Cygnet Test", 640, 480);
Cygnet::Window win("Cygnet Test", 680, 680);
Cygnet::Renderer rnd;

@@ -42,25 +49,76 @@ int main() {
}

Cygnet::RenderCamera cam = {
.pos = { 0.9, 0.9 },
.zoom = 0.125,
.pos = { 0, 0 },
.zoom = 1,
};

unsigned int lol = 0;
float lol = 0;

bool keys[512] = { 0 };

double acc = 0;
double prevTime = getTime() - 1/60.0;
int frames = 0;

while (true) {
double currTime = getTime();
double dt = currTime - prevTime;
prevTime = currTime;
acc += dt;

frames += 1;
if (acc >= 2) {
std::cerr << "FPS: " << (frames / 2.0) << '\n';
acc -= 2;
frames = 0;
}

SDL_Event evt;
while (SDL_PollEvent(&evt)) {
switch (evt.type) {
case SDL_QUIT:
goto exit;

case SDL_WINDOWEVENT:
switch (evt.window.event) {
case SDL_WINDOWEVENT_SIZE_CHANGED:
win.onResize(evt.window.data1, evt.window.data2);
break;
}
break;

case SDL_MOUSEWHEEL:
cam.zoom += evt.wheel.y * 0.1 * cam.zoom;
break;

case SDL_KEYDOWN:
keys[evt.key.keysym.scancode] = true;
break;

case SDL_KEYUP:
keys[evt.key.keysym.scancode] = false;
break;
}
}

lol += 1;
rnd.modifyChunk(chunk, {0, 0}, (lol / 20) % 6);
rnd.modifyChunk(chunk, {4, 4}, ((lol / 20) + 3) % 6);
rnd.modifyChunk(chunk, {3, 2}, ((lol / 25) + 7) % 6);
if (keys[SDL_SCANCODE_A]) {
cam.pos.x -= 1 * dt;
}
if (keys[SDL_SCANCODE_D]) {
cam.pos.x += 1 * dt;
}
if (keys[SDL_SCANCODE_W]) {
cam.pos.y -= 1 * dt;
}
if (keys[SDL_SCANCODE_S]) {
cam.pos.y += 1 * dt;
}

lol += 1 * dt;
rnd.modifyChunk(chunk, {0, 0}, (int)lol % 6);
rnd.modifyChunk(chunk, {4, 4}, ((int)(lol / 2) + 3) % 6);
rnd.modifyChunk(chunk, {3, 2}, ((int)(lol * 1.5) + 7) % 6);

rnd.drawChunk({0, 0}, chunk);


Loading…
Cancel
Save