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 を使用) で実行しようとするとクラッシュしたためです。