hier mal mein aktueller Versuch das Tut umzusetzen....
Code: Alles auswählen
XIncludeFile "glu.pbi"
Structure GLscreen
  container.l
  hWnd.l
  hDC.l
EndStructure
InitSprite()
InitMouse()
InitKeyboard()
Procedure createdraw()
  
  Circle(100,100,50,RGB(200,0,0))
 
  DrawingMode(#PB_2DDrawing_Outlined)
  Box(150,20,20,20, RGB(255,0,0)) 
     
  FrontColor(RGB(255,255,0))
  For k=0 To 20
    LineXY(10,10+k*8,200, 0)
  Next
 
  ;DrawingMode(#PB_2DDrawing_Transparent)
  BackColor(RGB(100,255,0))
  FrontColor(RGB(0,0,255))
  DrawText(15,50,"pebisoft")
  DrawingMode(#PB_2DDrawing_Outlined)
  Box(0,0,255,255,RGB(192,192,192))
 
EndProcedure
Procedure FindNextExp(Val)
  While a < Val
    a = 1 << b
    b + 1
  Wend
  ProcedureReturn a
EndProcedure
Procedure GLLoadAlphaTexture(image_nr,img_file.s,Filename.s,Texfilter,TransparentColor.l)
  
  If img_file="file"
    img       = LoadImage(#PB_Any, Filename.s)
    Width.l   = FindNextExp(ImageWidth(img))
    Height.l  = FindNextExp(ImageHeight(img))
    ResizeImage(img, Width, Height)
    Size.l    = Width * Height * 4
  EndIf
  
  If img_file="image" 
    img.l = CreateImage(#PB_Any,256,256,24)
    Width.l   = FindNextExp(ImageWidth(img))
    Height.l  = FindNextExp(ImageHeight(img))
    ResizeImage(img, Width, Height)
    Size.l    = Width * Height * 4
  EndIf 
  
  Dim ImageData.b(Size)
  
  bmi.BITMAPINFO
  bmi\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
  bmi\bmiHeader\biWidth       = Width
  bmi\bmiHeader\biHeight      = Height
  bmi\bmiHeader\biPlanes      = 1
  bmi\bmiHeader\biBitCount    = 32
  bmi\bmiHeader\biCompression = #BI_RGB
  bmi\bmiHeader\biSizeImage   = (bmi\bmiHeader\biWidth * bmi\bmiHeader\biHeight * bmi\bmiHeader\biBitCount / 8)-1
  
  hdc = StartDrawing(ImageOutput(img))
    If img_file="image"
      createdraw()
    EndIf
    GetDIBits_(hdc, ImageID(img), 0, bmi\bmiHeader\biHeight, @ImageData(0), bmi, #DIB_RGB_COLORS)
  StopDrawing()
  
  red   = Red (TransparentColor)
  green = Green(TransparentColor)
  blue  = Blue (TransparentColor)
  
  For k=0 To Size-1 Step 4
    b = ImageData(k  ) & $FF
    g = ImageData(k+1) & $FF
    r = ImageData(k+2) & $FF
    
    If r = red And g = green And b = blue
      ImageData(k+3) = 0
    Else
      ImageData(k+3) = $ff
    EndIf
    
    ImageData(k+2) = b
    ImageData(k  ) = r
  Next
  
  glGenTextures_(image_nr, @Tex)   
  glBindTexture_(#GL_TEXTURE_2D, Tex)
  glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
  
  If TexFilter = 0 
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
  ElseIf TexFilter = 1
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
    glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
  EndIf
  
  FreeImage(img)
  
  ProcedureReturn Tex
EndProcedure
Procedure OpenGLScreen(*p.GLscreen,hwnd)
  If *p
    If hwnd
      hdc = GetDC_(hwnd)
      pfd.PIXELFORMATDESCRIPTOR
      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 = 32
      pfd\cDepthBits = 32
      pixformat = ChoosePixelFormat_(hdc, pfd)
      SetPixelFormat_(hdc, pixformat, pfd)
      hrc = wglCreateContext_(hdc)
      wglMakeCurrent_(hdc, hrc)
      SwapBuffers_(hdc)
      *p\container = container
      *p\hWnd      = hwnd
      *p\hDC       = hdc
     
       glMatrixMode_(#GL_PROJECTION)
       gluPerspective_(45, 1, 0.1,1000)
       glMatrixMode_(#GL_MODELVIEW)
       glEnable_(#GL_ALPHA_TEST)
       glAlphaFunc_(#GL_GREATER, 0)
      
       glShadeModel_(#gl_smooth)
       glClearColor_( 0, 0.5, 1, 0)
       glClearDepth_(1)
       glEnable_(#GL_DEPTH_TEST)
       glDepthFunc_(#gl_lequal)
       glHint_(#gl_perspective_correction_hint,#gl_nicest)
       glEnable_ (#GL_COLOR_MATERIAL)
       glEnable_(#GL_TEXTURE_2D)
      
      ProcedureReturn 1
    EndIf
  EndIf
EndProcedure
Procedure FPS(timer.l)
  Static FPSCount.l, FPS.l
  Static delay.l
  Protected t.l
  If timer = 0
    ProcedureReturn -1
  EndIf
  t = ElapsedMilliseconds()
  If t-delay > timer
    FPS = FPSCount*1000/timer
    FPSCount = 0
    delay = t
  Else
    FPSCount+1
  EndIf
  ProcedureReturn FPS
EndProcedure
Global SkyBoxList
Global Texture_1
Procedure GenerateSkyBox(pWidth.f, pHeight.f, pLength.f)
  Protected px.f, py.f, pz.f
  SkyBoxList = glGenLists_(1)
  glNewList_(SkyBoxList, #GL_COMPILE)
   px = - pWidth  / 2
   py = - pHeight / 2
   pz = - pLength / 2
   glBindTexture_(#GL_TEXTURE_2D, Texture_1)
   glBegin_(#GL_QUADS)
    glTexCoord2f_(0, 0); glVertex3f(px,          py,           pz);
    glTexCoord2f_(0, 1); glVertex3f(px,          py + pHeight, pz);
    glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py + pHeight, pz);
    glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py,           pz);
   glEnd_()
   glBindTexture_(#GL_TEXTURE_2D, Texture_1)
   glBegin_(#GL_QUADS);
    glTexCoord2f_(1, 0); glVertex3f(px,          py,           pz + pLength);
    glTexCoord2f_(1, 1); glVertex3f(px,          py + pHeight, pz + pLength);
    glTexCoord2f_(0, 1); glVertex3f(px + pWidth, py + pHeight, pz + pLength);
    glTexCoord2f_(0, 0); glVertex3f(px + pWidth, py,           pz + pLength);
   glEnd_()
   glBindTexture_(#GL_TEXTURE_2D, Texture_1)
   glBegin_(#GL_QUADS);
    glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py, pz);
    glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py, pz + pLength);
    glTexCoord2f_(0, 0); glVertex3f(px,          py, pz + pLength);
    glTexCoord2f_(0, 1); glVertex3f(px,          py, pz);
   glEnd_()
   glBindTexture_(#GL_TEXTURE_2D, Texture_1)
   glBegin_(#GL_QUADS);
    glTexCoord2f_(0, 0); glVertex3f(px,          py + pHeight, pz);
    glTexCoord2f_(0, 1); glVertex3f(px,          py + pHeight, pz + pLength);
    glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py + pHeight, pz + pLength);
    glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py + pHeight, pz);
   glEnd_()
   glBindTexture_(#GL_TEXTURE_2D, Texture_1)
   glBegin_(#GL_QUADS);
    glTexCoord2f_(1, 0); glVertex3f(px, py,           pz);
    glTexCoord2f_(0, 0); glVertex3f(px, py,           pz + pLength);
    glTexCoord2f_(0, 1); glVertex3f(px, py + pHeight, pz + pLength);
    glTexCoord2f_(1, 1); glVertex3f(px, py + pHeight, pz);
   glEnd_()
   glBindTexture_(#GL_TEXTURE_2D, Texture_1)
   glBegin_(#GL_QUADS);
    glTexCoord2f_(0, 0); glVertex3f(px + pWidth, py,           pz);
    glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py,           pz + pLength);
    glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py + pHeight, pz + pLength);
    glTexCoord2f_(0, 1); glVertex3f(px + pWidth, py + pHeight, pz);
   glEnd_()
  glEndList_()
EndProcedure
  
  OpenWindow(0, 0, 0, 800,600,  "test1", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(0), 10, 10, 500, 500, 0, 0, 0)
  hwnd = ScreenID()
  
  OpenGLScreen(screen.GLscreen,hwnd)
  
  UseTGAImageDecoder()
  UseJPEGImageDecoder()
  UsePNGImageDecoder()
  
  Global Texture_1  =  GLLoadAlphaTexture(1,"image","",0,0)
  
  GenerateSkyBox(256,256,256)
  
  Repeat
    
    Event = WaitWindowEvent(0)
    
    WindowID = EventWindow()
    
    GadgetID = EventGadget()
    
    EventType = EventType()
    
    ExamineKeyboard()
    ExamineMouse()
    
    AngleY + MouseDeltaX()*0.2
    AngleX + MouseDeltaY()*0.2
    
    glDepthMask_(#False)
    glMatrixMode_(#GL_MODELVIEW)
    glLoadIdentity_()
    glClear_(#GL_DEPTH_BUFFER_BIT)
    glRotatef_(AngleX, 1, 0, 0)
    glRotatef_(AngleY, 0, 1, 0)
    glCallList_(SkyBoxList)
    SwapBuffers_(screen\hdc)
    glDepthMask_(#True)
    
  Until Event = #PB_Event_CloseWindow Or GetAsyncKeyState_(#VK_ESCAPE)
ReleaseDC_(screen\hWnd,screen\hDC)