Hier mein Code:
Code: Alles auswählen
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