zoukankan      html  css  js  c++  java
  • 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的换源教程

  • 相关阅读:
    [GO] go使用etcd和watch方法进行实时的配置变更
    [GO]go context的deadline方法
    [GO]go使用contextCancel
    [GO]go使用etcd
    js控制复选框checkbox 只能单选
    JQuery.Ajax之错误调试帮助信息
    SQLServer2005创建定时作业任务
    JS/JQuery针对不同类型元素的操作(radio、select、checkbox)
    SQL Server跨库查询
    javax.net.ssl.SSLHandshakeException(Cas导入证书)
  • 原文地址:https://www.cnblogs.com/learn-program/p/15201131.html
Copyright © 2011-2022 走看看