Skip to content

Commit e022703

Browse files
committed
remove uneeded code, add tests
1 parent b80a9c2 commit e022703

File tree

4 files changed

+146
-106
lines changed

4 files changed

+146
-106
lines changed

sample.html

Lines changed: 0 additions & 104 deletions
This file was deleted.

src/quadFeature.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,9 @@ quadFeature.capabilities = {
786786
/* support for canvas elements as content in image quads */
787787
canvas: 'quad.canvas',
788788
/* support for parallelogram video quads */
789-
video: 'quad.video'
789+
video: 'quad.video',
790+
/* support for raw texture data */
791+
texture: 'quad.texture'
790792
};
791793

792794
inherit(quadFeature, feature);

src/vgl/texture.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ vgl.texture = function () {
6565
vgl.GL.TEXTURE_WRAP_S, vgl.GL.CLAMP_TO_EDGE);
6666
renderState.m_context.texParameteri(vgl.GL.TEXTURE_2D,
6767
vgl.GL.TEXTURE_WRAP_T, vgl.GL.CLAMP_TO_EDGE);
68+
6869
if (this.m_image !== null) {
6970
renderState.m_context.pixelStorei(vgl.GL.UNPACK_ALIGNMENT, 1);
7071
renderState.m_context.pixelStorei(vgl.GL.UNPACK_FLIP_Y_WEBGL, true);
7172

7273
this.updateDimensions();
7374
this.computeInternalFormatUsingImage();
7475

75-
7676
// FOR now support only 2D textures
7777
renderState.m_context.texImage2D(vgl.GL.TEXTURE_2D, 0, this.m_internalFormat,
7878
this.m_pixelFormat, this.m_pixelDataType, this.m_image);
@@ -154,6 +154,16 @@ vgl.texture = function () {
154154
return false;
155155
};
156156

157+
/**
158+
* Set Raw Texture data in Uint8Array
159+
*
160+
* @param {object} texture: texture object to load.
161+
* type: 'RGB' | 'RGBA' | 'Luminance' | 'LuminanceAlpha'.
162+
* texture: Uint8Array representing the format based on the type
163+
* width: width of the texture
164+
* height: height of the texture
165+
* @returns {boolean}
166+
*/
157167
this.setTexture = function (texture) {
158168
if (texture !== null) {
159169
this.m_texture = texture;

tests/cases/quadFeature.js

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)