add build system and template source file

This commit is contained in:
Josh Holtrop 2013-11-12 20:16:53 -05:00
parent d7a52ab35c
commit 725d17436b
5 changed files with 176 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/.rsconscache
/gss
/gss.exe

3
Gemfile Normal file
View File

@ -0,0 +1,3 @@
source "http://rubygems.org"
gem "rscons"

10
Gemfile.lock Normal file
View File

@ -0,0 +1,10 @@
GEM
remote: http://rubygems.org/
specs:
rscons (0.2.1)
PLATFORMS
ruby
DEPENDENCIES
rscons

35
Rakefile.rb Normal file
View File

@ -0,0 +1,35 @@
require "bundler"
begin
Bundler.setup(:default, :development)
rescue Bundler::BundlerError => e
raise "Unable to Bundler.setup(): You probably need to run `bundle install`: " + e.message
end
require "rscons"
desc "Build ScreenSaver"
task :default do
Rscons::Environment.new do |env|
sources = []
dirs = [
"src",
"modules/DerelictUtil/source",
"modules/DerelictSDL2/source",
"modules/DerelictGL3/source",
"modules/gl3n/gl3n",
"modules/glamour/glamour",
].each do |dir|
sources += Dir["#{dir}/**/*.d"]
end
env["D_IMPORT_PATH"] += [
"modules/DerelictUtil/source",
"modules/DerelictSDL2/source",
"modules/DerelictGL3/source",
"modules/gl3n",
"modules/glamour",
]
env["DFLAGS"] += ["-fversion=Derelict3", "-fversion=gl3n", "-fversion=SDLImage"]
env["LDFLAGS"] += ["-static-libgcc"]
env.build_root = "build"
env.Program("gss", sources)
end
end

125
src/gss.d Normal file
View File

@ -0,0 +1,125 @@
import std.stdio;
import derelict.sdl2.sdl;
import derelict.opengl3.gl3;
import glamour.vao;
import glamour.shader;
import glamour.vbo;
import gl3n.linalg;
enum int WIDTH = 800;
enum int HEIGHT = 600;
GLint position_idx;
GLint color_idx;
GLint view_idx;
mat4 view_matrix;
void init()
{
glClearColor (1.0, 0.7, 0.0, 0.0);
glViewport(0, 0, WIDTH, HEIGHT);
immutable string shader_src = `
vertex:
uniform mat4 view;
in vec2 position;
in vec3 color;
out vec3 color_i;
void main(void)
{
gl_Position = view * vec4(position, 0.0, 1.0);
color_i = color;
}
fragment:
in vec3 color_i;
void main(void)
{
gl_FragColor = vec4(color_i, 1.0);
}
`;
VAO vao = new VAO();
Shader program = new Shader("program", shader_src);
program.bind();
position_idx = program.get_attrib_location("position");
color_idx = program.get_attrib_location("color");
float[] vertices = [0.4, 0.4, -0.4, 0.4, -0.4, -0.4, 0.4, -0.4];
float[] colors = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0];
ushort[] indices = [0, 1, 2, 3];
Buffer vbo = new Buffer(vertices);
vbo.bind();
glEnableVertexAttribArray(position_idx);
glVertexAttribPointer(position_idx, 2, GL_FLOAT, GL_FALSE, 0, null);
Buffer cbo = new Buffer(colors);
cbo.bind();
glEnableVertexAttribArray(color_idx);
glVertexAttribPointer(color_idx, 3, GL_FLOAT, GL_FALSE, 0, null);
ElementBuffer ibo = new ElementBuffer(indices);
ibo.bind();
view_idx = program.get_uniform_location("view");
}
void display(SDL_Window * window)
{
glClear(GL_COLOR_BUFFER_BIT);
view_matrix.make_identity();
view_matrix.rotatez(SDL_GetTicks() / 500.0);
view_matrix.scale(HEIGHT / cast(float)WIDTH, 1.0, 1.0);
glUniformMatrix4fv(view_idx, 1, GL_TRUE, view_matrix.value_ptr);
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_SHORT, null);
SDL_GL_SwapWindow(window);
}
int main()
{
DerelictSDL2.load();
DerelictGL3.load();
if (SDL_Init(SDL_INIT_EVERYTHING))
{
writeln("Failed to initialize SDL!");
return 1;
}
SDL_Window * window = SDL_CreateWindow("d-dub-derelict-sdl2-gl3-demo",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
WIDTH,
HEIGHT,
SDL_WINDOW_OPENGL);
SDL_GLContext context = SDL_GL_CreateContext(window);
if (window == null)
{
writeln("Failed to create SDL window!");
return 1;
}
DerelictGL3.reload();
init();
SDL_Event event;
for (;;)
{
if (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
break;
else if (event.type == SDL_KEYDOWN)
{
if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE)
break;
}
}
display(window);
}
SDL_GL_DeleteContext(context);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}