public bool Init(RendererContext rc) { long ticks = DateTime.Now.Ticks; OptionalEffect = rc.CreateEffect("SimpleMaterial_" + ticks); if (OptionalEffect == null) return false; OptionalEffect.BindPipeline(); OptionalEffect.VertexProgram = rc.CreateShaderProgramFromFile("SimpleMaterial_VS_" + ticks, ShaderType.VertexShader, "lib/Renderer/Effects/SimpleMaterial/vertex_shader.vs"); OptionalEffect.PixelProgram = rc.CreateShaderProgramFromFile("SimpleMaterial_PS_" + ticks, ShaderType.PixelShader, "lib/Renderer/Effects/SimpleMaterial/pixel_shader.ps"); DiffuseColor = diffuseColor; SpecularColor = specularColor; OptionalEffect.UnbindPipeline(); return true; }
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; }