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:

 
#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, &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, &pfd);
	SetPixelFormat(hDC, PixelFormat, &pfd);
	hRC = wglCreateContext(hDC);
	wglMakeCurrent(hDC, hRC);
}

GLvoid FullScreen()
{
	DEVMODE dm;
	
	memset(&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(&dm, CDS_FULLSCREEN);
	ShowCursor(FALSE);
}

GLboolean CreateGLWindow()
{
	WNDCLASS wc;
	RECT rect;
	
	SetRect(&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(&wc))
	{
		return false;
	}
	
	AdjustWindowRectEx(&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(&msg, NULL, 0, 0, PM_REMOVE))
		{
			if (msg.message == WM_QUIT)
			{
				done = true;
			}
			
			else
			{
				TranslateMessage(&msg);
				DispatchMessage(&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);
}

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…

Thanks, Gollum.

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

CPU: PIII 800
Video CARD: ELSA GLADIAC MX

Thanks again. :slight_smile:

No problem, glad to help you :slight_smile: