OpenGL In C# 03 在OpenGL中使用WPF绘制的字体

    由于FBO或者是DIB方式进行OpenGL绘制性能实在不佳,所以以后的绘制都将采用Native模式。

    我把一些常用的Win32函数和OpenGL函数以及常量抄了一遍,做了一个TOpenGL的类库,以后需要用的地方就引用一下就好了,这样就方便多了。

    这次增加了一个类,能使用WPF的绘制方法把字符串绘制到内存,再加载到纹理,最后通过OpenGL进行显示,完美支持中文,速度也挺快的。

    使用WPF需要添加3个引用: WindowBase、PresentationCore 和 PresentationFrameWork。

    使用的主要类有DrawingVisual  用于在屏幕上呈现向量图形

                             DrawingContext DC的WPF版本

                             FormattedText  用来获取格式化的字符串

                             RenderTargetBitmap  用来将字符串绘制到内存中

    下面这段代码实现了从OpenGL申请一个纹理号,使用WPF对象将字符串绘制到内存,并将字符串设置为纹理的过程,然后就可以使用这个纹理的纹理号进行显示了。

            OpenGL.glGenTextures(1, texture);
            DrawingVisual drawingVisual = new DrawingVisual();
            DrawingContext drawingContext = drawingVisual.RenderOpen();

            // Draw a formatted text string into the DrawingContext.
            byte[] ch = BitConverter.GetBytes(UnCode);
            string s = ASCIIEncoding.Unicode.GetString(ch);
            FormattedText formtext = new FormattedText(s, CultureInfo.GetCultureInfo("zh-CHS"), System.Windows.FlowDirection.LeftToRight,
                new Typeface(FontName), 24, Brushes.White);

            drawingContext.DrawText(formtext, new System.Windows.Point(0, 0));
            // Persist the drawing content.
            drawingContext.Close();
            RenderTargetBitmap rtb = new RenderTargetBitmap(W, H, 96, 96, PixelFormats.Pbgra32);
            rtb.Render(drawingVisual);
            data = new byte[4 * W * H];
            rtb.CopyPixels(data, 4 * W, 0);
            OpenGL.glBindTexture(OpenGL.GL_TEXTURE_2D, texture[0]);
            OpenGL.glTexImage2D(OpenGL.GL_TEXTURE_2D, 0, (int)OpenGL.GL_RGBA, W, H, 0, OpenGL.GL_RGBA, OpenGL.GL_UNSIGNED_BYTE, data);
            OpenGL.glTexParameterf(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR);
            OpenGL.glTexParameterf(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR);


    经过我的测试这种绘制方式的速度是200,000字/秒,如果一个界面需要显示2000字的话只需10毫秒即可完成绘制,效率还算不错的。

    如果朋友们有什么问题可以留言与我讨论,呵呵。

    工程下载地址:http://download.csdn.net/detail/tianyu2202/4361599

    原创内容,欢迎转载,转载请注明出处:http://blog.csdn.net/tianyu2202/

   

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值