API Docs for: 0.5.5
Show:

File: kick/core/Graphics.js

define(["kick/core/Constants", "kick/scene/Camera", "kick/scene/Transform", "kick/scene/EngineUniforms","kick/scene/MeshRenderer", "kick/math/Mat4", "kick/core/EngineSingleton", "kick/texture/RenderTexture", "kick/core/Util", "kick/material/Material"],
    function (constants, Camera, Transform, EngineUniforms, MeshRenderer, Mat4, EngineSingleton, RenderTexture, Util, Material) {
        "use strict";
        var ASSERT = constants._ASSERT,
            fail = Util.fail;
        /**
         * A helper-class used for rendering.
         *
         * @class Graphics
         * @namespace kick.core
         */
        return {
            /**
             * @method drawQuad
             * @param {kick.material.Material} material
             * @param {kick.math.Vec4} [normalizedViewportRect=[0,0,1,1]]
             * @static
             */
            drawQuad: (function(){
                var camera,
                    engine,
                    engineUniforms,
                    meshRenderer;
                return function(material, normalizedViewportRect){
                    normalizedViewportRect  = normalizedViewportRect || [0,0,1,1];
                    if (!camera){
                        engine = EngineSingleton.engine;
                        camera = new Camera({
                            perspective: false,
                            left:-1,
                            right:1,
                            top:1,
                            bottom:-1,
                            near:-1,
                            far:1
                        });
                        camera.gameObject = {
                            transform: new Transform(),
                            scene: {
                                addEventListener: function(){},
                                findComponentsWithMethod: function(){return [];}
                            }
                        };
                        camera.activated();

                        engineUniforms = new EngineUniforms({
                            viewMatrix:  Mat4.identity(Mat4.create()),
                            projectionMatrix: Mat4.identity(Mat4.create()),
                            viewProjectionMatrix: Mat4.identity(Mat4.create()),
                            lightMatrix: Mat4.identity(Mat4.create()),
                            currentCamera: camera,
                            currentCameraTransform: camera.gameObject.transform
                        });
                        engineUniforms.sceneLights = {};
                        meshRenderer = new MeshRenderer({
                            mesh: engine.project.load(engine.project.ENGINE_MESH_PLANE),
                            material: material
                        });
                        meshRenderer.gameObject = {
                            transform: new Transform()
                        };
                        meshRenderer.activated();
                    }
                    camera.normalizedViewportRect = normalizedViewportRect;
                    camera.setupCamera();
                    meshRenderer.material = material;
                    meshRenderer.render(engineUniforms);
                };
            }()),
            /**
             * @method drawTexture
             * @param {kick.texture.Texture} Texture
             * @param {kick.math.Vec4} [normalizedViewportRect=[0,0,1,1]]
             * @static
             */
            drawTexture: (function(){
                var camera,
                    engine,
                    material,
                    engineUniforms,
                    meshRenderer;
                return function(texture, normalizedViewportRect){
                    normalizedViewportRect  = normalizedViewportRect || [0,0,1,1];
                    if (!camera){
                        engine = EngineSingleton.engine;
                        camera = new Camera({
                            perspective: false,
                            left:-1,
                            right:1,
                            top:1,
                            bottom:-1,
                            near:-1,
                            far:1
                        });
                        camera.gameObject = {
                            transform: new Transform(),
                            scene: {
                                addEventListener: function(){},
                                findComponentsWithMethod: function(){return [];}
                            }
                        };
                        camera.activated();

                        var shader = engine.project.load(engine.project.ENGINE_SHADER_UNLIT);
                        material = new Material({
                            shader: shader,
                            name: "Default material"
                        });

                        engineUniforms = new EngineUniforms({
                            viewMatrix:  Mat4.identity(Mat4.create()),
                            projectionMatrix: Mat4.identity(Mat4.create()),
                            viewProjectionMatrix: Mat4.identity(Mat4.create()),
                            lightMatrix: Mat4.identity(Mat4.create()),
                            currentCamera: camera,
                            currentCameraTransform: camera.gameObject.transform
                        });
                        engineUniforms.sceneLights = {};
                        meshRenderer = new MeshRenderer({
                            mesh: engine.project.load(engine.project.ENGINE_MESH_PLANE),
                            material: material
                        });
                        meshRenderer.gameObject = {
                            transform: new Transform()
                        };
                        meshRenderer.activated();
                    }
                    camera.normalizedViewportRect = normalizedViewportRect;
                    camera.setupCamera();
                    material.setUniform("mainTexture", texture);
                    meshRenderer.material = material;
                    meshRenderer.render(engineUniforms);
                };
            }()),
            /**
             *
             * @example
             *      // render a unlit shader (with color of red) into a texture
             *      texture = new kick.texture.Texture();
             *      texture.setImageData(512, 512, 0, kick.core.Constants.GL_UNSIGNED_BYTE, null, "");
             *      var renderTexture = new kick.texture.RenderTexture({dimension:[512,512], colorTexture: texture});
             *      var shader = engine.project.load(engine.project.ENGINE_SHADER_UNLIT);
             *      var renderMaterial = new kick.material.Material( {
             *          shader:shader,
             *          uniformData: {
             *              mainColor: [1,0,0,1]
             *          }
             *      });
             *      kick.core.Graphics.renderToTexture(renderTexture, renderMaterial);
             * @method renderToTexture
             * @param {kick.texture.RenderTexture} renderTexture
             * @param {kick.material.Material} material
             * @param {kick.math.Vec4} [normalizedViewportRect=[0,0,1,1]]
             * @static
             */
            renderToTexture: (function(){
                var camera,
                    engine,
                    engineUniforms,
                    meshRenderer;
                return function(renderTexture, material, normalizedViewportRect){
                    if (ASSERT){
                        if (!(renderTexture instanceof RenderTexture)){
                            fail("Graphics.renderToTexture: renderTexture must be of type RenderTexture");
                        }
                        if (!(material instanceof Material)){
                            fail("Graphics.renderToTexture: material must be of type Material");
                        }
                    }
                    normalizedViewportRect  = normalizedViewportRect || [0,0,1,1];
                    if (!camera){
                        engine = EngineSingleton.engine;
                        camera = new Camera({
                            perspective: false,
                            left:-1,
                            right:1,
                            top:1,
                            bottom:-1,
                            near:-1,
                            far:1
                        });
                        camera.gameObject = {
                            transform: new Transform(),
                            scene: {
                                addEventListener: function(){},
                                findComponentsWithMethod: function(){return [];}
                            }
                        };
                        camera.activated();

                        engineUniforms = new EngineUniforms({
                            viewMatrix:  Mat4.identity(Mat4.create()),
                            projectionMatrix: Mat4.identity(Mat4.create()),
                            viewProjectionMatrix: Mat4.identity(Mat4.create()),
                            lightMatrix: Mat4.identity(Mat4.create()),
                            currentCamera: camera,
                            currentCameraTransform: camera.gameObject.transform
                        });
                        engineUniforms.sceneLights = {};
                        meshRenderer = new MeshRenderer({
                            mesh: engine.project.load(engine.project.ENGINE_MESH_PLANE)
                        });
                        meshRenderer.gameObject = {
                            transform: new Transform()
                        };
                        meshRenderer.activated();
                    }
                    camera.normalizedViewportRect = normalizedViewportRect;
                    camera.renderTarget = renderTexture;
                    renderTexture.bind();
                    camera.setupCamera();
                    meshRenderer.material = material;
                    meshRenderer.render(engineUniforms);
                    renderTexture.unbind();
                }}())
        }
    });