• opengl多线程的问题


      准备给游戏加入一个Loading画面,采用多线程,前面很顺利,但是就是载入后精灵无法正常显示,看不见纹理,开始以为是使用DevIL库出问题,单步调试发现DevIL载入图片正常,而opengl的glGenTextures出错了,返回的索引总是0。

    后来google在gamedev上找到答案,原来opengl不是线程安全的(不知道正确不?),找到了关键方向:wglCreateContext.

    后来在msdn上找到API解释,以及代码实例:

    HDC    hdc; 
    HGLRC  hglrc; 
     
    // create a rendering context  
    hglrc = wglCreateContext (hdc); 
     
    // make it the calling thread's current rendering context 
    wglMakeCurrent (hdc, hglrc);
     
    // call OpenGL APIs as desired ... 
     
    // when the rendering context is no longer needed ...   
     
    // make the rendering context not current  
    wglMakeCurrent (NULL, NULL) ; 
     
    // delete the rendering context  
    wglDeleteContext (hglrc);

    只要hdc一样,创建的context都会渲染到相同的设备上面

    但是实验很久,都没成功,最后发现是少了一个函数:wglShareLists(HGLRC  hglrc1, HGLRC  hglrc2)

    注:hglrc1分享hglrc2的资源

    // 创建多线程
    // 获取当前hdc
    HDC hDC = GetDC(hWnd);
    // 创建渲染context
    HGLRC hrc1 = wglCreateContext(hDC);
    // 分享资源
    wglShareLists(wglGetCurrentContext(), hrc1);
    ...
    ...
    // 载入资源的时候
    wglMakeCurrent(hDC,  hrc1);
    ...
    ...
    // 使用后
    wglMakeCurrent(NULL,  NULL);
    wglDeleteContext(hrc1);
    

  • 相关阅读:
    开源的Ajax.Net类库
    开放的即时通信协议Jabber
    代码生成工具之MyGeneration
    清华梦的粉碎—写给清华大学的退学申请(牛人 王垠 )
    [.NET网格计算框架] Alchemi
    .net安全类库
    使用Facility:EnterpriseLibrary整合进Castle
    castle project 发布新版本
    10招步骤保护IIS服务器安全
    应用IBatisNet+Castle进行项目的开发
  • 原文地址:https://www.cnblogs.com/shadow21/p/1937801.html
Copyright © 2020-2023  润新知