@@ -588,6 +588,138 @@ describe('geo.quadFeature', function () {
588588 destroyMap ( ) ;
589589 restoreWebglRenderer ( ) ;
590590 } ) ;
591+
592+ it ( 'texture data - RGB format' , function ( ) {
593+ mockWebglRenderer ( ) ;
594+ var map , layer , quad ;
595+ map = createMap ( ) ;
596+ layer = map . createLayer ( 'feature' , { renderer : 'webgl' } ) ;
597+ quad = geo . quadFeature . create ( layer ) ;
598+
599+ // Create RGB texture data (3 bytes per pixel)
600+ var width = 64 , height = 64 ;
601+ var rgbData = new Uint8Array ( width * height * 4 ) ;
602+
603+ // Fill with a gradient pattern
604+ for ( var i = 0 ; i < rgbData . length ; i += 4 ) {
605+ var pixelIndex = i / 3 ;
606+ var x = pixelIndex % width ;
607+ var y = Math . floor ( pixelIndex / width ) ;
608+ rgbData [ i ] = Math . floor ( ( x / width ) * 255 ) ; // R
609+ rgbData [ i + 1 ] = Math . floor ( ( y / height ) * 255 ) ; // G
610+ rgbData [ i + 2 ] = 128 ; // B
611+ rgbData [ i + 3 ] = 255 ; // A
612+ }
613+
614+ var textureData = [ {
615+ ll : [ - 1 , - 1 ] ,
616+ ur : [ 1 , 1 ] ,
617+ texture : {
618+ data : rgbData ,
619+ width : width ,
620+ height : height
621+ }
622+ } ] ;
623+
624+ quad . data ( textureData ) ;
625+ map . draw ( ) ;
626+
627+ var quads = quad . _generateQuads ( ) ;
628+ expect ( quads . imgQuads . length ) . toBe ( 1 ) ;
629+ expect ( quads . imgQuads [ 0 ] . imageTexture ) . toBeDefined ( ) ;
630+ expect ( quads . imgQuads [ 0 ] . imageTexture . width ) . toBe ( width ) ;
631+ expect ( quads . imgQuads [ 0 ] . imageTexture . height ) . toBe ( height ) ;
632+ expect ( quads . imgQuads [ 0 ] . imageTexture . data ) . toBe ( rgbData ) ;
633+
634+ destroyMap ( ) ;
635+ restoreWebglRenderer ( ) ;
636+ } ) ;
637+
638+ it ( 'texture data - Luminance format' , function ( ) {
639+ mockWebglRenderer ( ) ;
640+ var map , layer , quad ;
641+ map = createMap ( ) ;
642+ layer = map . createLayer ( 'feature' , { renderer : 'webgl' } ) ;
643+ quad = geo . quadFeature . create ( layer ) ;
644+
645+ var width = 32 , height = 32 ;
646+ var lumData = new Uint8Array ( width * height ) ;
647+
648+ // Fill with a checkerboard pattern
649+ for ( var i = 0 ; i < lumData . length ; i ++ ) {
650+ var x = i % width ;
651+ var y = Math . floor ( i / width ) ;
652+ lumData [ i ] = ( ( x + y ) % 2 ) * 255 ;
653+ }
654+
655+ var textureData = [ {
656+ ll : [ - 0.5 , - 0.5 ] ,
657+ ur : [ 0.5 , 0.5 ] ,
658+ texture : {
659+ data : lumData ,
660+ type : 'Luminance' ,
661+ width : width ,
662+ height : height
663+ }
664+ } ] ;
665+
666+ quad . data ( textureData ) ;
667+ map . draw ( ) ;
668+
669+ var quads = quad . _generateQuads ( ) ;
670+ expect ( quads . imgQuads . length ) . toBe ( 1 ) ;
671+ expect ( quads . imgQuads [ 0 ] . imageTexture ) . toBeDefined ( ) ;
672+ expect ( quads . imgQuads [ 0 ] . imageTexture . data ) . toBe ( lumData ) ;
673+
674+ destroyMap ( ) ;
675+ restoreWebglRenderer ( ) ;
676+ } ) ;
677+
678+ it ( 'texture data - LuminanceAlpha format' , function ( ) {
679+ mockWebglRenderer ( ) ;
680+ var map , layer , quad ;
681+ map = createMap ( ) ;
682+ layer = map . createLayer ( 'feature' , { renderer : 'webgl' } ) ;
683+ quad = geo . quadFeature . create ( layer ) ;
684+
685+ // Create LuminanceAlpha texture data (2 bytes per pixel)
686+ var width = 16 , height = 16 ;
687+ var laData = new Uint8Array ( width * height * 2 ) ;
688+
689+ // Fill with a radial gradient
690+ for ( var i = 0 ; i < laData . length ; i += 2 ) {
691+ var pixelIndex = i / 2 ;
692+ var x = ( pixelIndex % width ) - width / 2 ;
693+ var y = Math . floor ( pixelIndex / width ) - height / 2 ;
694+ var distance = Math . sqrt ( x * x + y * y ) ;
695+ var maxDistance = Math . sqrt ( ( width / 2 ) * ( width / 2 ) + ( height / 2 ) * ( height / 2 ) ) ;
696+ var intensity = Math . floor ( ( 1 - distance / maxDistance ) * 255 ) ;
697+ laData [ i ] = intensity ; // Luminance
698+ laData [ i + 1 ] = 255 ; // Alpha
699+ }
700+
701+ var textureData = [ {
702+ ll : [ - 0.25 , - 0.25 ] ,
703+ ur : [ 0.25 , 0.25 ] ,
704+ texture : {
705+ data : laData ,
706+ type : 'LuminanceAlpha' ,
707+ width : width ,
708+ height : height
709+ }
710+ } ] ;
711+
712+ quad . data ( textureData ) ;
713+ map . draw ( ) ;
714+
715+ var quads = quad . _generateQuads ( ) ;
716+ expect ( quads . imgQuads . length ) . toBe ( 1 ) ;
717+ expect ( quads . imgQuads [ 0 ] . imageTexture ) . toBeDefined ( ) ;
718+ expect ( quads . imgQuads [ 0 ] . imageTexture . data ) . toBe ( laData ) ;
719+
720+ destroyMap ( ) ;
721+ restoreWebglRenderer ( ) ;
722+ } ) ;
591723 } ) ;
592724
593725 /* This is a basic integration test of geo.canvas.quadFeature. */
0 commit comments