Skip to content
Snippets Groups Projects
Commit 4892dbe4 authored by Alexander Rose's avatar Alexander Rose
Browse files

added gl shim and renderer spec

parent 33b7a339
No related branches found
No related tags found
No related merge requests found
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
...@@ -91,7 +91,6 @@ ...@@ -91,7 +91,6 @@
"dependencies": { "dependencies": {
"argparse": "^1.0.10", "argparse": "^1.0.10",
"express": "^4.16.3", "express": "^4.16.3",
"gl": "^4.0.4",
"immutable": "^4.0.0-rc.9", "immutable": "^4.0.0-rc.9",
"node-fetch": "^2.1.2", "node-fetch": "^2.1.2",
"react": "^16.3.2", "react": "^16.3.2",
......
This diff is collapsed.
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @author Alexander Rose <alexander.rose@weirdbyte.de> * @author Alexander Rose <alexander.rose@weirdbyte.de>
*/ */
import createGl = require('gl'); import { createGl } from './gl.shim';
import { PerspectiveCamera } from 'mol-view/camera/perspective'; import { PerspectiveCamera } from 'mol-view/camera/perspective';
import { Vec3, Mat4 } from 'mol-math/linear-algebra'; import { Vec3, Mat4 } from 'mol-math/linear-algebra';
...@@ -17,16 +17,16 @@ import { createUniformColor } from 'mol-geo/util/color-data'; ...@@ -17,16 +17,16 @@ import { createUniformColor } from 'mol-geo/util/color-data';
import { createUniformSize } from 'mol-geo/util/size-data'; import { createUniformSize } from 'mol-geo/util/size-data';
import { createContext } from '../webgl/context'; import { createContext } from '../webgl/context';
function writeImage(gl: WebGLRenderingContext, width: number, height: number) { // function writeImage(gl: WebGLRenderingContext, width: number, height: number) {
const pixels = new Uint8Array(width * height * 4) // const pixels = new Uint8Array(width * height * 4)
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels) // gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels)
process.stdout.write(['P3\n# gl.ppm\n', width, ' ', height, '\n255\n'].join('')) // process.stdout.write(['P3\n# gl.ppm\n', width, ' ', height, '\n255\n'].join(''))
for (let i = 0; i<pixels.length; i+=4) { // for (let i = 0; i<pixels.length; i+=4) {
for (let j = 0; j<3; ++j) { // for (let j = 0; j<3; ++j) {
process.stdout.write(pixels[i+j] + ' ') // process.stdout.write(pixels[i+j] + ' ')
} // }
} // }
} // }
function createRenderer(gl: WebGLRenderingContext) { function createRenderer(gl: WebGLRenderingContext) {
const ctx = createContext(gl) const ctx = createContext(gl)
...@@ -35,7 +35,8 @@ function createRenderer(gl: WebGLRenderingContext) { ...@@ -35,7 +35,8 @@ function createRenderer(gl: WebGLRenderingContext) {
far: 10000, far: 10000,
position: Vec3.create(0, 0, 50) position: Vec3.create(0, 0, 50)
}) })
return Renderer.create(ctx, camera) const renderer = Renderer.create(ctx, camera)
return { ctx, camera, renderer }
} }
function createPoints() { function createPoints() {
...@@ -52,6 +53,7 @@ function createPoints() { ...@@ -52,6 +53,7 @@ function createPoints() {
objectId: 0, objectId: 0,
alpha: 1.0, alpha: 1.0,
visible: true, visible: true,
depthMask: true,
position, position,
id, id,
...@@ -65,18 +67,52 @@ function createPoints() { ...@@ -65,18 +67,52 @@ function createPoints() {
}) })
} }
// TODO not working describe('renderer', () => {
// - shaders not transformed via glslify
describe.skip('renderer', () => {
it('basic', () => { it('basic', () => {
const [ width, height ] = [ 32, 32 ] const [ width, height ] = [ 32, 32 ]
const gl = createGl(width, height, { preserveDrawingBuffer: true }) const gl = createGl(width, height, { preserveDrawingBuffer: true })
const renderer = createRenderer(gl) const { ctx, renderer } = createRenderer(gl)
expect(ctx.gl.canvas.width).toBe(32)
expect(ctx.gl.canvas.height).toBe(32)
expect(ctx.bufferCount).toBe(0);
expect(ctx.textureCount).toBe(0);
expect(ctx.vaoCount).toBe(0);
expect(ctx.programCache.count).toBe(0);
expect(ctx.shaderCache.count).toBe(0);
renderer.setViewport({ x: 0, y: 0, width: 64, height: 48 })
expect(ctx.gl.getParameter(ctx.gl.VIEWPORT)[2]).toBe(64)
expect(ctx.gl.getParameter(ctx.gl.VIEWPORT)[3]).toBe(48)
})
it('points', () => {
const [ width, height ] = [ 32, 32 ]
const gl = createGl(width, height, { preserveDrawingBuffer: true })
const { ctx, renderer } = createRenderer(gl)
const points = createPoints() const points = createPoints()
renderer.add(points) renderer.add(points)
renderer.draw() expect(ctx.bufferCount).toBe(4);
expect(ctx.textureCount).toBe(0);
expect(ctx.vaoCount).toBe(1);
expect(ctx.programCache.count).toBe(1);
expect(ctx.shaderCache.count).toBe(2);
renderer.remove(points)
expect(ctx.bufferCount).toBe(0);
expect(ctx.textureCount).toBe(0);
expect(ctx.vaoCount).toBe(0);
expect(ctx.programCache.count).toBe(1);
expect(ctx.shaderCache.count).toBe(2);
ctx.programCache.dispose()
expect(ctx.programCache.count).toBe(0);
writeImage(gl, width, height) ctx.shaderCache.clear()
expect(ctx.shaderCache.count).toBe(0);
// console.log('moin', ctx)
}) })
}) })
\ No newline at end of file
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment