Ich versuche, eine Alpha-Map in meinem ersten Programm zu erstellen, um in meinem zweiten Programm zu verwenden. Ich fühle mich wie ive hat alles richtig aber eingerichtet im einen Fehler bekommen:Webgl - Erstellen Sie Textur in Programm 1 und senden Sie es an Programm 2. Keine Textur an Einheit gebunden 0
[.Offscreen-For-WebGL-0x7fc3281a4200]RENDER WARNING: there is no texture bound to the unit 0
Im zwei getrennten Klassen verwenden, da für diese, da das zweite Programm manchmal laufen wird, ohne dass die erste es zu maskieren.
Beide Programme laufen nacheinander im selben gl-Kontext. Ich starte den Setup-Code in der Reihenfolge des ersten Programms und dann zweitens und führe dann natürlich die Zeichenfunktionen in der gleichen Reihenfolge aus.
Aufbau Programm 1 (Erstellen der Alpha-Map):
// Get gl, add blending ect, then...
// The webgl variable below just holds webgl constants from https://google.github.io/closure-library/api/goog.webgl.html
this.targetTexture_ = this.gl_.createTexture();
this.gl_.activeTexture(webgl.TEXTURE0);
this.gl_.bindTexture(webgl.TEXTURE_2D, this.targetTexture_);
this.gl_.texImage2D(webgl.TEXTURE_2D, 0, webgl.RGBA, this.gl_.canvas.width,
this.gl_.canvas.height, 0, webgl.RGBA, webgl.UNSIGNED_BYTE, null);
this.gl_.texParameteri(webgl.TEXTURE_2D, webgl.TEXTURE_MIN_FILTER, webgl.LINEAR);
this.gl_.texParameteri(webgl.TEXTURE_2D, webgl.TEXTURE_WRAP_S, webgl.CLAMP_TO_EDGE);
this.gl_.texParameteri(webgl.TEXTURE_2D, webgl.TEXTURE_WRAP_T, webgl.CLAMP_TO_EDGE);
this.textureFrameBuffer_ = this.gl_.createFramebuffer();
this.gl_.bindFramebuffer(webgl.FRAMEBUFFER, this.textureFrameBuffer_);
this.gl_.framebufferTexture2D(webgl.FRAMEBUFFER, webgl.COLOR_ATTACHMENT0, webgl.TEXTURE_2D, this.targetTexture_, 0);
// Now i set the maskTexture on the second programs class.
this.secondProgramClass.maskTexture = this.targetTexture_;
// Now i compile & attach the shaders and link the program
dann die Einrichtung von Programm 2:
// Compile, attach, link up the program...
// This is the texture location to use.
this.maskTextureLocation_ =
this.gl_.getUniformLocation(this.program_, LocationName.MASK);
Draw Funktion Programm 1:
this.gl_.bindFramebuffer(webgl.FRAMEBUFFER, this.textureFrameBuffer_);
this.gl_.bindTexture(webgl.TEXTURE_2D, this.targetTexture_);
this.gl_.viewport(0, 0, this.gl_.canvas.width, this.gl_.canvas.height);
// Clear to transparent
this.gl_.clearColor(0, 0, 0, 0);
this.gl_.clear(webgl.COLOR_BUFFER_BIT | webgl.DEPTH_BUFFER_BIT);
this.gl_.useProgram(this.program_);
// A helper function that runs: enableVertexAttribArray, bindBuffer, vertexAttribPointer on the objects location and buffer.
// In this case its just a square the size of the viewport.
renderBufferAttribute(this.gl_, this.position_);
// Draw triangles
this.gl_.drawArrays(webgl.TRIANGLES, 0, 6);
Draw Funktion des Programms 2:
Nun, da diese Klasse hat maskTexture von dem ersten Klassen-Setup, um es festgelegt und nach der ersten Klasse ihrer Zeichenfunktion auf die Textur ausgeführt wird, soll ich in der Lage sein, dieses Programm zu ziehen Mit der Textur durch, oder?
this.gl_.bindFramebuffer(webgl.FRAMEBUFFER, null);
this.gl_.clearColor(0, 0, 0, 0);
this.gl_.clear(webgl.COLOR_BUFFER_BIT);
this.gl_.useProgram(this.program_);
// A helper function that runs: enableVertexAttribArray, bindBuffer, vertexAttribPointer on the objects location and buffer.
renderBufferAttribute(this.gl_, this.position_);
if (this.maskTexture) {
this.gl_.activeTexture(this.gl_.TEXTURE0);
this.gl_.bindTexture(webgl.TEXTURE_2D, this.maskTexture);
this.gl_.uniform1i(this.maskTextureLocation_, 0);
}
// Draw triangles
this.gl_.drawArrays(webgl.TRIANGLES, 0,
this.particleCount_.total * PARTICLE_ARRAY_COUNT/2);
Die Shadern im Moment sind auf diese Frage wahrscheinlich irrelevant, wir können sie einfach davon ausgehen, sowohl einen Block mit dem zweiten Render erwarten:
// Stored in LocationName.MASK above.
uniform sampler2D u_mask;
Ich denke nicht im etwas fehlt, aber jeder Richtung würde geschätzt werden. Ich erhalte den oben genannten Fehler bei jedem Zeichenzyklus. Ill Update mit mehr Details bei Bedarf.
Danke!