久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Intel HD 3000 上正確的 OpenGL 初始化是什么?

What is the proper OpenGL initialisation on Intel HD 3000?(Intel HD 3000 上正確的 OpenGL 初始化是什么?)
本文介紹了Intel HD 3000 上正確的 OpenGL 初始化是什么?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我在 Toshiba 筆記本(OS Win7 x32,lang C++)上使用 Intel graphics HD 3000 有問題.

I have a problem with Intel graphics HD 3000 on Toshiba notebook (OS Win7 x32, lang C++).

經典的單上下文 OpenGL 應用程序工作正常,但在單個應用程序中的多個 OpenGL 上下文上會產生奇怪的行為:

Classical single context OpenGL applications work fine but on multiple OpenGL contexts in single App creates weird behavior:

  1. 在我的舊版本應用中,英特爾驅動程序根本無法創建第二個渲染上下文.

  1. on older versions of my apps the Intel driver cannot create second rendering context at all.

在我的基于 OpenGL 的軟件架構行為發生重大變化后

after major changes in my OpenGL based software architecture behavior changed

現在我可以創建第二個渲染上下文,但是在釋放它之后(使用/關閉窗口后),驅動程序無法創建任何下一個渲染上下文.這已經在多個應用程序上進行了測試,并且一直表現相同.我想通過讓第二個上下文始終處于活動狀態來解決這個問題,但它也不起作用(不知何故渲染上下文在英特爾上無效).為清楚起見,第二個 OpenGL 渲染上下文用于打開/保存對話框(預覽子窗口).

now I am able to create second rendering context but after releasing it (after use / close window) the driver cannot create any next rendering context. This has been tested on more than one app and behaves the same all the time. I wanted to get over this by having the second context at all time active but it does not work too (somehow rendering context is invalidated on Intel). For clarity the second OpenGL rendering context is used for Open/Save dialogs (preview sub-windows).

司機信息:

Intel(R) HD Graphics 3000
OpenGL ver: 3.1.0 - Build 9.17.10.2932

初始化和退出 OpenGL 代碼(來自我的 OpenGL 引擎):

Init and exit OpenGL code (from my OpenGL engine):

