コード例 #1
0
        /// <summary>
        /// 根据<see cref="IndexBuffer"/>的具体类型获取一个<see cref="PickableRenderer"/>
        /// </summary>
        /// <param name="model"></param>
        /// <param name="attributeMap"></param>
        /// <param name="positionNameInIBufferable"></param>
        /// <param name="switches"></param>
        /// <returns></returns>
        public static InnerPickableRenderer GetRenderer(
            this IBufferable model,
            AttributeMap attributeMap,
            string positionNameInIBufferable,
            params GLState[] switches)
        {
            if (model == null || attributeMap == null || string.IsNullOrEmpty(positionNameInIBufferable))
            { throw new ArgumentNullException(); }

            AttributeMap map = null;
            foreach (AttributeMap.NamePair item in attributeMap)
            {
                if (item.NameInIBufferable == positionNameInIBufferable)
                {
                    map = new AttributeMap();
                    map.Add(item.VarNameInShader, item.NameInIBufferable);
                    break;
                }
            }
            if (map == null) { throw new Exception(string.Format("No matching variable name in shader for [{0}]", positionNameInIBufferable)); }

            if (model.UsesZeroIndexBuffer())
            {
                return new ZeroIndexRenderer(model, PickingShaderHelper.GetShaderCodes(), map, positionNameInIBufferable, switches);
            }
            else
            {
                return new OneIndexRenderer(model, PickingShaderHelper.GetShaderCodes(), map, positionNameInIBufferable, switches);
            }
        }
コード例 #2
0
 private TrefoilKnotRenderer(IBufferable model, ShaderCode[] shaderCodes,
     AttributeMap attributeMap, string positionNameInIBufferable, params GLState[] switches)
     : base(model, shaderCodes, attributeMap, positionNameInIBufferable, switches)
 {
     this.stateList.Add(new LineWidthState(3));
     this.stateList.Add(new PointSizeState(3));
 }
コード例 #3
0
 public OrderIndependentTransparencyRenderer(IBufferable model, vec3 lengths,
     string positionName, string normalName)
 {
     {
         var map = new AttributeMap();
         map.Add("position", positionName);
         map.Add("normal", normalName);
         var build_lists = new ShaderCode[2];
         build_lists[0] = new ShaderCode(File.ReadAllText(@"shaders\OIT\build_lists.vert"), ShaderType.VertexShader);
         build_lists[1] = new ShaderCode(File.ReadAllText(@"shaders\OIT\build_lists.frag"), ShaderType.FragmentShader);
         this.buildListsRenderer = new PickableRenderer(model, build_lists, map, positionName);
     }
     {
         var map = new AttributeMap();
         map.Add("position", positionName);
         var resolve_lists = new ShaderCode[2];
         resolve_lists[0] = new ShaderCode(File.ReadAllText(@"shaders\OIT\resolve_lists.vert"), ShaderType.VertexShader);
         resolve_lists[1] = new ShaderCode(File.ReadAllText(@"shaders\OIT\resolve_lists.frag"), ShaderType.FragmentShader);
         this.resolve_lists = new PickableRenderer(model, resolve_lists, map, positionName);
     }
     {
         this.depthTestState = new DepthTestState(false);
         this.cullFaceState = new CullFaceState(false);
     }
     this.ModelSize = lengths;
 }
コード例 #4
0
 public void AmericanCityGeneratorWithAttributeMap()
 {
     IAmericanCityGenerator americancitygenerator = new AmericanCityGenerator();
     AttributeMap attmap = new AttributeMap { GeneratorDefaultValue = "Boston" };
     string city = americancitygenerator.Generate(random, attmap);
     Assert.AreEqual("Boston", city);
 }
コード例 #5
0
ファイル: LabelRenderer.cs プロジェクト: bitzhuwei/CSharpGL
        /// <summary>
        /// Create a label renderer.
        /// </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>
        /// <returns></returns>
        public static LabelRenderer Create(int maxCharCount = 64, int labelHeight = 32, IFontTexture fontTexture = null)
        {
            if (fontTexture == null) { fontTexture = FontTexture.Default; }

            var model = new TextModel(maxCharCount);

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

            var map = new AttributeMap();
            map.Add("in_Position", TextModel.strPosition);
            map.Add("in_UV", TextModel.strUV);

            var blendState = new BlendState(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.One);

            var renderer = new LabelRenderer(model, shaderCodes, map, blendState);
            renderer.blendState = blendState;
            renderer.fontTexture = fontTexture;
            renderer.LabelHeight = labelHeight;

            return renderer;
        }
コード例 #6
0
 private BillboardRenderer(IBufferable model, ShaderCode[] shaderCodes,
     AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderCodes, attributeMap, switches)
 {
     this.Width = 1.0f; this.Height = 0.125f;
     this.Percentage = new vec2(0.2f, 0.05f);
     this.PixelSize = new ivec2(100, 10);
 }
コード例 #7
0
 private UniformArrayRenderer(IBufferable model, ShaderCode[] shaderCodes,
     AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderCodes, attributeMap, switches)
 {
     var groundRenderer = GroundRenderer.Create(new GroundModel(20));
     groundRenderer.Scale = new vec3(10, 10, 10);
     this.groundRenderer = groundRenderer;
 }
コード例 #8
0
 public void AmericanAddressGeneratorWithAttributeMap()
 {
     IAmericanAddressGenerator americanaddressgenerator = new AmericanAddressGenerator();
     AttributeMap attmap = new AttributeMap { GeneratorDefaultValue = "123 Main" };
     string address = americanaddressgenerator.Generate(random, attmap);
     Assert.IsNotNull(address);
     Assert.AreEqual("123 Main", address);
 }
コード例 #9
0
 private HemisphereLightingRenderer(IBufferable model, ShaderCode[] shaderCodes,
     AttributeMap attributeMap, string positionNameInIBufferable,
     params GLState[] switches)
     : base(model, shaderCodes, attributeMap, positionNameInIBufferable, switches)
 {
     this.LightPosition = new vec3(0, 2, 0);
     this.SkyColor = new vec3(1, 0, 0);
     this.GroundColor = new vec3(0, 1, 0);
 }
コード例 #10
0
 public static SimpleComputeRenderer Create()
 {
     var shaderCodes = new ShaderCode[2];
     shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\SimpleComputeRenderer\compute.vert"), ShaderType.VertexShader);
     shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\SimpleComputeRenderer\compute.frag"), ShaderType.FragmentShader);
     var map = new AttributeMap();
     map.Add("position", SimpleCompute.strPosition);
     return new SimpleComputeRenderer(new SimpleCompute(), shaderCodes, map);
 }
