2013-03-03 3 views
2

У меня есть странная проблема с webGL.WebGL: данные для не квадратной альфа-текстуры

Я использую динамически сгенерированную текстуру, из которой имеет значение только альфа-канал. Вот код:

var texture = new Uint8Array(ar); // ar is my array 
gl.bindTexture(gl.TEXTURE_2D, this.transparencyTexture); 
gl.texImage2D(gl.TEXTURE_2D, 0, gl.ALPHA, array.length, array[0].length, 0, gl.ALPHA, gl.UNSIGNED_BYTE, texture); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); 

Я всегда использовать массив POT»„ширина“и„высота“, но когда„ширина“<>„высота“не работает. Так что в настоящее время он работает только с квадратами.

Что можно сделать?

EDIT:

http://jsfiddle.net/SergeJcqmn/EAmjU/9/

+0

Похоже браузер ошибка, но это трудно узнать без каких-либо подробностей. Например, каковы ваши координаты текстуры? Что вы получаете от 'gl.getError()'? Как это выглядит визуально? – prideout

+0

Просто любопытно, но 'array.length, array [0] .length'? Итак, у вас есть двумерный массив в JavaScript? Как это относится к 'ar'? – gman

+0

Я предоставляю правильные координаты (также для других текстур). gl.getError() возвращает 0. он отображает только как пиксели/фрагменты vec4 (0, 0, 0, 0). – Serge

ответ

1

В jsfiddle, строка 76 из JS неправилен:

ar.push(array[x][(array.length - 1) - y] ? 128 : 0); 

Я считаю, что это должно быть:

ar.push(array[x][(array[0].length - 1) - y] ? 128 : 0); 
+0

Ты совершенно прав. Я удивлен, что ошибка «из индекса» была переписана (так как это была ошибка). Спасибо. – Serge

Смежные вопросы