OpenGL window is not visible.

Started by
2 comments, last by Prot 9 years, 8 months ago

Hi there I followed the instructions to install freeglut and here for glew. I did this on my windows 7 machine and everything worked fine. Then I did the same on my windows 8 machine. I am using VS 2013 on both machines.

It also works and it seems to compile. But following happens:

1. As I created this as an empty console application the console does show up.

2. I can also see the Glut window in the system tray.

The problem is can not click the Glut window and I can't maximize it. There is always only the console in the foreground.


#include "glew.h"// Include the GLUT header file  
#include "GL/glut.h" // Include the GLEW header file  
#include "string.h"

struct Vector4
{
	float x;
	float y;
	float z;
	float w;
};

//GLSizei = Unsigned Integer
bool* const keyStates = new bool[256](); // Create an array of boolean values of length 256 (0-255)
bool* const keySpecialStates = new bool[256](); // Create an array of boolean values of length 256 (0-255)
bool* const keyPreviousStates = new bool[256]();

GLfloat redDiffuseMaterial[] = { 1.0, 0.0, 0.0 };
GLfloat whiteSpecularMaterial[] = { 1.0, 1.0, 1.0 };
GLfloat greenEmissiveMaterial[] = { 0.0, 1.0, 0.0 };
GLfloat blankMaterial[] = { 0.0, 0.0, 0.0 };
GLfloat mShininess[] = { 128 };


GLfloat whiteSpecularLight[] = { 1.0, 1.0, 1.0 };
GLfloat blackAmbientLight[] = { 0.0, 0.0, 0.0 };
GLfloat whiteDiffuseLight[] = { 1.0, 1.0, 1.0 };

bool diffuse = false;
bool emissive = false;
bool specular = false;

bool movingUp = false; // Whether or not we are moving up or down
float yLocation = 0.0f; // Keep track of our position on the y axis. 
float yRotationAngle = 0.0f; // The angle of rotation for our object

Vector4 bgColor = { 1.0f, 1.0f, 1.0f, 1.0f };



void renderPrimitive(void)
{
	glBegin(GL_QUADS); // Start drawing a quad primitive
	//glBegin(GL_LINE_LOOP);
	glColor3f(1.0f, 0.0f, 0.0f);
	glVertex3f(-1.0f, -1.0f, 0.0f); //Bottom Left
	glColor3f(0.0f, 1.0f, 0.0f);
	glVertex3f(-1.0f, 1.0f, 0.0f); //Top Left
	glColor3f(0.0f, 0.0f, 1.0f);
	glVertex3f(1.0f, 1.0f, 0.0f); //Top Right
	glColor3f(0.0f, 0.0f, 0.0f);
	glVertex3f(1.0f, -1.0f, 0.0f); //Bottom Right
	glEnd();
}

void keyOperations(void)
{
	if ((!keyStates['e']) && keyPreviousStates['e']) // If the 'a' key has been pressed 
	{
		// Perform 'a' key operations
		//exit(0);
		/*bgColor.x = 1.0f;
		bgColor.y = .0f;
		bgColor.z = .0f;*/

	}
}


void keySpecialOperations(void)
{
	if (keySpecialStates[GLUT_KEY_LEFT]) // If the left arrow key has been pressed
	{
		// Perform left arrow key operations
	}
}

void moveObject(void)
{
	if (movingUp) // If we are moving up
	{
		yLocation -= 0.0025f; // Move up along our yLocation
	}
	else // Otherwise
	{
		yLocation += 0.0025f; // Move down along our yLocation 
	}

	if (yLocation < -3.0f) // If we have gone up too far
	{
		movingUp = false; // Reverse our direction so we are moving down
	}
	else if (yLocation > 3.0f) // Else if we have gone down too far
	{
		movingUp = true; // Reverse our direction so we are moving up
	}

	yRotationAngle += 0.005f; // Increment our rotation value
	if (yRotationAngle > 360.0f) // If we have rotated beyond 360 degrees (a full rotation)
	{
		yRotationAngle = 0.0f; // Subtract 360 degrees off of our rotation
	}
}

void light(void)
{
	glLightfv(GL_LIGHT0, GL_SPECULAR, whiteSpecularLight);
	glLightfv(GL_LIGHT0, GL_AMBIENT, blackAmbientLight);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteDiffuseLight);
}

void cubeWireCustom(void)
{
	glTranslatef(0.0f, yLocation, -5.0f);
	glRotatef(yRotationAngle, 0.0f, 1.0f, 0.0f);
	glColor4f(1.0f, 0.0f, 0.0f, 0.5f);
	glScalef(0.5f, 1.0f, 2.0f);
	glutSolidCube(2.0f);
	glutWireCube(2.0f);
}

