public FormGLSwitchEditor(GLSwitch glSwitch) { InitializeComponent(); this.propertyGrid.SelectedObject = glSwitch; this.lblSwitchName.Text = string.Format("{0}", glSwitch); }
private void ColorCodedRender(RenderEventArgs arg, IndexBufferPtr temporaryIndexBufferPtr = null) { UpdatePolygonMode(arg.PickingGeometryType); ShaderProgram program = this.Program; // 绑定shader program.Bind(); program.SetUniform("pickingBaseId", temporaryIndexBufferPtr == null ? (int)this.PickingBaseId : 0); UniformMat4 uniformmMVP4Picking = this.uniformmMVP4Picking; bool mvpUpdated = uniformmMVP4Picking.Updated; if (mvpUpdated) { uniformmMVP4Picking.SetUniform(program); } PickingSwitchesOn(); GLSwitch primitiveRestartIndexSwitch = null; var oneIndexBufferPtr = temporaryIndexBufferPtr as OneIndexBufferPtr; if (oneIndexBufferPtr != null) { primitiveRestartIndexSwitch = new PrimitiveRestartSwitch(oneIndexBufferPtr); primitiveRestartIndexSwitch.On(); } if (this.vertexArrayObject == null) { var vertexArrayObject = new VertexArrayObject( this.indexBufferPtr, this.positionBufferPtr); vertexArrayObject.Create(arg, program); this.vertexArrayObject = vertexArrayObject; } //else { this.vertexArrayObject.Render(arg, program, temporaryIndexBufferPtr); } if (oneIndexBufferPtr != null) { primitiveRestartIndexSwitch.Off(); } PickingSwitchesOff(); if (mvpUpdated) { uniformmMVP4Picking.ResetUniform(program); } // 解绑shader program.Unbind(); }
private void ColorCodedRender(RenderEventArgs arg, IndexBufferPtr temporaryIndexBufferPtr = null) { UpdatePolygonMode(arg.PickingGeometryType); ShaderProgram program = this.Program; // 绑定shader program.Bind(); program.SetUniform("pickingBaseId", temporaryIndexBufferPtr == null ? (int)this.PickingBaseId : 0); UniformMat4 uniformmMVP4Picking = this.uniformmMVP4Picking; { mat4 projection = arg.Camera.GetProjectionMatrix(); mat4 view = arg.Camera.GetViewMatrix(); mat4 model = this.GetModelMatrix(); uniformmMVP4Picking.Value = projection * view * model; } uniformmMVP4Picking.SetUniform(program); PickingSwitchesOn(); GLSwitch primitiveRestartIndexSwitch = null; var oneIndexBufferPtr = temporaryIndexBufferPtr as OneIndexBufferPtr; if (oneIndexBufferPtr != null) { primitiveRestartIndexSwitch = new PrimitiveRestartSwitch(oneIndexBufferPtr); primitiveRestartIndexSwitch.On(); } { this.vertexArrayObject.Render(arg, program, temporaryIndexBufferPtr); } if (oneIndexBufferPtr != null) { primitiveRestartIndexSwitch.Off(); } PickingSwitchesOff(); //if (mvpUpdated) { uniformmMVP4Picking.ResetUniform(program); } // 解绑shader program.Unbind(); }
/// <summary> /// /// </summary> /// <param name="maxCharCount">Max char count to display for this label. /// Careful to set this value because greater <paramref name="maxCharCount"/> means more space ocupied in GPU nemory.</param> /// <param name="labelHeight">Label height(in pixels)</param> /// <param name="fontTexture">Use which font to render text?</param> public LabelRenderer(int maxCharCount = 64, int labelHeight = 32, IFontTexture fontTexture = null) : base(null, null, null, new BlendSwitch(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.One)) { GLSwitch blendSwitch = this.SwitchList.Find(x => x is BlendSwitch); if (blendSwitch == null) { throw new Exception(); } this.blendSwitch = blendSwitch; if (fontTexture == null) { this.fontTexture = FontTexture.Default; } // FontResource.Default; } else { this.fontTexture = fontTexture; } this.LabelHeight = labelHeight; var model = new TextModel(maxCharCount); this.bufferable = model; this.model = model; var shaderCodes = new ShaderCode[2]; shaderCodes[0] = new ShaderCode(ManifestResourceLoader.LoadTextFile( @"Resources\Label.vert"), ShaderType.VertexShader); shaderCodes[1] = new ShaderCode(ManifestResourceLoader.LoadTextFile( @"Resources\Label.frag"), ShaderType.FragmentShader); this.shaderCodes = shaderCodes; var map = new PropertyNameMap(); map.Add("in_Position", TextModel.strPosition); map.Add("in_UV", TextModel.strUV); this.propertyNameMap = map; }