Super-simple OpenGL setup...no triangle visible?

BlitzMax Forums/OpenGL Module/Super-simple OpenGL setup...no triangle visible?

JoshK(Posted 2006) [#1]
I can't figure out why there is no triangle visible here. I believe I did everything I need to set it up properly.

I need to set up the whole OpenGL environment myself, so I can access all the features I want. Any help pointing out an error in this code would be appreciated:

This BlitzPlus code works:


This BlitzMax code does not work:



JoshK(Posted 2006) [#2]
If I use a PollEvent() instead of a WaitEvent() in the BlitzMax source the triangle shows up, though it is badly distorted. I don't think the pixel format is getting set up correctly.


JoshK(Posted 2006) [#3]
I replaced the bank with a PIXELFORMATDESCRIPTOR structure. The screen still flashes badly, looking like the pixelformat is not getting set correctly.



JoshK(Posted 2006) [#4]
Okay, I had to get rid of the OR statements in the dwflags parameter. Here it is, a super-simple OpenGL setup on a BlitzMax window. That's pretty nice that it is so simple, even when you are creating a context from scratch:
'Create Window
win:tgadget=CreateWindow("OpenGL Window",200,200,640,480,Null,3)

'Setup pixel format
hwnd=QueryGadget(win,QUERY_HWND_CLIENT)
hdc=GetDC(hwnd)

Local lpPixelFormat:PIXELFORMATDESCRIPTOR
lpPixelFormat.nSize=40
lpPixelFormat.nVersion=1
lpPixelFormat.dwFlags=PFD_SUPPORT_OPENGL+PFD_DOUBLEBUFFER+PFD_DRAW_TO_WINDOW
lpPixelFormat.iPixelType=PFD_TYPE_RGBA
lpPixelFormat.cColorBits=16
lpPixelFormat.cRedBits=8
lpPixelFormat.cGreenBits=8
lpPixelFormat.cBlueBits=8
lpPixelFormat.cAccumBits=16
lpPixelFormat.cDepthBits=16
lpPixelFormat.cStencilBits=8
lpPixelFormat.dwLayerMask=PFD_MAIN_PLANE

lPixelFormat=ChoosePixelFormat(hDC,lpPixelFormat)

If Not lPixelFormat RuntimeError "ChoosePixelFormat() failed"
result=SetPixelFormat(hDC,lPixelFormat,lpPixelFormat)
If Not result RuntimeError "SetPixelFormat() failed"
lpPixelFormat=Null

'Create OpenGL Context
hrc=wglCreateContext(hdc)
If Not hrc Notify "Failed to create context."
wglMakeCurrent hdc,hrc

'Program Loop
Repeat
	
	'Setup Viewport
	w=ClientWidth(win)
	h=ClientHeight(win)
	glViewport 0.0,0.0,w,h
	glClearColor 0.0,0.0,1.0,0.0
	glClear GL_DEPTH_BUFFER_BIT+GL_COLOR_BUFFER_BIT

	glMatrixMode GL_PROJECTION
	glLoadIdentity()
	glPushMatrix()
	gluPerspective 45.0,Float(w)/Float(h),1.0,100.0

	'Draw Triangle
	glBegin GL_TRIANGLES
	glVertex3f 0.0,0.0,-10.0
	glVertex3f 1.0,1.0,-10.0
	glVertex3f 1.0,0.0,-10.0
	glEnd

	glpopmatrix()

	'Flip buffer
	SwapBuffers hdc

	'Check for WindowClose Event	
	If WaitEvent()=EVENT_WINDOWCLOSE End

Forever



Yan(Posted 2006) [#5]
In BMax 'AND' and 'OR' are logical operators, their binary counterparts being '&' and '|'...
lpPixelFormat.dwFlags = PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW
...ETC...