コード例 #11
0
 /// <summary>
 /// 支持"拾取"的渲染器
 /// </summary>
 /// <param name="model">一种渲染方式</param>
 /// <param name="shaderCodes">各种类型的shader代码</param>
 /// <param name="attributeMap">关联<paramref name="model"/>和<paramref name="shaderCodes"/>中的属性</param>
 /// <param name="positionNameInIBufferable">描述顶点位置信息的buffer的名字</param>
 ///<param name="switches"></param>
 public PickableRenderer(IBufferable model, ShaderCode[] shaderCodes,
     AttributeMap attributeMap, string positionNameInIBufferable,
     params GLState[] switches)
     : base(model, shaderCodes, attributeMap, switches)
 {
     var innerPickableRenderer = InnerPickableRendererFactory.GetRenderer(
         model, attributeMap, positionNameInIBufferable);
     this.innerPickableRenderer = innerPickableRenderer;
 }
コード例 #12
0
ファイル: GroundRenderer.cs プロジェクト: bitzhuwei/CSharpGL
 public static GroundRenderer Create(GroundModel model)
 {
     var shaderCodes = new ShaderCode[2];
     shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\Ground.vert"), ShaderType.VertexShader);
     shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\Ground.frag"), ShaderType.FragmentShader);
     var map = new AttributeMap();
     map.Add("in_Position", GroundModel.strPosition);
     var renderer = new GroundRenderer(model, shaderCodes, map);
     return renderer;
 }
コード例 #13
0
        public static ZeroAttributeRenderer Create()
        {
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\ZeroAttributeRenderer\ZeroAttribute.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\ZeroAttributeRenderer\ZeroAttribute.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();// no items in this map.
            var model = new ZeroAttributeModel(DrawMode.TriangleStrip, 0, 4);
            var renderer = new ZeroAttributeRenderer(model, shaderCodes, map, new PointSpriteState());
            renderer.ModelSize = new vec3(2.05f, 2.05f, 0.01f);

            return renderer;
        }
コード例 #14
0
        public static QuadStripRenderer Create(QuadStripModel model)
        {
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\QuadStripTexture.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\QuadStripTexture.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("in_Position", QuadStripModel.position);
            map.Add("in_TexCoord", QuadStripModel.texCoord);

            var renderer = new QuadStripRenderer(model, shaderCodes, map);
            return renderer;
        }
コード例 #15
0
 private DirectonalLightRenderer(IBufferable model, ShaderCode[] shaderCodes,
     AttributeMap attributeMap, string positionNameInIBufferable,
     params GLState[] switches)
     : base(model, shaderCodes, attributeMap, positionNameInIBufferable, switches)
 {
     this.AmbientLightColor = new vec3(0.2f);
     this.DirectionalLightDirection = new vec3(1);
     this.DirectionalLightColor = new vec3(1);
     //this.HalfVector = new vec3(1);
     this.Shininess = 10.0f;
     this.Strength = 1.0f;
 }
コード例 #16
0
        public static KleinBottleRenderer Create(KleinBottleModel model)
        {
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\KleinBottleRenderer\KleinBottle.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\KleinBottleRenderer\KleinBottle.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("in_Position", KleinBottleModel.strPosition);
            map.Add("in_TexCoord", KleinBottleModel.strTexCoord);
            var renderer = new KleinBottleRenderer(model, shaderCodes, map, KleinBottleModel.strPosition);
            renderer.ModelSize = model.Lengths;

            return renderer;
        }
コード例 #17
0
        public static ShaderToyRenderer Create()
        {
            var model = new Cube();
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\ShaderToy.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\ShaderToy.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("in_Position", Cube.strPosition);
            var renderer = new ShaderToyRenderer(model, shaderCodes, map);
            renderer.ModelSize = model.Lengths;

            return renderer;
        }
コード例 #18
0
        public static SimplexNoiseRenderer Create()
        {
            var model = new Sphere(1, 180, 360);
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\SimplexNoise.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\SimplexNoise.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("in_Position", Sphere.strPosition);
            var renderer = new SimplexNoiseRenderer(model, shaderCodes, map, Sphere.strPosition);
            renderer.ModelSize = model.Lengths;

            return renderer;
        }
コード例 #19
0
        public static QuadStripColoredRenderer Create(QuadStripColoredModel model)
        {
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\QuadStripColor.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\QuadStripColor.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("in_Position", QuadStripColoredModel.position);
            map.Add("in_Color", QuadStripColoredModel.color);

            var renderer = new QuadStripColoredRenderer(model, shaderCodes, map);
            renderer.quadCount = model.quadCount;
            return renderer;
        }
コード例 #20
0
        public static PointSpriteRenderer Create(int particleCount)
        {
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\PointSprite.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\PointSprite.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("position", PointSpriteModel.strposition);
            var model = new PointSpriteModel(particleCount);
            var renderer = new PointSpriteRenderer(model, shaderCodes, map, new PointSpriteState());
            renderer.ModelSize = model.Lengths;

            return renderer;
        }
コード例 #21
0
 public static CatesianGridRenderer Create(vec3 originalWorldPosition, CatesianGrid grid, Texture codedColorSampler)
 {
     var shaderCodes = new ShaderCode[2];
     shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\HexahedronGrid.vert"), ShaderType.VertexShader);
     shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\HexahedronGrid.frag"), ShaderType.FragmentShader);
     var map = new AttributeMap();
     map.Add("in_Position", CatesianGrid.strPosition);
     map.Add("in_uv", CatesianGrid.strColor);
     var renderer = new CatesianGridRenderer(originalWorldPosition, grid, shaderCodes, map, codedColorSampler);
     renderer.ModelSize = (grid.DataSource.SourceActiveBounds.MaxPosition - grid.DataSource.SourceActiveBounds.MinPosition).Abs();
     renderer.WorldPosition = -grid.DataSource.Position;
     return renderer;
 }
コード例 #22
0
ファイル: LightRenderer.cs プロジェクト: bitzhuwei/CSharpGL
 internal static LightRenderer Create(Teapot model, vec3 lengths, string positionNameInIBufferable)
 {
     var shaderCodes = new ShaderCode[2];
     shaderCodes[0] = new ShaderCode(System.IO.File.ReadAllText(@"shaders\LightRenderer\Light.vert"), ShaderType.VertexShader);
     shaderCodes[1] = new ShaderCode(System.IO.File.ReadAllText(@"shaders\LightRenderer\Light.frag"), ShaderType.FragmentShader);
     var map = new AttributeMap();
     map.Add("in_Position", Teapot.strPosition);
     map.Add("in_Normal", Teapot.strNormal);
     //map.Add("in_Color", Teapot.strColor);
     var renderer = new LightRenderer(model, shaderCodes, map, positionNameInIBufferable);
     renderer.Lengths = lengths;
     return renderer;
 }
