[ Leksykon ] [ JavaScript ] [ Metody ] [ canvas ] [ WebGL ]
WebGLRenderingContext.copyTexImage2D()
[_] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
copyTexImage2D(target, level, internalformat, x, y, width, height, border)
Przykłady:
function createTextureFramebuffer(gl, width, height) {
const tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
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);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
console.log("BRAK KOMPLETNEGO BUFERA RAMKI");
}
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE) {
console.log("BUFOR RAMKI KOMPLETNY");
}
return {tex: tex, fb: fb};
}
const buf = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
-1, -1,
1, -1,
-1, 1,
-1, 1,
1, -1,
1, 1,
]), gl.STATIC_DRAW);
const colorProgram = gl.getAttribLocation(glProgramColor, "a_position");
gl.enableVertexAttribArray(colorProgram);
gl.vertexAttribPointer(colorProgram, 2, gl.FLOAT, false, 0, 0);
const colorLocation = gl.getUniformLocation(glProgramColor, "u_color");
const colorProgLocation = gl.getUniformLocation(glProgramColor, "u_matrix");
gl.useProgram(glProgramColor);
const texFb1 = createTextureFramebuffer(gl, 200, 200);
const texFbcopy = createTextureFramebuffer(gl, 1, 1);
gl.bindFramebuffer(gl.FRAMEBUFFER, texFb1.fb);
gl.viewport(0, 0, 200, 200);
gl.uniform4fv(colorLocation, [1, 0, 0, 1]);
gl.uniformMatrix4fv(colorProgLocation, false, [
0.5, 0, 0, 0,
0,.25, 0, 0,
0, 0, 1, 0,
.2,.3, 0, 1,
]);
gl.drawArrays(gl.TRIANGLES, 0, 6);
gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 70, 110, 100, 45, 0);
const tekstura1 = {
width: 200,
height: 200,
texture: texFb1.tex,
};
const drawTekstura1 = {
x: 0,
y: 0,
textureInfo: tekstura1,
};
draw.push(drawTekstura1);
const teksturaCopy = {
width: 100,
height: 45,
texture: texFbcopy.tex,
};
const drawTeksturaCopy = {
x: 10,
y: 350,
textureInfo: teksturaCopy,
};
draw.push(drawTeksturaCopy);
rysujObraz(
draw[0].textureInfo.texture,
draw[0].textureInfo.width,
draw[0].textureInfo.height,
draw[0].x,
draw[0].y);
rysujObraz(
draw[1].textureInfo.texture,
draw[1].textureInfo.width,
draw[1].textureInfo.height,
draw[1].x,
draw[1].y);
function rysujObraz(tekstura, teksturaWidth, teksturaHeight, obrazX, obrazY) {
gl.bindTexture(gl.TEXTURE_2D, tekstura);
gl.enableVertexAttribArray(positionLocation);
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(texcoordLocation);
gl.vertexAttribPointer(texcoordLocation, 2, gl.FLOAT, false, 0, 0);
var matrix = macierzPro(0, gl.canvas.width, gl.canvas.height, 0, -1, 1);
matrix = translacja(matrix, obrazX, obrazY, 0);
matrix = skalowanie(matrix, teksturaWidth, teksturaHeight, 1);
gl.uniformMatrix4fv(matrixLocation, false, matrix);
gl.uniform1i(textureLocation, 0);
gl.drawArrays(gl.TRIANGLES, 0, 6);
gl.disableVertexAttribArray( positionLocation );
}
Opis:
Metoda WebGLRenderingContext.copyTexImage2D() kopiuje piksele z bieżącego WebGLFramebuffer obrazu tekstury 2D. Określa teksturę dwuwymiarową lub teksturę w kształcie mapy sześcianu dla bieżącej jednostki tekstury, określonej za pomocą ActiveTexture(). Umożliwia odczyt z aktualnie powiązanego odczytu bufora ramki, gdy bieżący moduł cieniujący fragmenty lub moduł cieniujący wierzchołków korzysta z wbudowanych funkcji wyszukiwania tekstur. copyTexImage2D() definiuje dwuwymiarowy obraz tekstury lub obraz tekstury w kształcie mapy sześcianu z pikselami z bieżącego bufora ramki, a nie z pamięci klienta, jak ma to miejsce w przypadku TexImage2D(). Piksele w prostokącie są przetwarzane dokładnie tak, jakby wywołano funkcję ReadPixels() z formatem ustawionym na GL_RGBA, ale proces zatrzymuje się zaraz po konwersji wartości RGBA. Dalsze przetwarzanie jest identyczne z glTexImage2D, zaczynając od umieszczenia wartości RGBA w zakresie 0, 1, a następnie konwersja do wewnętrznego formatu tekstury w celu przechowywania w tablicy texel. Komponenty wymagane do formatu wewnętrznego muszą stanowić podzbiór komponentów obecnych w formacie bufora ramki. Na przykład bufor ramki GL_RGBA może zostać użyty do dostarczenia komponentów dla dowolnego formatu wewnętrznego. Jednakże bufor ramki GL_RGB może być używany tylko do dostarczania komponentów dla tekstur w podstawowym formacie wewnętrznym GL_RGB lub GL_LUMINANCE, nie do tekstur GL_ALPHA, GL_LUMINANCE_ALPHA lub GL_RGBA. Kopiuje z bieżącego bufora ramki lub płótna do danego celu bieżącej jednostki tekstury. Parametry:
target - GLenum określenie punktu wiązania docelowego aktywnej tekstury. Możliwa wartość:
gl.TEXTURE_2D - Dwuwymiarowa tekstura
gl.TEXTURE_CUBE_MAP_POSITIVE_X Dodatnia ściana X dla tekstury odwzorowanej w kształcie sześcianu
gl.TEXTURE_CUBE_MAP_NEGATIVE_X Negatywna ściana X dla tekstury odwzorowanej w kształcie sześcianu
gl.TEXTURE_CUBE_MAP_POSITIVE_Y Dodatnia ściana Y dla tekstury odwzorowanej w kształcie sześcianu
gl.TEXTURE_CUBE_MAP_NEGATIVE_Y Negatywna ściana Y dla tekstury odwzorowanej w kształcie sześcianu
gl.TEXTURE_CUBE_MAP_POSITIVE_Z Pozytywna ściana Z dla tekstury odwzorowanej w kształcie sześcianu
gl.TEXTURE_CUBE_MAP_NEGATIVE_Z Negatywna ściana Z dla tekstury odwzorowanej w kształcie sześcianu
level - GLint określenie poziomu szczegółowości. Poziom 0 to podstawowy poziom obrazu, a poziom n to n-ty poziom redukcji mipmapy
internalformat - GLenum określenie składników koloru w teksturze. Możliwa wartość:
gl.ALPHA - Odrzuca komponenty czerwony, zielony i niebieski i odczytuje komponent alfa
gl.RGB - Odrzuca komponenty alfa i odczytuje komponenty czerwony, zielony i niebieski
gl.RGBA - Składowe czerwony, zielony, niebieski i alfa są odczytywane z bufora kolorów
gl.LUMINANCE - Każdy składnik koloru jest składnikiem luminancji, alfa wynosi 1,0
gl.LUMINANCE_ALPHA - Każdy składnik jest składnikiem luminancji/alfa
x - GLint określająca współrzędną x lewego dolnego rogu, od którego należy rozpocząć kopiowanie
y - GLint określająca współrzędną y lewego dolnego rogu, od którego należy rozpocząć kopiowanie
width - GLsizei określenie szerokości tekstury
height - GLsizei określenie wysokości tekstury
border - GLint określenie szerokości obramowania. Musi być 0
Wartość zwracana undefined.
Zobacz też:
WebGLFramebuffer -
copyTexImage2D -
copyTexSubImage2D -
readPixels -
Texel - W grafice 3D texel to pojedynczy piksel w teksturze