PureBoard
https://www.purebasic.fr/german/

[OpenGL] Wie verschiedene Texturen laden ?
https://www.purebasic.fr/german/viewtopic.php?f=4&t=30780
Seite 1 von 1

Autor:  Mijikai [ 28.04.2018 20:10 ]
Betreff des Beitrags:  [OpenGL] Wie verschiedene Texturen laden ?

Ich verstehe nicht warum ich immer nur die zuletzt geladene Textur sehe ??? :(

Hier mein Code:
Code:

UsePNGImageDecoder()

Procedure.i Texture(*Buffer)
  Protected Image.i
  Protected ImageBuffer.i
  Protected ImageBits.i
  Protected TextureHandle.i
  Protected Width.i
  Protected Height.i
  Image = CatchImage(#PB_Any,*Buffer)
  If IsImage(Image)
    If StartDrawing(ImageOutput(Image))
      ImageBuffer = DrawingBuffer()
      StopDrawing()
      ImageBits = ImageDepth(Image,#PB_Image_InternalDepth)
      Width = ImageWidth(Image)
      Height = ImageHeight(Image)
      glGenTextures_(1,@TextureHandle)
      glBindTexture_(#GL_TEXTURE_RECTANGLE,TextureHandle)
      glTexParameterf_(#GL_TEXTURE_RECTANGLE,#GL_TEXTURE_MIN_FILTER,#GL_LINEAR)
      glTexParameterf_(#GL_TEXTURE_RECTANGLE,#GL_TEXTURE_MAG_FILTER,#GL_LINEAR)
      glTexParameterf_(#GL_TEXTURE_RECTANGLE,#GL_TEXTURE_WRAP_S,#GL_CLAMP_TO_EDGE)
      glTexParameterf_(#GL_TEXTURE_RECTANGLE,#GL_TEXTURE_WRAP_T,#GL_CLAMP_TO_EDGE)
      If ImageBits = 32
        glTexImage2D_(#GL_TEXTURE_RECTANGLE,0,4,Width,Height,0,#GL_BGRA_EXT,#GL_UNSIGNED_BYTE,ImageBuffer)
      Else
        glTexImage2D_(#GL_TEXTURE_RECTANGLE,0,3,Width,Height,0,#GL_BGR_EXT,#GL_UNSIGNED_BYTE,ImageBuffer)
      EndIf
      ProcedureReturn TextureHandle
    EndIf
    FreeImage(Image)
  EndIf
EndProcedure

Procedure.i RenderTexture(X.f,Y.f,Width.f,Height.f,Texture.i)
  glBindTexture_(#GL_TEXTURE_2D,Texture)
  glBegin_(#GL_QUADS)
  glColor4f_(1,1,1,1)
  glTexCoord2f_(0,0)
  glVertex2f_(X,Y)
  glTexCoord2f_(Width,0)
  glVertex2f_(X + Width,Y)
  glTexCoord2f_(Width,Height)
  glVertex2f_(X + Width,Y + Height)
  glTexCoord2f_(0,Height)
  glVertex2f_(X,Y + Height)
  glEnd_()
EndProcedure

Procedure.i Test()
  Protected Texture1.i
  Protected Texture2.i
  Protected OpenGL.i
  If OpenWindow(0,0,0,400,400,"TestWindow",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If OpenGLGadget(1,0,0,400,400,#PB_OpenGL_NoDepthBuffer)
      glShadeModel_(#GL_SMOOTH)
      glEnable_(#GL_BLEND)
      glEnable_(#GL_TEXTURE_2D)
      glEnable_(#GL_TEXTURE_RECTANGLE)
      glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE_MINUS_SRC_ALPHA)
      glMatrixMode_(#GL_PROJECTION)
      glLoadIdentity_()
      glOrtho_(0,400,400,0,-1000,1000)
      glMatrixMode_(#GL_MODELVIEW)
      glLoadIdentity_()
      glClearColor_(0,0,0,0)         
      Texture1 = Texture(?T1)
      Texture2 = Texture(?T2)
      If Texture1 And Texture2
        Repeat
          glClear_ (#GL_COLOR_BUFFER_BIT)
          RenderTexture(100,100,32,32,Texture1)
          RenderTexture(100,200,32,32,Texture2)
          SetGadgetAttribute(1,#PB_OpenGL_FlipBuffers,#True)
        Until WindowEvent() = #PB_Event_CloseWindow
      EndIf
    EndIf
  EndIf
EndProcedure

Test()

DataSection
  T1:
  !dw 05089h, 0474Eh, 00A0Dh, 00A1Ah, 00000h, 00D00h, 04849h, 05244h, 00000h, 02000h, 00000h, 02000h, 00608h, 00000h, 07300h, 07A7Ah, 000F4h, 00000h, 07009h, 05948h, 00073h, 00E00h, 000C4h, 00E00h, 001C4h, 02B95h, 01B0Eh, 00000h, 08C00h, 04449h, 05441h, 0C358h, 097EDh, 009C1h, 03080h, 0450Ch, 05B7Fh, 01187h, 04C1Ch, 0489Dh
  !dw 04C1Ch, 032E8h, 03C6Dh, 06C79h, 0E31Ah, 0D041h, 06B9Fh, 0784Ah, 0E484h, 00685h, 08111h, 0D63Bh, 00190h, 09B00h, 0DE8Ch, 01112h, 0072Fh, 00801h, 08040h, 0F5D0h, 01CC0h, 0050Eh, 0013Fh, 02A00h, 0F34Ah, 02ECDh, 05693h, 0307Eh, 029F6h, 0F2B9h, 0D81Ah, 0802Dh, 0ED96h, 01334h, 0395Eh, 0210Eh, 0BA01h, 0B86Bh, 0FF20h, 003BCh
  !dw 01116h, 02445h, 01AD7h, 09456h, 0889Eh, 08438h, 0B004h, 002DFh, 0EDCDh, 0EF46h, 001FBh, 0575Ah, 072CDh, 01F8Eh, 021AFh, 005FFh, 02004h, 0D7C0h, 04E01h, 04052h, 0FB32h, 0877Ch, 0646Eh, 00000h, 00000h, 04549h, 0444Eh, 042AEh, 08260h
  T2:
  !dw 05089h, 0474Eh, 00A0Dh, 00A1Ah, 00000h, 00D00h, 04849h, 05244h, 00000h, 02000h, 00000h, 02000h, 00608h, 00000h, 07300h, 07A7Ah, 000F4h, 00000h, 07009h, 05948h, 00073h, 00E00h, 000C4h, 00E00h, 001C4h, 02B95h, 01B0Eh, 00000h, 07100h, 04449h, 05441h, 0C358h, 0FC63h, 0FFFFh, 0033Fh, 080B9h, 0E171h, 03499h, 00606h, 08606h
  !dw 0F1FFh, 0B326h, 035C8h, 08983h, 08061h, 0A8C1h, 04603h, 0301Dh, 000EAh, 04246h, 000E5h, 0AF2Ch, 00B93h, 09508h, 00311h, 0021Eh, 0942Ch, 004F8h, 0495Fh, 06C48h, 08DC8h, 0C226h, 00751h, 03230h, 0382Ch, 0369Dh, 043B2h, 0D880h, 08882h, 06CDCh, 0E838h, 0A20Bh, 00751h, 09D0Ch, 000BAh, 0D95Fh, 0494Eh, 0398Dh, 0B3F8h, 068E1h
  !dw 060BFh, 001D4h, 00EA3h, 0F618h, 0000Eh, 03C00h, 0312Fh, 0D2ADh, 0896Dh, 000CAh, 00000h, 04900h, 04E45h, 0AE44h, 06042h, 00082h
  EOD:
EndDataSection


Was mach ich falsch ? :freak: :coderselixir:

Autor:  ccode_new [ 28.04.2018 22:34 ]
Betreff des Beitrags:  Re: [OpenGL] Wie verschiedene Texturen laden ?

Hallo Mijikai,

ich bin jetzt wieder am Testen ;)

Du scheinst das selbe Problem wie Ich zu haben.

Als ersten Fehler ist zu nennen: Dein "TextureHandle" wird in beiden Fällen an der gleiche Speicherstelle geschrieben.
(Ob das so richtig ist?)

Wenn dies behoben wird ändert das aber nichts an der Ausgabe.

Deine zweite oder erste Textur wird aber angezeigt.

Kann es sein das danach auch nur die Farben nicht korrekt dargestellt werden ?

Ich habe auch immer noch mein Textur-Problem.

Autor:  Mijikai [ 28.04.2018 23:13 ]
Betreff des Beitrags:  Re: [OpenGL] Wie verschiedene Texturen laden ?

Habs gelöst :oops:
Hab was vergessenr:
Code:
glBindTexture_(#GL_TEXTURE_2D,Texture)

es sollte so aussehen:
Code:
glBindTexture_(#GL_TEXTURE_RECTANGLE,Texture)

jetzt gehts :mrgreen:

Autor:  ccode_new [ 28.04.2018 23:26 ]
Betreff des Beitrags:  Re: [OpenGL] Wie verschiedene Texturen laden ?

Ohhh!

Stimmt!

Ist mir auch gerade aufgefallen.

Super!

Kannst du mir bei dem Farbenproblem helfen ?

Die unteren 2 Farbquadrate werden in den falschen Farben dargestellt.
(siehe den Thread nebenan ;) )

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/