Пример #1
0
        public override void Loaded()
        {
            if (shader != null)
            {
                shader = (Shader)Assets.find(shader.RES_ID);
            }

            for (int i = 0; i < parameters.Count; i++)
            {
                KeyValuePair <string, object> val = parameters.ElementAt(i);

                switch (val.Value.GetType().Name)
                {
                case "Sampler2D":
                    Sampler2D v = (Sampler2D)val.Value;
                    try
                    {
                        if (v._texture_id > -1)
                        {
                            v.texture = (Texture)Assets.find(v._texture_id, typeof(Texture));
                        }
                        if (v._sequence_id > -1)
                        {
                            v.sequence = (TextureSequence)Assets.find(v._sequence_id, typeof(TextureSequence));
                        }
                    }
                    catch { }
                    break;
                }
            }
        }
Пример #2
0
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);

                Engine.scene = new Scene();

                font = new Font("Assets/OpenSans-Bold.ttf");

                bump_test = new GameObject();
                bump_test.components.Add(new Sprite());

                bump_test.sprite.width = 512;
                bump_test.sprite.height = 512;

                bump_test.sprite.material = new Material();

                Shader bump = new Shader();

                bump.name = "Bump shader";
                bump.vertexProgram = File.ReadAllText("Assets/vertex.glsl");
                bump.fragmentProgram = File.ReadAllText("Assets/fragment.glsl");
                bump.fullRecompile();

                bump_test.sprite.material.shader = bump;

                Texture tex = new Texture("Assets/tex.png");
                Texture nrm = new Texture("Assets/tex_nrm.png");
                Sampler2D smp_tex = new Sampler2D(tex);
                Sampler2D smp_nrm = new Sampler2D(nrm);

                bump_test.sprite.material.parameters["light_c"] = (int)1;

                bump_test.sprite.material.parameters["texture"] = smp_tex;
                bump_test.sprite.material.parameters["normal"] = smp_nrm;
                bump_test.sprite.material.parameters["color"] = new Vec4(1.0f, 1.0f, 1.0f, 1.0f);
                bump_test.sprite.material.parameters["ambient"] = new Vec4(0.0f, 0.0f, 0.0f, 1.0f);
                bump_test.sprite.material.parameters["light_p[0]"] = new Vec4(256.0f, 256.0f, 150.0f, 1.0f);
                bump_test.sprite.material.parameters["light_col[0]"] = new Vec4(1.0f, 1.0f, 1.0f, 1.0f);
                bump_test.sprite.material.parameters["light_int[0]"] = (float)0.3f;

                bump_test.sprite.material.parameters["amount"] = (float)1.0f;
            }
Пример #3
0
        private void addParam(string key, object obj)
        {
            switch (obj.GetType().Name)
            {
            case "Vec4":
                parameters[key] = new Vec4();
                break;

            case "Sampler2D":
                parameters[key] = new Sampler2D();
                break;

            case "Float":
                parameters[key] = new Float();
                break;

            case "Int":
                parameters[key] = new Int();
                break;
            }
        }