コード例 #23
0
        public static GreyFilterRenderer Create()
        {
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\GreyFilterRenderer\GreyFilter.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\GreyFilterRenderer\GreyFilter.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("a_vertex", GreyFilterModel.strPosition);
            map.Add("a_texCoord", GreyFilterModel.strTexCoord);
            var model = new GreyFilterModel();
            var renderer = new GreyFilterRenderer(model, shaderCodes, map, new PointSpriteState());
            renderer.ModelSize = model.Lengths;

            return renderer;
        }
コード例 #24
0
        public static HemisphereLightingRenderer Create()
        {
            var model = new Teapot();
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\HemisphereLighting\HemisphereLighting.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\HemisphereLighting\HemisphereLighting.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("inPosition", Teapot.strPosition);
            map.Add("inNormal", Teapot.strNormal);

            var renderer = new HemisphereLightingRenderer(model, shaderCodes, map, Teapot.strPosition);
            renderer.ModelSize = model.Size;
            return renderer;
        }
コード例 #25
0
        public static UniformArrayRenderer Create()
        {
            var model = new Teapot();
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\UniformArrayRenderer\UniformArray.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\UniformArrayRenderer\UniformArray.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("vPos", Teapot.strPosition);
            map.Add("vColor", Teapot.strColor);
            var renderer = new UniformArrayRenderer(model, shaderCodes, map);
            renderer.ModelSize = model.Size;

            return renderer;
        }
コード例 #26
0
        private Renderer InitRaycastRenderer()
        {
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\RaycastVolumeRenderer\raycasting.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\RaycastVolumeRenderer\raycasting.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("position", RaycastModel.strposition);
            map.Add("boundingBox", RaycastModel.strcolor);
            var raycastRenderer = new Renderer(model, shaderCodes, map);
            raycastRenderer.Initialize();
            raycastRenderer.StateList.Add(new CullFaceState(CullFaceMode.Back, true));

            return raycastRenderer;
        }
コード例 #27
0
        public static InnerImageProcessingRenderer Create(string textureFilename = @"Textures\edgeDetection.bmp")
        {
            var model = new ImageProcessingModel();
            ShaderCode[] simpleShader = new ShaderCode[2];
            simpleShader[0] = new ShaderCode(File.ReadAllText(@"shaders\ImageProcessingRenderer\ImageProcessing.vert"), ShaderType.VertexShader);
            simpleShader[1] = new ShaderCode(File.ReadAllText(@"shaders\ImageProcessingRenderer\ImageProcessing.frag"), ShaderType.FragmentShader);
            var propertyNameMap = new AttributeMap();
            propertyNameMap.Add("vert", "position");
            propertyNameMap.Add("uv", "uv");
            var renderer = new InnerImageProcessingRenderer(
                model, simpleShader, propertyNameMap, ImageProcessingModel.strposition);
            renderer.textureFilename = textureFilename;

            return renderer;
        }
コード例 #28
0
 private PointLightRenderer(IBufferable model, ShaderCode[] shaderCodes,
     AttributeMap attributeMap, string positionNameInIBufferable,
     params GLState[] switches)
     : base(model, shaderCodes, attributeMap, positionNameInIBufferable, switches)
 {
     this.Ambient = new vec3(0.2f);
     this.LightPosition = new vec3(400);
     this.LightColor = new vec3(1);
     //this.HalfVector = new vec3(1);
     this.Shininess = 10.0f;
     this.Strength = 1.0f;
     this.ConstantAttenuation = 0.2f;
     this.LinearAttenuation = 0.0f;
     this.QuadraticAttenuation = 0.0f;
 }
コード例 #29
0
ファイル: TextureRenderer.cs プロジェクト: bitzhuwei/CSharpGL
 /// <summary>
 /// Gets a renderer that renders a bitmap in a square.
 /// </summary>
 /// <param name="bitmapFilename"></param>
 /// <returns></returns>
 public static TextureRenderer Create(string bitmapFilename = "")
 {
     var shaderCodes = new ShaderCode[2];
     shaderCodes[0] = new ShaderCode(ManifestResourceLoader.LoadTextFile(
     @"Resources.SquareRenderer.vert"), ShaderType.VertexShader);
     shaderCodes[1] = new ShaderCode(ManifestResourceLoader.LoadTextFile(
     @"Resources.SquareRenderer.frag"), ShaderType.FragmentShader);
     var map = new AttributeMap();
     map.Add("in_Position", Square.strPosition);
     map.Add("in_TexCoord", Square.strTexCoord);
     var model = new Square();
     var renderer = new TextureRenderer(model, shaderCodes, map, Square.strPosition);
     renderer.bitmapFilename = bitmapFilename;
     return renderer;
 }
コード例 #30
0
ファイル: WaterRenderer.cs プロジェクト: bitzhuwei/CSharpGL
        public static WaterRenderer Create(int waterPlaneLength)
        {
            var model = new WaterPlaneModel(waterPlaneLength);
            var shaderCodes = new ShaderCode[2];
            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"shaders\water\Water.vert.glsl"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"shaders\water\Water.frag.glsl"), ShaderType.FragmentShader);
            var map = new AttributeMap();
            map.Add("a_vertex", WaterPlaneModel.strPosition);
            var renderer = new WaterRenderer(model, shaderCodes, map, new FrontFaceState(FrontFaceMode.CCW));
            renderer.waterTextureRenderer = WaterTextureRenderer.Create(waterPlaneLength);
            renderer.backgroundRenderer = WaterBackgroundRenderer.Create(waterPlaneLength);
            renderer.ModelSize = new vec3(waterPlaneLength + 1, waterPlaneLength + 1, waterPlaneLength + 1);
            renderer.waterPlaneLength = waterPlaneLength;

            return renderer;
        }
コード例 #31
0
ファイル: CubeNode.cs プロジェクト: KiwiPapa/some_c_projects
        public static CubeNode Create()
        {
            // vertex buffer and index buffer.
            var model = new CubeModel();
            // vertex shader and fragment shader.
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            // which vertex buffer maps to which attribute in shader.
            var map = new AttributeMap();

            map.Add("inPosition", CubeModel.strPosition);
            map.Add("inColor", CubeModel.strColor);
            // build a render method.
            var builder = new RenderMethodBuilder(array, map);
            // create node.
            var node = new CubeNode(model, builder);

            // initialize node.
            node.Initialize();

            return(node);
        }
