mirror of
https://github.com/photonstorm/phaser
synced 2024-11-21 20:23:19 +00:00
Shape Renderer
This commit is contained in:
parent
b520bd0469
commit
3335254701
4 changed files with 104 additions and 3 deletions
|
@ -14,7 +14,7 @@ var BitmapText = new Class({
|
||||||
Components.Texture,
|
Components.Texture,
|
||||||
Components.Transform,
|
Components.Transform,
|
||||||
Components.Visible,
|
Components.Visible,
|
||||||
Render
|
Components.Render
|
||||||
],
|
],
|
||||||
|
|
||||||
initialize:
|
initialize:
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
var Class = require('../../utils/Class');
|
var Class = require('../../utils/Class');
|
||||||
var GameObject = require('../GameObject');
|
var GameObject = require('../GameObject');
|
||||||
var Components = require('../../components');
|
var Components = require('../../components');
|
||||||
var ImageRender = require('./ImageRender');
|
|
||||||
|
|
||||||
var Image = new Class({
|
var Image = new Class({
|
||||||
|
|
||||||
|
|
102
v3/src/renderer/webgl/renderer/ShapeRenderer.js
Normal file
102
v3/src/renderer/webgl/renderer/ShapeRenderer.js
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
var DrawCommand = require('../commands/DrawCommand');
|
||||||
|
var UpdateBufferResourceCommand = require('../commands/UpdateBufferResourceCommand');
|
||||||
|
var UntexturedAndTintedShader = require('../shaders/UntexturedAndTintedShader');
|
||||||
|
var GL = require('../GL');
|
||||||
|
var TransformMatrix = require('../../../components/TransformMatrix');
|
||||||
|
var GlobalCommandList = require('../../GlobalCommandList');
|
||||||
|
|
||||||
|
var ShapeRenderer = function (game, maxSprites, commandList)
|
||||||
|
{
|
||||||
|
// Vertex Structure
|
||||||
|
// ---------------------
|
||||||
|
// struct Vertex {
|
||||||
|
// float32 a_position[2]; // 8 bytes
|
||||||
|
// uint32 a_color; // 4 bytes
|
||||||
|
// float32 a_alpha; // 4 bytes
|
||||||
|
// };
|
||||||
|
// ---------------------
|
||||||
|
|
||||||
|
// Internal use
|
||||||
|
this.vertexSize = 16;
|
||||||
|
this.maxVertices = 6 * (maxSprites !== undefined ? maxSprites : 1);
|
||||||
|
this.vertexCount = 0;
|
||||||
|
this.bufferResource = new ArrayBuffer(this.maxVertices * this.vertexSize);
|
||||||
|
this.float32View = new Float32Array(this.bufferResource);
|
||||||
|
this.uint32View = new Uint32Array(this.bufferResource);
|
||||||
|
this.tempMatrix = new TransformMatrix();
|
||||||
|
|
||||||
|
// Save resource manager and command list
|
||||||
|
this.resourceManager = game.renderDevice.resourceManager;
|
||||||
|
this.commandList = commandList !== undefined ? commandList : GlobalCommandList.commandList;
|
||||||
|
|
||||||
|
// Resource Creation
|
||||||
|
this.drawCommand = new DrawCommand();
|
||||||
|
this.updateBufferResourceCommand = new UpdateBufferResourceCommand();
|
||||||
|
this.shaderPipeline = this.resourceManager.createShaderPipeline('UntexturedAndTintedShader', UntexturedAndTintedShader);
|
||||||
|
this.vertexBuffer = this.resourceManager.createBuffer(GL.ARRAY_BUFFER, this.bufferResource, GL.STREAM_DRAW);
|
||||||
|
this.outputStage = this.resourceManager.createOutputStage();
|
||||||
|
|
||||||
|
// Setup output stage
|
||||||
|
this.outputStage.enableBlending = true;
|
||||||
|
this.outputStage.setDefaultBlending();
|
||||||
|
|
||||||
|
// Vertex Attribute Definition
|
||||||
|
this.vertexBuffer.setInputElement(0, 2, GL.FLOAT, false, this.vertexSize, 0);
|
||||||
|
this.vertexBuffer.setInputElement(1, 4, GL.UNSIGNED_BYTE, true, this.vertexSize, 8);
|
||||||
|
this.vertexBuffer.setInputElement(2, 1, GL.FLOAT, false, this.vertexSize, 12);
|
||||||
|
|
||||||
|
// Draw call setup
|
||||||
|
this.drawCommand.setTopology(GL.TRIANGLES);
|
||||||
|
this.drawCommand.setShaderPipeline(this.shaderPipeline);
|
||||||
|
this.drawCommand.setOutputStage(this.outputStage);
|
||||||
|
this.drawCommand.setVertexBuffer(this.vertexBuffer);
|
||||||
|
this.drawCommand.setVertexCount(0, 0);
|
||||||
|
|
||||||
|
// Update buffer resource setup
|
||||||
|
this.updateBufferResourceCommand.setBuffer(this.vertexBuffer);
|
||||||
|
this.updateBufferResourceCommand.setBufferData(this.bufferResource, 0);
|
||||||
|
|
||||||
|
// Set Clipping Martrix
|
||||||
|
this.setClippingRect(
|
||||||
|
game.config.width * game.config.resolution,
|
||||||
|
game.config.height * game.config.resolution
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
ShapeRenderer.prototype.constructor = ShapeRenderer;
|
||||||
|
|
||||||
|
ShapeRenderer.prototype = {
|
||||||
|
|
||||||
|
setClippingRect: function (w, h)
|
||||||
|
{
|
||||||
|
this.shaderPipeline.setConstantMatrix4x4(
|
||||||
|
this.shaderPipeline.getUniformLocation('u_view_matrix'),
|
||||||
|
new Float32Array([
|
||||||
|
2 / w, 0, 0, 0,
|
||||||
|
0, -2 / h, 0, 0,
|
||||||
|
0, 0, 1, 1,
|
||||||
|
-1, 1, 0, 0
|
||||||
|
])
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
begin: function ()
|
||||||
|
{
|
||||||
|
this.vertexCount = 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
end: function ()
|
||||||
|
{
|
||||||
|
this.drawCommand.setVertexCount(0, this.vertexCount);
|
||||||
|
this.commandList.addCommand(this.updateBufferResourceCommand);
|
||||||
|
this.commandList.addCommand(this.drawCommand);
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function (gameObject, camera)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = ShapeRenderer;
|
|
@ -10,7 +10,7 @@ var TextureRenderer = function (game, maxSprites, commandList)
|
||||||
|
|
||||||
// Vertex Structure
|
// Vertex Structure
|
||||||
// ---------------------
|
// ---------------------
|
||||||
// struct SpriteVertex {
|
// struct Vertex {
|
||||||
// float32 a_position[2]; // 8 bytes
|
// float32 a_position[2]; // 8 bytes
|
||||||
// float32 a_tex_coord[2]; // 8 bytes
|
// float32 a_tex_coord[2]; // 8 bytes
|
||||||
// uint32 a_color; // 4 bytes
|
// uint32 a_color; // 4 bytes
|
||||||
|
|
Loading…
Reference in a new issue