PDA

View Full Version : need help



_student
02-02-2005, 08:29 AM
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, &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);
}

Silkut
02-02-2005, 12:30 PM
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...

_student
02-03-2005, 12:55 AM
Thanks, Gollum.

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



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

Silkut
02-03-2005, 08:41 AM
No problem, glad to help you :)