right here we go it now has error checking and ive cleaned it up and got it as close to example 3 as i could the problem with making it exactly like example 3 is that i need to be able to repoint the frame between my two textures.
which brings me too would more of you guys like to test this for me i need to know how compatible it is there should be no more crashes.
#Include "GenioGL.Bi"
#Include "GL/GLext.bi"
CONST SWIDTH = 800
CONST SHEIGHT = 600
GenioGraphics( SWIDTH , SHEIGHT , 32 , WINDOWED )
'Type For The Extensions to get to the framebuffer
Type FrameBufferEXT
glIsRenderbufferEXT As PFNGLISRENDERBUFFEREXTPROC
glBindRenderbufferEXT As PFNGLBINDRENDERBUFFEREXTPROC
glDeleteRenderbuffersEXT As PFNGLDELETERENDERBUFFERSEXTPROC
glGenRenderbuffersEXT As PFNGLGENRENDERBUFFERSEXTPROC
glRenderbufferStorageEXT As PFNGLRENDERBUFFERSTORAGEEXTPROC
glGetRenderbufferParameterivEXT As PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC
glIsFramebufferEXT As PFNGLISFRAMEBUFFEREXTPROC
glBindFramebufferEXT As PFNGLBINDFRAMEBUFFEREXTPROC
glDeleteFramebuffersEXT As PFNGLDELETEFRAMEBUFFERSEXTPROC
glGenFramebuffersEXT As PFNGLGENFRAMEBUFFERSEXTPROC
glCheckFramebufferStatusEXT As PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC
glFramebufferTexture1DEXT As PFNGLFRAMEBUFFERTEXTURE1DEXTPROC
glFramebufferTexture2DEXT As PFNGLFRAMEBUFFERTEXTURE2DEXTPROC
glFramebufferTexture3DEXT As PFNGLFRAMEBUFFERTEXTURE3DEXTPROC
glFramebufferRenderbufferEXT As PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC
glGetFramebufferAttachmentParameterivEXT As PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC
glGenerateMipmapEXT As PFNGLGENERATEMIPMAPEXTPROC
frameBuffer As Gluint
depthRenderBuffer As GLuint
End Type
Type TexType
TWidth As Integer
THeight As Integer
Buffer As GLuint
End Type
Type KeyTracker
Key As Ubyte ptr
Esckey as Uinteger
Up As uinteger
Down As Uinteger
KLeft As Uinteger
KRight As Uinteger
Z As Uinteger
End Type
Declare sub GenioCheckKeys( Keys As KeyTracker )
Declare Sub GLInitFbuff( Fbuffer As FrameBufferEXT )
Declare Sub GLLockFbuff( Fbuffer As FrameBufferEXT , Tex As TexType )
Declare Sub UnlockFBuff( Fbuffer As FrameBufferEXT )
Declare Sub Dellet_Demo()
Declare Sub SetUpBlankTexture( Tex As TexType , Byval TWidth As Integer , Byval THeight As Integer )
Declare Function CheckFrameBufferStatus( Fbuffer As FrameBufferEXT ) As Integer
Dim Shared As KeyTracker Key
Dim Shared As FrameBufferEXT GLCapture
Dim Shared As TexType Texture1, Texture2
SetUpBlankTexture( Texture1 , 512 , 512 )
SetUpBlankTexture( Texture2 , 512 , 512 )
dim shared light as Geniolight
Dim Shared Camera As GenioEntity PTR
Dim Shared TexCube As GenioEntity PTR
Dim Shared TexCube1 As GenioEntity PTR
Dim Shared Cube As GenioEntity PTR
GLInitFbuff( GLCapture )
CreateLightEntity( light , GENIOLIGHT0 , 1.0 , 2.0 , -2.0 )
Camera = SetUpCamera()
TexCube = Cube_Mesh(LightMapOn)
TexCube1 = Cube_Mesh(LightMapOn)
Cube = Cube_Mesh(LightMapOn)
scale_entity( TexCube , 1 , 1 , 1 )
Set_Entity_Position( TexCube , 0 , 0 , -5 )
scale_entity( TexCube1 , 1 , 1 , 1 )
Set_Entity_Position( TexCube1 , 0 , 0 , -5 )
scale_entity( Cube , 1 , 1 , 1 )
Set_Entity_Position( Cube , 0 , 0 , -5 )
Do
GenioCheckKeys( Key )
GLLockFBuff( GLCapture , Texture1 )
glClearColor( 1.0f, 0.0f, 0.5f, 1.0f )
GenioClear()
SetEntity_Rgb( TexCube , 255 , 255 , 0 )
Rotate_Entity( TexCube , 0.1 , 0.4 , 1 )
DrawEntity( TexCube )
unLockFBuff( GLCapture )
GLLockFBuff( GLCapture , Texture2 )
glClearColor( 0.0f, 0.0f, 0.5f, 1.0f )
GenioClear()
SetEntity_Rgb( TexCube1 , 255 , 255 , 0 )
Rotate_Entity( TexCube1 , 0.1 , 0.4 , 1 )
DrawEntity( TexCube1 , Texture1.Buffer )
unLockFBuff( GLCapture )
glClearColor( 0.0f, 0.0f, 1.0f, 1.0f )
GenioClear()
Rotate_Entity( Cube , 0.1 , 0.2 , -0.02 )
DrawEntity( Cube , Texture2.Buffer )
GenioRender( Camera )
loop until( inkey$ = chr$( 27 ) )
Dellet_Demo()
End
Sub Dellet_Demo()
DeleteCamera( Camera )
DestroyEntity( Cube )
DestroyEntity( TexCube )
DestroyEntity( TexCube1 )
End Sub
sub GenioCheckKeys( Keys As KeyTracker )
Keys.Up = multikey( SC_UP )
Keys.Down = multikey( SC_DOWN )
Keys.KLeft = multikey( SC_LEFT )
Keys.KRight = multikey( SC_RIGHT )
Keys.Z = multikey( SC_Z )
end sub
Sub GLInitFbuff( Fbuffer As FrameBufferEXT )
dim extensions as string
extensions = *glGetString(GL_EXTENSIONS)
If strstr( extensions , ( "GL_EXT_framebuffer_object" ) ) > 0 Then
Fbuffer.glIsRenderbufferEXT = Cast( PFNGLISRENDERBUFFEREXTPROC , wglGetProcAddress("glIsRenderbufferEXT") )
Fbuffer.glBindRenderbufferEXT = Cast( PFNGLBINDRENDERBUFFEREXTPROC , wglGetProcAddress("glBindRenderbufferEXT") )
Fbuffer.glDeleteRenderbuffersEXT = Cast( PFNGLDELETERENDERBUFFERSEXTPROC , wglGetProcAddress("glDeleteRenderbuffersEXT") )
Fbuffer.glGenRenderbuffersEXT = Cast( PFNGLGENRENDERBUFFERSEXTPROC , wglGetProcAddress("glGenRenderbuffersEXT") )
Fbuffer.glRenderbufferStorageEXT = Cast( PFNGLRENDERBUFFERSTORAGEEXTPROC , wglGetProcAddress("glRenderbufferStorageEXT") )
Fbuffer.glGetRenderbufferParameterivEXT = Cast( PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC , wglGetProcAddress("glGetRenderbufferParameterivEXT") )
Fbuffer.glIsFramebufferEXT = Cast( PFNGLISFRAMEBUFFEREXTPROC , wglGetProcAddress("glIsFramebufferEXT") )
Fbuffer.glBindFramebufferEXT = Cast( PFNGLBINDFRAMEBUFFEREXTPROC , wglGetProcAddress("glBindFramebufferEXT") )
Fbuffer.glDeleteFramebuffersEXT = Cast( PFNGLDELETEFRAMEBUFFERSEXTPROC , wglGetProcAddress("glDeleteFramebuffersEXT") )
Fbuffer.glGenFramebuffersEXT = Cast( PFNGLGENFRAMEBUFFERSEXTPROC , wglGetProcAddress("glGenFramebuffersEXT") )
Fbuffer.glCheckFramebufferStatusEXT = Cast( PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC , wglGetProcAddress("glCheckFramebufferStatusEXT") )
Fbuffer.glFramebufferTexture1DEXT = Cast( PFNGLFRAMEBUFFERTEXTURE1DEXTPROC , wglGetProcAddress("glFramebufferTexture1DEXT") )
Fbuffer.glFramebufferTexture2DEXT = Cast( PFNGLFRAMEBUFFERTEXTURE2DEXTPROC , wglGetProcAddress("glFramebufferTexture2DEXT") )
Fbuffer.glFramebufferTexture3DEXT = Cast( PFNGLFRAMEBUFFERTEXTURE3DEXTPROC , wglGetProcAddress("glFramebufferTexture3DEXT") )
Fbuffer.glFramebufferRenderbufferEXT = Cast( PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC , wglGetProcAddress("glFramebufferRenderbufferEXT") )
Fbuffer.glGetFramebufferAttachmentParameterivEXT = Cast( PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC , wglGetProcAddress("glGetFramebufferAttachmentParameterivEXT") )
Fbuffer.glGenerateMipmapEXT = Cast( PFNGLGENERATEMIPMAPEXTPROC , wglGetProcAddress("glGenerateMipmapEXT") )
Else
MessageBox (0, 0,"Sorry your hardware does not support the extension", MB_OK or MB_ICONINFORMATION)
End
End If
FBuffer.glGenFramebuffersEXT( 1, @FBuffer.frameBuffer )
FBuffer.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, Fbuffer.frameBuffer )
FBuffer.glGenRenderbuffersEXT( 1, @FBuffer.depthRenderBuffer )
FBuffer.glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, FBuffer.depthRenderBuffer )
FBuffer.glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 512 , 512 )
FBuffer.glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT , GL_DEPTH_ATTACHMENT_EXT , GL_RENDERBUFFER_EXT, FBuffer.depthRenderBuffer )
End Sub
Sub SetUpBlankTexture( Tex As TexType , Byval TWidth As Integer , Byval THeight As Integer )
glGenTextures( 1, @Tex.Buffer )
glBindTexture( GL_TEXTURE_2D, Tex.Buffer )
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, TWidth , THeight, 0, GL_RGB, GL_UNSIGNED_BYTE, 0 )
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR )
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR )
Tex.TWidth = TWidth
Tex.THeight = THeight
End Sub
Sub GLLockFbuff( Fbuffer As FrameBufferEXT , Tex As TexType )
Dim As Gluint Status
glViewport( 0, 0, Tex.TWidth , Tex.THeight )
glBindTexture(GL_TEXTURE_2D, 0)
FBuffer.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, Fbuffer.frameBuffer )
FBuffer.glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT , GL_COLOR_ATTACHMENT0_EXT , GL_TEXTURE_2D , Tex.buffer , 0 )
'check to see if the framebuffer is ok
Status = CheckFrameBufferStatus( Fbuffer )
If Status = 0 then
MessageBox ( 0,0, "FrameBuffer Error", MB_OK or MB_ICONINFORMATION )
Dellet_Demo()
End
EndIf
If Status = 2 then
MessageBox ( 0,0, "Need A Diffrent Format", MB_OK or MB_ICONINFORMATION )
Dellet_Demo()
End
EndIf
' Every thing Must Have Went to plan
End Sub
Function CheckFrameBufferStatus( Fbuffer As FrameBufferEXT ) As Integer
Dim as GLenum status
status = Fbuffer.glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT )
If Status = GL_FRAMEBUFFER_COMPLETE_EXT then
'Every Thing is fine
Return (1)
ElseIf Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT then
'need to choose a diffrent format
Return (2)
Else
'error will fail on hardware
Return(0)
EndIf
End Function
Sub UnlockFBuff( Fbuffer As FrameBufferEXT )
Fbuffer.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 )
glViewport( 0 , 0 , SWIDTH , SHEIGHT )
End Sub
btw shockwave would you mind retring this for me and telling me what message you get mate.
cheers.