diff --git a/Rakefile b/Rakefile index bcbd3d1..f4470ca 100644 --- a/Rakefile +++ b/Rakefile @@ -1,19 +1,30 @@ require "rscons" +base_env = Rscons::Environment.new do |env| + env["build_root"] = lambda {|args| args[:env].build_root} + env["CPPPATH"] << "include" + env["CPPPATH"] << "test/gl3w" + env["CPPDEFINES"] << %[GLCXX_GL_INCLUDE="GL3/gl3w.h"] + env["CCFLAGS"] += %w[-Wall] + env["CXXFLAGS"] += %w[-std=gnu++11] +end + task :lib do - Rscons::Environment.new do |env| - env["build_root"] = "build/lib" - env.build_root = env["build_root"] + base_env.clone do |env| + env.build_root = "build/lib" sources = Dir["src/**/*.cpp"] - env["CPPPATH"] << "include" - env["CPPPATH"] << "test/gl3w" - env["CPPDEFINES"] << %[GLCXX_GL_INCLUDE="gl3w.h"] - env["CXXFLAGS"] += %w[-Wall -std=gnu++11] env.Library("${build_root}/lib.a", sources) end end task :test do + base_env.clone do |env| + env.build_root = "build/test" + env.parse_flags!("!sdl2-config --cflags --libs") + sources = Dir["src/**/*.cpp", "test/**/*.{cpp,c}"] + env["LIBS"] += %w[dl GL] + env.Program("${build_root}/testapp", sources) + end end task :clean do diff --git a/test/gl3w/gl3w.c b/test/gl3w/GL3/gl3w.c similarity index 100% rename from test/gl3w/gl3w.c rename to test/gl3w/GL3/gl3w.c diff --git a/test/gl3w/gl3w.h b/test/gl3w/GL3/gl3w.h similarity index 100% rename from test/gl3w/gl3w.h rename to test/gl3w/GL3/gl3w.h diff --git a/test/test.cpp b/test/test.cpp new file mode 100644 index 0000000..1903abf --- /dev/null +++ b/test/test.cpp @@ -0,0 +1,75 @@ +#include +#include GLCXX_GL_INCLUDE +#include + +using namespace std; + +#define WIDTH 800 +#define HEIGHT 600 + +void init(void) +{ + glClearColor (0.0, 0.0, 0.0, 0.0); +} + +void display(SDL_Window * window) +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + SDL_GL_SwapWindow(window); +} + +int main(int argc, char *argv[]) +{ + if (SDL_Init(SDL_INIT_VIDEO)) + { + printf("Failed to initialize SDL!\n"); + return 1; + } + + atexit(SDL_Quit); + + SDL_Window * window = SDL_CreateWindow(argv[0], + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + WIDTH, + HEIGHT, + SDL_WINDOW_OPENGL); + if (!window) + { + printf("Failed to create window!\n"); + SDL_Quit(); + return 2; + } + + SDL_GL_CreateContext(window); + + if (gl3wInit()) + { + cerr << "Failed to initialize gl3w!" << endl; + return 1; + } + if (!gl3wIsSupported(3, 0)) + { + cerr << "OpenGL 3.0 is not supported!" << endl; + return 1; + } + + init(); + display(window); + + SDL_Event event; + while (SDL_WaitEvent(&event)) + { + if (event.type == SDL_QUIT) + break; + else if (event.type == SDL_KEYDOWN) + { + if (event.key.keysym.sym == SDLK_ESCAPE) + break; + if (event.key.keysym.sym == SDLK_RETURN) + display(window); + } + } + + return 0; +}