123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- /**
- * @author TristanVALCKE / https://github.com/Itee
- */
- /* global QUnit */
- import { WebGLRenderLists, WebGLRenderList } from '../../../../../src/renderers/webgl/WebGLRenderLists';
- import { Camera } from '../../../../../src/cameras/Camera';
- import { Scene } from '../../../../../src/scenes/Scene';
- export default QUnit.module( 'Renderers', () => {
- QUnit.module( 'WebGL', () => {
- QUnit.module( 'WebGLRenderLists', () => {
- // PUBLIC STUFF
- QUnit.test( "get", ( assert ) => {
- var renderLists = new WebGLRenderLists();
- var sceneA = new Scene();
- var sceneB = new Scene();
- var cameraA = new Camera();
- var cameraB = new Camera();
- var listAA = renderLists.get( sceneA, cameraA );
- var listAB = renderLists.get( sceneA, cameraB );
- var listBA = renderLists.get( sceneB, cameraA );
- assert.propEqual( listAA, new WebGLRenderList(), "listAA is type of WebGLRenderList." );
- assert.propEqual( listAB, new WebGLRenderList(), "listAB is type of WebGLRenderList." );
- assert.ok( listAA !== listAB, "Render lists for camera A and B with same scene are different." );
- assert.ok( listAA !== listBA, "Render lists for scene A and B with same camera are different." );
- assert.ok( listAA === renderLists.get( sceneA, cameraA ), "The same list is returned when called with the same scene, camera." );
- } );
- QUnit.test( "dispose", ( assert ) => {
- var renderLists = new WebGLRenderLists();
- var scene = new Scene();
- var camera = new Camera();
- var list1 = renderLists.get( scene, camera );
- scene.dispose()
- var list2 = renderLists.get( scene, camera );
- assert.ok( list1 !== list2, "New list should be different after disposing of the scene." );
- } );
- } );
- QUnit.module( 'WebGLRenderList', () => {
- QUnit.test( 'init', ( assert ) => {
- var list = new WebGLRenderList();
- assert.ok( list.transparent.length === 0, 'Transparent list defaults to length 0.' );
- assert.ok( list.opaque.length === 0, 'Opaque list defaults to length 0.' );
- list.push( {}, {}, { transparent: true }, 0, 0, {} );
- list.push( {}, {}, { transparent: false }, 0, 0, {} );
- assert.ok( list.transparent.length === 1, 'Transparent list is length 1 after adding transparent item.' );
- assert.ok( list.opaque.length === 1, 'Opaque list list is length 1 after adding opaque item.' );
- list.init();
- assert.ok( list.transparent.length === 0, 'Transparent list is length 0 after calling init.' );
- assert.ok( list.opaque.length === 0, 'Opaque list list is length 0 after calling init.' );
- } );
- QUnit.test( 'push', ( assert ) => {
- var list = new WebGLRenderList();
- var objA = { id: 'A', renderOrder: 0 };
- var matA = { transparent: true, program: { id: 1 } };
- var geoA = {};
- var objB = { id: 'B', renderOrder: 0 };
- var matB = { transparent: true, program: { id: 2 } };
- var geoB = {};
- var objC = { id: 'C', renderOrder: 0 };
- var matC = { transparent: false, program: { id: 3 } };
- var geoC = {};
- var objD = { id: 'D', renderOrder: 0 };
- var matD = { transparent: false, program: { id: 4 } };
- var geoD = {};
- list.push( objA, geoA, matA, 0, 0.5, {} );
- assert.ok( list.transparent.length === 1, 'Transparent list is length 1 after adding transparent item.' );
- assert.ok( list.opaque.length === 0, 'Opaque list list is length 0 after adding transparent item.' );
- assert.deepEqual(
- list.transparent[ 0 ],
- {
- id: 'A',
- object: objA,
- geometry: geoA,
- material: matA,
- program: matA.program,
- groupOrder: 0,
- renderOrder: 0,
- z: 0.5,
- group: {}
- },
- 'The first transparent render list item is structured correctly.'
- );
- list.push( objB, geoB, matB, 1, 1.5, {} );
- assert.ok( list.transparent.length === 2, 'Transparent list is length 2 after adding second transparent item.' );
- assert.ok( list.opaque.length === 0, 'Opaque list list is length 0 after adding second transparent item.' );
- assert.deepEqual(
- list.transparent[ 1 ],
- {
- id: 'B',
- object: objB,
- geometry: geoB,
- material: matB,
- program: matB.program,
- groupOrder: 1,
- renderOrder: 0,
- z: 1.5,
- group: {}
- },
- 'The second transparent render list item is structured correctly.'
- );
- list.push( objC, geoC, matC, 2, 2.5, {} );
- assert.ok( list.transparent.length === 2, 'Transparent list is length 2 after adding first opaque item.' );
- assert.ok( list.opaque.length === 1, 'Opaque list list is length 1 after adding first opaque item.' );
- assert.deepEqual(
- list.opaque[ 0 ],
- {
- id: 'C',
- object: objC,
- geometry: geoC,
- material: matC,
- program: matC.program,
- groupOrder: 2,
- renderOrder: 0,
- z: 2.5,
- group: {}
- },
- 'The first opaque render list item is structured correctly.'
- );
- list.push( objD, geoD, matD, 3, 3.5, {} );
- assert.ok( list.transparent.length === 2, 'Transparent list is length 2 after adding second opaque item.' );
- assert.ok( list.opaque.length === 2, 'Opaque list list is length 2 after adding second opaque item.' );
- assert.deepEqual(
- list.opaque[ 1 ],
- {
- id: 'D',
- object: objD,
- geometry: geoD,
- material: matD,
- program: matD.program,
- groupOrder: 3,
- renderOrder: 0,
- z: 3.5,
- group: {}
- },
- 'The second opaque render list item is structured correctly.'
- );
- } );
- QUnit.test( 'unshift', ( assert ) => {
- var list = new WebGLRenderList();
- var objA = { id: 'A', renderOrder: 0 };
- var matA = { transparent: true, program: { id: 1 } };
- var geoA = {};
- var objB = { id: 'B', renderOrder: 0 };
- var matB = { transparent: true, program: { id: 2 } };
- var geoB = {};
- var objC = { id: 'C', renderOrder: 0 };
- var matC = { transparent: false, program: { id: 3 } };
- var geoC = {};
- var objD = { id: 'D', renderOrder: 0 };
- var matD = { transparent: false, program: { id: 4 } };
- var geoD = {};
- list.unshift( objA, geoA, matA, 0, 0.5, {} );
- assert.ok( list.transparent.length === 1, 'Transparent list is length 1 after adding transparent item.' );
- assert.ok( list.opaque.length === 0, 'Opaque list list is length 0 after adding transparent item.' );
- assert.deepEqual(
- list.transparent[ 0 ],
- {
- id: 'A',
- object: objA,
- geometry: geoA,
- material: matA,
- program: matA.program,
- groupOrder: 0,
- renderOrder: 0,
- z: 0.5,
- group: {}
- },
- 'The first transparent render list item is structured correctly.'
- );
- list.unshift( objB, geoB, matB, 1, 1.5, {} );
- assert.ok( list.transparent.length === 2, 'Transparent list is length 2 after adding second transparent item.' );
- assert.ok( list.opaque.length === 0, 'Opaque list list is length 0 after adding second transparent item.' );
- assert.deepEqual(
- list.transparent[ 0 ],
- {
- id: 'B',
- object: objB,
- geometry: geoB,
- material: matB,
- program: matB.program,
- groupOrder: 1,
- renderOrder: 0,
- z: 1.5,
- group: {}
- },
- 'The second transparent render list item is structured correctly.'
- );
- list.unshift( objC, geoC, matC, 2, 2.5, {} );
- assert.ok( list.transparent.length === 2, 'Transparent list is length 2 after adding first opaque item.' );
- assert.ok( list.opaque.length === 1, 'Opaque list list is length 1 after adding first opaque item.' );
- assert.deepEqual(
- list.opaque[ 0 ],
- {
- id: 'C',
- object: objC,
- geometry: geoC,
- material: matC,
- program: matC.program,
- groupOrder: 2,
- renderOrder: 0,
- z: 2.5,
- group: {}
- },
- 'The first opaque render list item is structured correctly.'
- );
- list.unshift( objD, geoD, matD, 3, 3.5, {} );
- assert.ok( list.transparent.length === 2, 'Transparent list is length 2 after adding second opaque item.' );
- assert.ok( list.opaque.length === 2, 'Opaque list list is length 2 after adding second opaque item.' );
- assert.deepEqual(
- list.opaque[ 0 ],
- {
- id: 'D',
- object: objD,
- geometry: geoD,
- material: matD,
- program: matD.program,
- groupOrder: 3,
- renderOrder: 0,
- z: 3.5,
- group: {}
- },
- 'The second opaque render list item is structured correctly.'
- );
- } );
- QUnit.test( 'sort', ( assert ) => {
- var list = new WebGLRenderList();
- var items = [ { id: 4 }, { id: 5 }, { id: 2 }, { id: 3 } ];
- items.forEach( item => {
- list.push( item, {}, { transparent: true }, 0, 0, {} );
- list.push( item, {}, { transparent: false }, 0, 0, {} );
- } );
- list.sort( ( a, b ) => a.id - b.id, ( a, b ) => b.id - a.id );
- assert.deepEqual(
- list.opaque.map( item => item.id ),
- [ 2, 3, 4, 5 ],
- 'The opaque sort is applied to the opaque items list.'
- );
- assert.deepEqual(
- list.transparent.map( item => item.id ),
- [ 5, 4, 3, 2 ],
- 'The transparent sort is applied to the transparent items list.'
- );
- } );
- QUnit.todo( 'finish', ( assert ) => {
- assert.ok( false, "everything's gonna be alright" );
- } );
- } );
- } );
- } );
|