Nope, still doesnt work on my engine. Really weird.
If anyone wants to try it:
library.bmx
opengl.bmx
If anyone wants to try it:
library.bmx
'Application: opengl lib 'Author: nawi 'Description: the main library Global TexCount:Int = 0 'Constants Const MDL_CUBE = 1 Extern "win32" Function GetActiveWindow() = "GetActiveWindow@0" Function SetCursorPos(x,y) = "SetCursorPos@8" Function GetWindowRect(hWnd,lpRect:Rect) = "GetWindowRect@8" End Extern Type Rect Field X,Y,W,H End type Type Entity Field Name$ Field X#,Y#,Z# Field RotX#,RotY#,RotZ# Field Wireframe Field Alpha# Field Txt:Texture Global EntityList:Tlist Field PolygonList:TList Field Counter Field Cp#[6],Cc[6] Function Create:Entity(NewX#=0,NewY#=0,NewZ#=0) Local Ent:Entity = New Entity Ent.X# = NewX# Ent.Y# = NewY# Ent.Z# = NewZ# Ent.Alpha# = 1.0 Return Ent End Function Method New() If EntityList = Null Then EntityList = CreateList() If PolygonList = Null Then PolygonList = CreateList() EntityList.AddLast Self End Method Method ApplyTexture(NewTxt:Texture) Txt = NewTxt End Method Method Add(X#,Y#,Z#,U#=0.0,V#=0.0,R=255,G=255,B=255) If Counter = 2 Then Counter = 0 Local Poly:Polygon = New Polygon PolygonList.AddLast Poly Poly.P[0] = New Point Poly.P[0].X# = Cp#[0]; Poly.P[0].Y# = Cp#[1]; Poly.P[0].Z# = Cp#[2]; Poly.P[0].R = Cc[0]; Poly.P[0].G = Cc[1]; Poly.P[0].B = Cc[2]; Poly.P[0].U# = U#; Poly.P[0].V# = V# Poly.P[1] = New Point Poly.P[1].X# = Cp#[3]; Poly.P[1].Y# = Cp#[4]; Poly.P[1].Z# = Cp#[5]; Poly.P[1].R = Cc[3]; Poly.P[1].G = Cc[4]; Poly.P[1].B = Cc[5]; Poly.P[1].U# = U#; Poly.P[1].V# = V# Poly.P[2] = New Point Poly.P[2].X# = X#; Poly.P[2].Y# = Y#; Poly.P[2].Z# = Z#; Poly.P[2].R = R; Poly.P[2].G = G; Poly.P[2].B = B; Poly.P[2].U# = U#; Poly.P[2].V# = V# Else Cp#[Counter*3] = X# Cp#[Counter*3+1] = Y# Cp#[Counter*3+2] = Z# Cc[Counter*3] = R Cc[Counter*3+1] = G Cc[Counter*3+2] = B Counter = Counter + 1 EndIf End Method Method Turn(AddX#=0,AddY#=0,AddZ#=0) RotX# = RotX# + AddX# RotY# = RotY# + AddY# RotZ# = RotZ# + AddZ# If RotX# > 360 Then RotX# = 0 If RotY# > 360 Then RotY# = 0 If RotZ# > 360 Then RotZ# = 0 If RotX# < 0 Then RotX# = 360 If RotY# < 0 Then RotY# = 360 If RotZ# < 0 Then RotZ# = 360 End Method Method Rotate(NewX#=0,NewY#=0,NewZ#=0) RotX# = NewX# RotY# = NewY# RotZ# = NewZ# If RotX# > 360 Then RotX# = 0 If RotY# > 360 Then RotY# = 0 If RotZ# > 360 Then RotZ# = 0 If RotX# < 0 Then RotX# = 360 If RotY# < 0 Then RotY# = 360 If RotZ# < 0 Then RotZ# = 360 End Method Method SetColor(NewR,NewG,NewB) For Local Pol:Polygon = EachIn PolygonList Pol.P[0].R = NewR Pol.P[0].G = NewG Pol.P[0].B = NewB Pol.P[1].R = NewR Pol.P[1].G = NewG Pol.P[1].B = NewB Pol.P[2].R = NewR Pol.P[2].G = NewG Pol.P[2].B = NewB Next End Method Method AddPrimitive(ModelType) If ModelType = MDL_CUBE Then 'FRONT TRI 1 Self.Add(-1,1,1,0,1) Self.Add(-1,-1,1,0,0) Self.Add(1,1,1,1,1) 'FRONT TRI2 Self.Add(-1,-1,1,0,0) Self.Add(1,-1,1,1,0) Self.Add(1,1,1,1,1) 'RIGHT TRI1 Self.Add(1,1,1) Self.Add(1,-1,1) Self.Add(1,-1,-1) 'RIGHT TRI2 Self.Add(1,1,1) Self.Add(1,-1,-1) Self.Add(1,1,-1) 'BACK TRI1 Self.Add(1,1,-1) Self.Add(1,-1,-1) Self.Add(-1,-1,-1) 'BACK TRI2 Self.Add(1,1,-1) Self.Add(-1,-1,-1) Self.Add(-1,1,-1) 'LEFT TRI1 Self.Add(-1,1,-1) Self.Add(-1,-1,-1) Self.Add(-1,-1,1) 'LEFT TRI2 Self.Add(-1,1,-1) Self.Add(-1,-1,1) Self.Add(-1,1,1) 'BOTTOM TRI1 Self.Add(-1,-1,1) Self.Add(-1,-1,-1) Self.Add(1,-1,-1) 'BOTTOM TRI2 Self.Add(-1,-1,1) Self.Add(1,-1,-1) Self.Add(1,-1,1) 'TOP TRI1 Self.Add(1,1,-1) Self.Add(-1,1,-1) Self.Add(-1,1,1) 'TOP TRI2 Self.Add(1,1,1) Self.Add(1,1,-1) Self.Add(-1,1,1) EndIf End Method Method AddModel(Filename$) 'not done '.3DS If Lower(Right$(FileName$,4) = ".3ds") Then Local Chunk_ID:Short,Chunk_Length,Chunk_Quantiny,Chunk_Flags,i Local File:TStream = OpenFile(FileName$,1,0) If File Then While Not Eof(File) Chunk_ID = ReadShort(File) Chunk_Length = ReadInt(File) 'Print Chunk_ID Select Chunk_ID Case $4d4d 'Main chunk Print "Found main chunk!" Case $3d3d '3d editor chunk Print "Found 3d editor chunk!" Case $4000 'Object chunk Print "Found object chunk!" 'Read model name Repeat i = ReadByte(File) Name$ = Name$ + Asc(i) Until Eof(File) Or (Asc(i) = 0) Or (i = 13) Print Name$ End Select 'Seek File.Seek(File.Pos()+Chunk_Length-6) Wend EndIf EndIF End Method Method Move(AddX#=0,AddY#=0,AddZ#=0) X# = X# + Cos(RotY#) * AddX# Y# = Y# + Sin(RotZ#) * AddX# Z# = Z# + Sin(RotY#) * AddX# Y# = Y# + Cos(RotX#) * -AddY# X# = X# + Sin(-RotY#) * AddZ# Y# = Y# + Sin(RotX#) * AddZ# Z# = Z# + Cos(-RotY#) * AddZ# End Method End type Type Polygon Field P:Point[3] End type Type Point Field X#,Y#,Z# Field U#,V# Field R,G,B End type Type Graphics Field Width,Height,Depth,Screen Field Window,GetRect:Rect Field FPSTimer,FPSCounter,FPSShow Function Start:Graphics(NewWidth,NewHeight,NewDepth=32,NewScreen=0) Local Gfx:Graphics = New Graphics Gfx.Width = NewWidth Gfx.Height = NewHeight Gfx.Depth = NewDepth Gfx.Screen = NewScreen Local Flags = BGL_BACKBUFFER|BGL_DEPTHBUFFER If NewScreen = 0 Then Flags = Flags + BGL_FULLSCREEN bglCreateContext(Gfx.Width,Gfx.Height,Gfx.Depth,0,Flags) glViewport(0,0,Gfx.Width,Gfx.Height) Gfx.Window = GetActiveWindow() glShadeModel(GL_SMOOTH) glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glClearColor(0,0,0, 0.0) glColor3f(1.0, 1.0, 1.0) glClearDepth(1.0) glEnable(GL_CULL_FACE) glEnable(GL_DEPTH_TEST) glDepthFunc(GL_LEQUAL) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0, Float(Gfx.Width)/Float(Gfx.Height), 0.1, 100.0) glMatrixMode(GL_MODELVIEW) glLoadIdentity() Gfx.GetRect = New Rect Return Gfx End Function Method Viewport(NewX,NewY,NewWidth,NewHeight) glViewport(NewX,NewY,NewWidth,NewHeight) End Method Method ClearColor(R,G,B) glClearColor(R/255.0,G/255.0,B/255.0, 0.0) End Method Method Render(Cam:Camera) glLoadIdentity() 'Position camera glRotatef(Cam.RotX#,1.0,0,0) glRotatef(Cam.RotY#,0,1.0,0) glRotatef(Cam.RotZ#,0,0,1.0) glTranslatef(Cam.X#,Cam.Y#,Cam.Z#) glPopMatrix() 'Entities For Local Ent:Entity = EachIn Entity.EntityList For Local Pol:Polygon = EachIn Ent.PolygonList glPushMatrix() 'Texture If Ent.Txt <> Null Then glEnable(GL_TEXTURE_2D) glBindTexture(GL_TEXTURE_2D,Ent.Txt.GLID) EndIf 'Alpha If Ent.Alpha# <> 1.0 Then glEnable(GL_BLEND) EndIf 'WireFrame If Ent.Wireframe then glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) glDisable(GL_CULL_FACE) EndIf 'Position entity glTranslatef(Ent.X#,Ent.Y#,Ent.Z#) glRotatef(Ent.RotX#,1.0,0,0) glRotatef(Ent.RotY#,0,1.0,0) glRotatef(Ent.RotZ#,0,0,1.0) 'Draw glBegin(GL_TRIANGLES) 'Tri1 If Ent.Alpha# <> 1.0 Then glColor4f(Pol.P[0].R/255.0,Pol.P[0].G/255.0,Pol.P[0].B/255.0,Ent.Alpha#) Else glColor3f(Pol.P[0].R/255.0,Pol.P[0].G/255.0,Pol.P[0].B/255.0) EndIf glTexCoord2f(Pol.P[0].U#,Pol.P[0].V#) glVertex3f(Pol.P[0].X#,Pol.P[0].Y#,Pol.P[0].Z#) 'Tri2 If Ent.Alpha# <> 1.0 Then glColor4f(Pol.P[1].R/255.0,Pol.P[1].G/255.0,Pol.P[1].B/255.0,Ent.Alpha#) Else glColor3f(Pol.P[1].R/255.0,Pol.P[1].G/255.0,Pol.P[1].B/255.0) EndIf glTexCoord2f(Pol.P[1].U#,Pol.P[1].V#) glVertex3f(Pol.P[1].X#,Pol.P[1].Y#,Pol.P[1].Z#) 'Tri3 If Ent.Alpha# <> 1.0 Then glColor4f(Pol.P[2].R/255.0,Pol.P[2].G/255.0,Pol.P[2].B/255.0,Ent.Alpha#) Else glColor3f(Pol.P[2].R/255.0,Pol.P[2].G/255.0,Pol.P[2].B/255.0) EndIf glTexCoord2f(Pol.P[2].U#,Pol.P[2].V#) glVertex3f(Pol.P[2].X#,Pol.P[2].Y#,Pol.P[2].Z#) glEnd() 'Alpha If Ent.Alpha# <> 1.0 Then glDisable(GL_BLEND) EndIf 'Texture If Ent.Txt <> Null Then glDisable(GL_TEXTURE_2D) EndIf 'WireFrame If Ent.Wireframe then glPolygonMode(GL_FRONT, GL_FILL) glEnable(GL_CULL_FACE) EndIf glPopMatrix() Next Next 'FPS Counter FPSCounter = FPSCounter + 1 If MilliSecs() > FPSTimer + 999 Then FPSTimer = MilliSecs() FPSShow = FPSCounter FPSCounter = 0 EndIf End Method Method Cls() glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) End Method Method Flip() bglSwapBuffers() End Method Method CenterMouse() GetWindowRect(Window,GetRect) SetCursorPos(GetRect.X-Width/2,GetRect.Y-Height/2) End Method Method FPS() Return FPSShow End Method End type Type Texture Field GLID Field Priority# Function Create:Texture(Filename$) Local Txt:Texture = New Texture Local Pixmap:TPixmap = LoadPixmap(Filename$) If Not Pixmap Then Print "Could not load texture!" Return Null EndIf Txt.GLID = bglTexFromPixmap(Pixmap) If Not Txt.GLID Then Print "Could not apply texture to opengl!" Return Null EndIf glBindTexture(GL_TEXTURE_2D, Txt.GLID) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) Pixmap = Null Return Txt End Function End type Type Camera Field X#,Y#,Z# Field RotX#,RotY#,RotZ# Function Create:Camera(NewX#=0,NewY#=0,NewZ#=0) Local Cam:Camera = New Camera Cam.X# = NewX# Cam.Y# = NewY# Cam.Z# = NewZ# Return Cam End Function Method Turn(AddX#=0,AddY#=0,AddZ#=0) RotX# = RotX# + AddX# RotY# = RotY# + AddY# RotZ# = RotZ# + AddZ# If RotX# > 360 Then RotX# = 0 If RotY# > 360 Then RotY# = 0 If RotZ# > 360 Then RotZ# = 0 If RotX# < 0 Then RotX# = 360 If RotY# < 0 Then RotY# = 360 If RotZ# < 0 Then RotZ# = 360 End Method Method Rotate(NewX#=0,NewY#=0,NewZ#=0) RotX# = NewX# RotY# = NewY# RotZ# = NewZ# If RotX# > 360 Then RotX# = 0 If RotY# > 360 Then RotY# = 0 If RotZ# > 360 Then RotZ# = 0 If RotX# < 0 Then RotX# = 360 If RotY# < 0 Then RotY# = 360 If RotZ# < 0 Then RotZ# = 360 End Method Method Move(AddX#=0,AddY#=0,AddZ#=0) X# = X# + Cos(RotY#) * AddX# Y# = Y# + Sin(RotZ#) * AddX# Z# = Z# + Sin(RotY#) * AddX# Y# = Y# + Cos(RotX#) * -AddY# X# = X# + Sin(-RotY#) * AddZ# Y# = Y# + Sin(RotX#) * AddZ# Z# = Z# + Cos(-RotY#) * AddZ# End Method End type
opengl.bmx
'Application: opengl test 'Author: nawi 'Description: test the opengl lib ' Strict 'for mouselook Local MX,MY Include "library.bmx" 'Initialize Local System:Graphics = Graphics.Start(800,600,32,1) 'Create entity Local Cube:Entity = Entity.Create() 'Cube.AddPrimitive(MDL_CUBE) Cube.Add(-1,1,-1,0,0) Cube.Add(-1,-1,-1,0,1) Cube.Add(1,-1,-1,1,1) Cube.Add(1,-1,-1,0,0) Cube.Add(1,1,-1,1,0) Cube.Add(-1,1,-1,1,1) Cube.SetColor(107,230,255) Local Cube2:Entity = Entity.Create(-4) Cube2.AddPrimitive(MDL_CUBE) Cube2.Alpha# = 0.5 Cube2.SetColor(255,245,68) Local Fighter:Entity = Entity.Create(7) 'Fighter.AddModel("fighter.3ds") Fighter.AddPrimitive(MDL_CUBE) Fighter.Wireframe = True 'Create camera Local Cam:Camera = Camera.Create(0,0,-10) 'Load texture Local Txt:Texture = Texture.Create("tex.bmp") Cube.ApplyTexture(Txt) Repeat System.Cls() 'Mouselook Cam.Turn(Float(MouseY() - MY)/10.0,Float(MouseX() - MX)/10.0,0) System.CenterMouse() MX = MouseX() MY = MouseY() 'move camera If KeyDown(KEY_UP) Then Cam.Move(0,0,0.07) If KeyDown(KEY_DOWN) Then Cam.Move(0,0,-0.07) If KeyDown(KEY_LEFT) Then Cam.Move(0.07) If KeyDown(KEY_RIGHT) Then Cam.Move(-0.07) If KeyDown(KEY_Q) Then Cam.Move(0,0.07) If KeyDOWN(KEY_A) Then Cam.Move(0,-0.07) 'rotate cube Cube2.Turn(0.2,0.2,0.1) System.Render(Cam) System.Flip() Print "FPS " + System.FPS() + " MEM " + MemAlloced() FlushMem() Until KeyHit(KEY_ESCAPE)