mirror of
https://github.com/photonstorm/phaser
synced 2024-12-15 07:43:03 +00:00
WebGLRenderer resource creation
This commit is contained in:
parent
e98c6b336a
commit
1da31fb2a5
1 changed files with 114 additions and 6 deletions
|
@ -257,30 +257,138 @@ var WebGLRenderer = new Class({
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Renderer Resource Creation Functions */
|
/* Renderer Resource Creation Functions */
|
||||||
|
createTexture2D: function (mipLevel, minFilter, magFilter, wrapT, wrapS, format, pixels, width, height, pma)
|
||||||
createTexture2D: function ()
|
|
||||||
{
|
{
|
||||||
|
var gl = this.gl;
|
||||||
|
var texture = gl.createTexture();
|
||||||
|
|
||||||
|
pma = (pma === undefined || pma === null) ? true : pma;
|
||||||
|
|
||||||
|
this.setTexture2D(texture, 0);
|
||||||
|
|
||||||
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);
|
||||||
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter);
|
||||||
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrapS);
|
||||||
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrapT);
|
||||||
|
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, pma);
|
||||||
|
|
||||||
|
if (pixels === null || pixels === undefined)
|
||||||
|
{
|
||||||
|
gl.texImage2D(gl.TEXTURE_2D, mipLevel, format, width, height, 0, format, gl.UNSIGNED_BYTE, null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gl.texImage2D(gl.TEXTURE_2D, mipLevel, format, format, gl.UNSIGNED_BYTE, pixels);
|
||||||
|
width = pixels.width;
|
||||||
|
height = pixels.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setTexture2D(null, 0);
|
||||||
|
|
||||||
|
texture.isAlphaPremultiplied = pma;
|
||||||
|
texture.isRenderTexture = false;
|
||||||
|
texture.width = width;
|
||||||
|
texture.height = height;
|
||||||
|
|
||||||
|
return texture;
|
||||||
},
|
},
|
||||||
|
|
||||||
createFramebuffer: function ()
|
createFramebuffer: function (width, height, renderTexture, addDepthStencilBuffer)
|
||||||
{
|
{
|
||||||
|
var gl = this.gl;
|
||||||
|
var framebuffer = gl.createFramebuffer();
|
||||||
|
var complete = 0;
|
||||||
|
|
||||||
|
this.setFramebuffer(framebuffer);
|
||||||
|
|
||||||
|
if (addDepthStencilBuffer)
|
||||||
|
{
|
||||||
|
var depthStencilBuffer = gl.createRenderbuffer();
|
||||||
|
gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);
|
||||||
|
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height);
|
||||||
|
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, depthStencilBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
renderTexture.isRenderTexture = true;
|
||||||
|
renderTexture.isAlphaPremultiplied = false;
|
||||||
|
|
||||||
|
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, renderTexture, 0);
|
||||||
|
|
||||||
|
complete = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
|
||||||
|
|
||||||
|
if (complete !== gl.FRAMEBUFFER_COMPLETE)
|
||||||
|
{
|
||||||
|
var errors = {
|
||||||
|
36054: 'Incomplete Attachment',
|
||||||
|
36055: 'Missing Attachment',
|
||||||
|
36057: 'Incomplete Dimensions',
|
||||||
|
36061: 'Framebuffer Unsupported'
|
||||||
|
};
|
||||||
|
throw new Error('Framebuffer incomplete. Framebuffer status: ' + errors[complete]);
|
||||||
|
}
|
||||||
|
|
||||||
|
framebuffer.renderTexture = renderTexture;
|
||||||
|
|
||||||
|
this.setFramebuffer(null);
|
||||||
|
|
||||||
|
return framebuffer;
|
||||||
},
|
},
|
||||||
|
|
||||||
createProgram: function ()
|
createProgram: function (vertexShader, fragmentShader)
|
||||||
{
|
{
|
||||||
|
var gl = this.gl;
|
||||||
|
var program = gl.createProgram();
|
||||||
|
var vs = gl.createShader(gl.VERTEX_SHADER);
|
||||||
|
var fs = gl.createShader(gl.FRAGMENT_SHADER);
|
||||||
|
|
||||||
|
gl.shaderSource(vs, vertexShader);
|
||||||
|
gl.shaderSource(fs, fragmentShader);
|
||||||
|
gl.compileShader(vs);
|
||||||
|
gl.compileShader(fs);
|
||||||
|
|
||||||
|
if (!gl.getShaderParameter(vs, gl.COMPILE_STATUS))
|
||||||
|
{
|
||||||
|
return new Error('Failed to compile Vertex Shader:\n' + gl.getShaderInfoLog(vs));
|
||||||
|
}
|
||||||
|
if (!gl.getShaderParameter(fs, gl.COMPILE_STATUS))
|
||||||
|
{
|
||||||
|
return new Error('Failed to compile Fragment Shader:\n' + gl.getShaderInfoLog(fs));
|
||||||
|
}
|
||||||
|
|
||||||
|
gl.attachShader(program, vs);
|
||||||
|
gl.attachShader(program, fs);
|
||||||
|
gl.linkProgram(program);
|
||||||
|
|
||||||
|
if (!gl.getProgramParameter(program, gl.LINK_STATUS))
|
||||||
|
{
|
||||||
|
return new Error('Failed to link program:\n' + gl.getProgramInfoLog(program));
|
||||||
|
}
|
||||||
|
|
||||||
|
return program;
|
||||||
},
|
},
|
||||||
|
|
||||||
createVertexBuffer: function ()
|
createVertexBuffer: function (initialDataOrSize, bufferUsage)
|
||||||
{
|
{
|
||||||
|
var gl = this.gl;
|
||||||
|
var vertexBuffer = gl.createBuffer();
|
||||||
|
|
||||||
|
this.setVertexBuffer(vertexBuffer);
|
||||||
|
gl.bufferData(gl.ARRAY_BUFFER, initialDataOrSize, bufferUsage);
|
||||||
|
this.setVertexBuffer(null);
|
||||||
|
|
||||||
|
return vertexBuffer;
|
||||||
},
|
},
|
||||||
|
|
||||||
createIndexBuffer: function ()
|
createIndexBuffer: function ()
|
||||||
{
|
{
|
||||||
|
var gl = this.gl;
|
||||||
|
var indexBuffer = gl.createBuffer();
|
||||||
|
|
||||||
|
this.setIndexBuffer(indexBuffer);
|
||||||
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, initialDataOrSize, bufferUsage);
|
||||||
|
this.setIndexBuffer(null);
|
||||||
|
|
||||||
|
return indexBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue