• Nim使用OpenGL


    这里说明了Nim如何使用OpenGL

    Nimble换源

    因为我们要下载SDL2OpenGL的支持,所以可以考虑将Nimble换成国内源。方法如下:
    首先到Nimble官网clone他的代码下来。
    然后进入到src/nimblepkg/download.nim文件中,将

    if modUrl.contains("github.com") and modUrl.endswith("/"):
      modUrl = modUrl[0 .. ^2]
    

    换成

    if modUrl.contains("github.com"):
      modUrl = modUrl.replace("github.com","github.com.cnpmjs.org")
      if modUrl.endswith("/"):
       modUrl = modUrl[0 .. ^2]
    

    其实就是将github换成国内的镜像网站github.com.cnpmjs.org,顺便说一句,平时github登不上去了也可以上这个网站访问。
    然后重新编译nimble,到nimble的根目录下执行

    nimble build
    

    就会生成nimble可执行文件了。然后将文件放到/usr/local/bin/下就可以执行了。
    我的习惯是重命名为nimble-zh然后再放。
    以后每次下载包使用这个nimble就会很快了。

    使用OpenGL

    我是使用SDL2搭建窗口,你也可以使用你熟悉的库。

    首先安装SDL2OpenGL的包,OpenGL包的官网在这里

    nimble install sdl2 opengl
    

    然后OpenGL的API是什么,在Nim中就怎么用就行了,主要注意loadExtensions()这个函数的调用,这里给个清屏的例子:

    import sdl2
    import opengl
    
    if isMainModule:
        sdl2.init(INIT_EVERYTHING)
        defer: sdl2.quit()
    
        # 设置OpenGL版本
        discard glSetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3)
        discard glSetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3)
        discard glSetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE)
    
        let window = sdl2.createWindow("test SDL2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 400, 300, SDL_WINDOW_SHOWN or SDL_WINDOW_OPENGL)
        defer: sdl2.destroyWindow(window)
    
        var glContext = glCreateContext(window)
        defer: glDeleteContext(glContext)
    
        # 根据OpenGL包的文档,这一句必须加在创建窗口后,加载拓展前
        loadExtensions()
    
        if glContext.isNil:
            raise newException(Exception, "gl context create failed")
    
        var shouldClose = false
        var event = sdl2.defaultEvent;
        while not shouldClose:
            while sdl2.pollEvent(event):
                case event.kind:
                of sdl2.QuitEvent:
                    shouldClose = true
                else:
                    discard
    
            # 清屏
            glClearColor(0.1, 0.1, 0.1, 1)
            glClear(GL_COLOR_BUFFER_BIT)
    
            # 绘制屏幕
            glSwapWindow window
            delay 30
    

    参考教程

    SCIFX的换源教程

  • 相关阅读:
    在DOS的常用命令
    HTML中USEMAP的用法
    asp.net2.0角色管理,详细步骤
    利用ASP.NET动态生成HTML文件
    PetShop 4.0 详解之五(PetShop之业务逻辑层设计)
    使用成员资格和用户登录创建网站 (Visual Studio)
    Windows 找不到文件'(null)'.请确定文件名是否正确后,再试一下.要搜索文件,请单击[开始]按钮,然后单击"搜索"
    在ashx文件中读写session
    asp.net图片滚动+JAVASCRIPT(向右)
    动态编辑程序配置文件
  • 原文地址:https://www.cnblogs.com/learn-program/p/15201131.html
Copyright © 2020-2023  润新知