Simple Window

Started by
1 comment, last by AspireID 20 years, 1 month ago
In this code chunk, I just create a window and trying to draw a simple 2d rectangle... Everything is OK, except the fact there is no rectangle on the screen.. Any ideas? I have the following simple code

#include <windows.h>
#include <gl\gl.h>

#pragma comment(lib, "opengl32.lib")

GLfloat x,y;
GLfloat xspeed,yspeed;
GLfloat size;
GLfloat windowWidth=500.0f, windowHeight=500.0f;

void ChangeSize(GLsizei width, GLsizei height)
{
	if(height==0) height=1;

	glViewport(0,width,0,height);
	
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	windowWidth=500.0f;
	windowHeight=500.0f;
	if(width>=height)
		windowWidth*=(float)width/height;
	else
		windowHeight*=(float)height/width;

	//glOrtho(0.0f,windowWidth,0.0f,windowHeight,1.0f,-1.0f);
	glOrtho(0.0f,500.0f,0.0f,500.0f,1.0f,-1.0f);
}

void RenderScene()
{
	glClearColor(1.0f,1.0f,1.0f,0.0f);
	glClear(GL_COLOR_BUFFER_BIT);

	glLoadIdentity();

	glColor3f(0.0f,0.0f,0.0f);
	glRectf(0.0f,0.0f,250.0f,250.0f);

	//glRectf(x,y,x+size,y+size);
	
	//glFlush();
}

void Init()
{
	x=100.0f;
	y=50.0f;
	xspeed=rand()%10;
	yspeed=rand()%20;
	size=rand()%30;
}

void IdleFunction()
{
    if(x<0 || x+size>windowWidth) xspeed=-xspeed;
	if(y<0 || y+size>windowHeight) yspeed=-yspeed;
	x+=xspeed;
	y+=yspeed;
}

void SetDCPixelFormat(HDC hDC)
{
	int pixelFormat;
	static PIXELFORMATDESCRIPTOR pfd = {
		sizeof(PIXELFORMATDESCRIPTOR),
			1,
			PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_TYPE_RGBA,
			24,
			0,0,0,0,0,0,
			0,0,
			0,0,0,0,0,0,
			32,
			0,
			PFD_MAIN_PLANE,
			0,
			0,0,0};

		pixelFormat=ChoosePixelFormat(hDC,&pfd);

		SetPixelFormat(hDC,pixelFormat,&pfd);
}

LRESULT CALLBACK WndProc(HWND hWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{
	static HGLRC hRC;
	static HDC hDC;

	switch(message)
	{
	case WM_CREATE:
		hDC=GetDC(hWnd);
		SetDCPixelFormat(hDC);
		
		hRC=wglCreateContext(hDC);
		wglMakeCurrent(hDC,hRC);

		SetTimer(hWnd,101,1,NULL);

		Init();

		break;
	
	case WM_DESTROY:
		KillTimer(hWnd,101);

		wglMakeCurrent(hDC,NULL);
		wglDeleteContext(hRC);

		PostQuitMessage(0);
		break;
	
	case WM_SIZE:
		ChangeSize(LOWORD(lParam),HIWORD(lParam));
		break;

	case WM_TIMER:
		IdleFunction();

		InvalidateRect(hWnd,NULL,FALSE);
		break;

	case WM_PAINT:
		RenderScene();
		SwapBuffers(hDC);
		ValidateRect(hWnd,NULL);
		break;
	default:
		return(DefWindowProc(hWnd,message,wParam,lParam));
		break;
	}

	return(0);
}

int APIENTRY WinMain(HINSTANCE hInstance,
					 HINSTANCE hPrevInstance,
					 LPSTR lpCmdLine,
					 int nCmdShow)
{
	MSG msg;
	WNDCLASS wc;
	HWND hWnd;

	char lpszAppName[]="Demo";
	wc.style=CS_HREDRAW|CS_VREDRAW;
	wc.lpfnWndProc=WndProc;
    wc.cbClsExtra=0;
	wc.cbWndExtra=0;
	wc.hInstance=hInstance;
	wc.hIcon=NULL;
	wc.hCursor=LoadCursor(NULL,IDC_ARROW);

	wc.hbrBackground=NULL;

	wc.lpszMenuName=NULL;
	wc.lpszClassName=lpszAppName;

	if(RegisterClass(&wc)==0) 
		return(FALSE);


	hWnd=CreateWindow(
		lpszAppName,
		lpszAppName,
		WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
		0,0,
		windowWidth,windowHeight,

		NULL,
		NULL,
		hInstance,
		NULL);

	if(hWnd==NULL) return(FALSE);

	ShowWindow(hWnd,SW_SHOW);
	UpdateWindow(hWnd);

	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}
 
Thanks in advance!
id
Advertisement

Try this:
glViewport(0,0,width,height);
Oh, stupid me!
Thank you, BigMac!
id

This topic is closed to new replies.

Advertisement