Пример #4
0
 void searchTexture()
 {
     if (Engine.scene != null)
     {
         foreach (GameObject o in Engine.scene.objects)
         {
             if (o.rigidbody != null)
             {
                 if (o.rigidbody.vertices == v)
                 {
                     if (o.sprite != null)
                     {
                         if (o.sprite.material != null)
                         {
                             foreach (string s in o.sprite.material.parameters.Keys)
                             {
                                 if (o.sprite.material.parameters[s] is Sampler2D)
                                 {
                                     Sampler2D smp = (Sampler2D)o.sprite.material.parameters[s];
                                     if (smp.texture != null)
                                     {
                                         tex = smp.texture;
                                         toolStripTextBox3.Text = o.sprite.width.ToString();
                                         toolStripTextBox4.Text = o.sprite.height.ToString();
                                         toolStripTextBox1.Text = o.sprite.center.x.ToString();
                                         toolStripTextBox2.Text = o.sprite.center.y.ToString();
                                         break;
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Пример #5
0
        internal override void draw(RenderingMode renderMode)
        {
            if (gameObject != null)
            {
                GL.Color4(1.0f, 0f, 1.0f, 1.0f);

                if (renderMode == RenderingMode.Select)
                {
                    GL.LoadName(gameObject.ID);
                }

                GL.PushMatrix();

                if (material != null && material.shader != null)
                {
                    material.shader.begin();

                    for (int i = 0; i < material.parameters.Count; i++)
                    {
                        if (material.parameters.ElementAt(i).Value != null)
                        {
                            switch (material.parameters.ElementAt(i).Value.GetType().Name)
                            {
                            case "Sampler2D":
                                Sampler2D sampler = ((Sampler2D)(material.parameters.ElementAt(i).Value));
                                if (sampler.animated == false)
                                {
                                    if (sampler.texture != null)
                                    {
                                        material.shader.pass(material.parameters.ElementAt(i).Key, sampler.texture);
                                    }
                                    else
                                    {
                                        material.shader.passNullTex(material.parameters.ElementAt(i).Key);
                                    }
                                }
                                else
                                {
                                    if (sampler.sequence != null)
                                    {
                                        if (sampler.sequence.frames.Count > 0)
                                        {
                                            if (_frame <= sampler.sequence.frames.Count && sampler.sequence.frames[_frame] != null)
                                            {
                                                material.shader.pass(material.parameters.ElementAt(i).Key, sampler.sequence.frames[_frame]);
                                                if (isPlaying == true)
                                                {
                                                    maxSpeed = sampler.sequence.frames.Count;

                                                    if (speedCoef < maxSpeed)
                                                    {
                                                        speedCoef += speed;
                                                    }
                                                    else
                                                    {
                                                        animateSequence(sampler.sequence);
                                                        speedCoef = 0;
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                material.shader.passNullTex(material.parameters.ElementAt(i).Key);
                                            }
                                        }
                                        else
                                        {
                                            material.shader.passNullTex(material.parameters.ElementAt(i).Key);
                                        }
                                    }
                                    else
                                    {
                                        material.shader.passNullTex(material.parameters.ElementAt(i).Key);
                                    }
                                }
                                break;

                            case "Vec4":
                                material.shader.pass(material.parameters.ElementAt(i).Key, (Vec4)material.parameters.ElementAt(i).Value);
                                break;

                            case "Float":
                                material.shader.pass(material.parameters.ElementAt(i).Key, ((Float)(material.parameters.ElementAt(i).Value)).value);
                                break;

                            case "Int":
                                material.shader.pass(material.parameters.ElementAt(i).Key, ((Int)(material.parameters.ElementAt(i).Value)).value);
                                break;

                            case "Int32":
                                material.shader.pass(material.parameters.ElementAt(i).Key, (int)material.parameters.ElementAt(i).Value);
                                break;

                            case "Single":
                                material.shader.pass(material.parameters.ElementAt(i).Key, (float)material.parameters.ElementAt(i).Value);
                                break;
                            }
                        }
                    }
                }

                GL.Translate(gameObject.position.x, gameObject.position.y, 0);
                GL.Rotate(gameObject.angle, 0, 0, 1);
                GL.Scale(_scale.x, _scale.y, 1);

                //Биндим текстурные координаты
                GL.EnableClientState(ArrayCap.TextureCoordArray);
                GL.BindBuffer(BufferTarget.ArrayBuffer, tId);
                GL.TexCoordPointer(2, TexCoordPointerType.Float, 0, 0);

                //Биндим геометрию
                GL.EnableClientState(ArrayCap.VertexArray);
                GL.BindBuffer(BufferTarget.ArrayBuffer, vId);
                GL.VertexPointer(2, VertexPointerType.Float, 0, 0);

                //Рисуем
                GL.DrawArrays(PrimitiveType.Quads, 0, vertexBuf.Length);

                //Убираем текстуры
                if (material != null && material.shader != null)
                {
                    for (int i = 0; i < material.parameters.Count; i++)
                    {
                        if (material.parameters.ElementAt(i).Value != null)
                        {
                            switch (material.parameters.ElementAt(i).Value.GetType().Name)
                            {
                            case "Sampler2D":
                                material.shader.passNullTex(material.parameters.ElementAt(i).Key);
                                break;
                            }
                        }
                    }
                    material.shader.end();
                }

                GL.PopMatrix();

                //Отключаем все
                GL.DisableClientState(ArrayCap.VertexArray);
                GL.DisableClientState(ArrayCap.TextureCoordArray);
            }
        }
Пример #6
0
 private void addParam(string key, object obj)
 {
     switch (obj.GetType().Name)
     {
         case "Vec4":
             parameters[key] = new Vec4();
             break;
         case "Sampler2D":
             parameters[key] = new Sampler2D();
             break;
         case "Float":
             parameters[key] = new Float();
             break;
         case "Int":
             parameters[key] = new Int();
             break;
     }
 }