コード例 #32
0
        public static CubeNode Create()
        {
            // model provides vertex buffer and index buffer(within an IDrawCommand).
            var model = new CubeModel();
            // vertex shader and fragment shader.
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var gs    = new GeometryShader(geometryCode);
            var array = new ShaderArray(vs, fs, gs);
            // which vertex buffer maps to which attribute in shader.
            var map = new AttributeMap();

            map.Add("inPosition", CubeModel.strPosition);
            // help to build a render method.
            var builder = new RenderMethodBuilder(array, map);
            // create node.
            var node = new CubeNode(model, builder);

            // initialize node.
            node.Initialize();

            return(node);
        }
コード例 #33
0
        public static StaticSlicesNode Create(int sliceCount, Texture texture1D, Texture texture3D)
        {
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            map.Add("inPosition", StaticSlicesModel.strPosition);
            map.Add("inTexCoord", StaticSlicesModel.strTexCoord);
            //var depthTestSwitch = new DepthTestSwitch(false);
            //var polygonModeSwitch = new PolygonModeSwitch(PolygonMode.Line);
            var blendSwitch = new BlendSwitch(BlendEquationMode.Add, BlendSrcFactor.SrcAlpha, BlendDestFactor.OneMinusSrcAlpha);
            var builder     = new RenderMethodBuilder(array, map, blendSwitch);

            var model = new StaticSlicesModel(sliceCount);
            var node  = new StaticSlicesNode(model, builder);

            node.texture1D = texture1D;
            node.texture3D = texture3D;
            node.Initialize();

            return(node);
        }
コード例 #34
0
        protected override MemberHandlerResult TryMap(MemberState s, ref MemberMainSettingsValue main, MemberInfo member, RuntimeTypeModel model)
        {
            if (s.Input.IsEnumValueMember)
            {
                return(MemberHandlerResult.NotFound);
            }
            if (!s.Input.CanUse(AttributeType.Xml))
            {
                return(MemberHandlerResult.NotFound);
            }
            if (AttributeMap.GetAttribute(s.Input.Attributes, "System.Xml.Serialization.XmlIgnoreAttribute") != null)
            {
                return(MemberHandlerResult.Ignore);
            }
            if (!s.Input.HasFamily(MetaType.AttributeFamily.XmlSerializer))
            {
                return(MemberHandlerResult.NotFound);
            }
            var attrib = AttributeMap.GetAttribute(s.Input.Attributes, "System.Xml.Serialization.XmlElementAttribute")
                         ?? AttributeMap.GetAttribute(s.Input.Attributes, "System.Xml.Serialization.XmlArrayAttribute");

            if (attrib == null)
            {
                return(MemberHandlerResult.NotFound);
            }

            if (main.Tag <= 0)
            {
                attrib.TryGetNotDefault("Order", ref main.Tag);
            }
            if (string.IsNullOrEmpty(main.Name))
            {
                attrib.TryGetNotEmpty("ElementName", ref main.Name);
            }

            return(main.Tag >= s.MinAcceptFieldNumber ? MemberHandlerResult.Done : MemberHandlerResult.Partial);
        }
コード例 #35
0
        public static ShadowVolumeNode Create(IBufferSource model, string position, string normal, vec3 size)
        {
            RenderMethodBuilder ambientBuilder, extrudeBuilder, underLightBuilder;
            {
                var vs    = new VertexShader(ambientVert);
                var fs    = new FragmentShader(ambientFrag);
                var array = new ShaderArray(vs, fs);
                var map   = new AttributeMap();
                map.Add("inPosition", position);
                ambientBuilder = new RenderMethodBuilder(array, map);
            }
            {
                var vs    = new VertexShader(extrudeVert);
                var gs    = new GeometryShader(extrudeGeom);
                var fs    = new FragmentShader(extrudeFrag);
                var array = new ShaderArray(vs, gs, fs);
                var map   = new AttributeMap();
                map.Add("inPosition", position);
                extrudeBuilder = new RenderMethodBuilder(array, map);
            }
            {
                var vs    = new VertexShader(blinnPhongVert);
                var fs    = new FragmentShader(blinnPhongFrag);
                var array = new ShaderArray(vs, fs);
                var map   = new AttributeMap();
                map.Add("inPosition", position);
                map.Add("inNormal", normal);
                underLightBuilder = new RenderMethodBuilder(array, map);
            }

            var node = new ShadowVolumeNode(model, ambientBuilder, extrudeBuilder, underLightBuilder);

            node.Initialize();
            node.ModelSize = size;

            return(node);
        }
コード例 #36
0
        public static NormalMappingNode Create(IBufferSource model, vec3 size, string position, string texCoord, string normal, string tangent)
        {
            //var model = new NormalMappingModel();
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            var map   = new AttributeMap();

            //map.Add("inPosition", NormalMappingModel.strPosition);
            //map.Add("inTexCoord", NormalMappingModel.strTexCoord);
            //map.Add("inNormal", NormalMappingModel.strNormal);
            //map.Add("inTangent", NormalMappingModel.strTangent);
            map.Add("inPosition", position);
            map.Add("inTexCoord", texCoord);
            map.Add("inNormal", normal);
            map.Add("inTangent", tangent);
            var builder = new RenderMethodBuilder(array, map);
            var node    = new NormalMappingNode(model, builder);

            node.ModelSize = size;
            node.Initialize();

            return(node);
        }
コード例 #37
0
        /// <summary>
        /// Read using value collection
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestHeader"></param>
        /// <param name="readValueCollection"></param>
        /// <param name="operations"></param>
        /// <param name="skipAttributeIdInvalid"></param>
        /// <param name="traceOnly"></param>
        /// <returns></returns>
        internal async Task ReadAsync(Session session, RequestHeader requestHeader,
                                      ReadValueIdCollection readValueCollection, List <OperationResultModel> operations,
                                      bool skipAttributeIdInvalid, bool traceOnly)
        {
            var readResponse = await session.ReadAsync(requestHeader, 0,
                                                       TimestampsToReturn.Both, readValueCollection);

            OperationResultEx.Validate("Read_" + LocalId, operations,
                                       readResponse.Results
                                       .Select(v => skipAttributeIdInvalid &&
                                               v.StatusCode == StatusCodes.BadAttributeIdInvalid  ?
                                               StatusCodes.Good : v.StatusCode),
                                       readResponse.DiagnosticInfos, readValueCollection
                                       .Select(v => AttributeMap.GetBrowseName(v.AttributeId)), traceOnly);

            for (var i = 0; i < readValueCollection.Count; i++)
            {
                var attributeId = readValueCollection[i].AttributeId;
                if (readResponse.Results[i].StatusCode != StatusCodes.BadAttributeIdInvalid)
                {
                    _attributes[attributeId] = readResponse.Results[i];
                }
            }
        }
