久久久久久久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++).

經(jīng)典的單上下文 OpenGL 應用程序工作正常,但在單個應用程序中的多個 OpenGL 上下文上會產(chǎn)生奇怪的行為:

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

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

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

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

after major changes in my OpenGL based software architecture behavior changed

現(xiàn)在我可以創(chuàng)建第二個渲染上下文,但是在釋放它之后(使用/關閉窗口后),驅動程序無法創(chuàng)建任何下一個渲染上下文.這已經(jīng)在多個應用程序上進行了測試,并且一直表現(xiàn)相同.我想通過讓第二個上下文始終處于活動狀態(tài)來解決這個問題,但它也不起作用(不知何故渲染上下文在英特爾上無效).為清楚起見,第二個 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;
    }
//------------------------------------------------------------------------------

現(xiàn)在是問題:

  1. 我做錯了什么嗎?

引擎功能齊全GL、GLSL、VBO、VAO... 并經(jīng)過多年測試.奇怪的行為僅在 Intel 上出現(xiàn).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?

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

我現(xiàn)在正在使用 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 來創(chuàng)建 OpenGL 上下文和窗口,加上 GLEW(僅適用于 Windows)來設置 OpenGL 核心上下文函數(shù).我也成功使用 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模板網(wǎng)!

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

相關文檔推薦

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 排序功能對列表進行排序)
主站蜘蛛池模板: av在线天堂网 | 国产午夜精品一区二区三区嫩草 | 日韩精品视频免费在线观看 | av免费网站 | 综合久久99 | 黑人精品xxx一区一二区 | 麻豆国产91 | 亚洲一级片 | 天天色天天 | 日韩欧美国产一区二区三区 | 日本免费一级片 | 欧美日视频 | 国产在线视频一区二区 | 91av在线免费观看 | 亚洲一区不卡 | 日本视频在线播放 | 日本a网站 | 日韩成人高清 | 色播av| 一级免费视频 | 黄色免费网| 午夜精品久久久久久久 | 激情五月综合色婷婷一区二区 | 精品伊人久久 | 中文字幕第三页 | 97av视频 | 日韩在线视频免费观看 | av色在线| 可以看毛片的网站 | 一区二区网站 | 天海翼一区二区 | 极品尤物一区二区三区 | 日韩在线不卡 | 一级片aa | 久久国产精品免费视频 | 神马九九 | 久久最新视频 | 欧美日韩中文字幕在线观看 | 中文字幕国产精品 | 又色又爽又黄gif动态图 | 国产成人午夜精品 |