internal static void Initialize() { ShaderProgramManager.shaderPrograms = new ShaderProgramManager.ShaderProgramUnit[7]; for (int i = 0; i < ShaderProgramManager.shaderPrograms.Length; i++) { ShaderProgramManager.loadShaderProgramUnit(i); } }
protected internal override void Render() { if (!this.isExistRenderedVertex()) { return; } GraphicsContext graphicsContext = UISystem.GraphicsContext; ShaderProgramManager.ShaderProgramUnit shaderProgramUnit = ShaderProgramManager.GetShaderProgramUnit(base.InternalShaderType); graphicsContext.SetShaderProgram(shaderProgramUnit.ShaderProgram); Texture2D texture = base.GetTexture(); graphicsContext.SetTexture(0, texture); bool flag = false; bool flag2 = false; bool flag3 = false; for (int i = 0; i < this.vertexCount; i++) { UIPrimitiveVertex uIPrimitiveVertex = this.vertices[i]; flag |= uIPrimitiveVertex.NeedUpdatePosition; flag2 |= uIPrimitiveVertex.NeedUpdateColor; flag3 |= uIPrimitiveVertex.NeedUpdateTexcoord; uIPrimitiveVertex.NeedUpdatePosition = false; uIPrimitiveVertex.NeedUpdateColor = false; uIPrimitiveVertex.NeedUpdateTexcoord = false; } if (this.needUpdateVertexAll || flag) { float[] array = new float[this.VertexCount * 3]; int num = 0; for (int j = 0; j < this.VertexCount; j++) { UIPrimitiveVertex uIPrimitiveVertex2 = this.vertices[j]; array[num++] = uIPrimitiveVertex2.X; array[num++] = uIPrimitiveVertex2.Y; array[num++] = uIPrimitiveVertex2.Z; } this.vertexBuffer.SetVertices(0, array, 0, 0, this.VertexCount); } if (this.needUpdateVertexAll || flag) { float[] array2 = new float[this.VertexCount * 4]; int num2 = 0; for (int k = 0; k < this.VertexCount; k++) { UIPrimitiveVertex uIPrimitiveVertex3 = this.vertices[k]; array2[num2++] = uIPrimitiveVertex3.Color.R; array2[num2++] = uIPrimitiveVertex3.Color.G; array2[num2++] = uIPrimitiveVertex3.Color.B; array2[num2++] = uIPrimitiveVertex3.Color.A; } this.vertexBuffer.SetVertices(1, array2, 0, 0, this.VertexCount); } if (texture != null) { if (this.needUpdateVertexAll || flag3) { float[] array3 = new float[this.VertexCount * 2]; int num3 = 0; for (int l = 0; l < this.VertexCount; l++) { UIPrimitiveVertex uIPrimitiveVertex4 = this.vertices[l]; array3[num3++] = uIPrimitiveVertex4.U; array3[num3++] = uIPrimitiveVertex4.V; } this.vertexBuffer.SetVertices(2, array3, 0, 0, this.VertexCount); } } else if ((this.needUpdateVertexAll || flag3) && this.vertexCount > 0) { this.vertices[0].NeedUpdateTexcoord = true; } if (this.needUpdateIndices) { if (this.indexCount > 0) { this.vertexBuffer.SetIndices(this.indices, 0, 0, this.indexCount); } this.needUpdateIndices = false; } this.needUpdateVertexAll = false; graphicsContext.SetVertexBuffer(0, this.vertexBuffer); this.updateLocalToWorld(); Matrix4 matrix; UISystem.viewProjectionMatrix.Multiply(ref this.localToWorld, out matrix); shaderProgramUnit.ShaderProgram.SetUniformValue(shaderProgramUnit.UniformIndexOfModelViewProjection, ref matrix); shaderProgramUnit.ShaderProgram.SetUniformValue(shaderProgramUnit.UniformIndexOfAlpha, this.finalAlpha); using (List <string> .Enumerator enumerator = shaderProgramUnit.OtherUniformNames.GetEnumerator()) { while (enumerator.MoveNext()) { string current = enumerator.Current; if (base.ShaderUniforms.ContainsKey(current)) { shaderProgramUnit.ShaderProgram.SetUniformValue(shaderProgramUnit.Uniforms[current], base.ShaderUniforms[current]); } } } int num4 = (this.indexCount > 0) ? this.indexCount : this.VertexCount; graphicsContext.DrawArrays(this.DrawMode, 0, num4); }
protected internal override void Render() { if (!this.isExistRenderedUnit()) { return; } // if (__USE_SampleDraw) // { // Sample.SampleDraw.DrawText("UISprite test", 0xffffffff, 0, 100); //FIXME: // } GraphicsContext graphicsContext = UISystem.GraphicsContext; ShaderProgramManager.ShaderProgramUnit shaderProgramUnit = ShaderProgramManager.GetShaderProgramUnit(base.InternalShaderType); graphicsContext.SetShaderProgram(shaderProgramUnit.ShaderProgram); Texture2D texture = base.GetTexture(); if (__USE_SampleDraw) { texture = Sample.SampleDraw.__DrawText("1234 test", 0xffffffff, 0, 0, new Matrix4(), true); } graphicsContext.SetTexture(0, texture); bool flag = false; bool flag2 = false; bool flag3 = false; for (int i = 0; i < this.unitCount; i++) { UISpriteUnit uISpriteUnit = this.units[i]; flag |= uISpriteUnit.NeedUpdatePosition; flag2 |= uISpriteUnit.NeedUpdateColor; flag3 |= uISpriteUnit.NeedUpdateTexcoord; uISpriteUnit.NeedUpdatePosition = false; uISpriteUnit.NeedUpdateColor = false; uISpriteUnit.NeedUpdateTexcoord = false; } if (this.needUpdateVertexAll | flag) { float[] array = new float[12 * this.UnitCount]; int num = 0; for (int j = 0; j < this.unitCount; j++) { UISpriteUnit unit = this.GetUnit(j); array[num++] = unit.X; array[num++] = unit.Y; array[num++] = unit.Z; array[num++] = unit.X; array[num++] = unit.Y + unit.Height; array[num++] = unit.Z; array[num++] = unit.X + unit.Width; array[num++] = unit.Y; array[num++] = unit.Z; array[num++] = unit.X + unit.Width; array[num++] = unit.Y + unit.Height; array[num++] = unit.Z; } this.vertexBuffer.SetVertices(0, array, 0, 0, 4 * this.UnitCount); //len==??? //>attrib['a_Position'].location == 0 } if (this.needUpdateVertexAll | flag2) { UIColor[] array2 = new UIColor[4 * this.UnitCount]; int num2 = 0; for (int k = 0; k < this.unitCount; k++) { UISpriteUnit uISpriteUnit2 = this.units[k]; array2[num2++] = uISpriteUnit2.Color; array2[num2++] = uISpriteUnit2.Color; array2[num2++] = uISpriteUnit2.Color; array2[num2++] = uISpriteUnit2.Color; } this.vertexBuffer.SetVertices(1, array2, 0, 0, 4 * this.UnitCount); //len==4 //>attrib['a_Color'].location == 1 } if (texture != null) { if (this.needUpdateVertexAll | flag3) { float[] array3 = new float[8 * this.UnitCount]; int num3 = 0; for (int l = 0; l < this.unitCount; l++) { UISpriteUnit uISpriteUnit3 = this.units[l]; array3[num3++] = uISpriteUnit3.U1; array3[num3++] = uISpriteUnit3.V1; array3[num3++] = uISpriteUnit3.U1; array3[num3++] = uISpriteUnit3.V2; array3[num3++] = uISpriteUnit3.U2; array3[num3++] = uISpriteUnit3.V1; array3[num3++] = uISpriteUnit3.U2; array3[num3++] = uISpriteUnit3.V2; } this.vertexBuffer.SetVertices(2, array3, 0, 0, 4 * this.UnitCount); } } else if ((this.needUpdateVertexAll || flag3) && this.unitCount > 0) { this.units[0].NeedUpdateTexcoord = true; } if (this.needUpdateVertexAll) { ushort[] array4 = new ushort[this.UnitCount * 6 - 2]; ushort num4 = 0; int num5 = 0; while (true) { ushort[] arg_3E8_0 = array4; int expr_3DB = num5++; ushort expr_3E2 = num4; num4 = (ushort)(expr_3E2 + 1); arg_3E8_0[expr_3DB] = expr_3E2; ushort[] arg_3FA_0 = array4; int expr_3ED = num5++; ushort expr_3F4 = num4; num4 = (ushort)(expr_3F4 + 1); arg_3FA_0[expr_3ED] = expr_3F4; ushort[] arg_40C_0 = array4; int expr_3FF = num5++; ushort expr_406 = num4; num4 = (ushort)(expr_406 + 1); arg_40C_0[expr_3FF] = expr_406; array4[num5++] = num4; if (num5 >= array4.Length) { break; } ushort[] arg_432_0 = array4; int expr_425 = num5++; ushort expr_42C = num4; num4 = (ushort)(expr_42C + 1); arg_432_0[expr_425] = expr_42C; array4[num5++] = num4; } this.vertexBuffer.SetIndices(array4, 0, 0, array4.Length); } this.needUpdateVertexAll = false; graphicsContext.SetVertexBuffer(0, this.vertexBuffer); this.updateLocalToWorld(); Matrix4 matrix; UISystem.viewProjectionMatrix.Multiply(ref this.localToWorld, out matrix); shaderProgramUnit.ShaderProgram.SetUniformValue(shaderProgramUnit.UniformIndexOfModelViewProjection, ref matrix); shaderProgramUnit.ShaderProgram.SetUniformValue(shaderProgramUnit.UniformIndexOfAlpha, this.finalAlpha); // Debug.WriteLine(">>>>>>><<<<<<<<<>>>>>>> base.ShaderUniforms.Count : " + base.ShaderUniforms.Count); using (List <string> .Enumerator enumerator = shaderProgramUnit.OtherUniformNames.GetEnumerator()) { while (enumerator.MoveNext()) { string current = enumerator.Current; if (base.ShaderUniforms.ContainsKey(current)) { shaderProgramUnit.ShaderProgram.SetUniformValue(shaderProgramUnit.Uniforms[current], base.ShaderUniforms[current]); } } } // if (false) // { // graphicsContext.Enable(EnableMode.Blend); // graphicsContext.SetBlendFunc(BlendFuncMode.Add, BlendFuncFactor.SrcAlpha, BlendFuncFactor.OneMinusSrcAlpha); // } graphicsContext.DrawArrays((DrawMode)4, 0, this.UnitCount * 6 - 2); // Debug.WriteLine(">>>>>>>>>>>>>>" + (this.UnitCount * 6 - 2)); // if (__USE_SampleDraw) // { // Sample.SampleDraw.__DrawText("UISprite test", 0xffffffff, 0, 0, matrix, false); //FIXME: // } }
public static Dictionary <string, int> GetUniforms(InternalShaderType type) { return(ShaderProgramManager.GetShaderProgramUnit(type).Uniforms); }
public static ShaderProgram GetShaderProgram(InternalShaderType type) { return(ShaderProgramManager.GetShaderProgramUnit(type).ShaderProgram); }