#webgl
#webgl
Вопрос:
я не знаю, как работает copyteximage2D, я хотел бы получить объяснение в терминах конечного автомата webgl :
благодаря gman у меня есть это :
gl = {
activeTextureUnit: 0,
textureUnits: [],
};
gl.activeTexture = function(unit) {
this.activeTextureUnit = unit - this.TEXTURE_0;
};
gl.bindTexture = function(bindPoint, texture) {
var textureUnit = this.textureUnits[this.activeTextureUnit];
switch (bindPoint) {
case this.TEXTURE_2D:
textureUnit.texture2D = texture;
break;
case ....
}
};
gl.copyTexImage2D = function( target, level, iformat, x, y, w,h,b) {
.....
..... gman please your code here thanks very much!!!
.....
}
Ответ №1:
copyTexImage2D
копирует из текущего фреймбуфера или холста в заданную цель текущего текстурного блока
gl = {
activeTextureUnit: 0,
textureUnits: [
{ gl.TEXTURE_2D: null, gl.TEXTURE_CUBE_MAP: null, ... },
{ gl.TEXTURE_2D: null, gl.TEXTURE_CUBE_MAP: null, ... },
{ gl.TEXTURE_2D: null, gl.TEXTURE_CUBE_MAP: null, ... },
{ gl.TEXTURE_2D: null, gl.TEXTURE_CUBE_MAP: null, ... },
...
],
framebufferBindPoints: {
gl.FRAMEBUFFER: gl.canvas.internalFramebuffer,
},
};
gl.bindFramebuffer = function(bindPoint, framebuffer) {
this.framebufferBindPoints[bindPoint] =
framebuffer ? framebuffer : gl.canvas.internalFramebuffer;
};
gl.copyTexImage2D = function( target, level, iformat, x, y, w,h,b) {
var textureUnit = this.textureUnits[this.activeTextureUnit];
var texture = textureUnit[target];
var framebuffer = this.framebufferBindPoints[gl.FRAMEBUFFER];
// copy from framebuffer into texture
}
Комментарии:
1. приятно!! Итак, если перед gl.copyTex .. я поставил
fbPV2 = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fbPV2); gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, pvTex2, 0);
так, что pvTex2 будет скопирован в текстуру, привязанную к текущему textureUnit ?2. Yes
pxTex2
будет источником для любой текстуры, в которую вы решите скопировать texImage2D.3. хорошо! теперь я сталкиваюсь с другой проблемой: pvTex2 — это текстура с плавающей точкой. Кажется, это может быть проблемой? или, может быть, проблема в том, что я не создал generatemimap (или не установил фильтр) после copyTexImage2D ?
4. хорошо, generatemimap тривиален. И я предполагаю, что из того, что я нахожу, copyteximage2D не работает с текстурами с плавающей точкой. Итак, я собираюсь использовать шейдер и нарисовать текстуру в фреймбуфере, чтобы получить копию!
5. Куда вы копируете из float в float? Я не помню ограничений с головы до ног. Да, копирование с помощью шейдера является распространенным решением. Chrome даже делает это за кулисами для определенных ситуаций.