Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
jwerle committed Jul 27, 2016
1 parent 7970e87 commit 0ff40e6
Show file tree
Hide file tree
Showing 13 changed files with 221 additions and 258 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@
# Debug files
*.dSYM/
.DS_Store
deps/
11 changes: 0 additions & 11 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ SRC := $(wildcard src/*.c)
## Dependency source files
SRC += $(wildcard deps/glisy/*.c)
SRC += $(wildcard deps/rgba/*.c)
SRC += $(wildcard deps/sop/*.c)

## Source objects
OBJS := $(SRC:.c=.o)
Expand Down Expand Up @@ -48,16 +47,6 @@ uninstall:

## Cleans project directory
.PHONY: clean
clean: test/clean
clean:
$(RM) $(OBJS)
$(RM) $(TARGET_STATIC)

## Compiles and runs all test
.PHONY: test
test:
if test -d test; then $(MAKE) -C $@; fi

.PHONY: test/clean
test/clean:
if test -d test; then $(MAKE) clean -C test; fi
64 changes: 39 additions & 25 deletions examples/bunny.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#include <glisy/geometry.h>
#include <glisy/camera.h>
#include <glisy/math.h>
#include "util.h"
#include "bunny.h"

Expand All @@ -15,13 +18,24 @@ struct Bunny {
int faceslen;
};

static mat4 transform;
static float aspect = (float) WINDOW_WIDTH / (float) WINDOW_HEIGHT;
static float near = 1.0;
static float far = 1000.0;
static float fov = M_PI / 2.0;

static GlisyProgram program;
static GlisyCamera camera;
static GLFWwindow *window;
static Bunny bunny;

// forward decl
static void InitializeBunny(Bunny *bunny);

// bunny constructor
void
InitializeBunny(Bunny *bunny) {
GlisyVAOAttribute vPosition = {
GlisyVAOAttribute position = {
.buffer = {
.data = (void *) StanfordBunny.positions,
.type = GL_FLOAT,
Expand All @@ -36,7 +50,7 @@ InitializeBunny(Bunny *bunny) {
bunny->faceslen = 3 * STANFORD_BUNNY_CELLS_COUNT;

glisyGeometryInit(&bunny->geometry);
glisyGeometryAttr(&bunny->geometry, "vPosition", &vPosition);
glisyGeometryAttr(&bunny->geometry, "position", &position);
glisyGeometryFaces(&bunny->geometry,
GL_UNSIGNED_SHORT,
bunny->faceslen,
Expand All @@ -48,55 +62,55 @@ InitializeBunny(Bunny *bunny) {
void
DrawBunny(Bunny *bunny) {
glisyGeometryBind(&bunny->geometry, 0);
glisyGeometryDraw(&bunny->geometry, GL_TRIANGLES, 0, bunny->faceslen);
glisyGeometryDraw(&bunny->geometry, GL_POINTS, 0, bunny->faceslen);
glisyGeometryUnbind(&bunny->geometry);
}

static void
onMouseScroll(GLFWwindow* window, double xoffset, double yoffset) {
Camera *camera = (Camera *) glfwGetWindowUserPointer(window);
camera->fov += yoffset;
camera->fov = min(MAX_FOV, max(camera->fov, MIN_FOV));
UpdateCamera(camera);
fov += yoffset;
fov = min(MAX_FOV, max(fov, MIN_FOV));
}

int
main(void) {
// glfw
GLFWwindow *window;

// glisy
GlisyProgram program;

// objects
Camera camera;
Bunny bunny;

// init gl
GLFW_SHELL_CONTEXT_INIT(3, 2);
GLFW_SHELL_WINDOW_INIT(window, WINDOW_WIDTH, WINDOW_HEIGHT);
glfwSetScrollCallback(window, onMouseScroll);
glfwSetWindowUserPointer(window, &camera);

// init shader program
program = CreateProgram("bunny.v.glsl", "bunny.f.glsl");

InitializeCamera(&camera, WINDOW_WIDTH, WINDOW_HEIGHT);
// init object
InitializeBunny(&bunny);
glfwSetWindowUserPointer(window, &camera);

camera.position = vec3(1, 4, 10);
camera.target = vec3(1, 1, 1);
// bind current shader program
glisyProgramBind(&program);

// configure camera
glisyCameraInitialize(&camera);
transform = mat4_identity(mat4());
fov = M_PI / 2.0;
camera.position = vec3(0, 6, -10);
UpdateCamera(&camera, &program, transform, fov, aspect, near, far);


glisyProgramBind(&program);
GLFW_SHELL_RENDER(window, {
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
const float time = glfwGetTime();
const float angle = time * 22.5f;
const float radians = dtor(angle);
const vec3 rotation = vec3(0, 1, 0);
(void) mat4_rotate(camera.transform,
radians,
rotation);
(void) mat4_rotate(transform, radians, rotation);

camera.aspect = width / height;
UpdateCamera(&camera);
aspect = (float) width / (float) height;
UpdateCamera(&camera, &program, transform, fov, aspect, near, far);
DrawBunny(&bunny);
});

Expand Down
8 changes: 4 additions & 4 deletions examples/bunny.f.glsl
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#version 400

precision mediump float;
in vec3 mColor;

in vec3 color;
out vec4 fragColor;

void
main(void) {
fragColor = vec4(mColor, 1);
void main(void) {
fragColor = vec4(color, 1);
}
16 changes: 8 additions & 8 deletions examples/bunny.v.glsl
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#version 400

precision mediump float;
uniform mat4 uProjection;
uniform mat4 uView;

in vec3 vPosition;
out vec3 mColor;
uniform mat4 projection;
uniform mat4 view;

void
main(void) {
mColor = vec3(vPosition);
gl_Position = uProjection * uView * vec4(vPosition, 1.0);
in vec3 position;
out vec3 color;

void main(void) {
color = vec3(position);
gl_Position = projection * view * vec4(position, 1.0);
}
91 changes: 48 additions & 43 deletions examples/cube.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#include <glisy/geometry.h>
#include <glisy/camera.h>
#include <glisy/color.h>
#include <glisy/math.h>
#include "util.h"

#define WINDOW_NAME "CubeExample"
Expand All @@ -9,7 +13,7 @@ typedef struct Cube Cube;
struct Cube {
// glisy
GlisyGeometry geometry;
GlisyUniform uModel;
GlisyUniform model;

// gl
vec3 position;
Expand All @@ -20,6 +24,17 @@ struct Cube {
int faceslen;
};

static mat4 transform;
static float aspect = (float) WINDOW_WIDTH / (float) WINDOW_HEIGHT;
static float near = 1.0;
static float far = 1000.0;
static float fov = M_PI / 2.0;
static Cube cube;

static GlisyProgram program;
static GlisyCamera camera;
static GLFWwindow *window;

// forward decl
static void InitializeCube(Cube *cube);
static void UpdateCube(Cube *cube);
Expand All @@ -45,13 +60,13 @@ InitializeCube(Cube *cube) {
glisyColorInit(&color, "blue", 0);

// init uniforms
GlisyUniform uColor;
glisyUniformInit(&uColor, "uColor", GLISY_UNIFORM_VECTOR, 3);
glisyUniformInit(&cube->uModel, "uModel", GLISY_UNIFORM_MATRIX, 4);
GlisyUniform ucolor;
glisyUniformInit(&ucolor, "color", GLISY_UNIFORM_VECTOR, 3);
glisyUniformInit(&cube->model, "model", GLISY_UNIFORM_MATRIX, 4);

// set uniforms
glisyUniformSet(&uColor, &vec3(color.r, color.g, color.b), sizeof(vec3));
glisyUniformBind(&uColor, 0);
glisyUniformSet(&ucolor, &vec3(color.r, color.g, color.b), sizeof(vec3));
glisyUniformBind(&ucolor, 0);

const GLushort faces[] = {
0, 1, 3, 0, 3, 2,
Expand All @@ -66,21 +81,21 @@ InitializeCube(Cube *cube) {
cube->faceslen = sizeof(faces) / sizeof(GLushort);
GLuint size = sizeof(vertices);

GlisyVAOAttribute vPosition;
memset(&vPosition, 0, sizeof(vPosition));
vPosition.buffer.data = (void *) vertices;
vPosition.buffer.type = GL_FLOAT;
vPosition.buffer.size = size;
vPosition.buffer.usage = GL_STATIC_DRAW;
vPosition.buffer.dimension = 3;
GlisyVAOAttribute position;
memset(&position, 0, sizeof(position));
position.buffer.data = (void *) vertices;
position.buffer.type = GL_FLOAT;
position.buffer.size = size;
position.buffer.usage = GL_STATIC_DRAW;
position.buffer.dimension = 3;

// init matrices
mat4_identity(cube->transform);
mat4_identity(cube->rotation);

// init vao attributes
glisyGeometryInit(&cube->geometry);
glisyGeometryAttr(&cube->geometry, "vPosition", &vPosition);
glisyGeometryAttr(&cube->geometry, "position", &position);
glisyGeometryFaces(&cube->geometry,
GL_UNSIGNED_SHORT,
cube->faceslen,
Expand All @@ -97,8 +112,8 @@ UpdateCube(Cube *cube) {
mat4 model;
mat4_identity(model);
model = mat4_multiply(model, cube->rotation);
glisyUniformSet(&cube->uModel, &model, sizeof(model));
glisyUniformBind(&cube->uModel, 0);
glisyUniformSet(&cube->model, &model, sizeof(model));
glisyUniformBind(&cube->model, 0);
}

void
Expand All @@ -116,47 +131,37 @@ RotateCube(Cube *cube, float radians, vec3 axis) {

int
main(void) {
// glfw
GLFWwindow *window;

// glisy
GlisyProgram program;

// objects
Camera camera;
Cube cube;

// init
int width = WINDOW_WIDTH;
int height = WINDOW_HEIGHT;
// init gl
GLFW_SHELL_CONTEXT_INIT(3, 2);
GLFW_SHELL_WINDOW_INIT(window, width, height);
GLFW_SHELL_WINDOW_INIT(window, WINDOW_WIDTH, WINDOW_HEIGHT);
glfwSetWindowUserPointer(window, &camera);

// create shader program
program = CreateProgram("cube.v.glsl", "cube.f.glsl");
InitializeCamera(&camera, width, height);

// init objects
InitializeCube(&cube);

// move camera behind cube
camera.position = vec3(1, 1, 1);
// bind current shader program
glisyProgramBind(&program);

// configure camera
glisyCameraInitialize(&camera);
transform = mat4_identity(mat4());
camera.position = vec3(0, 0, -2);
UpdateCamera(&camera, &program, transform, fov, aspect, near, far);

GLFW_SHELL_RENDER(window, {
const float time = glfwGetTime();
const float angle = time * 45.0f;
const float radians = dtor(angle);
const vec3 rotation = vec3(0, 1, 0);
(void) mat4_rotate(camera.transform,
radians,
rotation);

// handle resize
camera.aspect = width / height;
aspect = (float) width / (float) height;

// update camera orientation
UpdateCamera(&camera);

// rotate cube at radians angle in opposite direction
UpdateCamera(&camera, &program, transform, fov, aspect, near, far);
RotateCube(&cube, radians, vec3_negate(rotation));

// render cube
DrawCube(&cube);
});

Expand Down
9 changes: 5 additions & 4 deletions examples/cube.f.glsl
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
#version 400

precision mediump float;
uniform vec3 uColor;

uniform vec3 color;

out vec4 fragColor;

void
main(void) {
fragColor = vec4(uColor, 1);
void main(void) {
fragColor = vec4(color, 1);
}
18 changes: 10 additions & 8 deletions examples/cube.v.glsl
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
#version 400

uniform mat4 uProjection;
uniform mat4 uModel;
uniform mat4 uView;
in vec3 vPosition;

void
main(void) {
gl_Position = uProjection * uView * uModel * vec4(vPosition, 1.0);
precision mediump float;

uniform mat4 projection;
uniform mat4 model;
uniform mat4 view;

in vec3 position;

void main(void) {
gl_Position = projection * view * model * vec4(position, 1.0);
}
Loading

0 comments on commit 0ff40e6

Please sign in to comment.