Ich fange mit mit Opengl an auf Purebasic.
Habe schon einiges mit Google unternommen und viel über Opengl gelesen.
Nun die Praxis. Ich möchte mit dem unteren Openglprogramm(aus diesem Forum) ein Bild(Texture )einladen, BMP oder TGA mit Alphakanal.
Die Farbe schwarz soll tranparent werden.
Ich weiss nicht, wie ich dieses Loadprogramm in das Openglfenster intregiere.
Wer kann mir mal mit einem einfachen Beispiel unter die Arme greifen,um ein Bild darzustellen, wo die schwarzen Pixel durchsichtig sind.
Bin für die Hilfe sehr dankbar.
MFG
Code: Alles auswählen
; OpenGL Fenster
;
IncludeFile "OpenGL.pbi"
Structure GLscreen
  container.l
  hWnd.l
  hDC.l
EndStructure
Procedure OpenGLScreen(*p.GLscreen,x,y,w,h)
  If *p
    container = ContainerGadget(#PB_Any,x,y,w,h)
    If container
      hwnd = GadgetID(container)
      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)
      *p\container = container
      *p\hWnd      = GadgetID(container)
      *p\hDC       = hdc
      ProcedureReturn 1
    EndIf
  EndIf
EndProcedure
If OpenWindow(0, 0, 0, 800,600,  "TEST",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(0))
  If OpenGLScreen(screen.GLscreen,10,10,400,400)
    HideWindow(0,0)
    Repeat
      glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
      glClearColor_(1.0,0.0,0.0,0.0)
      
      
      
      SwapBuffers_(screen\hdc)
      Event = WaitWindowEvent()
      
    Until Event = #PB_Event_CloseWindow
    ReleaseDC_(screen\hWnd,screen\hDC)
  EndIf
EndIf
Code: Alles auswählen
Procedure LoadAlphaTexture(ID, Filename.s, TransparentColor)
  img = LoadImage(#PB_Any, Filename.s)
  Width.l=ImageWidth()
  Height.l=ImageHeight()
  Size.l=Width * Height
 
  Dim ImageData.b(Size*4)
 
  StartDrawing(ImageOutput())
  i = 0
  For Y=0 To Height-1
    For X=0 To Width-1
     
      Color = Point(X,Y)
      ImageData(i)=Red(Color)
      i+1
      ImageData(i)=Green(Color)
      i+1
      ImageData(i)=Blue(Color)
      i+1
      If Color = TransparentColor
        ImageData(i)=0
      Else
        ImageData(i)=$FF
      EndIf
      i+1
   
    Next
  Next
  StopDrawing()
 
  glGenTextures_(1, @Tex)
 
  glBindTexture_(#GL_TEXTURE_2D, Tex)
  glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
  glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
  glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData())
 
  ProcedureReturn Tex
EndProcedure

 . Deshalb hier ein Beispiel ohne die GL:
 . Deshalb hier ein Beispiel ohne die GL:

