#ifndef __BGU_H_
#define __BGU_H_

#include <bg.h>

extern Mtx2 IdentityMtx;	/* bgu.c で実体を定義 */
extern Mtxf IdentityMtxf;	/* bgu.c で実体を定義 */

#ifndef NOPROTOTYPE
void
guLoadIdentityi(
    Mtx *const m1
);
void
guLoadIdentityf(
    Mtxf *const m1
);
void
guLoadMatrixf2i(
    Mtx *const m1,
    const Mtxf *const m2
);
void
guLoadMatrixf(
    Mtxf *const m1,
    const Mtxf *const m2
);
void
guLoadMatrixi(
    Mtx *const m1,
    const Mtx *const m2
);
void
guLoadMatrixi2f(
    Mtxf *const m1,
    const Mtx *const m2
);
void
guMultMatrixf(
    Mtxf *const m1,
    const Mtxf *const m2
);
void
guMultMatrixi(
    Mtx *const m1,
    const Mtx *const m2
);
void
guScale2f(
    Mtxf *const m1,
    const float x,
    const float y
);
void
guRotateZf(
    Mtxf *const m1,
    const float angle		/* 回転角度 */  
);
void
guRotateYf(
    Mtxf *const m1,
    const float angle		/* 回転角度 */  
);
void
guRotateXf(
    Mtxf *const m1,
    const float angle		/* 回転角度 */  
);
void
guRotatef(
    Mtxf *const m1,
    const float angle,		/* 回転角度 */  
    const float x,
    const float y,
    const float z
);
void
guTranslate2f(
    Mtxf *const m1,
    const float x,
    const float y
);
void
guScale3f(
    Mtxf *const m1,
    const float x,
    const float y,
    const float z
);
void
guTranslate3f(
    Mtxf *const m1,
    const float x,
    const float y,
    const float z
);
void
guScale2i(
    Mtx *const m1,
    const float x,
    const float y
);
void
guRotateZi(
    Mtx *const m1,
    const float angle		/* 回転角度 */  
);
void
guRotateXi(
    Mtx *const m1,
    const float angle		/* 回転角度 */  
);
void
guRotateYi(
    Mtx *const m1,
    const float angle		/* 回転角度 */  
);
void
guRotateZi(
    Mtx *const m1,
    const float angle		/* 回転角度 */  
);
void
guTranslate2i(
    Mtx *const m1,
    const float x,
    const float y
);
void
guTranslate3i(
    Mtx *const m1,
    const float x,
    const float y,
    const float z
);
void
guScale2fR(
    Mtxf *const m1,
    const float x,
    const float y
);
void
guRotateZfR(
    Mtxf *const m1,
    const float angle		/* 回転角度 */  
);
void
guTranslate2fR(
    Mtxf *const m1,
    const float x,
    const float y
);

void
guXYZ(
    xyz_t *const p1,
    xyz_t *const p2,
    const Mtxf *const m1
);
void
guXY(
    xy_t *const p1,
    xy_t *const p2,
    const Mtxf *const m1
);

void glPushMatrix( void );
void glPopMatrix( void );
void glLoadIdentity( void );
void glLoadMatrixf( const Mtxf *const m2 );
void glLoadMatrixi( const Mtx *const m2 );
void glGetMatrixf( Mtxf *const m2 );
void glGetMatrixi( Mtx *const m2 );
void glMultMatrixf( const Mtxf *const m2 );
void glMultMatrixi( const Mtx *const m2 );
void glScale3f( const float x, const float y, const float z );
void glScale2f( const float x, const float y );
void glRotateZf( const float angle );
void glRotatef( const float angle, const float x, const float y, const float z );
void glTranslate3f( const float x, const float y, const float z );
void glTranslate2f( const float x, const float y );

#endif
#endif
