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; } } }
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; }
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; } }
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; } } } } } } } } } }
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); } }