[c++] problem i glut med GameMode
Har problem med GameMode i GLUT.
När jag kör windowed så är det perfekt, men när jag ställer in upplösning 800x600 så blir det rätt med grafiken (förutom att ljus inte funkar), men det går supah-segt.
Om jag istället ställer in 800x600:32 så blir det snabbt, jag ser inge diffuse ljus, men ambient funkar...
Här är koden:
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glut32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glaux.lib")
#include <windows.h>
#include <gl\glut.h>
#include <gl\glaux.h>
#include <stdio.h>
void render ();
void reshape (int w, int h);
GLuint g_MinTextur[3];
float fRotation;
float AmbientColor[] = { 1.0f, 0.0f, 0.0f};
float DiffuseColor[] = { 0.0f, 1.0f, 0.0f};
float LightPosition[] = { 0.0f, 0.0f, 2.0f};
bool g_bFullScreen = true;
AUX_RGBImageRec *LoadBMP (char *strFileName) {
if (!strFileName)
return NULL;
FILE *File = NULL;
File = fopen (strFileName, "r");
if (File) {
fclose (File);
return auxDIBImageLoad (strFileName);
}
return NULL;
}
bool LoadTextures () {
bool bRet;
AUX_RGBImageRec *TextureImage = NULL;
if (TextureImage = LoadBMP ("Textur.bmp")) {
bRet = true;
glGenTextures (3, &g_MinTextur[0]);
glBindTexture (GL_TEXTURE_2D, g_MinTextur[0]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D (GL_TEXTURE_2D, 0, 3, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
glBindTexture (GL_TEXTURE_2D, g_MinTextur[1]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D (GL_TEXTURE_2D, 0, 3, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
glBindTexture (GL_TEXTURE_2D, g_MinTextur[2]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps (GL_TEXTURE_2D, 3, TextureImage->sizeX, TextureImage->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
}
if (TextureImage) {
if (TextureImage->data)
free (TextureImage->data);
free (TextureImage);
}
return bRet;
}
int main (int argc, char** argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
if (g_bFullScreen) {
glutGameModeString ("800x600:32@100");
if (glutGameModeGet (GLUT_GAME_MODE_POSSIBLE)) {
glutEnterGameMode ();
}
else {
printf ("Couldn't use fullscreen!");
glutInitWindowSize (400, 400);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Test-ost!");
}
}
else {
glutInitWindowSize (400, 400);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Test-ost!");
}
glutDisplayFunc (render);
glutIdleFunc (render);
glutReshapeFunc (reshape);
glEnable (GL_DEPTH_TEST);
glEnable (GL_TEXTURE_2D);
glEnable (GL_LIGHT1);
glEnable (GL_LIGHTING);
LoadTextures ();
glLightfv (GL_LIGHT1, GL_AMBIENT, AmbientColor);
glLightfv (GL_LIGHT1, GL_DIFFUSE, DiffuseColor);
glLightfv (GL_LIGHT1, GL_POSITION, LightPosition);
glutMainLoop ();
return 0;
}
void reshape (int w, int h) {
if (h == 0)
h = 1;
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glViewport (0, 0, w, h);
gluPerspective (45, 1.0 * (w / h), 1.0f, 1000.0f);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
gluLookAt (0.0f, 0.0f, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
}
void render () {
fRotation += 0.2;
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
glBindTexture (GL_TEXTURE_2D, g_MinTextur[1]);
glRotatef (fRotation, 1.0f, 0.0f, 0.0f);
glRotatef (fRotation * 2, 0.0f, 1.0f, 0.0f);
glRotatef (fRotation, 0.0f, 0.0f, 1.0f);
glBegin (GL_QUADS);
glNormal3f( 0.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glNormal3f( 0.0f, 0.0f,-1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glNormal3f( 0.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glNormal3f( 0.0f,-1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glNormal3f( 1.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glNormal3f(-1.0f, 0.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();
glPopMatrix ();
glutSwapBuffers ();
}
Min utvecklingsblogg: http://blog.iostream.cc