コード例 #38
0
        public static DemoNode Create()
        {
            RenderMethodBuilder updateBuilder, updateBuilder2;
            {
                var vs = new VertexShader(updateVert);
                var feedbackVaryings = new string[] { outPosition, };
                IShaderProgramProvider updateProvider = new ShaderArray(feedbackVaryings, ShaderProgram.BufferMode.Separate, vs);
                var map = new AttributeMap();
                map.Add(inPosition, DemoModel.inPosition);
                var map2 = new AttributeMap();
                map2.Add(inPosition, DemoModel.inPosition2);
                updateBuilder  = new RenderMethodBuilder(updateProvider, map);
                updateBuilder2 = new RenderMethodBuilder(updateProvider, map2);
            }

            RenderMethodBuilder renderBuilder, renderBuilder2;
            {
                IShaderProgramProvider renderProvider;
                var vs = new VertexShader(renderVert);
                var fs = new FragmentShader(renderFrag);
                renderProvider = new ShaderArray(vs, fs);
                var map = new AttributeMap();
                map.Add(inPosition, DemoModel.inPosition);
                var map2 = new AttributeMap();
                map2.Add(inPosition, DemoModel.inPosition2);
                renderBuilder  = new RenderMethodBuilder(renderProvider, map);
                renderBuilder2 = new RenderMethodBuilder(renderProvider, map2);
            }

            var model = new DemoModel();
            var node  = new DemoNode(model, updateBuilder, updateBuilder2, renderBuilder, renderBuilder2);

            node.Initialize();

            return(node);
        }
コード例 #39
0
        public static SphereNode Create(Texture texture)
        {
            // vertex buffer and index buffer.
            var model = new Sphere(1, 20, 40);
            // vertex shader and fragment shader.
            var vs    = new VertexShader(vertexCode);
            var fs    = new FragmentShader(fragmentCode);
            var array = new ShaderArray(vs, fs);
            // which vertex buffer maps to which attribute in shader.
            var map = new AttributeMap();

            map.Add("inPosition", Sphere.strPosition);
            map.Add("inTexCoord", Sphere.strUV);
            // build a render method.
            var builder = new RenderMethodBuilder(array, map);
            // create node.
            var node = new SphereNode(model, builder);

            node.SetTexture(texture);
            // initialize node.
            node.Initialize();

            return(node);
        }
コード例 #40
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <param name="position"></param>
        /// <param name="normal"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public static NormalNode Create(IBufferSource model, string position, string texCoord, string normal, vec3 size)
        {
            var builders = new RenderMethodBuilder[2];
            {
                // render model
                var vs       = new VertexShader(vertexShader);
                var fs       = new FragmentShader(fragmentShader);
                var provider = new ShaderArray(vs, fs);
                var map      = new AttributeMap();
                map.Add(vPosition, position);
                map.Add(vTexCoord, texCoord);
                map.Add(vNormal, normal);
                builders[0] = new RenderMethodBuilder(provider, map);
            }
            {
                // render normal
                var vs       = new VertexShader(normalVertex);
                var gs       = new GeometryShader(normalGeometry);
                var fs       = new FragmentShader(normalFragment);
                var provider = new ShaderArray(vs, gs, fs);
                var map      = new AttributeMap();
                map.Add(vPosition, position);
                map.Add(vNormal, normal);
                builders[1] = new RenderMethodBuilder(provider, map);
            }

            var    node   = new NormalNode(model, position, texCoord, builders);
            string folder = System.Windows.Forms.Application.StartupPath;

            node.TextureSource = new TextureSource(System.IO.Path.Combine(folder, @"superficie.png"));
            node.ModelSize     = size;

            node.Initialize();

            return(node);
        }
コード例 #41
0
ファイル: TextRenderer.cs プロジェクト: ihaiucom/CSharpGL
        /// <summary>
        /// Create a text renderer.
        /// </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>
        /// <returns></returns>
        public static TextRenderer Create(int maxCharCount = 64, int labelHeight = 32, IFontTexture fontTexture = null)
        {
            if (fontTexture == null)
            {
                fontTexture = FontTexture.Default;
            }                                                              // FontResource.Default; }

            var shaderCodes = new ShaderCode[2];

            shaderCodes[0] = new ShaderCode(ManifestResourceLoader.LoadTextFile(
                                                @"Resources.TextModel.vert"), ShaderType.VertexShader);
            shaderCodes[1] = new ShaderCode(ManifestResourceLoader.LoadTextFile(
                                                @"Resources.TextModel.frag"), ShaderType.FragmentShader);
            var map = new AttributeMap();

            map.Add("position", TextModel.strPosition);
            map.Add("uv", TextModel.strUV);
            var model    = new TextModel(maxCharCount);
            var renderer = new TextRenderer(model, shaderCodes, map);

            renderer.fontTexture = fontTexture;

            return(renderer);
        }
コード例 #42
0
 protected virtual bool HasAqlaIgnore(AttributeMap[] map, RuntimeTypeModel model)
 {
     return(AttributeMap.GetAttributes(map, "AqlaSerializer.NonSerializableMemberAttribute").Any(a => CheckAqlaModelId(a, model)));
 }
コード例 #43
0
 public BuildInRenderer(vec3 lengths, IBufferable model, IShaderProgramProvider shaderProgramProvider,
                        AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderProgramProvider, attributeMap, switches)
 {
     this.ModelSize = lengths;
 }
コード例 #44
0
 private GroundRenderer(IBufferable model, IShaderProgramProvider shaderProgramProvider,
                        AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderProgramProvider, attributeMap, switches)
 {
     this.LineColor = Color.White;
 }
コード例 #45
0
 /// <summary>
 /// renders well pipeline(several cylinders)
 /// </summary>
 /// <param name="model"></param>
 /// <param name="shaderCodes"></param>
 /// <param name="attributeMap"></param>
 /// <param name="switches"></param>
 private WellRenderer(WellModel model, ShaderCode[] shaderCodes,
                      AttributeMap attributeMap, params GLSwitch[] switches)
     : base(model, shaderCodes, attributeMap, switches)
 {
 }
