@@ -56,11 +56,14 @@ deushax/deushax | |||||
deushax/editor | deushax/editor | ||||
monsterz/monsterz | monsterz/monsterz | ||||
test/testsuite | test/testsuite | ||||
test/tutorial/tut01 | |||||
test/tutorial/tut02 | |||||
test/benchsuite | test/benchsuite | ||||
test/quad | test/quad | ||||
test/sandbox | test/sandbox | ||||
test/math/pi | test/math/pi | ||||
test/math/poly | test/math/poly | ||||
test/math/remez | test/math/remez | ||||
test/xolotl/xolotl | |||||
tools/make-font | tools/make-font | ||||
# Our data | # Our data |
@@ -327,6 +327,8 @@ AC_CONFIG_FILES( | |||||
src/Makefile | src/Makefile | ||||
test/Makefile | test/Makefile | ||||
test/math/Makefile | test/math/Makefile | ||||
test/tutorial/Makefile | |||||
test/xolotl/Makefile | |||||
gfx/Makefile | gfx/Makefile | ||||
gfx/font/Makefile | gfx/font/Makefile | ||||
tools/Makefile | tools/Makefile | ||||
@@ -1,5 +1,5 @@ | |||||
SUBDIRS = math | |||||
SUBDIRS = math tutorial xolotl | |||||
AM_CPPFLAGS = -I$(top_srcdir)/src | AM_CPPFLAGS = -I$(top_srcdir)/src | ||||
@@ -0,0 +1,23 @@ | |||||
AM_CPPFLAGS = -I$(top_srcdir)/src | |||||
all-local: $(noinst_PROGRAMS) | |||||
test x$(MAKE_FSELF) = xno || make_fself tut01$(EXEEXT) tut01.self | |||||
test x$(MAKE_FSELF) = xno || make_fself tut02$(EXEEXT) tut01.self | |||||
CLEANFILES = $(noinst_PROGRAMS:%$(EXEEXT)=%.self) \ | |||||
$(noinst_PROGRAMS:%$(EXEEXT)=%.elf) \ | |||||
$(noinst_PROGRAMS:%$(EXEEXT)=%.exe) | |||||
noinst_PROGRAMS = tut01 tut02 | |||||
tut01_SOURCES = tut01.cpp | |||||
tut01_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | |||||
tut01_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | |||||
tut01_DEPENDENCIES = $(top_builddir)/src/liblol.a | |||||
tut02_SOURCES = tut02.cpp | |||||
tut02_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | |||||
tut02_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | |||||
tut02_DEPENDENCIES = $(top_builddir)/src/liblol.a | |||||
@@ -0,0 +1,124 @@ | |||||
// | |||||
// Lol Engine - Triangle tutorial | |||||
// | |||||
// Copyright: (c) 2011 Sam Hocevar <sam@hocevar.net> | |||||
// This program is free software; you can redistribute it and/or | |||||
// modify it under the terms of the Do What The Fuck You Want To | |||||
// Public License, Version 2, as published by Sam Hocevar. See | |||||
// http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
// | |||||
#if defined HAVE_CONFIG_H | |||||
# include "config.h" | |||||
#endif | |||||
#include "core.h" | |||||
#include "lolgl.h" | |||||
#include "loldebug.h" | |||||
using namespace std; | |||||
using namespace lol; | |||||
#if USE_SDL && defined __APPLE__ | |||||
# include <SDL_main.h> | |||||
#endif | |||||
#if defined _WIN32 | |||||
# undef main /* FIXME: still needed? */ | |||||
#endif | |||||
class Triangle : public WorldEntity | |||||
{ | |||||
public: | |||||
Triangle() | |||||
{ | |||||
m_vertices[0] = vec2( 0.0, 0.8); | |||||
m_vertices[1] = vec2(-0.8, -0.8); | |||||
m_vertices[2] = vec2( 0.8, -0.8); | |||||
} | |||||
virtual void TickDraw(float deltams) | |||||
{ | |||||
WorldEntity::TickDraw(deltams); | |||||
if (!m_ready) | |||||
{ | |||||
m_shader = Shader::Create( | |||||
"#version 120\n" | |||||
"attribute vec2 coord2d;" | |||||
"void main(void) {" | |||||
" gl_Position = vec4(coord2d, 0.0, 1.0);" | |||||
"}", | |||||
"#version 120\n" | |||||
"void main(void) {" | |||||
" gl_FragColor[0] = 0.0;" | |||||
" gl_FragColor[1] = 0.0;" | |||||
" gl_FragColor[2] = 1.0;" | |||||
"}"); | |||||
m_attrib = m_shader->GetAttribLocation("coord2d"); | |||||
m_ready = true; | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
/* Method 1: store vertex buffer on the GPU memory */ | |||||
glGenBuffers(1, &m_vbo); | |||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | |||||
glBufferData(GL_ARRAY_BUFFER, sizeof(m_vertices), m_vertices, | |||||
GL_STATIC_DRAW); | |||||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
/* Method 2: upload vertex information at each frame */ | |||||
#else | |||||
#endif | |||||
/* FIXME: this object never cleans up */ | |||||
} | |||||
m_shader->Bind(); | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | |||||
glEnableVertexAttribArray(m_attrib); | |||||
glVertexAttribPointer(m_attrib, 2, GL_FLOAT, GL_FALSE, 0, 0); | |||||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
/* Never used for now */ | |||||
glEnableVertexAttribArray(m_attrib); | |||||
glVertexAttribPointer(m_attrib, 2, GL_FLOAT, GL_FALSE, 0, m_vertices); | |||||
#else | |||||
glEnableClientState(GL_VERTEX_ARRAY); | |||||
glVertexPointer(3, GL_FLOAT, 0, m_vertices); | |||||
#endif | |||||
glDrawArrays(GL_TRIANGLES, 0, 3); | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
glDisableVertexAttribArray(m_attrib); | |||||
glBindBuffer(GL_ARRAY_BUFFER, 0); | |||||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
/* Never used for now */ | |||||
glDisableVertexAttribArray(m_attrib); | |||||
#else | |||||
glDisableClientState(GL_VERTEX_ARRAY); | |||||
#endif | |||||
} | |||||
private: | |||||
vec2 m_vertices[3]; | |||||
Shader *m_shader; | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
GLuint m_vbo; | |||||
#endif | |||||
int m_attrib; | |||||
bool m_ready; | |||||
}; | |||||
int main() | |||||
{ | |||||
Application app("Tutorial 1: Triangle", ivec2(640, 480), 60.0f); | |||||
new DebugFps(5, 5); | |||||
new Triangle(); | |||||
app.Run(); | |||||
return EXIT_SUCCESS; | |||||
} | |||||
@@ -0,0 +1,196 @@ | |||||
// | |||||
// Lol Engine - Cube tutorial | |||||
// | |||||
// Copyright: (c) 2011 Sam Hocevar <sam@hocevar.net> | |||||
// This program is free software; you can redistribute it and/or | |||||
// modify it under the terms of the Do What The Fuck You Want To | |||||
// Public License, Version 2, as published by Sam Hocevar. See | |||||
// http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
// | |||||
#if defined HAVE_CONFIG_H | |||||
# include "config.h" | |||||
#endif | |||||
#include "core.h" | |||||
#include "lolgl.h" | |||||
#include "loldebug.h" | |||||
using namespace std; | |||||
using namespace lol; | |||||
#if USE_SDL && defined __APPLE__ | |||||
# include <SDL_main.h> | |||||
#endif | |||||
#if defined _WIN32 | |||||
# undef main /* FIXME: still needed? */ | |||||
#endif | |||||
class Cube : public WorldEntity | |||||
{ | |||||
public: | |||||
Cube() | |||||
{ | |||||
/* Front */ | |||||
m_vertices[0] = vec3(-1.0, -1.0, 1.0); | |||||
m_vertices[1] = vec3( 1.0, -1.0, 1.0); | |||||
m_vertices[2] = vec3( 1.0, 1.0, 1.0); | |||||
m_vertices[3] = vec3(-1.0, 1.0, 1.0); | |||||
/* Back */ | |||||
m_vertices[4] = vec3(-1.0, -1.0, -1.0); | |||||
m_vertices[5] = vec3( 1.0, -1.0, -1.0); | |||||
m_vertices[6] = vec3( 1.0, 1.0, -1.0); | |||||
m_vertices[7] = vec3(-1.0, 1.0, -1.0); | |||||
m_colors[0] = vec3(1.0, 0.0, 0.0); | |||||
m_colors[1] = vec3(0.0, 1.0, 0.0); | |||||
m_colors[2] = vec3(0.0, 0.0, 1.0); | |||||
m_colors[3] = vec3(1.0, 1.0, 1.0); | |||||
m_colors[4] = vec3(1.0, 0.0, 0.0); | |||||
m_colors[5] = vec3(0.0, 1.0, 0.0); | |||||
m_colors[6] = vec3(0.0, 0.0, 1.0); | |||||
m_colors[7] = vec3(1.0, 1.0, 1.0); | |||||
m_indices[0] = i16vec3(0, 1, 2); | |||||
m_indices[1] = i16vec3(2, 3, 0); | |||||
m_indices[2] = i16vec3(1, 5, 6); | |||||
m_indices[3] = i16vec3(6, 2, 1); | |||||
m_indices[4] = i16vec3(7, 6, 5); | |||||
m_indices[5] = i16vec3(5, 4, 7); | |||||
m_indices[6] = i16vec3(4, 0, 3); | |||||
m_indices[7] = i16vec3(3, 7, 4); | |||||
m_indices[8] = i16vec3(4, 5, 1); | |||||
m_indices[9] = i16vec3(1, 0, 4); | |||||
m_indices[10] = i16vec3(3, 2, 6); | |||||
m_indices[11] = i16vec3(6, 7, 3); | |||||
} | |||||
virtual void TickGame(float deltams) | |||||
{ | |||||
real x(4.08f); x.print(); | |||||
WorldEntity::TickGame(deltams); | |||||
m_angle += deltams; | |||||
vec3 axis_y(0, 1, 0); | |||||
mat4 anim = mat4::rotate(m_angle * 0.0001f, axis_y); | |||||
mat4 model = mat4::translate(vec3(0, 0, -4)); | |||||
mat4 view = mat4::lookat(vec3(0, 2, 0), vec3(0, 0, -4), vec3(0, 1, 0)); | |||||
mat4 proj = mat4::perspective(M_PI / 4, 640.0f, 480.0f, -10.0f, 10.0f); | |||||
anim = mat4(1.0f); | |||||
model = mat4(1.0f); | |||||
view = mat4(1.0f); | |||||
m_matrix = proj * view * model * anim; | |||||
proj.printf(); | |||||
view.printf(); | |||||
model.printf(); | |||||
anim.printf(); | |||||
printf("\n"); | |||||
m_matrix.printf(); | |||||
printf("\n"); | |||||
m_vertices[0].printf(); | |||||
(m_matrix * vec4(m_vertices[0], 1)).printf(); | |||||
printf("\n"); | |||||
} | |||||
virtual void TickDraw(float deltams) | |||||
{ | |||||
WorldEntity::TickDraw(deltams); | |||||
if (!m_ready) | |||||
{ | |||||
m_shader = Shader::Create( | |||||
"#version 120\n" | |||||
"attribute vec3 coord3d;" | |||||
"attribute vec3 v_color;" | |||||
"uniform mat4 mvp;" | |||||
"varying vec3 f_color;" | |||||
"void main(void) {" | |||||
" gl_Position = mvp * vec4(coord3d, 1.0);" | |||||
" f_color = v_color;" | |||||
"}", | |||||
"#version 120\n" | |||||
"varying vec3 f_color;" | |||||
"void main(void) {" | |||||
" gl_FragColor = vec4(f_color, 1.0);" | |||||
" gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);" | |||||
"}"); | |||||
m_coord = m_shader->GetAttribLocation("coord3d"); | |||||
m_color = m_shader->GetAttribLocation("v_color"); | |||||
m_mvp = m_shader->GetUniformLocation("mvp"); | |||||
m_ready = true; | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
/* Method 1: store vertex buffer on the GPU memory */ | |||||
glGenBuffers(1, &m_vbo); | |||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | |||||
glBufferData(GL_ARRAY_BUFFER, sizeof(m_vertices), m_vertices, | |||||
GL_STATIC_DRAW); | |||||
glGenBuffers(1, &m_cbo); | |||||
glBindBuffer(GL_ARRAY_BUFFER, m_cbo); | |||||
glBufferData(GL_ARRAY_BUFFER, sizeof(m_colors), m_colors, | |||||
GL_STATIC_DRAW); | |||||
glGenBuffers(1, &m_ibo); | |||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo); | |||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(m_indices), m_indices, | |||||
GL_STATIC_DRAW); | |||||
#else | |||||
#endif | |||||
/* FIXME: this object never cleans up */ | |||||
} | |||||
m_shader->Bind(); | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
glEnableVertexAttribArray(m_coord); | |||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | |||||
glVertexAttribPointer(m_coord, 3, GL_FLOAT, GL_FALSE, 0, 0); | |||||
glEnableVertexAttribArray(m_color); | |||||
glBindBuffer(GL_ARRAY_BUFFER, m_cbo); | |||||
glVertexAttribPointer(m_color, 3, GL_FLOAT, GL_FALSE, 0, 0); | |||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo); | |||||
int size; | |||||
glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size); | |||||
glDrawElements(GL_TRIANGLES, size / sizeof(GLushort), GL_UNSIGNED_SHORT, 0); | |||||
glDisableVertexAttribArray(m_coord); | |||||
glDisableVertexAttribArray(m_color); | |||||
glBindBuffer(GL_ARRAY_BUFFER, 0); | |||||
#else | |||||
glEnableClientState(GL_VERTEX_ARRAY); | |||||
glVertexPointer(3, GL_FLOAT, 0, m_vertices); | |||||
glDisableClientState(GL_VERTEX_ARRAY); | |||||
#endif | |||||
} | |||||
private: | |||||
float m_angle; | |||||
mat4 m_matrix; | |||||
vec3 m_vertices[8]; | |||||
vec3 m_colors[8]; | |||||
i16vec3 m_indices[12]; | |||||
Shader *m_shader; | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | |||||
GLuint m_vbo, m_cbo, m_ibo; | |||||
#endif | |||||
int m_coord, m_color, m_mvp; | |||||
bool m_ready; | |||||
}; | |||||
int main() | |||||
{ | |||||
Application app("Tutorial 2: Cube", ivec2(640, 480), 60.0f); | |||||
new DebugFps(5, 5); | |||||
new Cube(); | |||||
app.Run(); | |||||
return EXIT_SUCCESS; | |||||
} | |||||
@@ -0,0 +1,17 @@ | |||||
AM_CPPFLAGS = -I$(top_srcdir)/src | |||||
all-local: $(noinst_PROGRAMS) | |||||
test x$(MAKE_FSELF) = xno || make_fself xolotl$(EXEEXT) xolotl.self | |||||
CLEANFILES = $(noinst_PROGRAMS:%$(EXEEXT)=%.self) \ | |||||
$(noinst_PROGRAMS:%$(EXEEXT)=%.elf) \ | |||||
$(noinst_PROGRAMS:%$(EXEEXT)=%.exe) | |||||
noinst_PROGRAMS = xolotl | |||||
xolotl_SOURCES = xolotl.cpp xolotl.h | |||||
xolotl_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | |||||
xolotl_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | |||||
xolotl_DEPENDENCIES = $(top_builddir)/src/liblol.a | |||||
@@ -0,0 +1,78 @@ | |||||
// | |||||
// Lol Engine - Xolotl algorithm test | |||||
// | |||||
// Copyright: (c) 2011 Soren Renner | |||||
// (c) 2011 Sam Hocevar <sam@hocevar.net> | |||||
// This program is free software; you can redistribute it and/or | |||||
// modify it under the terms of the Do What The Fuck You Want To | |||||
// Public License, Version 2, as published by Sam Hocevar. See | |||||
// http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
// | |||||
#if defined HAVE_CONFIG_H | |||||
# include "config.h" | |||||
#endif | |||||
#include "core.h" | |||||
#include "lolgl.h" | |||||
#include "loldebug.h" | |||||
using namespace std; | |||||
using namespace lol; | |||||
#if USE_SDL && defined __APPLE__ | |||||
# include <SDL_main.h> | |||||
#endif | |||||
#if defined _WIN32 | |||||
# undef main /* FIXME: still needed? */ | |||||
#endif | |||||
#include "xolotl.h" | |||||
class Xolotl : public WorldEntity | |||||
{ | |||||
public: | |||||
Xolotl() | |||||
{ | |||||
for(int i = 0; i < 2000; i++) { | |||||
float x = (i - 1000.0) / 100.0; | |||||
graph[i].x = x; | |||||
graph[i].y = sin(x * 10.0) / (1.0 + x * x); | |||||
} | |||||
} | |||||
virtual ~Xolotl() | |||||
{ | |||||
} | |||||
virtual char const *GetName() { return "Xolotl"; } | |||||
virtual void TickGame(float deltams) | |||||
{ | |||||
} | |||||
virtual void TickDraw(float deltams) | |||||
{ | |||||
} | |||||
private: | |||||
vec2 graph[2000]; | |||||
}; | |||||
int main() | |||||
{ | |||||
Application app("Xolotl", ivec2(640, 480), 60.0f); | |||||
/* Register some debug stuff */ | |||||
new DebugFps(5, 5); | |||||
Cell<3> c; | |||||
app.Run(); | |||||
return EXIT_SUCCESS; | |||||
} | |||||
@@ -0,0 +1,58 @@ | |||||
// | |||||
// Lol Engine - Xolotl algorithm test | |||||
// | |||||
// Copyright: (c) 2011 Soren Renner | |||||
// (c) 2011 Sam Hocevar <sam@hocevar.net> | |||||
// This program is free software; you can redistribute it and/or | |||||
// modify it under the terms of the Do What The Fuck You Want To | |||||
// Public License, Version 2, as published by Sam Hocevar. See | |||||
// http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
// | |||||
using namespace lol; | |||||
struct Voxel | |||||
{ | |||||
bool passable, lock, copymarker; | |||||
struct Voxel *imposter; | |||||
}; | |||||
struct MSV : public Voxel | |||||
{ | |||||
}; | |||||
struct Ray | |||||
{ | |||||
float theta, phi; | |||||
vec3 origin, xyz, dxyz, ddxyz, lxyz, popdelta; | |||||
struct Voxel *terminalvoxel; | |||||
bool terminate; | |||||
ivec3 counter; | |||||
int scale; | |||||
float length; | |||||
bool di, dj, dk, changed, traced, far; | |||||
int face; | |||||
vec3 normal, bloxnorm, corner; | |||||
int dtl; | |||||
}; | |||||
template <int M> struct Cell : public MSV | |||||
{ | |||||
Voxel blox[M * M * M]; | |||||
vec3 bloxnorm[M * M * M]; | |||||
int m; | |||||
void Serp(Voxel v, Voxel w) | |||||
{ | |||||
for (int i = 0; i < M; i++) | |||||
for (int j = 0; j < M; j++) | |||||
for (int k = 0; k < M; k++) | |||||
if ((i == M_2) + (j == M_2) + (k == M_2) >= 2) | |||||
blox[(i * M + j) * M + k] = v; | |||||
else | |||||
blox[(i * M + j) * M + k] = w; | |||||
} | |||||
static const int M_2 = M / 2; | |||||
}; | |||||