public void Deserialize_Jagged_ArrayObject() { ArrayObject arr = new ArrayObject(); arr.ID = 0; arr.Type = typeof(int[][]); ArrayObject[] arrObjects = new ArrayObject[4]; arrObjects[0] = GetIntegerArrayObject(); arrObjects[1] = GetIntegerArrayObject(); arrObjects[2] = GetIntegerArrayObject(); arrObjects[3] = GetIntegerArrayObject(); arr.Items = new ObjectBase[4] { arrObjects[0], arrObjects[1], arrObjects[2], arrObjects[3] }; int[][] res = (int[][])arr.GetValue(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { Assert.AreEqual(j, res[i][j]); } } }
public void Evaluate_CanEvaluateMap() { string input = @" let map = fn(arr, f) { let iter = fn(arr, accumulated) { if (len(arr) == 0) { accumulated } else { iter(rest(arr), push(accumulated, f(first(arr)))); } }; iter(arr, []); }; map([2,3], fn(x) { x * 2 }); "; ArrayObject actual = this.AssertAndCast <ArrayObject>(this.subject.Evaluate(input, this.environment)); Assert.Equal(2, actual.Elements.Count); IntegerObject intResult = this.AssertAndCast <IntegerObject>(actual.Elements[0]); Assert.Equal(4, intResult.Value); intResult = this.AssertAndCast <IntegerObject>(actual.Elements[1]); Assert.Equal(6, intResult.Value); }
public static object ToCouchbaseObject(FLValue *value, Database database, bool dotNetTypes, Type hintType1 = null) { switch (Native.FLValue_GetType(value)) { case FLValueType.Array: { if (dotNetTypes) { return(ToObject(value, database.SharedStrings, 0, hintType1)); } var array = new ArrayObject(new MArray(new MValue(value), null), false); return(array); } case FLValueType.Dict: { var dict = Native.FLValue_AsDict(value); var type = TypeForDict(dict, database.SharedStrings); if (!dotNetTypes && type.buf == null && !IsOldAttachment(database, dict)) { return(new DictionaryObject(new MDict(new MValue(value), null), false)); } var result = ToObject(value, database.SharedStrings, 0, hintType1) as IDictionary <string, object>; return(ConvertDictionary(result, database)); } case FLValueType.Undefined: return(null); default: return(ToObject(value, database.SharedStrings)); } }
/// <summary> /// <see>http://nodejs.org/docs/v0.4.8/api/buffers.html#new_Buffer</see> /// </summary> public static NodeBuffer Create(IronJS.Environment env, ArrayObject array) { NodeBuffer n = new NodeBuffer(env, array.Length); for (int i = 0; i < array.Length; i += 1) n.Data[i] = (byte)(uint)array.Get(i).Number; return n; }
public static object ToCouchbaseObject(FLValue *value, Database database, bool dotNetTypes, Type hintType1 = null) { switch (Native.FLValue_GetType(value)) { case FLValueType.Array: { if (dotNetTypes) { return(ToObject(value, database, 0, hintType1)); } var array = new ArrayObject(new FleeceMutableArray(new MValue(value), null), false); return(array); } case FLValueType.Dict: { var dict = Native.FLValue_AsDict(value); var type = TypeForDict(dict); if (!dotNetTypes && type.buf == null && !IsOldAttachment(dict)) { return(new DictionaryObject(new MDict(new MValue(value), null), false)); } return(ToObject(value, database, 0, hintType1)); } case FLValueType.Undefined: return(null); default: return(ToObject(value, database)); } }
public static void TerrainImportGuiAddOpacityMap(string name) { // TODO: Need to actually look at // the file here and figure // out how many channels it has. string txt = omni.Util.makeRelativePath(name, omni.Util.getWorkingDirectory()); // Will need to do this stuff // once per channel in the file // currently it works with just grayscale. string channelsTxt = "R\tG\tB\tA"; string bitmapInfo = omni.Util.getBitmapInfo(name); string channelCount = omni.Util.getWord(bitmapInfo, 2); GuiTextListCtrl opacityList = ((GuiControl)"TerrainImportGui").findObjectByInternalName("OpacityLayerTextList", true); guiTerrainImportGui TerrainImportGui = "TerrainImportGui"; ArrayObject namesArray = TerrainImportGui["namesArray"]; ArrayObject channelsArray = TerrainImportGui["channelsArray"]; for (int i = 0; i < channelCount.AsInt(); i++) { namesArray.push_back(txt, name); channelsArray.push_back(txt, omni.Util.getWord(channelsTxt, i) + "/t" + channelCount); //TerrainImportGui.namesArray.echo(); int count = opacityList.rowCount(); opacityList.addRow(count, txt + "/t" + omni.Util.getWord(channelsTxt, i), -1); } //OpacityMapListBox.addItem( %name ); }
public void ReadWithArray() { JsonSerializerOptions options = new JsonSerializerOptions(); options.SetupExtensions(); const string json = @"{""IntArray"":[1,2],""ObjectArray"":[{""IntValue"":1},{""IntValue"":2}],""StringArray"":[""a"",""b""]}"; ArrayObject obj = Helper.Read <ArrayObject>(json, options); Assert.NotNull(obj); Assert.NotNull(obj.IntArray); Assert.Equal(2, obj.IntArray.Length); Assert.Equal(1, obj.IntArray[0]); Assert.Equal(2, obj.IntArray[1]); Assert.NotNull(obj.ObjectArray); Assert.Equal(2, obj.ObjectArray.Length); Assert.NotNull(obj.ObjectArray[0]); Assert.Equal(1, obj.ObjectArray[0].IntValue); Assert.NotNull(obj.ObjectArray[1]); Assert.Equal(2, obj.ObjectArray[1].IntValue); Assert.NotNull(obj.StringArray); Assert.Equal(2, obj.StringArray.Length); Assert.Equal("a", obj.StringArray[0]); Assert.Equal("b", obj.StringArray[1]); }
unsafe void PrepareState() { if (m_AttributeState != null) { UpdateGrid (); PositionBuffer.Publish (); ParameterBuffer.Publish (); m_State.Activate (); return; } m_Count = m_GridDiameter / m_GridDensity + 1; unsafe { PositionBuffer = new BufferObjectCompact<Vector3> (sizeof(Vector3), 4 * m_Count + 2) { Name = "position_buffer", Usage = BufferUsageHint.DynamicDraw }; ParameterBuffer = new BufferObjectCompact<float> (sizeof(float), 4 * m_Count + 2) { Name = "parameter_buffer", Usage = BufferUsageHint.DynamicDraw }; } m_UniformState = new UniformState ().Set ("modelview_transform", m_CameraMvp.ModelViewProjection); m_AttributeState = new ArrayObject (new VertexAttribute { AttributeName = "pos", Buffer = PositionBuffer, Size = 3, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "param", Buffer = ParameterBuffer, Size = 1, Type = VertexAttribPointerType.Float }); m_Program = new Program ("coordinate_grid_program", GetShaders ("GridRenderPass", "").ToArray ()); m_State = new State (null, m_AttributeState, m_Program, m_UniformState); PrepareState (); }
private void button1_Click(object sender, EventArgs e) { textBox1.Text = ""; string script = textBox2.Text + textEditorControl1.Text; try { Object Result = Microsoft.JScript.Eval.JScriptEvaluate(script, Microsoft.JScript.Vsa.VsaEngine.CreateEngine()); if (Result.GetType().Name == "ConcatString" || Result.GetType().Name == "String") { textBox1.Text = Result.ToString(); } else if (Result.GetType().Name == "ArrayObject") { ArrayObject obj = Result as ArrayObject; for (int i = 0; i < int.Parse(obj.length.ToString()); i++) { textBox1.Text += obj[i]; } } else { MessageBox.Show("Type is " + Result.GetType().Name); } } catch (Exception ex) { textBox1.Text = ex.Message + " \r\n\r\n***" + ex.StackTrace; } }
public void WriteWithArray() { JsonSerializerOptions options = new JsonSerializerOptions(); options.SetupExtensions(); const string json = @"{""IntArray"":[1,2],""ObjectArray"":[{""IntValue"":1},{""IntValue"":2}],""StringArray"":[""a"",""b""]}"; ArrayObject obj = new ArrayObject { IntArray = new[] { 1, 2 }, ObjectArray = new[] { new IntObject { IntValue = 1 }, new IntObject { IntValue = 2 } }, StringArray = new[] { "a", "b" } }; Helper.TestWrite(obj, json, options); }
public void Deserialize_2D_ArrayObject() { int z = 0; ArrayObject arr = new ArrayObject(); arr.ID = 0; arr.Type = typeof(int[, ]); ObjectBase[,] items = new ObjectBase[4, 4]; for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { items[x, y] = GetIntegerValueObject(z++); } } arr.Items = items; int[,] res = (int[, ])arr.GetValue(); z = 0; for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { Assert.AreEqual(z, res[x, y]); z++; } } }
public static ArrayObject ConstructArrayFromArrayLiteral(CodeContext context, object [] values) { ArrayObject result = new ArrayObject(); foreach (object obj in values) { result.AddObjectKey(obj.ToString(), obj); } return(result); }
public static List <object> EvalArrayObject(string expression) { List <object> list = new List <object>(); ArrayObject ar = EvalObject(expression) as ArrayObject; foreach (object i in ar) { list.Add(ar[i]); } return(list); }
public void Evaluate_CanEvaluateArrays() { string input = "[1, 2 * 2, 3 + 3]"; IObject actual = this.subject.Evaluate(input, this.environment); ArrayObject arrayObject = this.AssertAndCast <ArrayObject>(actual); Assert.Equal(arrayObject.Elements[0], new IntegerObject(1)); Assert.Equal(arrayObject.Elements[1], new IntegerObject(4)); Assert.Equal(arrayObject.Elements[2], new IntegerObject(6)); }
public void Deserialize_1D_ArrayObject() { ArrayObject arr = GetIntegerArrayObject(); int[] res = (int[])arr.GetValue(); for (int i = 0; i < res.Length; i++) { Assert.AreEqual(i, res[i]); } }
private List <PayloadObject> ParseJsonArray(ArrayObject jsonData) { List <PayloadObject> payloadObjects = new List <PayloadObject>(); for (int i = 0; i < (int)jsonData.length; i++) { JSObject resource = (JSObject)jsonData[i]; payloadObjects.Add(parseJsonObject(resource)); } return(payloadObjects); }
public static IObject GetObject(string name, string index) { if (dictionary.ContainsKey(name) && dictionary[name] is ArrayObject) { ArrayObject array = (ArrayObject)dictionary[name]; return(array[index]); } else { throw new Exception("Error in calling arrayobject"); } }
public static void Should_Clone_ArrayObject() { var original = new ArrayObject { ByteArray = new byte[] { 0x01, 0x02, 0x03, 0x04 }, IntArray = new int[] { 1, 2, 3, 4 }, DoubleArray = new double[] { 1.0, 2.0, 3.0, 4.0, 5.0 }, }; ArrayObject cloned = original.Clone(); cloned.ShouldBe(original); }
public void Should_Clone_ArrayObject() { var original = new ArrayObject { ByteArray = new byte[] { 0x01, 0x02, 0x03, 0x04 }, IntArray = new [] { 1, 2, 3, 4 }, DoubleArray = new [] { 1.0, 2.0, 3.0, 4.0, 5.0 }, }; var cloned = original.Clone(); Assert.AreEqual(original, cloned); }
public void OnLeadDance(SocketIOEvent e) { test.text = "On lead dance"; movetMentController play = players[pos[0]].GetComponent <movetMentController>(); ArrayObject a = ArrayObject.createFromJson(e.data.ToString()); foreach (int x in a.lead_dances) { play.setDance(x); } phase2(); }
public static void ModifiedClone_Array_ShouldNotBeEqual() { var original = new ArrayObject { ByteArray = new byte[] { 0x01, 0x02, 0x03, 0x04 }, IntArray = new int[] { 1, 2, 3, 4 }, DoubleArray = new double[] { 1.0, 2.0, 3.0, 4.0, 5.0 }, }; ArrayObject cloned = original.Clone(); cloned.ByteArray[2] = 0x10; cloned.ShouldNotBe(original); }
public void ModifiedClone_Array_ShouldNotBeEqual() { var original = new ArrayObject { ByteArray = new byte[] { 0x01, 0x02, 0x03, 0x04 }, IntArray = new [] { 1, 2, 3, 4 }, DoubleArray = new [] { 1.0, 2.0, 3.0, 4.0, 5.0 }, }; var cloned = original.Clone(); cloned.ByteArray[2] = 0x10; Assert.AreNotEqual(original, cloned); }
public unsafe void TestReadOnlyArray() { var now = DateTimeOffset.UtcNow; var nestedArray = new[] { 1L, 2L, 3L }; var nestedDict = new Dictionary <string, object> { ["foo"] = "bar" }; var masterData = new object[] { 1, "str", nestedArray, now, nestedDict }; var flData = new FLSliceResult(); Db.InBatch(() => { flData = masterData.FLEncode(); }); try { var context = new DocContext(Db, null); using (var mRoot = new MRoot(context)) { mRoot.Context.Should().BeSameAs(context); FLDoc *fleeceDoc = Native.FLDoc_FromResultData(flData, FLTrust.Trusted, Native.c4db_getFLSharedKeys(Db.c4db), FLSlice.Null); var flValue = Native.FLDoc_GetRoot(fleeceDoc); var mArr = new FleeceMutableArray(new MValue(flValue), mRoot); var deserializedArray = new ArrayObject(mArr, false); deserializedArray.GetArray(2).Should().Equal(1L, 2L, 3L); deserializedArray.GetArray(3).Should().BeNull(); deserializedArray.GetBlob(1).Should().BeNull(); deserializedArray.GetDate(3).Should().Be(now); deserializedArray.GetDate(4).Should().Be(DateTimeOffset.MinValue); deserializedArray[1].ToString().Should().Be("str"); deserializedArray.GetString(2).Should().BeNull(); deserializedArray.GetDictionary(4).Should().BeEquivalentTo(nestedDict); deserializedArray[0].Dictionary.Should().BeNull(); var list = deserializedArray.ToList(); list[2].Should().BeAssignableTo <IList <object> >(); list[4].Should().BeAssignableTo <IDictionary <string, object> >(); var mVal = new MValue(); mVal.Dispose(); Native.FLDoc_Release(fleeceDoc); } } finally { Native.FLSliceResult_Release(flData); } var mroot = new MRoot(); }
public static ArrayObject EvalJScript(string JScript) { VsaEngine Engine = VsaEngine.CreateEngine(); ArrayObject Result = null; try { Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine) as ArrayObject; } catch (Exception ex) { return(null); } return(Result); }
public void create() { //server scripts //add DBs if (Global.IsObject("DatablockFilesList")) { ArrayObject datablockFilesList = Core.SimObjects.Collections.DatablockFilesList; datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/camera.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/defaultParticle.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/lights.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/managedDatablocks.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/managedDecalData.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/managedForestItemData.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/managedParticleData.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/managedParticleEmitterData.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/markers.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/ribbons.cs"); datablockFilesList.Add("data/spectatorGameplay/scripts/datablocks/sounds.cs"); } if (Global.IsObject("LevelFilesList")) { for (string file = Global.FindFirstFile("data/spectatorGameplay/levels/*.mis"); file != ""; file = Global.FindNextFile("data/spectatorGameplay/levels/*.mis")) { Core.SimObjects.Collections.LevelFilesList.Add(file); } } if (!Global.GetConsoleBool("Server::Dedicated")) { //client scripts Keybinds.Init(); string prefPath = Core.Functions.Paths.GetPrefPath(); if (Global.IsFile(prefPath + "/keybinds.cs")) { Global.Exec(prefPath + "/keybinds.cs"); } Client.InputCommands.Variables.Init(); //guis Global.Exec("data/spectatorGameplay/scripts/gui/playGui.gui"); } }
public void CloneArrayOfClasses() { var sut = this.SetupMapper(); var persons = new ArrayObject() { ChildrenArray = new ArrayObject[] { new ArrayObject(), new ArrayObject() } }; var clone = sut.Clone(persons); Assert.IsNotNull(clone.ChildrenArray); Assert.AreNotSame(persons.ChildrenArray, clone.ChildrenArray); }
public void CloneArrayOfPrimitives() { var sut = this.SetupMapper(); var persons = new ArrayObject(); persons.Array = new int[] { 0, 1, 2, 3, 4, 5 }; var clone = sut.Clone(persons); Assert.IsNotNull(clone.Array); Assert.AreNotSame(persons.Array, clone.Array); }
public async Task ReturnResultWithSum1357() { var usedArray = new ArrayObject { Action = "Sum", Number = new int[] { 1, 3, 5, 7 } }; string convertedUsedArray = JsonConvert.SerializeObject(usedArray); var content = new StringContent(convertedUsedArray, encoding: Encoding.UTF8, mediaType: "application/json"); var response = await Client.PostAsync("array", content); string responseJson = await response.Content.ReadAsStringAsync(); Assert.Equal("{\"result\":16}", responseJson); }
public override bool Equals(object obj) { if (object == null || GetType() != obj.GetType()) { return(false); } ArrayObject other = (ArrayObject)obj; // compare two BitArray objects for (var i = 0; i < theBits.Length; ++i) { if (theBits[i] != other.theBits[i]) { return(false); } } return(true); }
public void removeOpacitymap() { GuiTextListCtrl opacityList = ((GuiControl)"TerrainImportGui").findObjectByInternalName("OpacityLayerTextList", true); int itemIdx = opacityList.getSelectedId(); if (itemIdx < 0) { return; } ArrayObject namesArray = this["namesArray"]; ArrayObject channelsArray = this["channelsArray"]; namesArray.erase(itemIdx); channelsArray.erase(itemIdx); opacityList.removeRowById(itemIdx); }
public void CloneArrayOfClassesAndTheirClasses() { var sut = this.SetupMapper(); var persons = new ArrayObject(); persons.ChildrenArray = new ArrayObject[] { new ArrayObject(), new ArrayObject() }; var clone = sut.Clone(persons); for (int i = 0; i < persons.ChildrenArray.Length; i++) { var n1 = persons.ChildrenArray[i]; var n2 = clone.ChildrenArray[i]; Assert.AreNotSame(n1, n2); } }
public static void FinalizeApplication() { mGlobalStringMap = null; mNativeClassNames?.Clear(); mNativeClassNames = null; mConsoleOutput = null; mMessageMapper = null; mStorage = null; mArrayClass = null; mDictionaryClass = null; mVAPool = null; NULL_ARG = null; ArrayObject.FinalizeApplication(); TjsByteCodeLoader.FinalizeApplication(); CustomObject.FinalizeApplication(); DictionaryObject.FinalizeApplication(); MathClass.FinalizeApplication(); Variant.FinalizeApplication(); LexicalAnalyzer.FinalizeApplication(); }
unsafe void PrepareState() { if (m_ParticleRenderingState != null) { Simulate (DateTime.Now); PositionBuffer.Publish (); ColorAndSizeBuffer.Publish (); m_SystemState.Activate (); return; } unsafe { //VelocityBuffer = new BufferObject<Vector4> (sizeof(Vector4), size) { Name = "velocity_buffer", Usage = BufferUsageHint.DynamicDraw }; PositionBuffer = new BufferObject<Vector4> (sizeof(Vector4), PARTICLES_COUNT) { Name = "position_buffer", Usage = BufferUsageHint.DynamicDraw }; ColorAndSizeBuffer = new BufferObject<Vector4> (sizeof(Vector4), PARTICLES_COUNT) { Name = "colorandsize_buffer", Usage = BufferUsageHint.DynamicDraw }; } m_Projection = new MatrixStack ().Push (Matrix4.CreateOrthographic (14, 14, -1, 1)); m_TransformationStack = new MatrixStack (m_Projection).Push (Matrix4.Identity).Push (Matrix4.Identity); m_UniformState = new UniformState ().Set ("color", new Vector4 (0, 0, 1, 1)).Set ("red", 1.0f).Set ("green", 0.0f).Set ("blue", 1.0f).Set ("colors", new float[] { 0, 1, 0, 1 }).Set ("colors2", new Vector4[] { new Vector4 (1, 0.1f, 0.1f, 0), new Vector4 (1, 0, 0, 0), new Vector4 (1, 1, 0.1f, 0) }).Set ("modelview_transform", m_TransformationStack); var sprite = new[] { new Vector3 (-1, -1, 0), new Vector3 (-1, 1, 0), new Vector3 (1, 1, 0), new Vector3 (1, -1, 0) }; var vdata_buffer = new BufferObject<Vector3> (sizeof(Vector3)) { Name = "vdata_buffer", Usage = BufferUsageHint.DynamicDraw, Data = sprite }; m_ParticleRenderingState = new ArrayObject (new VertexAttribute { AttributeName = "vertex_pos", Buffer = vdata_buffer, Size = 3, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_pos", Buffer = PositionBuffer, Divisor = 1, Size = 4, Stride = 0, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_colorandsize", Buffer = ColorAndSizeBuffer, Divisor = 1, Size = 4, Type = VertexAttribPointerType.Float }); m_ParticleRenderingProgram = new Program ("main_program", opentk.ShadingSetup.RenderPass.GetResourceShaders(string.Empty, GetType ().Namespace.Split ('.').Last ()).ToArray ()); m_SystemState = new State (null, m_ParticleRenderingState, m_ParticleRenderingProgram, m_UniformState); var hnd = PositionBuffer.Handle; hnd = ColorAndSizeBuffer.Handle; m_DebugView = new opentk.QnodeDebug.QuadTreeDebug(10000, m_TransformationStack); InitializeSystem(); PrepareState (); }
static ArrayObject GetChildren(FunctionObject func, CommonObject that) { var children = that.CastTo<CommandObject>().Children; var array = new ArrayObject(func.Env, (uint)children.Count); for (int i = 0; i < children.Count; i++) array.Put(i, BoxingUtils.JsBox(children[i])); return array; }
unsafe void PrepareState() { if (m_AttributeState != null) { FillBuffers(); PositionBuffer.Publish (); DimensionBuffer.Publish (); m_State.Activate (); return; } unsafe { PositionBuffer = new BufferObjectCompact<Vector3> (sizeof(Vector3), m_MaxSize) { Name = "position_buffer", Usage = BufferUsageHint.DynamicDraw }; DimensionBuffer = new BufferObjectCompact<Vector3> (sizeof(Vector3), m_MaxSize) { Name = "dimension_buffer", Usage = BufferUsageHint.DynamicDraw }; } m_UniformState = new UniformState () .Set ("modelview_transform", m_TransformationStack); m_AttributeState = new ArrayObject ( new VertexAttribute { AttributeName = "cube_pos", Buffer = PositionBuffer, Size = 3, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "cube_dimensions", Buffer = DimensionBuffer, Size = 3, Type = VertexAttribPointerType.Float }); m_Program = new Program ("debug_qnode_program", GetShaders("QnodeDebug", "").ToArray ()); m_State = new State (null, m_AttributeState, m_Program, m_UniformState); var hnd = PositionBuffer.Handle; hnd = DimensionBuffer.Handle; PrepareState (); }
/// <summary> /// given color and depth textures, render them. /// </summary> private static RenderPass CreateSolidSphere( FramebufferBindingSet targets, BufferObject<Vector4> sprite_pos_buffer, BufferObject<Vector4> sprite_color_buffer, BufferObject<Vector4> sprite_dimensions_buffer, IValueProvider<Vector2> viewport, IValueProvider<int> particles_count, IValueProvider<float> particle_scale_factor, IValueProvider<string> fragdepthroutine, IValueProvider<string> outputroutine, ModelViewProjectionParameters mvp, UniformState subroutineMapping, IEnumerable<Shader> subroutines ) { var uniform_state = subroutineMapping != null? new UniformState (subroutineMapping): new UniformState(); uniform_state.Set ("viewport_size", viewport); uniform_state.Set ("particle_scale_factor", particle_scale_factor); uniform_state.Set ("u_SetFragmentDepth", ShaderType.FragmentShader, fragdepthroutine); uniform_state.Set ("u_SetOutputs", ShaderType.FragmentShader, outputroutine); uniform_state.SetMvp("", mvp); var array_state = new ArrayObject ( new VertexAttribute { AttributeName = "sprite_pos", Buffer = sprite_pos_buffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_color", Buffer = sprite_color_buffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_dimensions", Buffer = sprite_dimensions_buffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float } ); var shaders = SeparateProgramPass.GetShaders("solid_sphere", "RenderPassFactory"); shaders = shaders.Concat(subroutines ?? new Shader[0]).ToArray(); // var resultPass = new SeparateProgramPass ( //the name of the pass-program "solid_sphere_RenderPassFactory", //before state null, //before render null, //render code (window) => { GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.Enable (EnableCap.DepthTest); GL.DepthMask(true); GL.DepthFunc (DepthFunction.Less); GL.Disable (EnableCap.Blend); //setup viewport GL.Viewport(0, 0, (int)viewport.Value.X, (int)viewport.Value.Y); GL.DrawArrays (BeginMode.Points, 0, particles_count.Value); }, //shaders shaders, //pass state array_state, uniform_state, targets ); return resultPass; }
// private void PrepareState() { if (m_Initialized) { if (PARTICLES_COUNT != m_PositionBuffer.Data.Length) { Position = m_PositionBuffer.Data = new Vector4[PARTICLES_COUNT]; Dimension = m_DimensionBuffer.Data = new Vector4[PARTICLES_COUNT]; Color = m_ColorBuffer.Data = new Vector4[PARTICLES_COUNT]; Rotation = m_RotationBuffer.Data = new Matrix4[PARTICLES_COUNT]; RotationLocal = m_RotationLocalBuffer.Data = new Matrix4[PARTICLES_COUNT]; InitializeSystem (); } Simulate (DateTime.Now); switch (PublishMethod){ case PublishMethod.AllAtOnce: m_PositionBuffer.Publish (); m_DimensionBuffer.Publish (); m_ColorBuffer.Publish (); m_RotationBuffer.Publish(); m_RotationLocalBuffer.Publish(); Publish (0, PARTICLES_COUNT); break; case PublishMethod.Incremental: { m_PublishCounter %= PARTICLES_COUNT; var start = m_PublishCounter; var end = Math.Min(start + PublishSize, PARTICLES_COUNT); var cnt = end - start; m_PositionBuffer.PublishPart (start, cnt); m_DimensionBuffer.PublishPart (start, cnt); m_ColorBuffer.PublishPart (start, cnt); m_RotationBuffer.PublishPart (start, cnt); m_RotationLocalBuffer.PublishPart (start, cnt); Publish (start, cnt); m_PublishCounter = end; } break; default: break; } return; } unsafe { m_PositionBuffer = new BufferObject<Vector4> (sizeof(Vector4), 0) { Name = "position_buffer", Usage = BufferUsageHint.DynamicDraw }; m_DimensionBuffer = new BufferObject<Vector4> (sizeof(Vector4), 0) { Name = "dimension_buffer", Usage = BufferUsageHint.DynamicDraw }; m_ColorBuffer = new BufferObject<Vector4> (sizeof(Vector4), 0) { Name = "color_buffer", Usage = BufferUsageHint.DynamicDraw }; m_RotationBuffer = new BufferObject<Matrix4> (sizeof(Matrix4), 0) { Name = "rotation_buffer", Usage = BufferUsageHint.DynamicDraw }; m_RotationLocalBuffer = new BufferObject<Matrix4> (sizeof(Matrix4), 0) { Name = "rotation_local_buffer", Usage = BufferUsageHint.DynamicDraw }; } ParticleStateArrayObject = new ArrayObject ( new VertexAttribute { AttributeName = "sprite_pos", Buffer = m_PositionBuffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_color", Buffer = m_ColorBuffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_dimensions", Buffer = m_DimensionBuffer, Size = 3, Stride = 16, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_rotation_local", Buffer = m_RotationLocalBuffer, Size = 16, Stride = 64, Type = VertexAttribPointerType.Float }, new VertexAttribute { AttributeName = "sprite_rotation", Buffer = m_RotationBuffer, Size = 16, Stride = 64, Type = VertexAttribPointerType.Float } ); // PublishSize = 100000; ModelScaleFactor = 1; TransformationStack = new MatrixStack(2); ProjectionStack = new MatrixStack(1); CameraMvp = new ModelViewProjectionParameters("", TransformationStack, ProjectionStack); // m_Manip = new OrbitManipulator (ProjectionStack); m_Grid = new Grid (CameraMvp); TransformationStack[0] = m_Manip.RT; TransformationStack.ValueStack[1] = Matrix4.Scale(ModelScaleFactor); // Uniforms = new UniformState { {"particle_scale_factor", () => this.ParticleScaleFactor}, {CameraMvp} }; // Shading = GlobalContext.Container.GetExportedValues<IShadingSetup>().FirstOrDefault(); PrepareStateCore(); m_Initialized = true; PrepareState (); }