11
2- var Class = require ( '../../utils/Class' ) ;
3- var GameObject = require ( '../GameObject' ) ;
4- var Components = require ( '../../components' ) ;
2+ var Class = require ( '../../../ utils/Class' ) ;
3+ var GameObject = require ( '../../ GameObject' ) ;
4+ var Components = require ( '../../../ components' ) ;
55var StaticTilemapRender = require ( './StaticTilemapRender' ) ;
6+ var CONST = require ( '../../../renderer/webgl/renderers/tilemaprenderer/const' ) ;
67
7- var TileSprite = new Class ( {
8+ var StaticTilemap = new Class ( {
89
910 Extends : GameObject ,
1011
@@ -30,26 +31,29 @@ var TileSprite = new Class({
3031 GameObject . call ( this , state , 'StaticTilemap' ) ;
3132
3233 this . vbo = null ;
34+ this . gl = state . game . renderer . gl ? state . game . renderer . gl : null ;
35+ this . tilemapRenderer = state . game . renderer . tilemapRenderer ? state . game . renderer . tilemapRenderer : null ;
36+ this . resourceManager = this . gl ? state . game . renderer . resourceManager : null ;
3337 this . bufferData = null ;
3438 this . mapData = mapData ;
3539 this . tileWidth = tileWidth ;
3640 this . tileHeight = tileHeight ;
3741 this . mapWidth = mapWidth ;
3842 this . mapHeight = mapHeight ;
3943 this . dirty = true ;
44+ this . vertexCount = 0 ;
4045 this . setTexture ( texture , frame ) ;
4146 this . setPosition ( x , y ) ;
4247 this . setSizeToFrame ( ) ;
4348 this . setOrigin ( ) ;
44- this . setSize ( width , height ) ;
45-
49+ this . setSize ( tileWidth * mapWidth , tileHeight * mapHeight ) ;
4650 } ,
4751
4852 upload : function ( )
4953 {
50- if ( this . dirty )
54+ if ( this . dirty && this . gl )
5155 {
52- var gl ;
56+ var gl = this . gl ;
5357 var vbo = this . vbo ;
5458 var mapWidth = this . mapWidth ;
5559 var mapHeight = this . mapHeight ;
@@ -58,13 +62,15 @@ var TileSprite = new Class({
5862 var bufferData = this . bufferData ;
5963 var bufferF32 , bufferU32 ;
6064 var voffset = 0 ;
65+ var vertexCount = 0 ;
6166
6267 if ( this . vbo === null )
6368 {
64- vbo = this . vbo = gl . createBuffer ( ) ;
69+ vbo = this . resourceManager . createBuffer ( gl . ARRAY_BUFFER , ( 4 * 6 * ( mapWidth * mapHeight ) ) * 4 , gl . STATIC_DRAW ) ;
70+ vbo . addAttribute ( this . tilemapRenderer . shader . getAttribLocation ( 'a_position' ) , 2 , gl . FLOAT , false , CONST . VERTEX_SIZE , 0 ) ;
71+ vbo . addAttribute ( this . tilemapRenderer . shader . getAttribLocation ( 'a_tex_coord' ) , 2 , gl . FLOAT , false , CONST . VERTEX_SIZE , 8 ) ;
6572 bufferData = this . bufferData = new ArrayBuffer ( ( 4 * 6 * ( mapWidth * mapHeight ) ) * 4 ) ;
66- gl . bindBuffer ( gl . ARRAY_BUFFER , vbo ) ;
67- gl . bufferData ( gl . ARRAY_BUFFER , bufferData , gl . STATIC_DRAW ) ;
73+ this . vbo = vbo ;
6874 }
6975
7076 bufferF32 = new Float32Array ( bufferData ) ;
@@ -115,11 +121,12 @@ var TileSprite = new Class({
115121 bufferF32 [ voffset + 1 ] = ty3 ;
116122 bufferF32 [ voffset + 2 ] = 1 ;
117123 bufferF32 [ voffset + 3 ] = 0 ;
124+
125+ vertexCount += 6 ;
118126 }
119127 }
120-
121- gl . bindBuffer ( gl . ARRAY_BUFFER , vbo ) ;
122- gl . bufferSubData ( gl . ARRAY_BUFFER , 0 , bufferData ) ;
128+ this . vertexCount = vertexCount ;
129+ vbo . updateResource ( bufferData , 0 ) ;
123130
124131 this . dirty = false ;
125132 }
0 commit comments