コード例 #46
0
        public MemberHandlerResult TryRead(AttributeMap attribute, MemberState s, MemberInfo member, RuntimeTypeModel model)
        {
            if (s.Input.IsEnumValueMember)
            {
                return(MemberHandlerResult.NotFound);
            }
            var main = s.MainValue;

            try
            {
                MemberLevelSettingsValue level = s.SerializationSettings.GetSettingsCopy(0).Basic;
                level.DefaultsMode = MemberDefaultsMode.Legacy;

                if (main.Tag <= 0)
                {
                    attribute.TryGetNotDefault("Tag", ref main.Tag);
                }
                if (string.IsNullOrEmpty(main.Name))
                {
                    attribute.TryGetNotEmpty("Name", ref main.Name);
                }
                if (!main.IsRequiredInSchema)
                {
                    attribute.TryGetNotDefault("IsRequired", ref main.IsRequiredInSchema);
                }

                var type = Helpers.GetMemberType(member);

                BinaryDataFormat dataFormat = 0;
                attribute.TryGetNotDefault("DataFormat", ref dataFormat);
                level.ContentBinaryFormatHint = dataFormat;

                bool isPacked = false;
                attribute.TryGetNotDefault("IsPacked", ref isPacked);
                level.Collection.Format = isPacked
                    ? CollectionFormat.Protobuf
                    : (model.ProtoCompatibility.SuppressCollectionEnhancedFormat
                        ? CollectionFormat.ProtobufNotPacked
                        : CollectionFormat.NotSpecified
                       );

                bool overwriteList = false;
                attribute.TryGetNotDefault("OverwriteList", ref overwriteList);
                level.Collection.Append = !overwriteList;

                if (!level.WriteAsDynamicType.GetValueOrDefault())
                {
                    attribute.TryGetNotDefault("DynamicType", ref level.WriteAsDynamicType);
                }
                bool dynamicType = level.WriteAsDynamicType.GetValueOrDefault();

                bool asRefHasValue  = false;
                bool notAsReference = false;
#if !FEAT_IKVM
                // IKVM can't access AsReferenceHasValue, but conveniently, AsReference will only be returned if set via ctor or property
                attribute.TryGetNotDefault("AsReferenceHasValue", ref asRefHasValue, publicOnly: false);
                if (asRefHasValue)
#endif
                {
                    bool value = false;
                    asRefHasValue = attribute.TryGetNotDefault("AsReference", ref value);
                    if (asRefHasValue) // if AsReference = true - use defaults
                    {
                        notAsReference = !value;
                    }
                }

                if (!asRefHasValue)
                {
                    if (level.Format == ValueFormat.NotSpecified)
                    {
                        SetLegacyFormat(ref level, member, model);
                    }
                }
                else
                {
                    level.Format = notAsReference ? ValueSerializerBuilder.GetDefaultLegacyFormat(type, model) : ValueFormat.Reference;
                }

                s.TagIsPinned = main.Tag > 0;

                var dl = s.SerializationSettings.DefaultLevel.GetValueOrDefault(new ValueSerializationSettings.LevelValue(level.MakeDefaultNestedLevelForLegacyMember()));

                if (isPacked)
                {
                    dl.Basic.Format = ValueFormat.Compact;
                }

                if (dynamicType)
                {
                    // apply dynamic type to items
                    Type itemType    = null;
                    Type defaultType = null;
                    MetaType.ResolveListTypes(model, Helpers.GetMemberType(s.Member), ref itemType, ref defaultType);
                    if (itemType != null)
                    {
                        dl.Basic.WriteAsDynamicType = true;
                        dl.Basic.Format             = ValueFormat.Reference;

                        if (level.Format == ValueFormat.Compact || level.Format == ValueFormat.MinimalEnhancement)
                        {
                            level.WriteAsDynamicType = false;
                        }
                    }
                }

                s.SerializationSettings.DefaultLevel = dl;
                s.SerializationSettings.SetSettings(level, 0);

                return(s.TagIsPinned ? MemberHandlerResult.Done : MemberHandlerResult.Partial); // note minAcceptFieldNumber only applies to non-proto
            }
            finally
            {
                s.MainValue = main;
            }
        }
コード例 #47
0
 private LinesRenderer(IBufferable model, IShaderProgramProvider shaderProgramProvider,
                       AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderProgramProvider, attributeMap, switches)
 {
 }
コード例 #48
0
 protected virtual bool HasProtobufNetIgnore(AttributeMap[] map, RuntimeTypeModel model)
 {
     return(AttributeMap.GetAttribute(map, "ProtoBuf.ProtoIgnoreAttribute") != null);
 }
コード例 #49
0
ファイル: ClrMethodDefinition.cs プロジェクト: anthrax3/Flame
        private void AnalyzeSignature()
        {
            var assembly = ParentType.Assembly;

            // Analyze the return parameter.
            returnParam = WrapReturnParameter(
                Definition.MethodReturnType,
                assembly,
                this);

            // Analyze the parameter list.
            formalParams = Definition.Parameters
                           .Select(param => WrapParameter(param, assembly, this))
                           .ToArray();

            // Analyze the method definition's attributes.
            var attrBuilder = new AttributeMapBuilder();

            if (Definition.IsAbstract || Definition.DeclaringType.IsInterface)
            {
                attrBuilder.Add(FlagAttribute.Abstract);
                attrBuilder.Add(FlagAttribute.Virtual);
            }
            else if (Definition.IsVirtual)
            {
                attrBuilder.Add(FlagAttribute.Virtual);
            }

            if (Definition.IsPInvokeImpl)
            {
                if (Definition.HasPInvokeInfo)
                {
                    attrBuilder.Add(new ExternAttribute(Definition.PInvokeInfo.EntryPoint));
                }
                else
                {
                    attrBuilder.Add(new ExternAttribute());
                }
            }
            else if (Definition.IsInternalCall)
            {
                attrBuilder.Add(FlagAttribute.InternalCall);
            }

            // The default 'object' constructor is a nop. Taking that
            // into account can significantly improve constructor inlining
            // results.
            var declaringType = Definition.DeclaringType;

            if (declaringType.Namespace == "System" &&
                declaringType.Name == "Object" &&
                Definition.IsConstructor &&
                Definition.Parameters.Count == 0)
            {
                attrBuilder.Add(new ExceptionSpecificationAttribute(ExceptionSpecification.NoThrow));
                attrBuilder.Add(new MemorySpecificationAttribute(MemorySpecification.Nothing));
            }

            // Analyze access modifier.
            attrBuilder.Add(AccessModifierAttribute.Create(AnalyzeAccessModifier()));
            // TODO: analyze more attributes.
            attributeMap = new AttributeMap(attrBuilder);
        }
