/// <summary> /// Create OpenGL object specifying the referenced scene objects directly. /// </summary> /// <param name="block"></param> /// <param name="scene"></param> /// <param name="glbuff"></param> /// <param name="glimg"></param> public GLTexture(Compiler.Block block, Dict scene, GLBuffer glbuff, GLImage glimg) : base(block.Name, block.Anno) { var err = new CompileException($"texture '{name}'"); // PARSE ARGUMENTS Cmds2Fields(block, err); // set name glBuff = glbuff; glImg = glimg; // GET REFERENCES if (Buff != null) scene.TryGetValue(Buff, out glBuff, block, err); if (Img != null) scene.TryGetValue(Img, out glImg, block, err); if (glBuff != null && glImg != null) err.Add("Only an image or a buffer can be bound to a texture object.", block); if (glBuff == null && glImg == null) err.Add("Ether an image or a buffer has to be bound to a texture object.", block); // IF THERE ARE ERRORS THROW AND EXCEPTION if (err.HasErrors()) throw err; // INCASE THIS IS A TEXTURE OBJECT Link(block.Filename, block.LineInFile, err); if (HasErrorOrGlError(err, block)) throw err; }
/// <summary> /// Create OpenGL object specifying the texture /// format and referenced scene objects directly. /// </summary> /// <param name="name"></param> /// <param name="anno"></param> /// <param name="format"></param> /// <param name="glbuff"></param> /// <param name="glimg"></param> public GLTexture(string name, string anno, GpuFormat format, GLBuffer glbuff, GLImage glimg) : base(name, anno) { var err = new CompileException($"texture '{name}'"); // set name Format = format; glBuff = glbuff; glImg = glimg; // INCASE THIS IS A TEXTURE OBJECT Link("", -1, err); if (HasErrorOrGlError(err, "", -1)) throw err; }
/// <summary> /// Create OpenGL object specifying the texture /// format and referenced scene objects directly. /// </summary> /// <param name="name"></param> /// <param name="anno"></param> /// <param name="format"></param> /// <param name="glbuff"></param> /// <param name="glimg"></param> public GLTexture(string name, string anno, GpuFormat format, GLBuffer glbuff, GLImage glimg) : base(name, anno) { var err = new CompileException($"texture '{name}'"); // set name Format = format; glBuff = glbuff; glImg = glimg; // INCASE THIS IS A TEXTURE OBJECT Link("", -1, err); if (HasErrorOrGlError(err, "", -1)) { throw err; } }
/// <summary> /// Create OpenGL object specifying the referenced scene objects directly. /// </summary> /// <param name="block"></param> /// <param name="scene"></param> /// <param name="glbuff"></param> /// <param name="glimg"></param> public GLTexture(Compiler.Block block, Dict scene, GLBuffer glbuff, GLImage glimg) : base(block.Name, block.Anno) { var err = new CompileException($"texture '{Name}'"); // PARSE ARGUMENTS Cmds2Fields(block, err); // set name glBuff = glbuff; glImg = glimg; // GET REFERENCES if (Buff != null) { scene.TryGetValue(Buff, out glBuff, block, err); } if (Img != null) { scene.TryGetValue(Img, out glImg, block, err); } if (glBuff != null && glImg != null) { err.Add("Only an image or a buffer can be bound to a texture object.", block); } if (glBuff == null && glImg == null) { err.Add("Ether an image or a buffer has to be bound to a texture object.", block); } // IF THERE ARE ERRORS THROW AND EXCEPTION if (err.HasErrors) { throw err; } // INCASE THIS IS A TEXTURE OBJECT Link(block.Filename, block.LineInFile, err); if (HasErrorOrGlError(err, block)) { throw err; } }
/// <summary> /// Run or debug the currently active tab. /// </summary> /// <param name="s"></param> /// <param name="ev"></param> private void ToolBtnRunDebug_Click(object s, EventArgs ev) { // if no tab page is selected nothing needs to be compiled if (SelectedTab == null) { return; } CompiledEditor = (CodeEditor)SelectedTab.Controls[0]; // save code ToolBtnSave_Click(s, null); // clear scene and output output.Rows.Clear(); glControl.ClearScene(); glControl.RemoveEvents(); // get include directory var includeDir = (CompiledEditor.Filename != null ? Path.GetDirectoryName(CompiledEditor.Filename) : Directory.GetCurrentDirectory()) + Path.DirectorySeparatorChar; // get code text form tab page // generate debug information? var debugging = s == toolBtnDbg; // COMPILE THE CURRENTLY SELECTED FILE var root = Compiler.Compile(CompiledEditor.Filename); var shaderLines = from x in root where x.Type == "shader" select new[] { x.Line, x.LineCount }; CompiledEditor.RemoveInvalidBreakpoints(shaderLines); // INSTANTIATE THE CLASS WITH THE SPECIFIED ARGUMENTS (collect all errors) var ex = root.Catch(x => glControl.AddObject(x, debugging)).ToArray(); // add events to the end of the event list glControl.AddEvents(output); glControl.MouseUp += new MouseEventHandler(GlControl_MouseUp); // show errors var exc = from x in ex where x is CompileException || x.InnerException is CompileException select(x is CompileException?x : x.InnerException) as CompileException; var err = from x in exc from y in x select y; var line = from x in err select x.Line; err.ForEach(line, (e, l) => AddOutputItem(includeDir, e.File, l + 1, e.Msg)); // underline all debug errors var ranges = line.Select(x => new[] { CompiledEditor.Lines[x].Position, CompiledEditor.Lines[x].EndPosition }); CompiledEditor.ClearIndicators(CodeEditor.DebugIndicatorIndex); CompiledEditor.AddIndicators(CodeEditor.DebugIndicatorIndex, ranges); // SHOW SCENE DebugRender(debugging); // add externally created textures to the scene var existing = glControl.Scene.Values.ToArray(); GLImage.FindTextures(existing).ForEach(x => glControl.Scene.Add(x.Name, x)); // add externally created buffers to the scene GLBuffer.FindBuffers(existing).ForEach(x => glControl.Scene.Add(x.Name, x)); // UPDATE DEBUG DATA comboBuf.Items.Clear(); comboImg.Items.Clear(); comboProp.Items.Clear(); glControl.Scene.Where(x => x.Value is GLBuffer).ForEach(x => comboBuf.Items.Add(x.Value)); glControl.Scene.Where(x => x.Value is GLImage).ForEach(x => comboImg.Items.Add(x.Value)); glControl.Scene.Where(x => x.Value is GLInstance).ForEach(x => comboProp.Items.Add(x.Value)); // SHOW DEBUG BUTTONS IF NECESSARY toolBtnDbgStepBreakpoint.Enabled = debugging; toolBtnDbgStepInto.Enabled = debugging; toolBtnDbgStepOver.Enabled = debugging; toolBtnDbgStepBack.Enabled = debugging; debugListView.Visible = debugging; }