Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 4 of 4

Thread: need help

  1. #1
    Junior Member Newbie
    Join Date
    Aug 2004
    Location
    Shanghai in China
    Posts
    15

    need help

    My video card support OpenGL1.2, I tested glTexImage3D, but it ran very slow. I don't kown the reason. Could anyone test it and tell me the result of yours, thanks. This is the code:

    Code :
    #include <windows.h>
    #include <gl/glew.h>
    #include <gl/glaux.h>
     
    int width = 1024;
    int height = 768;
    int bits = 32;
     
    HDC hDC = NULL;
    HGLRC hRC = NULL;
    HWND hWnd = NULL;
    HINSTANCE hInstance = NULL;
     
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
     
    #define	iWidth 16
    #define	iHeight 16
    #define iDepth 16
     
    static GLubyte image[iDepth][iHeight][iWidth][3];
    static GLuint texName;
     
    void makeImage(void)
    {
       int s, t, r;
     
       for (s = 0; s < 16; s++)
          for (t = 0; t < 16; t++)
             for (r = 0; r < 16; r++) {
                image[r][t][s][0] = (GLubyte) (s * 17);
                image[r][t][s][1] = (GLubyte) (t * 17);
                image[r][t][s][2] = (GLubyte) (r * 17);
             }
    }
     
    GLuint list;
     
    void InitList()
    {
    	list = glGenLists(1);
     
    	glNewList(list, GL_COMPILE);
    	glBegin(GL_QUADS);
        glTexCoord3f(0.0, 0.0, 0.0); glVertex3f(-2.25, -1.0, 0.0);
        glTexCoord3f(0.0, 1.0, 0.0); glVertex3f(-2.25, 1.0, 0.0);
        glTexCoord3f(1.0, 1.0, 1.0); glVertex3f(-0.25, 1.0, 0.0);
        glTexCoord3f(1.0, 0.0, 1.0); glVertex3f(-0.25, -1.0, 0.0);
     
        glTexCoord3f(0.0, 0.0, 1.0); glVertex3f(0.25, -1.0, 0.0);
        glTexCoord3f(0.0, 1.0, 1.0); glVertex3f(0.25, 1.0, 0.0);
        glTexCoord3f(1.0, 1.0, 0.0); glVertex3f(2.25, 1.0, 0.0);
        glTexCoord3f(1.0, 0.0, 0.0); glVertex3f(2.25, -1.0, 0.0);
        glEnd();
        glEndList();
    }
     
    GLvoid InitGL()
    {
    	glewInit();
    	glShadeModel(GL_FLAT);
    	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    	glClearDepth(1.0f);
    	glDepthFunc(GL_LEQUAL);
    	glEnable(GL_DEPTH_TEST);
    	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
     
    	glViewport(1, 1, width, height);
     
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
     
    	gluPerspective(60.0f, (GLdouble)width / (GLdouble)height, 0.1f, 200.0f);
     
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
     
    	makeImage();
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
     
        glGenTextures(1, &amp;texName);
        glBindTexture(GL_TEXTURE_3D, texName);
        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, 
                       GL_NEAREST);
        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, 
                       GL_NEAREST);
        glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, iWidth, iHeight,
                    iDepth, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
        glEnable(GL_TEXTURE_3D);
     
        InitList();
    }
     
    GLfloat rotate = 0.0f;
     
    GLvoid DrawGLScene()
    {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();
     
    	gluLookAt(0.0f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
    	glRotatef(rotate, 0.0f, 0.0f, 1.0f);
     
    	glCallList(list);
     
    	if (rotate > 360.0f)
    		rotate -= 360.0f;
     
    	rotate += 1.0f;
    }
     
    GLvoid SetupPixelFormat()
    {
    	GLuint PixelFormat;
     
    	static PIXELFORMATDESCRIPTOR pfd =
    	{
    		sizeof(PIXELFORMATDESCRIPTOR),
    		1,
    		PFD_DRAW_TO_WINDOW |
    		PFD_SUPPORT_OPENGL |
    		PFD_DOUBLEBUFFER,
    		PFD_TYPE_RGBA,
    		bits,
    		0, 0, 0, 0, 0, 0, 0, 0,
    		0,
    		0, 0, 0, 0,
    		24,
    		0,
    		0,
    		PFD_MAIN_PLANE,
    		0,
    		0, 0, 0
    	};
     
    	hDC = GetDC(hWnd);
    	PixelFormat = ChoosePixelFormat(hDC, &amp;pfd);
    	SetPixelFormat(hDC, PixelFormat, &amp;pfd);
    	hRC = wglCreateContext(hDC);
    	wglMakeCurrent(hDC, hRC);
    }
     
    GLvoid FullScreen()
    {
    	DEVMODE dm;
     
    	memset(&amp;dm, 0, sizeof(DEVMODE));
    	dm.dmSize = sizeof(DEVMODE);
    	dm.dmPelsWidth = width;
    	dm.dmPelsHeight = height;
    	dm.dmBitsPerPel = bits;
    	dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
     
    	ChangeDisplaySettings(&amp;dm, CDS_FULLSCREEN);
    	ShowCursor(FALSE);
    }
     
    GLboolean CreateGLWindow()
    {
    	WNDCLASS wc;
    	RECT rect;
     
    	SetRect(&amp;rect, 0, 0, width, height);
    	hInstance = GetModuleHandle(NULL);
     
    	wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    	wc.lpfnWndProc = WndProc;
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hInstance = hInstance;
    	wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wc.hbrBackground = NULL;
    	wc.lpszMenuName = NULL;
    	wc.lpszClassName = "OpenGL";
     
    	if (!RegisterClass(&amp;wc))
    	{
    		return false;
    	}
     
    	AdjustWindowRectEx(&amp;rect, WS_POPUP, FALSE, WS_EX_APPWINDOW);
     
    	hWnd = CreateWindowEx(WS_EX_APPWINDOW,
    						  "OpenGL",
    						  "",
    						  WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
    						  0, 0,
    						  rect.right - rect.left, rect.bottom - rect.top,
    						  NULL,
    						  NULL,
    						  hInstance,
    						  NULL);
     
    	if (!hWnd)
    	{
    		return false;
    	}
     
    	SetupPixelFormat();
    	FullScreen();
     
    	ShowWindow(hWnd, SW_SHOW);
    	SetForegroundWindow(hWnd);
    	SetFocus(hWnd);
     
    	InitGL();
     
    	return true;
    }
     
    GLvoid ReleaseWindow()
    {
    	ChangeDisplaySettings(NULL, 0);
    	ShowCursor(TRUE);
     
    	wglMakeCurrent(NULL, NULL);
    	wglDeleteContext(hRC);
    	ReleaseDC(hWnd, hDC);
    	DestroyWindow(hWnd);
    	UnregisterClass("OpenGL", hInstance);
    }
     
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    				   PSTR nCmdLine, int nCmdShow)
    {
    	MSG msg;
    	bool done = false;
     
    	if (!CreateGLWindow())
    	{
    		return 0;
    	}
     
    	while (!done)
    	{
    		if (PeekMessage(&amp;msg, NULL, 0, 0, PM_REMOVE))
    		{
    			if (msg.message == WM_QUIT)
    			{
    				done = true;
    			}
     
    			else
    			{
    				TranslateMessage(&amp;msg);
    				DispatchMessage(&amp;msg);
    			}
    		}
     
    		else
    		{
    			DrawGLScene();
    			SwapBuffers(hDC);
    		}
    	}
     
    	return msg.wParam;
    }
     
    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    		case WM_SYSCOMMAND:
    		{
    			switch (wParam)
    			{
    				case SC_SCREENSAVE:
    				case SC_MONITORPOWER:
     
    				return 0;
    			}
    		}
     
    		case WM_KEYDOWN:
    		{
    			switch (wParam)
    			{
    				case VK_ESCAPE:
    				{
    					ReleaseWindow();
    					PostQuitMessage(0);
     
    					break;
    				}
    			}
     
    			return 0;
    		}
     
    		case WM_CLOSE:
    		case WM_DESTROY:
    		{
    			ReleaseWindow();
    			PostQuitMessage(0);
     
    			return 0;
    		}
    	}
     
    	return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }

  2. #2
    Junior Member Regular Contributor
    Join Date
    Aug 2004
    Location
    Angers, France
    Posts
    248

    Re: need help

    Big HiHo Mr _student
    Ok so I've downloaded and tested your program
    I have made some 'extras' because I must include glu.h, (not necessary gl.h but Opengl32.lib)

    The program run without any errors but ONE warning
    Athlon XP 2700+, nVidia 5900XT 128mo, 512Mo Kingston DDRam, Windows XP SP1, Visual Studio .NET 2k3
    Here you can see the rendering on my config
    http://navilinux.free.fr/download/other/_student.JPG

    Here you can download the executable in Release version
    http://navilinux.free.fr/download/other/_student.exe

    If this version doesn't work correctly, this is probably a configuration problem, what is your video card ? You should download the latest driver, etc etc...
    The .Product will make you .Believe

  3. #3
    Junior Member Newbie
    Join Date
    Aug 2004
    Location
    Shanghai in China
    Posts
    15

    Re: need help

    Thanks, Gollum.

    I know the problem is not code, it's my hardware.

    CPU: PIII 800
    Video CARD: ELSA GLADIAC MX
    Thanks again.

  4. #4
    Junior Member Regular Contributor
    Join Date
    Aug 2004
    Location
    Angers, France
    Posts
    248

    Re: need help

    No problem, glad to help you
    The .Product will make you .Believe

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •