游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3479|回复: 2

glew和glext扩展的问题

[复制链接]

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-8-12 22:52:00 | 显示全部楼层 |阅读模式
我分别用glew和glext实现多重纹理
glew有access violation的问题,而glext就没问题,不知道为什么,我把两个程序贴出来

//glew程序
#include <GL/glew.h>
#include <GL/glaux.h>
#include <GL/glut.h>

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
GLuint g_textureID[2];

void loadTexture(void);
void init(void)
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_FLAT);
   loadTexture();
}
void loadTexture( void )       
{
        AUX_RGBImageRec *pTextureImage = auxDIBImageLoad( "test.bmp" );
        glGenTextures( 2,g_textureID );

        if( pTextureImage != NULL )
        {
                glBindTexture(GL_TEXTURE_2D, g_textureID[0]);
                glTexImage2D( GL_TEXTURE_2D, 0, 3, pTextureImage->sizeX, pTextureImage->sizeY, 0,
                                GL_RGB, GL_UNSIGNED_BYTE, pTextureImage->data );
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST );
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST );
        }
        if(pTextureImage)
        {
                if( pTextureImage->data )
                        free( pTextureImage->data );
                free( pTextureImage );
        }

        pTextureImage = auxDIBImageLoad( "checker.bmp" );

        if( pTextureImage != NULL )
        {
                glBindTexture(GL_TEXTURE_2D, g_textureID[1]);
                glTexImage2D( GL_TEXTURE_2D, 0, 3, pTextureImage->sizeX, pTextureImage->sizeY, 0,
                                GL_RGB, GL_UNSIGNED_BYTE, pTextureImage->data );
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR );
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR );
        }
        if(pTextureImage)
        {
                if( pTextureImage->data )
                        free( pTextureImage->data );
                free( pTextureImage );
        }

}
void display(void)
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             /* clear the matrix */
           /* viewing transformation  */
   gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

   if(GL_ARB_multitexture)
        {
          
                   glActiveTextureARB( GL_TEXTURE0_ARB );
glEnable(GL_TEXTURE_2D);
                glBindTexture( GL_TEXTURE_2D, g_textureID[0] );

                glActiveTextureARB( GL_TEXTURE1_ARB );
glEnable(GL_TEXTURE_2D);
                glBindTexture( GL_TEXTURE_2D, g_textureID[1] );

           glBegin(GL_QUADS);
                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0.0f, 0.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0.0f, 0.0f );
                   glVertex3f(-1.0, -1.0, 0.0);

                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0.0f, 1.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0.0f, 1.0f );
                   glVertex3f(-1.0, 1.0, 0.0);

                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1.0f, 1.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 1.0f, 1.0f );
                   glVertex3f(1.0, 1.0, 0.0);

                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1.0f, 0.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 1.0f, 0.0f );
                   glVertex3f(1.0, -1.0, 0.0);
           glEnd();
        }
        else
                cout<<"不支持多纹理"<<endl;
           glFlush ();
        }

void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
   glMatrixMode (GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
   }
}

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

//glext程序
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glext.h>
#include <GL/glaux.h>
#include <GL/glut.h>

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
GLuint g_textureID[2];
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
void loadTexture(void);
void init(void)
{
        glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
        glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress("glMultiTexCoord2fARB");

   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_FLAT);
   loadTexture();

}
void loadTexture( void )       
{
        AUX_RGBImageRec *pTextureImage = auxDIBImageLoad( "test.bmp" );
        glGenTextures( 2,g_textureID );

        if( pTextureImage != NULL )
        {
                glBindTexture(GL_TEXTURE_2D, g_textureID[0]);
                glTexImage2D( GL_TEXTURE_2D, 0, 3, pTextureImage->sizeX, pTextureImage->sizeY, 0,
                                GL_RGB, GL_UNSIGNED_BYTE, pTextureImage->data );
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST );
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST );
        }
        if(pTextureImage)
        {
                if( pTextureImage->data )
                        free( pTextureImage->data );
                free( pTextureImage );
        }

        pTextureImage = auxDIBImageLoad( "checker.bmp" );

        if( pTextureImage != NULL )
        {
                glBindTexture(GL_TEXTURE_2D, g_textureID[1]);
                glTexImage2D( GL_TEXTURE_2D, 0, 3, pTextureImage->sizeX, pTextureImage->sizeY, 0,
                                GL_RGB, GL_UNSIGNED_BYTE, pTextureImage->data );
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
                 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR );
                glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR );
        }
        if(pTextureImage)
        {
                if( pTextureImage->data )
                        free( pTextureImage->data );
                free( pTextureImage );
        }

}
void display(void)
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             /* clear the matrix */
           /* viewing transformation  */
   gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

   if(GL_ARB_multitexture)
        {
          
                   glActiveTextureARB( GL_TEXTURE0_ARB );
glEnable(GL_TEXTURE_2D);
                glBindTexture( GL_TEXTURE_2D, g_textureID[0] );

                glActiveTextureARB( GL_TEXTURE1_ARB );
glEnable(GL_TEXTURE_2D);
                glBindTexture( GL_TEXTURE_2D, g_textureID[1] );

           glBegin(GL_QUADS);
                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0.0f, 0.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0.0f, 0.0f );
                   glVertex3f(-1.0, -1.0, 0.0);

                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0.0f, 1.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0.0f, 1.0f );
                   glVertex3f(-1.0, 1.0, 0.0);

                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1.0f, 1.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 1.0f, 1.0f );
                   glVertex3f(1.0, 1.0, 0.0);

                        glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1.0f, 0.0f );
                        glMultiTexCoord2fARB( GL_TEXTURE1_ARB, 1.0f, 0.0f );
                   glVertex3f(1.0, -1.0, 0.0);
           glEnd();
        }
        else
                cout<<"不支持多纹理"<<endl;
           glFlush ();
        }

void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
   glMatrixMode (GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
   }
}

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

73

主题

149

帖子

185

积分

注册会员

Rank: 2

积分
185
发表于 2005-8-14 13:33:00 | 显示全部楼层

Re:glew和glext扩展的问题

glew正确地初始化了没有?

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2005-8-15 00:31:00 | 显示全部楼层

Re:glew和glext扩展的问题

真是忘了初始化了,谢谢了,已经解决了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 10:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表