//------------------------------------------------------------------------------
int OpenGLscreen::init(void *f,int textures)
    {
    if (_init) exit();
    frm=(formtype*)f;
    hdc = GetDC(frm->Handle);       // get device context
    int i;
    if (!_used)
        {
        int i,_pfid=-1,_zbit=0;
        PIXELFORMATDESCRIPTOR _pfd;
        #define pfd_test i=ChoosePixelFormat(hdc,&pfd); DescribePixelFormat(hdc,i,sizeof(_pfd),&_pfd); if (_zbit<_pfd.cDepthBits) { _zbit=_pfd.cDepthBits; _pfid=i; }
        pfd.cColorBits = 32; pfd.cDepthBits = 32; pfd_test;
        pfd.cColorBits = 24; pfd.cDepthBits = 32; pfd_test;
        pfd.cColorBits = 16; pfd.cDepthBits = 32; pfd_test;
        pfd.cColorBits = 32; pfd.cDepthBits = 24; pfd_test;
        pfd.cColorBits = 24; pfd.cDepthBits = 24; pfd_test;
        pfd.cColorBits = 16; pfd.cDepthBits = 24; pfd_test;
        pfd.cColorBits = 32; pfd.cDepthBits = 16; pfd_test;
        pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd_test;
        pfd.cColorBits = 16; pfd.cDepthBits = 16; pfd_test;
        #undef pfd_test
        pfd.cDepthBits = _zbit; // iba koli warningu
        DescribePixelFormat(hdc,_pfid,sizeof(pfd),&pfd);
        pfid=ChoosePixelFormat(hdc,&pfd);
        SetPixelFormat(hdc,pfid,&pfd);
        DescribePixelFormat(hdc,pfid,sizeof(pfd),&pfd);

        znum=1<<(pfd.cDepthBits-1);
        }

    // create current rendering context
    hrc = wglCreateContext(hdc);

    if(hrc == NULL)
        {
        ShowMessage("Could not initialize OpenGL Rendering context !!!");
        _init=0;
        return 0;
        }
    if(wglMakeCurrent(hdc, hrc) == false)
        {
        ShowMessage("Could not make current OpenGL Rendering context !!!");
        wglDeleteContext(hrc);          // destroy rendering context
        _init=0;
        return 0;
        }
    if (!_used) glewInit();
    _init=1;
    _used=1;
    resize(0,0,128,128);

//  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
//  glFrontFace(GL_CCW);                    // predna strana je proti smeru hod. ruciciek
//  glEnable(GL_CULL_FACE);                 // vynechavaj odvratene steny
//  glEnable(GL_TEXTURE_2D);                // pouzivaj textury, farbu pouzivaj z textury
//  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
//  glEnable(GL_BLEND);                     // priehladnost
//  glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
/*
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_COLOR_MATERIAL);

    GLdouble MaterialAmbient  [] = {0.25, 0.25, 0.25, 1.00};
    GLdouble MaterialDiffuse  [] = {0.25, 0.25, 0.25, 1.00};
    GLdouble MaterialSpecular [] = {0.50, 0.50, 0.50, 1.00};
    GLdouble MaterialShininess[] = {15.0};                  // 0-ufocused, 128 max focus
    glMaterialfv(GL_FRONT, GL_AMBIENT  , MaterialAmbient  );
    glMaterialfv(GL_FRONT, GL_DIFFUSE  , MaterialDiffuse  );
    glMaterialfv(GL_FRONT, GL_SPECULAR , MaterialSpecular );
    glMaterialfv(GL_FRONT, GL_SHININESS, MaterialShininess);
    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

    GLdouble LightPosition [] = {0.00, 0.00, 0.00, 0.0};
    GLdouble LightAmbient  [] = {0.10, 0.10, 0.10, 1.0};
    GLdouble LightDiffuse  [] = {0.20, 0.20, 0.20, 1.0};
    GLdouble LightSpecular [] = {1.00, 1.00, 1.00, 1.0};
    glLightfv(GL_LIGHT0,GL_AMBIENT ,LightAmbient );
    glLightfv(GL_LIGHT0,GL_DIFFUSE ,LightDiffuse );
    glLightfv(GL_LIGHT0,GL_SPECULAR,LightSpecular);
    glLightfv(GL_LIGHT0,GL_POSITION,LightPosition);
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, LightAmbient);
*/
    glEnable(GL_DEPTH_TEST);                // Zbuf
    glShadeModel(GL_SMOOTH);                // gourard shading
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);   // background color
    glDepthFunc(GL_LEQUAL);

    const GLubyte *p; char a;               // get extensions list
    extensions="";
    #define ext_add if ((extensions!="")&&(extensions[extensions.Length()]!=' ')) extensions+=' '; for (i=0;;i++) { a=p[i]; if (!a) break; extensions+=a; }
    p=glGetString(GL_EXTENSIONS); ext_add;
    if (wglGetExtensionsStringARB) p=wglGetExtensionsStringARB(hdc); ext_add;
    if (wglGetExtensionsStringEXT) p=wglGetExtensionsStringEXT(); ext_add;

//  int hnd=FileCreate("glext.txt"); FileWrite(hnd,scr.extensions.c_str(),scr.extensions.Length()); FileClose(hnd);

    OpenGLtexture txr;
    txrs.alloc(textures);           // allocate textures name space
    font_init(txr);
    font=txrs.add(txr);
    s3dl=txrs.add(txr); txrs.sizes[s3dl]._mode=GL_MODULATE;
    s3dr=txrs.add(txr); txrs.sizes[s3dr]._mode=GL_MODULATE;
    return 1;
    }
//------------------------------------------------------------------------------
void OpenGLscreen::exit()
    {
    if (!_init) return;
    wglMakeCurrent(hdc,hrc);        // use this context if multiple OpenGLs are used
    txrs.free();
    wglMakeCurrent(NULL, NULL);     // release current rendering context
    wglDeleteContext(hrc);          // destroy rendering context
    hrc=NULL;
    _init=0;
    }
//------------------------------------------------------------------------------

現在是問題:

  1. 我做錯了什么嗎?

