mutter/examples/cogl-gjs.js
Lionel Landwerlin 12ece8e4a1 examples: add gjs example
Reviewed-by: Neil Roberts <neil@linux.intel.com>
2014-03-21 14:28:27 +00:00

47 lines
1.3 KiB
JavaScript

const Cogl = imports.gi.Cogl;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
let renderer = new Cogl.Renderer();
let display = new Cogl.Display(renderer, new Cogl.OnscreenTemplate(new Cogl.SwapChain()));
let ctx = new Cogl.Context(display);
// Should be able to replace the 3 previous lines with :
// let ctx = new Cogl.Context(null);
// But crashing for some reason.
// GLib mainloop integration
let gsource = Cogl.glib_renderer_source_new(renderer, 0);
let loop = GLib.MainLoop.new(null, false);
gsource.attach(loop.get_context());
// Onscreen creation
let onscreen = new Cogl.Onscreen(ctx, 800, 600);
onscreen.show();
// Drawing pipeline
let crate = Cogl.Texture2D.new_from_file(ctx, 'crate.jpg');
let pipeline = new Cogl.Pipeline(ctx);
pipeline.set_layer_texture(0, crate);
let clearColor = new Cogl.Color();
clearColor.init_from_4f(0, 0, 0, 1.0);
// Redraw callback
let closure = onscreen.add_dirty_callback(Lang.bind(this, function() {
onscreen.clear(Cogl.BufferBit.COLOR, clearColor);
onscreen.draw_rectangle(pipeline, -1, -1, 1, 1);
onscreen.swap_buffers();
return true;
}), null);
// Quit after 5s
let tm = GLib.timeout_source_new(5000);
tm.set_callback(Lang.bind(this, function() {
loop.quit();
return false;
}), null);
tm.attach(loop.get_context());
// Run!
loop.run();