GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 23.11.2004, 19:54 Titel: OpenGL - Initialisierung |
|
|
Hi @all,
ich hab mir mal aus diversen OpenGL-Tutorials eine Initialisierungsroutine zusammen gebastelt, nur funktioniert das nicht so wie ich will...
D.h., funktionieren tuts schon, nur ist das erzeugte Fenster irgendwie "durchsichtig" und ich kann nichts hinein "zeichnen"... =/
Mir gings als ich das geschrieben hab hauptsächlich um den Lerneffekt, drum hab ich die Kommentare und ganzen Fehlerbehandlungssachen entfernt um etwas an Übersicht und Durchblick zu gewinnen... (jaja, hätte ich nicht machen sollen )...
Mir leuchtet außerdem die Funktion der Pixeldescriptor-Struktur nicht ganz ein, könnte mir das jemand erklären? Kenn mich mit der WinAPI eigentlich nicht wirklich aus... =/
Hier der Code:
Code: | Init(GLuint uiScrWidth, GLuint uiScrHeight, GLuint uiBpp, bool bFullscreen,
std::string strTitle,
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)){
hInstance = GetModuleHandle(NULL);
sSettings.uiScrWidth = uiScrWidth;
sSettings.uiScrHeight = uiScrHeight;
sSettings.uiBpp = uiBpp;
sSettings.bFullscreen = bFullscreen;
WNDCLASS wc;
DWORD dwExStyle;
DWORD dwStyle;
RECT WindowRect;
WindowRect.left=(long)0;
WindowRect.right=(long)sSettings.uiScrWidth;
WindowRect.top=(long)0;
WindowRect.bottom=(long)sSettings.uiScrHeight;
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = Loa dCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "OpenGL";
RegisterClass(&wc);
if(sSettings.bFullscreen){
DEVMODE dmScreenSettings;
memset(&dmScreenSettings,0,sizeof(dmScreenSettings));
dmScreenSettings.dmSize=sizeof(dmScreenSettings);
dmScreenSettings.dmPelsWidth = sSettings.uiScrWidth;
dmScreenSettings.dmPelsHeight = sSettings.uiScrHeight;
dmScreenSettings.dmBitsPerPel = sSettings.uiBpp;
dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN);
dwExStyle=WS_EX_APPWINDOW;
dwStyle=WS_POPUP;
ShowCursor(FALSE);
}
else {
dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
dwStyle=WS_OVERLAPPEDWINDOW;
}
AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);
hWnd=CreateWindowEx(dwExStyle,
"OpenGL",
strTitle.c_str(),
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | dwStyle,
0, 0,
WindowRect.right-WindowRect.left,
WindowRect.bottom-WindowRect.top,
NULL,
NULL,
hInstance,
NULL);
static PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // Größe des Pixel Format Descriptors
1, // Versions Nummer
PFD_DRAW_TO_WINDOW | // Format muss Fenster unterstützen
PFD_SUPPORT_OPENGL | // Format muss OpenGL unterstützen
PFD_DOUBLEBUFFER, // Muss Double Buffering unterstützen
PFD_TYPE_RGBA, // Fordere ein RGBA Format an
sSettings.uiBpp, // wähle unsere Farbtiefe aus
0, 0, 0, 0, 0, 0, // Color Bits werden ignoriert
0, // Kein Alpha Buffer
0, // Shift Bit wird ignoriert
0, // Kein Accumulation Buffer
0, 0, 0, 0, // Accumulation Bits werden ignoriert
16, // 16Bit Z-Buffer (Depth Buffer)
0, // Kein Stencil Buffer
0, // Kein Auxiliary Buffer
PFD_MAIN_PLANE, // Haupt-Zeichen-Schicht
0, // Reserviert
0, 0, 0 // Layer Masken werden ignoriert
};
hDC = GetDC(hWnd);
SetPixelFormat(hDC,ChoosePixelFormat(hDC,&pfd),&pfd);
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC,hRC);
ShowWindow(hWnd,SW_SHOW);
SetForegroundWindow(hWnd);
SetFocus(hWnd);
Resize(sSettings.uiScrWidth, sSettings.uiScrHeight);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_TEXTURE_2D);
} |
p.s.:
sSettings:
Code: | struct settings {
GLuint uiScrWidth, uiScrHeight, uiBpp;
bool bFullscreen;
}; |
p.p.s.:
Code: | Resize(GLuint uiScrWidth, GLuint uiScrHeight){
if(sSettings.uiScrHeight==0) sSettings.uiScrHeight=1;
glViewport(0, 0, sSettings.uiScrWidth, sSettings.uiScrHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)sSettings.uiScrWidth/(GLfloat)sSettings.uiScrHeight,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
} |
|
|