0

GLuintテクスチャを表示する関数を作ろうとしています。これは私がこれまでに作ったものです。白いクワッドを出力するはずですが、クラッシュするだけです:

position2 Q_pos[4]={{0,0},
                    {1,0},
                    {1,1},
                    {0,1}};
void blit_texture(GLuint texture,Point mid_pt,Point Scale=Point(1,1,1),
    Point rotate_angle=Point(0,0),Point focus_point=Point(0,0))
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glPushMatrix();
    GLtranslate2v(mid_pt);
    GLrotate3f(rotate_angle);
    GLtranslate2v(focus_point);
    glScalef(Scale.x,Scale.y,1);
        glColor4f(1,1,1,1);
        glVertexPointer( 2, GL_FLOAT, 0, Q_pos );
        glDrawArrays( GL_QUADS, 0, 4 );

    glPopMatrix();
    glDisableClientState(GL_VERTEX_ARRAY);
}

ポイント、簡単な回転などの定義もいくつか作成しました...:

#define GLrotate3f(pt) glRotatef(pt.x,1,0,0),glRotatef(pt.y,0,1,0),glRotatef(pt.z,0,0,1)
#define GLtranslate2v(pt) glTranslatef(pt.x,pt.y,0);
#define GLscale2v(pt) glScalef(pt.x,pt.y,0);
class position3
{
    public:
    float x,y,z;
    position3(float X=0,float Y=0,float Z=0){
    x=X,y=Y,z=Z;}
    void operator=(float num){x=num,y=num,z=num;}
    void operator=(position3 pt){
                             x=pt.x,y=pt.y,z=pt.z;
                                }
    bool operator>(float Min)
    {
        if (x<Min || y<Min || z<Min) return 0;
        return 1;
    }
    bool operator<(float Max)
    {
        if (x>Max || y>Max || z>Max) return 0;
        return 1;
    }
};
class position2
{
    public:
    float x,y;
    position2(float X=0,float Y=0)
    {
    x=X,y=Y;
    }
    void operator=(float num){x=num,y=num;}
    void operator=(position2 pt){
                             x=pt.x,y=pt.y;
                                }
    bool operator>(float Min)
    {
        if (x<Min || y<Min) return 0;
        return 1;
    }
    bool operator<(float Max)
    {
        if (x>Max || y>Max) return 0;
        return 1;
    }
};
class color3f
{
    public:
    float r,g,b;
    color3f(float R=0,float G=0,float B=0){
    r=R,g=G,b=B;}
    void operator=(color3f cl)
    {
    r=cl.r,g=cl.g,b=cl.b;
    }
};
class Point : public position3 , public color3f
{
public:
Point(float X=0,float Y=0,float Z=0,float R=0,float G=0,float B=0)
{
    x=X,y=Y,z=Z;
    r=R,g=G,b=B;
}
};

中間モードで作成すると、テクスチャも表示されますが、VA を使用しようとすると、単一の白いクワッドを作成できません。

私はそれについて少しデバッグを行いexit(42);、呼び出しの前に置くglDrawArrays()と42で返されるが、プログラムがクラッシュした後にそれを取るとglDrawArrays()、問題はglDrawArrays().

ここに私の初期化があります:

const int width=640, height=480;
glViewport(0,0,width, height );
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, ((GLfloat)-1), (GLfloat)1);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glShadeModel(GL_SMOOTH);
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

また、VBO がサポートされているかどうかを確認する方法はありますか? これは、私がそれらを使ってプログラムを作成し、私の PC (OpenGL 4.2 を使用) では問題なく動作しましたが、友人のコンピューター (OpenGL 2.1 を使用) で実行しようとするとクラッシュしたためです。

4

0 に答える 0