TextureState: Difference between revisions

From WebGL Public Wiki
Jump to navigation Jump to search
Created page with "I hope this pseudo code sample will help make it clearer how activeTexture, bindTexture, and the various texture functio..."
 
No edit summary
Line 15: Line 15:
<code>
<code>
     WebGLRenderingContext = function() {
     WebGLRenderingContext = function() {
      // activeTexture is just an index into textureUnits
       this.activeTexture = 0;
       this.activeTexture = 0;
      // these are the textureUnits for this context.
       this.textureUnits = [
       this.textureUnits = [
         { TEXTURE_2D: default2DTexture, TEXTURE_CUBE_MAP: defaultCubeMapTexture, },
         { TEXTURE_2D: default2DTexture, TEXTURE_CUBE_MAP: defaultCubeMapTexture, },
Line 31: Line 34:
       this.activeTexture = texture - this.TEXTURE0;
       this.activeTexture = texture - this.TEXTURE0;
     };
     };
</code>
</code>


Line 39: Line 41:
       this.textureUnits[this.activeTexture][target] = texture;
       this.textureUnits[this.activeTexture][target] = texture;
     };
     };
</code>
</code>


Line 49: Line 50:
       texture.state[pname] = value;
       texture.state[pname] = value;
     };
     };
</code>
</code>

Revision as of 07:36, 5 August 2012

I hope this pseudo code sample will help make it clearer how activeTexture, bindTexture, and the various texture functions in WebGL effect the state of textures.

Imagine textures are defined like this

   Texture2D = function() {
     this.levels = [];
     this.state = {};
   };

And the WebGLRenderingContext is defined like this

   WebGLRenderingContext = function() {
     // activeTexture is just an index into textureUnits
     this.activeTexture = 0;
     // these are the textureUnits for this context.
     this.textureUnits = [
       { TEXTURE_2D: default2DTexture, TEXTURE_CUBE_MAP: defaultCubeMapTexture, },
       { TEXTURE_2D: default2DTexture, TEXTURE_CUBE_MAP: defaultCubeMapTexture, },
       { TEXTURE_2D: default2DTexture, TEXTURE_CUBE_MAP: defaultCubeMapTexture, },
       ...
     ];
   };

Then activeTexture would be implemented like this

   WebGLRenderingContext.prototype.activeTexture = function(texture) {
     this.activeTexture = texture - this.TEXTURE0;
   };

bindTexture would be implemented like this

   WebGLRenderingContext.prototype.bindTexture = function(target, texture) {
     this.textureUnits[this.activeTexture][target] = texture;
   };

And texture functions like texParameter or texImage2D would be implemented like this

   WebGLRenderingContext.prototype.texParameteri = function(target, pname, value) {
     var texture = this.textureUnits[this.activeTexture][target];
     texture.state[pname] = value;
   };