コード例 #50
0
        public IActionResult EditEntityMap(EditEntityMapModel model)
        {
            if (ModelState.IsValid)
            {
                //原单据头
                var headEntityMap = _entityMapFinder.FindById(model.EntityMapId.Value);
                //原单据体
                var childEntityMap = _entityMapFinder.FindByParentId(headEntityMap.EntityMapId);
                //单据头
                if (model.HeadAttributeMap.NotEmpty())
                {
                    headEntityMap.MapType = model.MapType;
                    var headAttributeMap = new List <AttributeMap>();
                    foreach (var item in model.HeadAttributeMap)
                    {
                        if (!item.SourceAttributeId.Equals(Guid.Empty))
                        {
                            var attrMapTable = new AttributeMap
                            {
                                AttributeMapId    = Guid.NewGuid(),
                                CanChange         = item.CanChange,
                                EntityMapId       = headEntityMap.EntityMapId,
                                TargetAttributeId = item.TargetAttributeId,
                                SourceAttributeId = item.SourceAttributeId
                            };
                            headAttributeMap.Add(attrMapTable);
                        }
                    }
                    if (headAttributeMap.IsEmpty())
                    {
                        return(JError(T["entitymap_emptyheadattributemap"]));
                    }
                    //删除原有的
                    _entityMapDeleter.DeleteById(headEntityMap.EntityMapId);
                    _entityMapCreater.Create(headEntityMap);
                    _attributeMapCreater.CreateMany(headAttributeMap);
                    //单据体
                    if (model.ChildAttributeMap.NotEmpty() && !model.ChildSourceEntityId.Equals(Guid.Empty) && !model.ChildTargetEntityId.Equals(Guid.Empty))
                    {
                        childEntityMap                   = childEntityMap ?? new EntityMap();
                        childEntityMap.EntityMapId       = childEntityMap != null ? childEntityMap.EntityMapId : Guid.NewGuid();
                        childEntityMap.ComponentState    = childEntityMap != null ? childEntityMap.ComponentState : 0;
                        childEntityMap.SolutionId        = childEntityMap != null ? childEntityMap.SolutionId : SolutionId.Value;
                        childEntityMap.OrganizationId    = CurrentUser.OrganizationId;
                        childEntityMap.CreatedBy         = CurrentUser.SystemUserId;
                        childEntityMap.CreatedOn         = DateTime.Now;
                        childEntityMap.SourceEntityId    = childEntityMap != null ? childEntityMap.SourceEntityId : model.ChildSourceEntityId;
                        childEntityMap.TargetEntityId    = childEntityMap != null ? childEntityMap.TargetEntityId : model.ChildTargetEntityId;
                        childEntityMap.RelationShipName  = childEntityMap != null ? childEntityMap.RelationShipName : model.ChildRelationShipName;
                        childEntityMap.ParentEntityMapId = headEntityMap.EntityMapId;
                        childEntityMap.StateCode         = childEntityMap != null ? childEntityMap.StateCode : RecordState.Enabled;
                        var childAttributeMap = new List <AttributeMap>();
                        foreach (var item in model.ChildAttributeMap)
                        {
                            if (!item.SourceAttributeId.Equals(Guid.Empty))
                            {
                                var attrMapTable = new AttributeMap
                                {
                                    AttributeMapId    = Guid.NewGuid(),
                                    CanChange         = item.CanChange,
                                    EntityMapId       = childEntityMap.EntityMapId,
                                    TargetAttributeId = item.TargetAttributeId,
                                    SourceAttributeId = item.SourceAttributeId
                                };
                                childAttributeMap.Add(attrMapTable);
                            }
                        }
                        if (childAttributeMap.IsEmpty())
                        {
                            return(JError(T["entitymap_emptychildattributemap"]));
                        }
                        //删除原有的
                        if (childEntityMap != null)
                        {
                            _entityMapDeleter.DeleteById(childEntityMap.EntityMapId);
                        }
                        _entityMapCreater.Create(childEntityMap);
                        _attributeMapCreater.CreateMany(childAttributeMap);
                    }
                }

                return(UpdateSuccess());
            }
            return(UpdateFailure(GetModelErrors()));
        }
コード例 #51
0
        public IActionResult CreateEntityMap(EditEntityMapModel model)
        {
            if (ModelState.IsValid)
            {
                //已存在的单据头映射
                var headEntityMap = _entityMapFinder.Find(model.SourceEntityId, model.EntityId);
                if (headEntityMap != null)
                {
                    return(JError(T["entitymap_duplicated"]));
                }
                //已存在的单据体映射
                if (model.ChildAttributeMap.NotEmpty() && !model.ChildSourceEntityId.Equals(Guid.Empty) && !model.ChildTargetEntityId.Equals(Guid.Empty))
                {
                    var childEntityMap = _entityMapFinder.Find(model.ChildSourceEntityId, model.ChildTargetEntityId);
                    if (childEntityMap != null)
                    {
                        return(JError(T["entitymap_duplicated"]));
                    }
                }
                var id = Guid.NewGuid();
                //单据头
                if (model.HeadAttributeMap.NotEmpty())
                {
                    var entMapTable = new EntityMap
                    {
                        ComponentState   = 0,
                        SolutionId       = SolutionId.Value,
                        OrganizationId   = CurrentUser.OrganizationId,
                        CreatedBy        = CurrentUser.SystemUserId,
                        CreatedOn        = DateTime.Now,
                        EntityMapId      = id,
                        SourceEntityId   = model.SourceEntityId,
                        TargetEntityId   = model.EntityId,
                        RelationShipName = model.RelationShipName,
                        MapType          = model.MapType,
                        StateCode        = RecordState.Enabled
                    };
                    var headAttributeMap = new List <AttributeMap>();
                    foreach (var item in model.HeadAttributeMap)
                    {
                        if (!item.SourceAttributeId.Equals(Guid.Empty))
                        {
                            var attributeMap = new AttributeMap
                            {
                                AttributeMapId    = Guid.NewGuid(),
                                CanChange         = item.CanChange,
                                EntityMapId       = entMapTable.EntityMapId,
                                TargetAttributeId = item.TargetAttributeId,
                                SourceAttributeId = item.SourceAttributeId
                            };
                            if (model.HeadControlAttributeMap.NotEmpty())
                            {
                                var controlAttrMap = model.HeadControlAttributeMap.Find(n => n.SourceAttributeId == item.SourceAttributeId);
                                if (controlAttrMap != null)
                                {
                                    attributeMap.RemainAttributeId = controlAttrMap.RemainAttributeId;
                                    attributeMap.ClosedAttributeId = controlAttrMap.ClosedAttributeId;
                                }
                            }
                            headAttributeMap.Add(attributeMap);
                        }
                    }
                    if (headAttributeMap.IsEmpty())
                    {
                        return(JError(T["entitymap_emptyheadattributemap"]));
                    }
                    _entityMapCreater.Create(entMapTable);
                    _attributeMapCreater.CreateMany(headAttributeMap);
                    //单据体
                    if (model.ChildAttributeMap.NotEmpty() && !model.ChildSourceEntityId.Equals(Guid.Empty) && !model.ChildTargetEntityId.Equals(Guid.Empty))
                    {
                        var childEntityMap = new EntityMap
                        {
                            ComponentState    = 0,
                            SolutionId        = SolutionId.Value,
                            OrganizationId    = CurrentUser.OrganizationId,
                            CreatedBy         = CurrentUser.SystemUserId,
                            CreatedOn         = DateTime.Now,
                            EntityMapId       = Guid.NewGuid(),
                            SourceEntityId    = model.ChildSourceEntityId,
                            TargetEntityId    = model.ChildTargetEntityId,
                            RelationShipName  = model.ChildRelationShipName,
                            ParentEntityMapId = entMapTable.EntityMapId,
                            MapType           = model.MapType,
                            StateCode         = RecordState.Enabled
                        };
                        var childAttributeMap = new List <AttributeMap>();
                        foreach (var item in model.ChildAttributeMap)
                        {
                            if (!item.SourceAttributeId.Equals(Guid.Empty))
                            {
                                var attributeMap = new AttributeMap
                                {
                                    AttributeMapId    = Guid.NewGuid(),
                                    CanChange         = item.CanChange,
                                    EntityMapId       = childEntityMap.EntityMapId,
                                    TargetAttributeId = item.TargetAttributeId,
                                    SourceAttributeId = item.SourceAttributeId
                                };
                                if (model.ChildControlAttributeMap.NotEmpty())
                                {
                                    var controlAttrMap = model.ChildControlAttributeMap.Find(n => n.SourceAttributeId == item.SourceAttributeId);
                                    if (controlAttrMap != null)
                                    {
                                        attributeMap.RemainAttributeId = controlAttrMap.RemainAttributeId;
                                        attributeMap.ClosedAttributeId = controlAttrMap.ClosedAttributeId;
                                    }
                                }
                                childAttributeMap.Add(attributeMap);
                            }
                        }
                        if (childAttributeMap.IsEmpty())
                        {
                            return(JError(T["entitymap_emptychildattributemap"]));
                        }
                        _entityMapCreater.Create(childEntityMap);
                        _attributeMapCreater.CreateMany(childAttributeMap);
                    }
                }

                return(CreateSuccess(new { id = id }));
            }
            return(CreateFailure(GetModelErrors()));
        }