void display(void) {

	moveObject();
	keyOperations();
	keySpecialOperations();

	glEnable(GL_BLEND); // Enable the OpenGL Blending functionality
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Set the blend mode to blend our current RGBA with what is already in the buffer

	glClearColor(bgColor.x, bgColor.y, bgColor.z, bgColor.w);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the colour buffer (more buffers later on)  
	glLoadIdentity(); // Load the Identity Matrix to reset our drawing locations  
	gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
	light();
	glTranslatef(0.0f, 0.0f, -5.0f); // Push eveything 5 units back into the scene, otherwise we won't see the primitive

	//renderPrimitive();

	cubeWireCustom();

	//renderPrimitive(); //render the primitive	
	//glutWireCube(2.0f);	
	//glutWireSphere(2.0f,20,20);
	//glutWireTeapot(2.0f);	
	//glutSolidTeapot(2.0f);
	glutSwapBuffers(); //Swap our buffers

	memcpy(keyPreviousStates, keyStates, 256 * sizeof(bool));

}

void reshape(int width, int height)
{
	glViewport(0, 0, (GLsizei)width, (GLsizei)height); // Set our viewport to the size of our window. (0,0) being bottom left in the window.
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity(); // Reset the projection matrix to the identity matrix so that we don't get any artifacts (cleaning up)
	gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100.0); // Set the Field of view angle (in degrees), the aspect ratio of our window, and the new and far planes
	glMatrixMode(GL_MODELVIEW);
}

void keyPressed(unsigned char key, int x, int y)
{
	keyStates[key] = true; //Set the state of the current key to pressed	

	if (key == 's')
	{
		if (!specular)
		{
			specular = true;
			glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, whiteSpecularMaterial);
			glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mShininess);
		}
		else if (specular)
		{
			specular = false;
			glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, blankMaterial);
			glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, blankMaterial);
		}
	}

	if (key = 'd')
	{
		if (!diffuse)
		{
			diffuse = true;
			glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, redDiffuseMaterial);
		}
		else if (diffuse)
		{
			diffuse = false;
			glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, blankMaterial);
		}
	}

	if (key == 'e')
	{
		if (!emissive)
		{
			emissive = true;
			glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, greenEmissiveMaterial);
		}
		else if (emissive)
		{
			emissive = true;
			glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, blankMaterial);
		}
	}

}

void keyUp(unsigned char key, int x, int y)
{
	keyStates[key] = false; //Set the state of the current key to not pressed
}

void keySpecial(int key, int x, int y)
{
	keySpecialStates[key] = true;
}

void keySpecialUp(int key, int x, int y)
{
	keySpecialStates[key] = false;
}

void init()
{
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_LIGHTING);
	glEnable(GL_COLOR_MATERIAL);
	glEnable(GL_LIGHT0);
}



int main(int argc, char **argv) {
	glutInit(&argc, argv); // Initialize GLUT  
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); // Set up a basic display buffer (now double buffered)   
	glutInitWindowSize(500, 500); // Set the width and height of the window  
	glutInitWindowPosition(2500, 100); // Set the position of the window  
	glutCreateWindow("Your first OpenGL Window"); // Set the title for the window  

	init();

	glutDisplayFunc(display); // Tell GLUT to use the method "display" for rendering  
	glutIdleFunc(display); // Tell GLUT to use the method "display" as our idle method as well
	glutReshapeFunc(reshape); // Tell GLUT to use the method "reshape" for reshaping
	glutKeyboardFunc(keyPressed); // Tell GLUT to use the method "keyPressed" for key presses 
	glutKeyboardUpFunc(keyUp); // Tell GLUT to use the method "keyUp" for key up events  
	glutSpecialFunc(keySpecial); // Tell GLUT to use the method "keySpecial" for special key presses
	glutSpecialUpFunc(keySpecialUp); // Tell GLUT to use the method "keySpecialUp" for special up key events	
	glutMainLoop(); // Enter GLUT's main loop  
}

Please tell me if you need more information.

Advertisement


glutInitWindowPosition(2500, 100); // Set the position of the window

2500 seems a little high for the x coordinate. Maybe you meant something like 250 instead?

If you find the console window to be a nuisance, you can always make it not show up by selecting Windows (/SUBSYTEM:WINDOWS) under Linker -> System -> SubSystem in your project settings.

You can also get rid of the console using "FreeConsole()" though this may be platform specific (in all likelihood it is) IIRC GlutInitWindowPosition is not a required call (i'm not doing it in my code) and if you leave it out it will default to the top left corner of the screen.



glutInitWindowPosition(2500, 100); // Set the position of the window

2500 seems a little high for the x coordinate. Maybe you meant something like 250 instead?

If you find the console window to be a nuisance, you can always make it not show up by selecting Windows (/SUBSYTEM:WINDOWS) under Linker -> System -> SubSystem in your project settings.

Of course you are right. I wrote this code at work where I work with two monitors. At home I simply copy/pasted the code without even considering that something might be wrong.

Thanks again!

This topic is closed to new replies.

Advertisement