示例#1
0
        public override bool Init(RendererContext rc)
        {
            CoreScene.RCActionInitSceneObject iso = new CoreScene.RCActionInitSceneObject(this, rc);

            if (rc.Application.ManagedThreadId == System.Threading.Thread.CurrentThread.ManagedThreadId)
            {
                ParticleVBO = rc.CreateVertexBuffer(IntPtr.Zero, 40 * (int)ParticleCount, RendererBufferUsage.StreamDraw, "ParticleVBO_" + DateTime.Now.Ticks);
                if (ParticleVBO == null)
                    return false;

                VertexBufferLayoutKind[] vblk = new VertexBufferLayoutKind[4];
                vblk[0] = new VertexBufferLayoutKind();
                vblk[0].AttributeID = 0;
                vblk[0].AttributeSize = 3;
                vblk[0].AttributeType = RendererVertexAttribType.Float;
                vblk[0].Normalized = false;
                vblk[0].Offset = 0;
                vblk[0].Stride = sizeof(float) * 10;

                vblk[1] = new VertexBufferLayoutKind();
                vblk[1].AttributeID = 1;
                vblk[1].AttributeSize = 4;
                vblk[1].AttributeType = RendererVertexAttribType.Float;
                vblk[1].Normalized = false;
                vblk[1].Offset = 12;
                vblk[1].Stride = sizeof(float) * 10;

                vblk[2] = new VertexBufferLayoutKind();
                vblk[2].AttributeID = 2;
                vblk[2].AttributeSize = 2;
                vblk[2].AttributeType = RendererVertexAttribType.Float;
                vblk[2].Normalized = false;
                vblk[2].Offset = 28;
                vblk[2].Stride = sizeof(float) * 10;

                vblk[3] = new VertexBufferLayoutKind();
                vblk[3].AttributeID = 3;
                vblk[3].AttributeSize = 1;
                vblk[3].AttributeType = RendererVertexAttribType.Float;
                vblk[3].Normalized = false;
                vblk[3].Offset = 36;
                vblk[3].Stride = sizeof(float) * 10;

                ParticleVAO = rc.CreateVertexBufferArray(ParticleVBO, vblk, "ParticleVAO_" + DateTime.Now.Ticks);
                if (ParticleVAO == null)
                {
                    rc.DeleteGraphicsResourceAsync(ParticleVBO);
                    return false;
                }

                //Load BasicEffect
                long ticks = DateTime.Now.Ticks;

                ParticleEffect = rc.CreateEffect("ParticleEffect_" + ticks);
                ParticleEffect.VertexProgram = rc.CreateShaderProgramFromFile("ParticleEffect_VertexProgram_" + ticks, ShaderType.VertexShader, "lib/Renderer/Effects/BasicParticleEffect/vertex_shader.vs");
                ParticleEffect.PixelProgram = rc.CreateShaderProgramFromFile("ParticleEffect_PixelProgram_" + ticks, ShaderType.PixelShader, "lib/Renderer/Effects/BasicParticleEffect/pixel_shader.ps");
                ParticleEffect.GeometryProgram = rc.CreateShaderProgramFromFile("ParticleEffect_GeometryProgram" + ticks, ShaderType.GeometryShader, "lib/Renderer/Effects/BasicParticleEffect/geometry_shader.gs");

                BillboardTexture = rc.CreateTexture2D("BillboardTexture_" + ticks, true, "Content/Particles/particle_03.png");
                BillboardTexture.Sampler.MagnificationFilter = MagnificationFilter.InterpolateLinear;
                BillboardTexture.Sampler.MinificationFilter = MinificationFilter.InterpolateLinearAndInterpolateMipmapLinear;
            }
            else
                rc.AddRCActionJob(iso);

            IsInitialized = true;

            return true;
        }
示例#2
0
        internal bool Init(RendererContext rc)
        {
            PrivateRendererContext = rc;

            if (PrivateRendererContext.Application.ManagedThreadId == System.Threading.Thread.CurrentThread.ManagedThreadId)
            {
                InitFromJob(rc);
            }
            else
            {
                rc.AddRCActionJob(new RCActionInitCoreScene(this, rc));
            }

            while (!IsInitialized) System.Threading.Thread.Sleep(1);

            return true;
        }
示例#3
0
        public virtual bool Init(RendererContext rc)
        {
            RCActionCompositorNodeInit init = new RCActionCompositorNodeInit(rc, this);

            //Inits all necessary things
            if (System.Threading.Thread.CurrentThread.ManagedThreadId == PrivateRendererContext.Application.ManagedThreadId)
                init.Action();
            else
                rc.AddRCActionJob(init);

            while (!init.WasCalled)
                System.Threading.Thread.Sleep(1);

            IsInitialized = true;

            return true;
        }