hab heute ein wenig mit OpenGL experimentiert. Dabei wollte ich es schaffen die OGL Ausgabe auf einem WindowedScreen auszugeben. Leider ist mir das misslungen. Es wird immer die ganze ClientArea des Windows benutzt obwohl ich den hwnd und dc des Screens übergeben habe.
Liegst an den Flags? Das Grüne im Fenster ist der Render-DC von OGL
das Schwarze ist er WindowedScreen. Wenn das nicht gehen sollte (der Verdacht beschleicht mich langsam) dann wäre es wenigstens schön wenn
ich den RenderDC von OGL auf ein von mir bestimmtes Rect beschränken könnte, so daß er nicht immer das ganze Window einnimmt.
Ideen dazu?
Gruß FGK
Code: Alles auswählen
; OpenGL Fenster
;
IncludeFile "OpenGL.pbi"
;Fenstereigenschaften
#WindowWidth = 1024
#WindowHeight = 800
#WindowFlags = #PB_Window_TitleBar | #PB_Window_MaximizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered
Global hwnd.l
Procedure MyWindowCallback(WindowID, message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If message = #WM_SIZE
glViewport_(0, 0, WindowWidth(), WindowHeight()) ;OpenGL an die Fenstergröße anpassen
Result = 1
EndIf
ProcedureReturn Result
EndProcedure
InitSprite()
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #WindowFlags, "OGL Test")
hwnd= OpenWindowedScreen(WindowID(),10,10,800,600,0,10,10)
SetWindowCallback(@MyWindowCallback())
hwnd = ScreenID()
pfd.PIXELFORMATDESCRIPTOR
hdc = GetDC_(hwnd)
pfd\nSize = SizeOf(PIXELFORMATDESCRIPTOR)
pfd\nVersion = 1
pfd\dwFlags = #PFD_SUPPORT_OPENGL | #PFD_DOUBLEBUFFER | #PFD_DRAW_TO_WINDOW
pfd\iLayerType = #PFD_MAIN_PLANE
pfd\iPixelType = #PFD_TYPE_RGBA
pfd\cColorBits = 24
pfd\cDepthBits = 16
pixformat = ChoosePixelFormat_(hdc, pfd)
SetPixelFormat_(hdc, pixformat, pfd)
hrc = wglCreateContext_(hdc)
wglMakeCurrent_(hdc, hrc)
SwapBuffers_(hdc)
glClearColor_(0.0, 1.0, 0.0, 1.0)
Repeat
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
SwapBuffers_(hdc)
FlipBuffers()
ClearScreen(0,0,0)
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
EndIf