引擎功能齊全GL、GLSL、VBO、VAO... 并經過多年測試.奇怪的行為僅在 Intel 上出現.nVidia 的顯卡可以正常工作,ATI/AMD 幾乎可以正常工作(存在一些問題,但它們是與 ATI 始終相關的錯誤驅動程序,尤其是對于VBO 與索引其他一切正常)

Engine is fully functional GL,GLSL,VBO,VAO,... and tested for years. Weird behavior is present only on Intel. Cards from nVidia works fine and ATI/AMD works almost fine (there are some issues but they are buggy drivers related as always for ATI especially for VBO with indices everything else works fine)

是否有更好的方法來初始化/退出 OpenGL?

如何在不同的渲染上下文之間正確切換?

我現在正在使用 wglMakeCurrent(hdc,hrc),但可能是我遺漏了什么,或者英特爾有一些解決方法.

I am using wglMakeCurrent(hdc,hrc) for now but may be I am missing something or there is some workaround on Intel for this.

推薦答案

你對 WGL 的使用在我看來是正確的(包括你對 wglMakeCurrent 的使用),但我有一段時間沒有使用它,所以我的記憶可能有模糊(回答 Q1 和 Q3).

Your use of WGL looks correct to me (including your use of wglMakeCurrent), but I haven't used it in a while, so my memory might be foggy (to answer Q1 and Q3).

但是,有一種更好的初始化 OpenGL 的方法:使用加載程序庫,詳見此處.正如維基所說,強烈建議使用加載程序庫,而不是嘗試自己做.

However, there is a better way to initialize OpenGL: use a loader library, as detailed here. As the wiki says, it's highly recommended to use a loader library rather than attempting to do it yourself.

我喜歡使用 SFML 來創建 OpenGL 上下文和窗口,加上 GLEW(僅適用于 Windows)來設置 OpenGL 核心上下文函數.我也成功使用 glfw,這對加載 OpenGL 3.2+ 很有用

I like to use SFML to create the OpenGL context and window, plus GLEW (only necessary for Windows) to set up the OpenGL core context functions. I've also had success with glfw, which is good for loading OpenGL 3.2+

這篇關于Intel HD 3000 上正確的 OpenGL 初始化是什么?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

What is the fastest way to transpose a matrix in C++?(在 C++ 中轉置矩陣的最快方法是什么?)
Sorting zipped (locked) containers in C++ using boost or the STL(使用 boost 或 STL 在 C++ 中對壓縮(鎖定)容器進行排序)
Rotating a point about another point (2D)(圍繞另一個點旋轉一個點 (2D))
Image Processing: Algorithm Improvement for #39;Coca-Cola Can#39; Recognition(圖像處理:Coca-Cola Can 識別的算法改進)
How do I construct an ISO 8601 datetime in C++?(如何在 C++ 中構建 ISO 8601 日期時間?)
Sort list using STL sort function(使用 STL 排序功能對列表進行排序)
主站蜘蛛池模板: 99热播放| 国产一区二区 | 一级黄色片在线看 | 成年人视频免费在线观看 | 色综合天天综合网国产成人网 | 亚洲成人精| 日韩欧美精品 | 国产精品久久久一区二区三区 | 污视频在线免费观看 | 亚洲导航深夜福利涩涩屋 | 色综合天天综合网国产成人网 | 91中文字幕在线观看 | 欧美爱爱视频网站 | 国产精品1区 | 久久i | 伊人性伊人情综合网 | 国产精品99久久久久久宅男 | 亚洲精品电影在线观看 | 免费看黄色小视频 | 日本三级日产三级国产三级 | av免费网站在线 | 国久久| 91av在线影院| 免费观看一级特黄欧美大片 | 国产精品久久久久无码av | 成人av一区 | 精品国产欧美一区二区三区成人 | 一级片aaa | 精品欧美一区二区三区精品久久 | 不卡在线视频 | 91色在线视频 | 中文字幕一区二区三区在线乱码 | 久久久综合网 | 黄色一级大片在线免费看产 | 伊人色综合久久天天五月婷 | 成人在线观看亚洲 | 毛片免费看| 亚洲毛片 | 成人黄色三级毛片 | 天天射天天干 | 亚洲国产精品久久久久秋霞不卡 |