• Stars
    star
    315
  • Rank 132,951 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 10 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Ports (almost) all Canvas2D functions to the GPU so it can be mixed with a WebGL canvas.

Canvas2DtoWebGL.js

Canvas2DtoWebGL.js ports almost all the methods from the regular Canvas2D context (CanvasRenderingContext2D) of HTML5 to WebGL calls, this allows to mix 3D in your 2D Canvas or the opposite (to create GUIs, debug info, etc), and in some cases it could even improve the performance of your regular Canvas2D (when working with big images). It uses litegl.js as the base WebGL library. To improve performance it doesn't generate garbage (reuses the same containers). It can work with non power of two textures (no mipmaps obviously).

Fully supported functions:

  • translate, rotate, scale, transform, setTransform, save, restore
  • clearRect
  • strokeStyle, fillStyle, globalAlpha
  • drawImage you can use images or canvas (video not tested)
  • beginPath, lineTo, moveTo, closePath, stroke, rect, strokeRect, fillRect, arc
  • fill (limited to convex shapes)
  • createPattern with images
  • bezierCurveTo and quadraticCurveTo
  • fillText (it creates a texture atlas with all the characters)
  • lineWidth (only one mode supported)
  • imageSmoothingEnabled
  • getImageData and putImageData (not fully tested)
  • shadows (not blurred)
  • createLinearGradient
  • clip

Not supported (yet):

  • globalCompositeOperation
  • concave polygon shapes

Won't be supported:

  • Blurred shadows

It is easy to tweak, all the parameters are publicly available inside the context (matrix, colors, etc). Textures handlers are cached inside the Image object itself, this means that reusing the same images between different Canvas2D context would have a performance penalty.

Extra features

It not only provide the Canvas2D functions, it also comes with some extra ones that you can call directly to speed up some processes (like setting colors, modifying the matrix) or even creating some FX that would be hard in a regular Canvas (applying a shader to an image, colorizing an image).

Demos & Benchmark

Demos are included in demo folder, you can test it here

Usage

Include the library and dependencies

<script src="js/gl-matrix-min.js"></script>
<script src="js/litegl.min.js"></script>
<script src="js/Canvas2DtoWebGL.js"></script>

Once you have your Canvas created (and before a CanvasRenderingContext2D has been obtained), call this function:

var ctx = enableWebGLCanvas( mycanvas );

During your rendering you must call this two functions, it helps set the flags accordingly.

ctx.start2D();

//your rendering code
//...

ctx.finish2D();

Feedback

You can write any feedback to [email protected]

More Repositories

1

litegraph.js

A graph node engine and editor written in Javascript similar to PD or UDK Blueprints, comes with its own editor in HTML5 Canvas2D. The engine can run client side or server side using Node. It allows to export graphs as JSONs to be included in applications independently.
JavaScript
6,442
star
2

webglstudio.js

A full open source 3D graphics editor in the browser, with scene editor, coding pad, graph editor, virtual file system, and many features more.
JavaScript
5,202
star
3

litescene.js

A WebGL 3D Engine library with component-based node hierarchy. Used by WebGLStudio
JavaScript
364
star
4

litegl.js

Lightweight Javascript WebGL library for handling Context, Meshes, Textures and Shaders. Relies on glMatrix 2.0, very easy to use.
JavaScript
361
star
5

litegui.js

Javascript Library to create webapps with a desktop look-alike interface. All the widgets are created from Javascript instead of using HTML.
JavaScript
184
star
6

litefilesystem.js

Library with client (js) and serverside (php) to have a filesystem with previews, quotas, metadata, and multiple users with privileges.
PHP
145
star
7

rendeer.js

Light-weight 3D Scene graph library with renderer in WebGL
JavaScript
86
star
8

wide

A lightweight web IDE (mostly a coding editor) based in monaco-editor (with a one-file server made in php). It allows to navigate the server with commands.
JavaScript
48
star
9

collada.js

Collada parser in javascript. It supports skinning, morph targets and bone or node animation. It can parse inside a worker.
JavaScript
48
star
10

GTR_Framework

OpenGL C++ Framework for the realtime rendering course
C
46
star
11

SillyServer.js

Simple WebSockets server in nodejs that bounces packets with some extra functionality (rooms and http request to store permanent information)
JavaScript
20
star
12

litegraph_native

A Litegraph.js implementation in C++. It only supports the execution of nodes created using LiteGraph.JS
C
14
star
13

litepixel.js

2D Game Engine in WebGL
JavaScript
13
star
14

sidviz

A C64 Music chip 6581/8580 visualizer in javascript. It allows to playback SID files and shows the state of the chip during the playback.
JavaScript
12
star
15

glui.js

An inmediate mode GUI that works on top of Canvas2D (it can also work in WebGL)
JavaScript
11
star
16

TJE_Framework

Basic C++ Framework for games, it wraps the basic GPU interface (Meshes, Textures, Shaders, Application).
C
11
star
17

htmlcubemap

A simple class to embed a panoramic view in a website from six pictures
JavaScript
10
star
18

liteos.js

Very simple browser operative system in javascript. Applications are executed in Workers.
PHP
8
star
19

miniengine

Simple C++ OpenGL engine
C
8
star
20

webc

C++ from the web: CodeMirror + Emscripten
JavaScript
7
star
21

game2d_2019

A C++ game made during a week for the Game's Dev course at UPF 2019
C++
5
star
22

gameshouse

Games host server in nodejs, it helps creating persistent online games by providing a dashboard to invite players, launch instances and check stats.
JavaScript
5
star
23

evac3d

A 13Kb javascript game for the JS13K compo of 2022
HTML
4
star
24

jstoolbits

A set of classes in Javascript I use in most of my projects.
JavaScript
4
star
25

TJE2D

A C++ simple 2D games framework, it just creates a window, reads input and allows to load sprites
C
4
star
26

litengine

C
2
star