1

コンピューターに VBO を実装しようとしていて、セグメンテーション エラーが発生しました。

Unhandled exception at 0x00000000 in attocube.exe: 0xC0000005: Access violation

エラーは、私が呼び出した行にありglBindBuffer(GL_ARRAY_BUFFER, ID);ますvoid init()。次の質問のコードを使用しました: VBO を機能させる方法

#include <windows.h>
#include <iostream>
#include <GL/glew.h>
#include <GL/freeglut.h>

#pragma comment(lib,"glew32.lib")

GLuint ID;

void init(){
    glewInit();
    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
    glShadeModel(GL_FLAT);
    glEnableClientState(GL_VERTEX_ARRAY);
    float data[][2] = {{50,50},{100,50},{75,100}};
    glGenBuffers(1,&ID);
    glBindBuffer(GL_ARRAY_BUFFER, ID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
}

void reshape(int w, int h){
    glViewport(0,0, (GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0f, (GLdouble) w, 0.0f, (GLdouble) h);
}

void display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0f,0.0f,0.0f);
    glBindBuffer(GL_ARRAY_BUFFER, ID);
    glVertexPointer(2, GL_FLOAT, 2*sizeof(float), 0);
    glDrawArrays(GL_TRIANGLES,0,3);
    glFlush();  
}

int main(int argc, char **argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(300,300);
    glutCreateWindow(argv[0]);
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMainLoop();
    return 0;
}

私の構成は次のとおりです: Windows 7 / Geforce GTX 570 / glew 1.9.0

4

6 に答える 6

2

あなたのコードには、必要な OpenGL バージョン (または、拡張機能が存在する場合は拡張機能を使用した場合) の可用性に関するチェックがありません。要求された機能が実際に存在するかどうかを常に確認する必要があります。

http://glew.sourceforge.net/basic.htmlの 2 番目の段落を参照してください。

現在、頂点バッファ オブジェクトは非常に広く普及している機能であり、利用できない可能性はほとんどありません。しかし、クラッシュはこれがまさに問題であることを示しています。そのため、適切なドライバーが正しくインストールされていることを確認してください。

于 2012-10-04T22:14:02.983 に答える
1

リモートデスクトップ接続を使用してワークステーションで作業しています。マシン上でコードを直接実行しようとしましたが、機能します。VBOはRDCでは機能しません。私は本当に愚かだと感じています。助けてくれてありがとう。

于 2012-10-04T22:35:21.457 に答える
0

GL < 4.0 を使用して同じ問題が発生しました。glewExperimental = GL_TRUE;直前に設定するとglewInit();解決しました。

于 2012-10-05T10:33:29.910 に答える
0

とにかく、リモート デスクトップの問題は別として、GLEW を使用して VBO をチェックするコードは次のとおりです。

bool hasVBO = GLEW_ARB_vertex_buffer_object == TRUE;
bool hasVAO = GLEW_ARB_vertex_array_object == TRUE;
于 2013-05-31T12:26:58.510 に答える
0

OpenGL 4.3 を実行している 2 台の Win7 PC 間でリモート デスクトップを動作させることができました。

バッチ ファイルに次のように入力します。

tscon 1 /dest:console /PASSWORD:yourPassword
cd C:\your\Exe\Folder
start yourProgram.exe
C:\Windows\System32\rundll32.exe user32.dll,LockWorkStation

管理者として実行します。セッションを閉じ、コンソールを開き (PC がログインされ、誰でも立ち上がって使用できるようになります)、プログラムを開始し、画面をロックします。

次に、リモート デスクトップを使用して再接続します。サーバーのグラフィックハードウェアアクセラレーションを使用して、プログラムが実行されている必要があります。

これは、リモート セッションが ID 1 であることを前提としています。確認するには、コマンド ウィンドウの "query session" を実行し、">" で始まる行を確認します。

于 2015-09-28T22:49:37.523 に答える