internal RMaterial(string name) { Name = name; Textures = new RTexture[MAX_MATERIAL_LAYERS]; for (int i = 0; i < Textures.Length; i++) { Textures[i] = RTexture.defaultWhite; } Colors = new RColor[MAX_MATERIAL_COLOR_LAYERS]; Shininess = 1; SpecularPower = 1; Shader = RShader.basicShader; }
internal void Render(ref RShader shader, ref RVertexBuffer vertexBuffer, ref RIndexBuffer indexBuffer, string text, Vector2 location, RColor color, Matrix matrix) { Vector2 pen = location; pen.Y += MeasureString(text).Height; float x = pen.X; List <RVertexData2D> quads = new List <RVertexData2D>(); foreach (char c in text) { if (c == '\r') { continue; } if (c == '\n') { pen.X = x; pen.Y += LineHeight; continue; } if (c == ' ') { pen.X += SpaceWidth; continue; } if (c == '\t') { pen.X += (SpaceWidth * 3); continue; } RFontGlyph glyph = GetGlyphForChar(c); var dest = new Reactor.Math.Rectangle(); dest.X = (int)(pen.X + glyph.Offset.X); dest.Y = (int)pen.Y - ((int)glyph.Offset.Y); dest.Width = glyph.Bounds.Width; dest.Height = glyph.Bounds.Height; vertexBuffer.SetData <RVertexData2D>(AddQuads(dest, glyph.UVBounds)); vertexBuffer.Bind(); vertexBuffer.BindVertexArray(); indexBuffer.Bind(); vertexBuffer.VertexDeclaration.Apply(shader, IntPtr.Zero); GL.DrawElements(PrimitiveType.Triangles, indexBuffer.IndexCount, DrawElementsType.UnsignedShort, IntPtr.Zero); REngine.CheckGLError(); indexBuffer.Unbind(); vertexBuffer.Unbind(); vertexBuffer.UnbindVertexArray(); pen.X += glyph.Advance; } }
internal static void InitShaders() { basicShader = new RShader(); basicShader.Load(RShaderResources.BasicEffectVert, RShaderResources.BasicEffectFrag, null); }