Parcourir la source

cygnet stuff

feature/replace-renderer
Martin Dørum il y a 3 ans
Parent
révision
93ea0dba7d

+ 6
- 6
include/swan-common/Vector2.h Voir le fichier

return *this; return *this;
} }


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


constexpr T squareLength() {
constexpr T squareLength() const {
return this->x * this->x + this->y * this->y; 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); 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); return Vector2<T>(x * sx, y * sy);
} }


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


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



+ 5
- 1
libcygnet/src/Context.cc Voir le fichier



#include <SDL.h> #include <SDL.h>


#include "util.h"

namespace Cygnet { namespace Cygnet {


Context::Context() { Context::Context() {
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); 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() { Context::~Context() {

+ 1
- 1
libcygnet/src/Renderer.cc Voir le fichier



void Renderer::draw(const RenderCamera &cam) { void Renderer::draw(const RenderCamera &cam) {
Mat3gf camMat; 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 }); camMat.scale({ cam.zoom, cam.zoom });
auto &chunkProg = state_->chunkProg; auto &chunkProg = state_->chunkProg;



+ 1
- 0
libcygnet/src/Window.cc Voir le fichier

glEnable(GL_BLEND); glEnable(GL_BLEND);
glCheck(); glCheck();


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



+ 66
- 8
src/cygnet-test.cc Voir le fichier

#include <cygnet/Renderer.h> #include <cygnet/Renderer.h>
#include <swan-common/constants.h> #include <swan-common/constants.h>


#include <time.h>
#include <stdint.h> #include <stdint.h>
#include <iostream>
#include <SDL_image.h> #include <SDL_image.h>
#include <SDL.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) { void addTile(Cygnet::Renderer &rnd, const char *path) {
static size_t id = 0; static size_t id = 0;
SDL_Surface *surf = IMG_Load(path); SDL_Surface *surf = IMG_Load(path);
int main() { int main() {
Cygnet::Context ctx; Cygnet::Context ctx;
IMG_Init(IMG_INIT_PNG); IMG_Init(IMG_INIT_PNG);
//Cygnet::Window win("Cygnet Test", 640, 480);
Cygnet::Window win("Cygnet Test", 680, 680); Cygnet::Window win("Cygnet Test", 680, 680);
Cygnet::Renderer rnd; Cygnet::Renderer rnd;


} }


Cygnet::RenderCamera cam = { 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) { 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; SDL_Event evt;
while (SDL_PollEvent(&evt)) { while (SDL_PollEvent(&evt)) {
switch (evt.type) { switch (evt.type) {
case SDL_QUIT: case SDL_QUIT:
goto exit; 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); rnd.drawChunk({0, 0}, chunk);



Chargement…
Annuler
Enregistrer