コード例 #52
0
 public PointSpriteRenderer(IBufferable model, ShaderCode[] shaderCodes,
                            AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderCodes, attributeMap, switches)
 {
 }
コード例 #53
0
ファイル: BuildInRenderer.cs プロジェクト: ihaiucom/CSharpGL
 public BuildInRenderer(vec3 lengths, IBufferable model, ShaderCode[] shaderCodes,
                        AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderCodes, attributeMap, switches)
 {
     this.ModelSize = lengths;
 }
コード例 #54
0
ファイル: AttributeMapCreater.cs プロジェクト: zzdxpq007/xms
        public bool Create(AttributeMap entity)
        {
            var flag = _attributeMapRepository.Create(entity);

            return(flag);
        }
コード例 #55
0
 private KleinBottleRenderer(IBufferable model, ShaderCode[] shaderCodes,
                             AttributeMap attributeMap, string positionNameInIBufferable, params GLState[] switches)
     : base(model, shaderCodes, attributeMap, positionNameInIBufferable, switches)
 {
     this.stateList.Add(new LineWidthState(3));
 }
コード例 #56
0
 private EmitNormalLineRenderer(IBufferable model, IShaderProgramProvider shaderProgramProvider,
                                AttributeMap attributeMap, string positionNameInIBufferable, params GLState[] switches)
     : base(model, shaderProgramProvider, attributeMap, positionNameInIBufferable, switches)
 {
 }
コード例 #57
0
 protected override void OnMapResized()
 {
     AttributeMap.Resize(MapSize);
 }
コード例 #58
0
        private void AnalyzeAttributes()
        {
            var attrBuilder = new AttributeMapBuilder();

            // Handle low-hanging fruit first.
            if (!Definition.IsValueType)
            {
                attrBuilder.Add(FlagAttribute.ReferenceType);
            }
            if (Definition.IsAbstract)
            {
                attrBuilder.Add(FlagAttribute.Abstract);
            }
            if (!Definition.IsSealed)
            {
                attrBuilder.Add(FlagAttribute.Virtual);
            }

            // If we're dealing with an integer type, then we want to
            // assign that type an integer spec.
            IntegerSpec iSpec;

            if (Definition.Namespace == "System" &&
                integerSpecMap.TryGetValue(Definition.Name, out iSpec))
            {
                attrBuilder.Add(IntegerSpecAttribute.Create(iSpec));
            }

            // If we are presented an enum type, then we need to look
            // up its 'value__' field, which specifies its enum type.
            if (Definition.IsEnum)
            {
                // The 'value__' field has some very particular properties:
                // it has both the "runtime special name" and "special name"
                // attributes.
                var valueField = Definition.Fields.FirstOrDefault(
                    field =>
                    field.Name == "value__" &&
                    field.IsRuntimeSpecialName &&
                    field.IsSpecialName);

                // Make sure that we didn't encounter a "fake" enum.
                if (valueField != null)
                {
                    // Resolve the enum's element type. This should always be an
                    // integer type.
                    var enumElementType = Assembly.Resolve(valueField.FieldType);
                    var enumIntSpec     = enumElementType.GetIntegerSpecOrNull();

                    if (enumIntSpec != null)
                    {
                        // Mark the enum type itself as an integer type because it
                        // acts like an integer type in essentially every way.
                        attrBuilder.Add(IntegerSpecAttribute.Create(enumIntSpec));
                    }
                }
            }

            // TODO: support more attributes.
            attributeMap = new AttributeMap(attrBuilder);
        }
コード例 #59
0
 private QuadStripColoredRenderer(IBufferable model, ShaderCode[] shaderCodes,
                                  AttributeMap attributeMap, params GLSwitch[] switches)
     : base(model, shaderCodes, attributeMap, switches)
 {
 }
コード例 #60
0
 /// <summary>
 /// Renders a label(a single line of text).
 /// </summary>
 /// <param name="model"></param>
 /// <param name="shaderProgramProvider"></param>
 /// <param name="attributeMap"></param>
 /// <param name="switches"></param>
 private TextRenderer(TextModel model, IShaderProgramProvider shaderProgramProvider,
                      AttributeMap attributeMap, params GLState[] switches)
     : base(model, shaderProgramProvider, attributeMap, switches)
 {
     this.textModel = model;
 }