Dark Bit Factory & Gravity
PROGRAMMING => General coding questions => Topic started by: Shockwave on October 03, 2008
-
This program uses the very small framework, but because the framework uses some tricks it is not compatible enough for this program which I am giving to a friend to run on computers in his computer shop.
Rbz kindly posted a larger, more compatible framework and I susequently tried to port this code into Rbz's framework.
Problems however arose initially as I could not include glu.bi, I tend to use glu.bi to build mipmaps and also I like to use some of the features of glut.bi too.
The other thing is that because the programming style of the better layout is much different to my own more procedural approach to programming, I could not grasp it at all.
I don't have a clue how the larger framework works, I cant even work out what part of the framework is the main draw loop.. Where I should be setting up my textures and materials etc, I am ashamed to say that I have looked very hard and I have to finally admit failure and ask for help. Sorry.
What I would like to know is how can I make the listing I have attached more compatible with vista?
For example I want to make sure that the window is properly destroyed on exit.
Also I would ideally like to be able to change the framework I am using so that I can specify a screen resolution in pixels and not to just grab the dimensions of the desktop as it does now.
I have tried, I suspect it wouldn't need many changes but I am buggered if I can work it out.
All apologies and thanks for taking a look.
Btw it doesnt matter to me at all if the exe increases even by 100k.
-
The main loop for compatible framework is here:
'
' Process windows messages
'
while(wMsg.message <> WM_QUIT)
if (PeekMessage (@wMsg,NULL,0,0,PM_REMOVE) <> 0) then
DispatchMessage(@wMsg)
else
glDraw()
SwapBuffers (hdcWin)
end if
wend
You can add all your rendering comands inside glDraw() function.
To init your opengl just call a glInit() function before this main loop and it should work fine.
For some reason you need to include your gl libs first or it will give you an error:
#INCLUDE "GL/gl.bi"
#INCLUDE "GL/glu.bi"
#INCLUDE "GL/glut.bi"
#INCLUDE "windows.bi"
-
Ok, that helps quite a bit Rbz, but I dont really relish the idea of moving this particular intro over to it. I'll use the better framework in the future, what I am really after is to make this one a little safer just for now so that I can give the intro to its new owner and carry on with some of the other things I have to make.
-
Ok, I misunderstand you :)
For example I want to make sure that the window is properly destroyed on exit.
Just add ExitProcess(0) after your main loop.
Also I would ideally like to be able to change the framework I am using so that I can specify a screen resolution in pixels and not to just grab the dimensions of the desktop as it does now.
You need to add this code below, and then just call ChangeScreenResolution with correct screen size, inside InitOGL() subroutione.
'DEVMODE bug, found the cure here --> http://www.freebasic.net/forum/viewtopic.php?t=5659&highlight=devmode
'Will be corrected by Victor in the next freebasic update
#undef DEVMODE
Type DEVMODE
dmDeviceName As Zstring * CCHDEVICENAME
dmSpecVersion As WORD
dmDriverVersion As WORD
dmSize As WORD
dmDriverExtra As WORD
dmFields As DWORD
dmOrientation As Short
dmPaperSize As Short
dmPaperLength As Short
dmPaperWidth As Short
dmScale As Short
dmCopies As Short
dmDefaultSource As Short
dmPrintQuality As Short
dmColor As Short
dmDuplex As Short
dmYResolution As Short
dmTTOption As Short
dmCollate As Short
dmFormName As Zstring * CCHFORMNAME
dmLogPixels As WORD
dmBitsPerPel As DWORD
dmPelsWidth As DWORD
dmPelsHeight As DWORD
dmDisplayFlags As DWORD
dmDisplayFrequency As DWORD
dmICMMethod As DWORD
dmICMIntent As DWORD
dmMediaType As DWORD
dmDitherType As DWORD
dmReserved1 As DWORD
dmReserved2 As DWORD
dmPanningWidth As DWORD
dmPanningHeight As DWORD
End Type
'Change The Screen Resolution
sub ChangeScreenResolution (byval wwidth as integer, byval hheight as integer, byval bitsPerPixel as integer)
dim dmScreenSettings as DEVMODE
ZeroMemory(@dmScreenSettings, sizeof (DEVMODE))
dmScreenSettings.dmSize = sizeof(DEVMODE)
dmScreenSettings.dmPelsWidth = wwidth
dmScreenSettings.dmPelsHeight = hheight
dmScreenSettings.dmBitsPerPel = bitsPerPixel
dmScreenSettings.dmFields = DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT
if (ChangeDisplaySettings (cast(LPDEVMODE,@dmScreenSettings), CDS_FULLSCREEN) <> DISP_CHANGE_SUCCESSFUL) then
MessageBox(NULL,"Change Display Error!", szAppName,MB_OK or MB_ICONEXCLAMATION)
end -1
end if
end sub
-
K+ Thanks RBZ :)
-
I think the other problem with the tiny framework is the HWND/Window that is created is sub-classed off the "Edit" control. When the Window gets minimised or changes size in another way the edit control class doesn't know what to do and it gets screwed up. You should create a new class for all your application's windows, like this:
Dim wc as WNDCLASS
Dim classname as String
classname="COCKSHAVE"
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC
wc.lpfnWndProc = cast(WNDPROC, DefWindowProc)
wc.cbClsExtra = 0
wc.cbWndExtra = 0
wc.hInstance = GetModuleHandle(NULL)
wc.hIcon = 0
wc.hCursor = LoadCursor( NULL, IDC_ARROW )
wc.hbrBackground = 0
wc.lpszMenuName = NULL
wc.lpszClassName = classname
RegisterClass(@wc)
dim as integer style = WS_OVERLAPPED Or WS_SYSMENU Or WS_CAPTION
dim as integer exstyle = WS_EX_APPWINDOW
gameWindow = CreateWindowEx(
0,
classname, // class
"Shockwave's Demo",
style,
CW_USEDEFAULT,CW_USEDEFAULT, // init. x,y pos
SCREEN_WIDTH,SCREEN_HEIGHT,
NULL, // parent window
NULL, // menu handle
wc.hInstance, // program handle
NULL // create parms
)
Forgive me, it was in C and I've tried to do the port to FB without testing it...
At the moment the tiny code has 'classname' set to "EDIT" which is a built-in class.
At some point you should create your own WindowProc to go where DefWindowProc goes so you can handle messages Windows sends you - like paint messages, keyboard messages, mouse move etc.
Jim
-
Fair play to you Jim.
You and Rbz have saved my bacon more times than I'd like to admit :) Thanks very much.
-
Ok, I have almost got it working :)
After I tried what Rbz advised it wouldn't compile, I realised then that I needed memset so I included crt.bi as well which fixed that.
The screen resolution changes niecely now but the viewport is messed up with the screen having a black border, I have tried several ways to fix this, I'll keep trying but in the meantime here it is;
(needs the attachments from the first post)
'
' (STUS COMPUTERS)
'
'
'-------------------------------------------------------------------------------
#INCLUDE "GL/gl.bi"
#INCLUDE "GL/glu.bi"
#INCLUDE "GL/glut.bi"
#INCLUDE "windows.bi"
#include "crt.bi"
#INCLUDE "comp2pal.bas"
#INCLUDE "comp2raw.bas"
'-------------------------------------------------------------------------------
' FIXED SIZE ARRAYS, DECLARE ALL VARIABLES;
'-------------------------------------------------------------------------------
OPTION STATIC
OPTION EXPLICIT
#undef DEVMODE
Type DEVMODE
dmDeviceName As Zstring * CCHDEVICENAME
dmSpecVersion As WORD
dmDriverVersion As WORD
dmSize As WORD
dmDriverExtra As WORD
dmFields As DWORD
dmOrientation As Short
dmPaperSize As Short
dmPaperLength As Short
dmPaperWidth As Short
dmScale As Short
dmCopies As Short
dmDefaultSource As Short
dmPrintQuality As Short
dmColor As Short
dmDuplex As Short
dmYResolution As Short
dmTTOption As Short
dmCollate As Short
dmFormName As Zstring * CCHFORMNAME
dmLogPixels As WORD
dmBitsPerPel As DWORD
dmPelsWidth As DWORD
dmPelsHeight As DWORD
dmDisplayFlags As DWORD
dmDisplayFrequency As DWORD
dmICMMethod As DWORD
dmICMIntent As DWORD
dmMediaType As DWORD
dmDitherType As DWORD
dmReserved1 As DWORD
dmReserved2 As DWORD
dmPanningWidth As DWORD
dmPanningHeight As DWORD
End Type
declare sub ChangeScreenResolution (byval wwidth as integer, byval hheight as integer, byval bitsPerPixel as integer)
'-------------------------------------------------------------------------------
' FIXED SIZE ARRAYS, DECLARE ALL VARIABLES;
'-------------------------------------------------------------------------------
'--------------
'--Image size--
'--------------
Const imgX = 512
Const imgY = 256
Declare Sub DrawImage(byval imxpos as integer,byval imypos as integer)
Declare Sub LoadDataImage()
'Picture buffer
Dim Shared img_buffer( imgx * imgy ) as integer
'RGB color palette buffer
Dim Shared img_r(256), img_g(256), img_b(256) as short
LoadDataImage()
'-------------------------------------------------------------------------------
' MESSAGEBOX REQUESTER, FULLSCREEN / WINDOWED.
'-------------------------------------------------------------------------------
DIM SHARED FS_WN AS INTEGER
FS_WN=MessageBox (NULL,"Screen Mode"+CHR$(13)+"Selector"+CHR$(13)+chr$(13)+"Fullscreen?", "UNFINISHED PREVIEW", MB_YESNO)
DIM SHARED AS BYTE W_FULLSCREEN =0 : ' 1 = FULLSCREEN
IF FS_WN=6 THEN W_FULLSCREEN =1
'-------------------------------------------------------------------------------
' SCREEN RELATED STUFF;
'-------------------------------------------------------------------------------
DIM SHARED AS INTEGER W_XW =800 : ' Width (WINDOWED MODE).
DIM SHARED AS INTEGER W_YH =600 : ' Height (WINDOWED MODE).
DIM SHARED pfd as PIXELFORMATDESCRIPTOR
DIM SHARED HDC as HDC
DECLARE SUB DRAWCUBE (BYVAL XRR AS DOUBLE , BYVAL YRR AS DOUBLE, BYVAL ZRR AS DOUBLE, BYVAL XP AS DOUBLE, BYVAL YP AS DOUBLE , BYVAL ZP AS DOUBLE , BYVAL MAT AS INTEGER )
DECLARE SUB DRAWCUBE2(BYVAL XRR AS DOUBLE , BYVAL YRR AS DOUBLE, BYVAL ZRR AS DOUBLE, BYVAL XP AS DOUBLE, BYVAL YP AS DOUBLE , BYVAL ZP AS DOUBLE , BYVAL MAT AS INTEGER )
DECLARE SUB DRAWCUBE3(BYVAL XRR AS DOUBLE , BYVAL YRR AS DOUBLE, BYVAL ZRR AS DOUBLE, BYVAL XP AS DOUBLE, BYVAL YP AS DOUBLE , BYVAL ZP AS DOUBLE , BYVAL MAT AS INTEGER )
DECLARE SUB COPPERFRONT()
DECLARE SUB MASKED_LOGO(byval ro as double)
'-------------------------------------------------------------------------------
' LIGHTING AND MATERIALS;
'-------------------------------------------------------------------------------
DIM SHARED lightambient(0 to 3) AS SINGLE => { .9, .9, .9,1.0}
DIM SHARED lightambient2(0 to 3) AS SINGLE => { .2, .2, .2,.2}
DIM SHARED lightambient3(0 to 3) AS SINGLE => { .2, .2, .2,.2}
' shadow;
DIM SHARED MATERIALT(0 to 3) AS SINGLE => { 0.02, 0.02, 0.02,.2}
'CUBES;
DIM SHARED MATERIAL1A(0 to 3) AS SINGLE => { 0.75, 0.10 , 0.25,.3}
'25
DIM SHARED MATERIAL1B(0 to 3) AS SINGLE => { 0.25, 0.75 , 0.15,.3}
DIM SHARED MATERIAL1C(0 to 3) AS SINGLE => { 0.10, 0.40 , 0.75,.3}
DIM SHARED MATERIAL1D(0 to 3) AS SINGLE => { 0.35, 0.10 , 0.40,.6}
DIM SHARED MATERIAL1E(0 to 3) AS SINGLE => { 0.25, 0.55 , 0.25,.6}
DIM SHARED MATERIAL1F(0 to 3) AS SINGLE => { 0.05, 0.20 , 0.30,.6}
' chessboard;
DIM SHARED MATERIAL3(0 to 3) AS SINGLE => { 0.05, 0.05, 0.05,.2}
DIM SHARED MATERIAL5(0 to 3) AS SINGLE => { 0.05, 0.05 , 0.05,.2}
' top dark
DIM SHARED MATERIAL4(0 to 3) AS SINGLE => { 0.5, 0.5, 0.5,.5}
DIM SHARED MATERIAL2(0 to 3) AS SINGLE => { 0.5, 0.5, 0.5,.5}
DIM SHARED MATERIALA(0 to 3) AS SINGLE => { 0.4, 0.4, 0.4,.7}
DIM SHARED MATERIALB(0 to 3) AS SINGLE => { 0.2, 0.2, 0.2,.8}
DIM SHARED LIGHTPOS1(0 TO 3) AS SINGLE => { 150,-170,80,1 }
DIM SHARED LIGHTPOS2(0 TO 3) AS SINGLE => { -150,70,80,1 }
DIM SHARED LIGHTPOS(0 TO 3) AS SINGLE => { 0,70,90,1 }
DIM SHARED SPECREF (0 TO 3) AS SINGLE => {0.9,0.9,0.9,.9}
DIM SHARED SPECREF2(0 TO 3) AS SINGLE => {0.2,0.2,0.2,.9}
DIM SHARED LOGI(0 to 3) AS SINGLE => {0.25, 0.30, 0.85,0.55} :' logo
DIM SHARED LOGIA(0 to 3) AS SINGLE => {0.25, 0.30, 0.85,0.55} :' logo
DIM SHARED LOGIB(0 to 3) AS SINGLE => {0.25, 0.30, 0.85,0.55} :' logo
DIM SHARED LOGIC(0 to 3) AS SINGLE => {0.25, 0.30, 0.85,0.55} :' logo
DIM SHARED AS INTEGER ROWS=40
DIM SHARED AS INTEGER COLS=40
DIM SHARED AS DOUBLE SQ_XP ( ROWS , COLS )
DIM SHARED AS DOUBLE SQ_YP ( ROWS , COLS )
'-------------------------------------------------------------------------------
DECLARE SUB PREP_GRID()
DECLARE SUB DRAW_GRID()
'-------------------------------------------------------------------------------
DIM SHARED AS INTEGER CUBES=100
DIM SHARED AS DOUBLE CBX(CUBES)
DIM SHARED AS DOUBLE CBY(CUBES)
DIM SHARED AS DOUBLE CBZ(CUBES)
DIM SHARED AS DOUBLE CRX(CUBES)
DIM SHARED AS DOUBLE CRY(CUBES)
DIM SHARED AS DOUBLE CRZ(CUBES)
DIM SHARED AS DOUBLE CRA(CUBES)
DIM SHARED AS INTEGER CRM(CUBES)
DECLARE SUB PREPCUBES()
DECLARE SUB DRAWCUBES()
'-------------------------------------------------------------------------------
' START OPENGL;
'-------------------------------------------------------------------------------
DIM SHARED AS INTEGER CYL1
DECLARE SUB InitOGL()
INITOGL()
PREP_GRID()
PREPCUBES()
DIM SHARED AS INTEGER MT,MTS
DIM SHARED AS DOUBLE MV=0
DIM SHARED AS UINTEGER LOGOBUFFER22( 512 * 256 )
DIM SHARED tex22 AS GLUINT
' DIM AS UINTEGER X,Y,PIXEL
DRAWIMAGE(0,0)
glGenTextures 1, @tex22
glBindTexture(GL_TEXTURE_2D, tex22)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps (GL_TEXTURE_2D, 4, 512, 256,GL_RGBA, GL_UNSIGNED_BYTE, @LOGOBUFFER22(0))
'===============================================================================
' LOGO XOR TEXTURE GENERATION;
'===============================================================================
dim shared tsiz as integer
tsiz=128
DIM SHARED AS UINTEGER LOGOBUFFER ( tsiz * tsiz )
DIM SHARED tex1 AS GLUINT
DIM AS UINTEGER X,Y,PIXEL,ALPHA,START,clit
for y = 0 TO tsiz-1
for x = 0 TO tsiz
IF Y>=TSIZ/2 THEN
IF X> TSIZ/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(150,150,150,255)
IF X<=TSIZ/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(255,255,255,255)
ELSE
IF X<= TSIZ/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(150,150,150,255)
IF X>TSIZ/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(255,255,255,255)
END IF
NEXT
NEXT
glGenTextures 1, @tex1
glBindTexture(GL_TEXTURE_2D, tex1)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps (GL_TEXTURE_2D, 1, tsiz, tsiz,GL_RGBA, GL_UNSIGNED_BYTE, @LOGOBUFFER(0))
dim shared tsiz3 as integer
tsiz3=128
DIM SHARED AS UINTEGER LOGOBUFFER ( tsiz3 * tsiz3 )
DIM SHARED tex3 AS GLUINT
for y = 0 TO tsiz3-1
for x = 0 TO tsiz3
IF Y>=TSIZ3/2 THEN
IF X< TSIZ3/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(150,150,150,255)
IF X>=TSIZ3/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(255,255,255,255)
ELSE
IF X>= TSIZ3/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(150,150,150,255)
IF X<TSIZ3/2 THEN LOGOBUFFER((y * tsiz)+X) = RGBA(255,255,255,255)
END IF
NEXT
NEXT
glGenTextures 1, @tex3
glBindTexture(GL_TEXTURE_2D, tex3)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps (GL_TEXTURE_2D, 3, tsiz3, tsiz3,GL_RGBA, GL_UNSIGNED_BYTE, @LOGOBUFFER(0))
'===============================================================================
' LOGO XOR TEXTURE GENERATION;
'===============================================================================
dim shared tsiz2 as integer
tsiz2=64
DIM SHARED AS UINTEGER LOGOBUFFER2 ( tsiz * tsiz )
DIM SHARED tex2 AS GLUINT
'dim shared as integer clit
' DIM AS UINTEGER X,Y,PIXEL,ALPHA,START
for y = 0 TO tsiz-1
for x = 0 TO tsiz
PIXEL=INT(RND(1)*6)
clit =((x*3) xor (y*3))/11
SELECT CASE PIXEL
CASE 1
LOGOBUFFER2((y * tsiz)+X) = RGBA(220,180+clit,180+clit,250)
CASE 2
LOGOBUFFER2((y * tsiz)+X) = RGBA(220,190+clit,190+clit,250)
CASE 3
LOGOBUFFER2((y * tsiz)+X) = RGBA(220,200+clit,200+clit,250)
CASE 4
LOGOBUFFER2((y * tsiz)+X) = RGBA(220,210+clit,210+clit,250)
CASE ELSE
LOGOBUFFER2((y * tsiz)+X) = RGBA(220,220+clit,220+clit,250)
END SELECT
NEXT
NEXT
glGenTextures 1, @tex2
glBindTexture(GL_TEXTURE_2D, tex2)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR)
gluBuild2DMipmaps (GL_TEXTURE_2D, 1, tsiz2, tsiz2,GL_RGBA, GL_UNSIGNED_BYTE, @LOGOBUFFER2(0))
DIM SHARED AS DOUBLE BVC
'-------------------------------------------------------------------------------
' MAIN LOOP;
'-------------------------------------------------------------------------------
DIM SHARED AS DOUBLE ADDD,MOVE,DV,OLD
DV=.1
dim ld as integer
WHILE((GetAsyncKeyState(VK_ESCAPE)<>-32767))
IF BVC>0 THEN BVC=BVC-.001
IF BVC<0 THEN BVC=0
MV=MV-((dv*8))
IF MV<0 THEN MV=MV+4
OLD=TIMER
ADDD=ADDD+(dv/2)+.0001
GLLOADIDENTITY
GLCLEAR(GL_DEPTH_BUFFER_BIT + GL_COLOR_BUFFER_BIT )
DRAW_GRID()
DRAWCUBES()
COPPERFRONT()
masked_logo(0)
SWAPBUFFERS(hDC)
' sleep 50
' WHILE (TIMER-OLD)<.01
' WEND
DV=(TIMER-OLD)
WEND
ExitProcess(0)
END
SUB MASKED_LOGO(byval ro as double)
dim As double qo
glenable(gl_alpha_test)
glalphafunc(GL_LEQUAL,.5)
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@LOGI(0))
glLoadIdentity()
glTranslatef(0, 0.75, -3.0)
glRotatef(.3*sin(ADDD*2), 1.0, 0.0, 0.0)
glRotatef(13*sin(ADDD*3), 0.0, 1.0, 0.0)
glRotatef(.3*sin(ADDD*3), 0.0, 0.0, 1.0)
glscalef( 1+.05*sin(ADDD*3),1+.05*sin(ADDD*2),1)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, TEX22)
gldisable gl_depth_test
glenable gl_blend
GLBEGIN GL_QUADS
GLMATERIALFV (GL_FRONT,GL_SPECULAR,@SPECREF2(0))
GLMATERIALI (GL_FRONT,GL_SHININESS,26)
glNormal3f 0.0f, 0.0f, 1.0f
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@LOGI(0))
glTexCoord2f 0.0, 0.0
glVertex3f -(1.0+qo), -1.0f, 1.0f
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@LOGIA(0))
glTexCoord2f 1.0, 0.0
glVertex3f (1.0+qo), -1.0f, 1.0f
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@LOGIB(0))
glTexCoord2f 1.0, 1.0
glVertex3f (1.0+qo), 1.0f, 1.0f
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@LOGIC(0))
glTexCoord2f 0.0, 1.0
glVertex3f -(1.0+qo), 1.0f, 1.0f
GLEND
gldisable gl_blend
glenable gl_depth_test
glDISable(GL_TEXTURE_2D)
gldisable(gl_alpha_test)
'
'
'
END SUB
'-------------------------------------------------------------------------------
SUB PREPCUBES()
DIM X
dim as double addfactor,addpos,CCYNOT
CCYNOT=1
addfactor=40/cubes
addpos=0
FOR X=1 TO CUBES
WHILE CBX(X)>-.4 AND CBX(X)<.4
CBX(X)=(RND(1)*10)-5
WEND
CBY(X)=1+RND(13)
CRA(X)=(RND(1)*50)
CBZ(X)=addpos
CRX(X)=RND(1)*360
CRY(X)=RND(1)*360
CRZ(X)=RND(1)*360
CRM(X)=CCYNOT
CCYNOT=CCYNOT+1
IF CCYNOT>3 THEN CCYNOT=1
addpos=addpos+addfactor
NEXT
END SUB
SUB DRAWCUBES()
DIM X
FOR X=1 TO CUBES
CBZ(X)=CBZ(X)+((dv*4))
IF CBZ(X)>20 THEN CBZ(X)=CBZ(X)-40
NEXT
'
' BOTTOM
'
GLDISABLE GL_LIGHT0
GLDISABLE GL_DEPTH_TEST
GLENABLE GL_BLEND
FOR X=1 TO CUBES
GLLOADIDENTITY
DRAWCUBE2(CRX(X),CRY(X),CRZ(X),CBX(X),CBY(X),CBZ(X)-CBY(X),CRM(X))
NEXT
GLDISABLE GL_BLEND
GLENABLE GL_DEPTH_TEST
GLENABLE GL_LIGHT0
'
' TOP
'
glenable gl_blend
'glpolygonmode(gl_back,gl_line)
glcullface(gl_front)
FOR X=1 TO CUBES
GLLOADIDENTITY
DRAWCUBE3(CRX(X),CRY(X),CRZ(X),CBX(X),CBY(X),CBZ(X),CRM(X))
next
glcullface(gl_back)
'glcullface(gl_front)
FOR X=1 TO CUBES
GLLOADIDENTITY
DRAWCUBE(CRX(X),CRY(X),CRZ(X),CBX(X),CBY(X),CBZ(X),CRM(X))
next
'glcullface(gl_back)
FOR X=1 TO CUBES
CRX(X)=CRX(X)+((dv*62))
CRY(X)=CRY(X)+((dv*173))
CRZ(X)=CRZ(X)+((dv*284))
NEXT
gldisable gl_blend
FOR X=1 TO CUBES
' CBY(X)=CBY(X)-CRA(X)
CRA(X)=CRA(X)+(DV*6)
'
' 'IF CRA(X)>.035 THEN CRA(X)=.035
' IF CBY(X)<=-.5 THEN
' CBY(X)=-.5
' CRA(X)=-(cra(x))
' IF CRA(X)<-.025 THEN CRA(X)=-.025
' BVC=.5
' END IF
CBY(X)=1.2*SIN(CRA(X))
IF CBY(X)<0 THEN CBY(X)=-CBY(X)
CBY(X)=CBY(X)-.5
NEXT
END SUB
SUB COPPERFRONT()
GLENABLE GL_BLEND
GLLOADIDENTITY
glTranslatef(0, 0, -.1)
GLBEGIN GL_QUADS
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIALA(0))
GLVERTEX3F -3,-.13,0
GLVERTEX3F 3,-.13,0
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIALB(0))
GLVERTEX3F 3, .13,0
GLVERTEX3F -3, .13,0
GLEND
GLDISABLE GL_BLEND
END SUB
SUB DRAW_GRID()
DIM AS INTEGER X,Y
GLLOADIDENTITY
glTranslatef(0, -.75, -10)
glRotatef(275, 1.0, 0.0, 0.0)
glRotatef(6*sin(ADDD*3), 0.0, 1.0, 0.0)
glRotatef(0, 0.0, 0.0, 1.0)
MTS=1
MT=MTS
MT=MTS
MTS=MTS+1
IF MTS>2 THEN MT=1
FOR Y=1 TO ROWS-1
FOR X=1 TO COLS-1
MT=MT+1
IF MT>2 THEN MT=1
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, TEX2)
GLMATERIALFV (GL_FRONT,GL_SPECULAR,@SPECREF2(0))
GLMATERIALI (GL_FRONT,GL_SHININESS,26)
GLBEGIN GL_QUADS
IF MT=2 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL2(0))
IF MT=1 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL3(0))
GLNORMAL3F SQ_XP(X,Y),SQ_YP(X,Y)+MV,1
'IF MT=1 THEN
glTexCoord2f 0.0, 0.0
GLVERTEX3F SQ_XP(X,Y),SQ_YP(X,Y)+MV,0
glTexCoord2f 1.0, 0.0
GLVERTEX3F SQ_XP(X+1,Y),SQ_YP(X+1,Y)+MV,0
glTexCoord2f 1.0, 1.0
GLVERTEX3F SQ_XP(X+1,Y+1),SQ_YP(X+1,Y+1)+MV,0
glTexCoord2f 0.0, 1.0
GLVERTEX3F SQ_XP(X,Y+1),SQ_YP(X,Y+1)+MV,0
'END IF
'IF MT=2 THEN
'GLVERTEX3F SQ_XP(X,Y),SQ_YP(X,Y)+MV,0
'GLVERTEX3F SQ_XP(X+1,Y),SQ_YP(X+1,Y)+MV,0
'GLVERTEX3F SQ_XP(X+1,Y+1),SQ_YP(X+1,Y+1)+MV,0
'GLVERTEX3F SQ_XP(X,Y+1),SQ_YP(X,Y+1)+MV,0
'END IF
IF MT=2 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL4(0))
IF MT=1 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL5(0))
GLNORMAL3F SQ_XP(X,Y),SQ_YP(X,Y)+MV,1
'GLVERTEX3F SQ_XP(X+1,Y+1),SQ_YP(X+1,Y+1)+MV,0
'GLNORMAL3F SQ_XP(X,Y),SQ_YP(X,Y)+MV,1
'GLVERTEX3F SQ_XP(X,Y+1),SQ_YP(X,Y+1)+MV,0
GLEND
glDISable(GL_TEXTURE_2D)
NEXT
NEXT
END SUB
SUB PREP_GRID()
DIM AS INTEGER X,Y
DIM AS DOUBLE XST,YST,XADD,YADD,XACT,YACT
XST=-20.
YST=-20.
XADD=40/ROWS
YADD=40/COLS
YACT=YST
FOR Y=1 TO ROWS
XACT=XST
FOR X=1 TO COLS
XACT=XACT+XADD
SQ_XP(X,Y)=XACT
SQ_YP(X,Y)=YACT
NEXT
YACT=YACT+YADD
NEXT
END SUB
SUB DRAWCUBE(BYVAL XRR AS DOUBLE , BYVAL YRR AS DOUBLE, BYVAL ZRR AS DOUBLE, BYVAL XP AS DOUBLE, BYVAL YP AS DOUBLE , BYVAL ZP AS DOUBLE , BYVAL MAT AS INTEGER )
DIM SCALE AS DOUBLE
SCALE=.25
' GLLOADIDENTITY
' glTranslatef(-XP, -YP, -ZP)
glTranslatef(XP, YP, ZP)
glRotatef(XRR, 1.0, 0.0, 0.0)
glRotatef(YRR, 0.0, 1.0, 0.0)
glRotatef(ZRR, 0.0, 0.0, 1.0)
glRotatef(275, 1.0, 0.0, 0.0)
glRotatef(6*sin(ADDD*3), 0.0, 1.0, 0.0)
glRotatef(0, 0.0, 0.0, 1.0)
GLMATERIALFV (GL_FRONT,GL_SPECULAR,@SPECREF(0))
GLMATERIALI (GL_FRONT,GL_SHININESS,128)
IF MAT=1 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL1A(0))
IF MAT=2 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL1B(0))
IF MAT=3 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL1C(0))
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, TEX3)
GLBEGIN GL_QUADS
GLNORMAL3F 0,0,1
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
GLNORMAL3F 0,0,-1
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
' GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL2(0))
GLNORMAL3F 1,0,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
GLNORMAL3F -1,0,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
' GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL3(0))
GLNORMAL3F 0,1,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
GLNORMAL3F 0,-1,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
GLEND
glDISable(GL_TEXTURE_2D)
END SUB
SUB DRAWCUBE2(BYVAL XRR AS DOUBLE , BYVAL YRR AS DOUBLE, BYVAL ZRR AS DOUBLE, BYVAL XP AS DOUBLE, BYVAL YP AS DOUBLE , BYVAL ZP AS DOUBLE , BYVAL MAT AS INTEGER )
DIM SCALE AS DOUBLE
SCALE=.3-(YP/10)
' GLLOADIDENTITY
' glTranslatef(-XP, -YP, -ZP)
YP=.7
glTranslatef(XP, -YP, ZP)
GLSCALEF 1, 0,1
glRotatef(XRR, 1.0, 0.0, 0.0)
glRotatef(YRR, 0.0, 1.0, 0.0)
glRotatef(ZRR, 0.0, 0.0, 1.0)
glRotatef(275, 1.0, 0.0, 0.0)
glRotatef(6*sin(ADDD*3), 0.0, 1.0, 0.0)
glRotatef(0, 0.0, 0.0, 1.0)
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIALT(0))
GLBEGIN GL_QUADS
GLNORMAL3F 0,0,1
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
GLNORMAL3F 0,0,-1
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
' GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL2(0))
GLNORMAL3F 1,0,0
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
GLNORMAL3F -1,0,0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
' GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL3(0))
GLNORMAL3F 0,1,0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
GLNORMAL3F 0,-1,0
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
GLEND
END SUB
SUB DRAWCUBE3(BYVAL XRR AS DOUBLE , BYVAL YRR AS DOUBLE, BYVAL ZRR AS DOUBLE, BYVAL XP AS DOUBLE, BYVAL YP AS DOUBLE , BYVAL ZP AS DOUBLE , BYVAL MAT AS INTEGER )
DIM SCALE AS DOUBLE
SCALE=.25
' GLLOADIDENTITY
' glTranslatef(-XP, -YP, -ZP)
glTranslatef(XP, YP, ZP)
glRotatef(XRR, 1.0, 0.0, 0.0)
glRotatef(YRR, 0.0, 1.0, 0.0)
glRotatef(ZRR, 0.0, 0.0, 1.0)
glRotatef(275, 1.0, 0.0, 0.0)
glRotatef(6*sin(ADDD*3), 0.0, 1.0, 0.0)
glRotatef(0, 0.0, 0.0, 1.0)
GLMATERIALFV (GL_FRONT,GL_SPECULAR,@SPECREF(0))
GLMATERIALI (GL_FRONT,GL_SHININESS,128)
IF MAT=1 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL1D(0))
IF MAT=2 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL1E(0))
IF MAT=3 THEN GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL1F(0))
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, TEX1)
GLBEGIN GL_QUADS
GLNORMAL3F 0,0,-1
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
GLNORMAL3F 0,0,1
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL2(0))
GLNORMAL3F -1,0,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
GLNORMAL3F 1,0,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
' GLMATERIALFV (GL_FRONT,GL_AMBIENT_AND_DIFFUSE,@MATERIAL3(0))
GLNORMAL3F 0,-1,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,1*SCALE,-1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F -1*SCALE,1*SCALE,-1*SCALE
GLNORMAL3F 0,1,0
glTexCoord2f 0.0, 0.0
GLVERTEX3F -1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 0.0, 1.0
GLVERTEX3F 1*SCALE,-1*SCALE,-1*SCALE
glTexCoord2f 1.0, 1.0
GLVERTEX3F 1*SCALE,-1*SCALE,1*SCALE
glTexCoord2f 1.0, 0.0
GLVERTEX3F -1*SCALE,-1*SCALE,1*SCALE
GLEND
gldisable(GL_TEXTURE_2D)
END SUB
'-------------------------------------------------------------------------------
' SMALL OPENGL FRAMEWORK, BY DBFINTERACTIVE.COM MEMBERS INCLUDING;
' JIM, AULD, RBRAZ, SHOCKWAVE AMONGST OTHERS.
'-------------------------------------------------------------------------------
SUB InitOGL()
dim xxx as integer
dim yyy as integer
'-------------------------------------------------------------------------------
IF W_FULLSCREEN=1 THEN
'XXX=0
'YYY=(-(W_YH))+(W_YH/2)
ELSE
'-------------------------------------------------------------------------------
XXX=GetSystemMetrics(SM_CXSCREEN)
yyy=GetSystemMetrics(SM_CYSCREEN)
xxx=(xxx-W_XW)/2
yyy=(yyy-W_YH)/2
end if
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR)
pfd.nVersion = 1
pfd.dwFlags = PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
pfd.dwLayerMask = PFD_MAIN_PLANE
pfd.iPixelType = PFD_TYPE_RGBA
pfd.cColorBits = 32
pfd.cDepthBits = 32
IF W_FULLSCREEN=1 THEN hDC = GetDC(CreateWindow( "Edit", "FGHF",WS_POPUP+WS_VISIBLE+WS_MAXIMIZE, 0 , 0 , 0 , 0, 0, 0, 0, 0))
IF W_FULLSCREEN<>1 THEN hDC = GetDC(CreateWindow("Edit", "FGHF",WS_POPUP+WS_VISIBLE,xxx, yyy, W_XW , W_YH, 0, 0, 0, 0))
SetPixelFormat ( hDC, ChoosePixelFormat ( hDC, @pfd) , @pfd )
wglMakeCurrent ( hDC, wglCreateContext(hDC) )
ShowCursor(FALSE)
IF W_FULLSCREEN=1 THEN
ChangeScreenResolution(W_XW,W_YH,32)
GLVIEWPORT 0, 0, w_xw, w_yh '' Reset The Current Viewport
ELSE
GLVIEWPORT 0, 0, w_xw, w_yh '' Reset The Current Viewport
END IF
GLLOADIDENTITY
GLMATRIXMODE GL_PROJECTION '' Select The Projection Matrix
GLLOADIDENTITY
GLUPERSPECTIVE 75.0, W_XW / W_YH, .01, 120.0 '' Calculate The Aspect Ratio Of The Window
GLMATRIXMODE GL_MODELVIEW '' Select The Modelview Matrix
GLLOADIDENTITY '' Reset The Modelview Matrix
GLSHADEMODEL GL_smooth '' Enable Smooth Shading
GLCLEARCOLOR .00, .00, .00,0
GLCLEARDEPTH 1.0 '' Depth Buffer Setup
GLENABLE GL_DEPTH_TEST '' Enables Depth Testing
GLDEPTHFUNC GL_LEQUAL '' The Type Of Depth Testing To Do
GLHINT GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST '' Really Nice Perspective Calculations
GLBLENDFUNC(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA)
GLDISABLE GL_BLEND
GLENABLE GL_CULL_FACE
GLLOADIDENTITY
glLightfv( GL_LIGHT0, GL_AMBIENT, @LightAmbient(0))
GLLIGHTFV (GL_LIGHT0, GL_POSITION, @LIGHTPOS(0))
glLightfv( GL_LIGHT1, GL_AMBIENT, @LightAmbient2(0))
GLLIGHTFV (GL_LIGHT1, GL_POSITION, @LIGHTPOS1(0))
glLightfv( GL_LIGHT2, GL_AMBIENT, @LightAmbient2(0))
GLLIGHTFV (GL_LIGHT2, GL_POSITION, @LIGHTPOS2(0))
GLENABLE(GL_LIGHTING)
glEnable(GL_LIGHT0)
glEnable(GL_LIGHT1)
glEnable(GL_LIGHT2)
' GLLINEWIDTH 24.0
GLENABLE GL_SMOOTH
GLENABLE GL_NORMALIZE
GLENABLE GL_CULL_FACE
GLENABLE GL_FOG
GLHINT (GL_FOG_HINT,GL_NICEST)
GLFOGF (GL_FOG_START,1.0)
GLFOGF (GL_FOG_END, 18.0)
GLFOGF (GL_FOG_DENSITY, 0.01)
GLFOGI (GL_FOG_MODE,GL_LINEAR)
end sub
Sub LoadDataImage()
dim i as integer
'Loads Color palette
for i = 0 to 255
img_r( i ) = comp2.bmp.pal (i*3) 'Red color
img_g( i ) = comp2.bmp.pal (i*3+1)'Green color
img_b( i ) = comp2.bmp.pal (i*3+2)'Blue color
if img_r( i) >255 then img_r( i) =255
if img_g( i) >255 then img_g( i) =255
if img_b( i) >255 then img_b( i) =255
'img_r( i ) =(img_b(i) Shl 16) Or (img_g(i) Shl 8 ) Or img_r(i)
if img_r(i)<>0 or img_g(i)<>0 or img_b(i)<>0 then
img_r(i)=rgba(img_b( i ),img_g( i ),img_r( i ),90)
else
img_r(i)=rgba(img_b( i ),img_g( i ),img_r( i ),250)
end if
Next
for i = 1 to (imgx*imgy) - 1
img_buffer(i) = comp2.bmp.raw (i)
next
End Sub
Sub DrawImage(byval xpos as integer,byval ypos as integer)
dim as uinteger x,y,pixel,mong,y2
DIM AS UINTEGER PTR PP,PP2
y2=255
for Y = 0 to imgy-1
PP=@logoBUFFER22(Y*IMGX)
pp2 = @img_buffer((Y2*IMGX))
for X = 0 to imgx-1
mong = (img_r(*pp2) )
*PP = MONG
PP +=1
pp2 +=1
next
YPOS=YPOS+1
Y2=Y2-1
next
End Sub
sub ChangeScreenResolution (byval wwidth as integer, byval hheight as integer, byval bitsPerPixel as integer)
dim dmScreenSettings as DEVMODE
ZeroMemory(@dmScreenSettings, sizeof (DEVMODE))
dmScreenSettings.dmSize = sizeof(DEVMODE)
dmScreenSettings.dmPelsWidth = wwidth
dmScreenSettings.dmPelsHeight = hheight
dmScreenSettings.dmBitsPerPel = bitsPerPixel
dmScreenSettings.dmFields = DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT
if (ChangeDisplaySettings (cast(LPDEVMODE,@dmScreenSettings), CDS_FULLSCREEN) <> DISP_CHANGE_SUCCESSFUL) then
end -1
end if
end sub
Thanks,
Cock Shave.
-
Still crashes sometimes when clicking dozen time with the
mouse ?
Not quite sure - but how is the window messaging handled
atm ? Concerning WinAPI I guess there should be something
like this in the code <not 100% sure though> ?
MSG wmsg;
while( GetMessage(&wmsg, NULL, 0, 0) )
{
TranslateMessage(&wmsg);
DispatchMessage(&wmsg);
}
Otherwise the normal exiting and switching to fullscreen runs
way better now!
-
Hey :) I can't help about windows API sry, but i'd like to see this in action ! Could someone compile it ? (I don't have comp2pal.bas nor comp2raw.bas")
-
The screen resolution changes niecely now but the viewport is messed up with the screen having a black border, I have tried several ways to fix this, I'll keep trying but in the meantime here it is;
I forgot to mention that you need to modify your createwindow code to switch fullscreen:
IF W_FULLSCREEN=1 THEN
hDC = GetDC(CreateWindow( "Edit", "FGHF",WS_POPUP+WS_VISIBLE, 0 , 0 , W_XW , W_YH, 0, 0, 0, 0))
ChangeScreenResolution(W_XW,W_YH,32)
end if
IF W_FULLSCREEN<>1 THEN hDC = GetDC(CreateWindow("Edit", "FGHF",WS_POPUP+WS_VISIBLE,xxx, yyy, W_XW , W_YH, 0, 0, 0, 0))
SetPixelFormat ( hDC, ChoosePixelFormat ( hDC, @pfd) , @pfd )
wglMakeCurrent ( hDC, wglCreateContext(hDC) )
ShowCursor(FALSE)
@Hezad: attached one example here for you..
-
Works really well :)
How do I send a beer to Brazil?
-
rbz > thanks :)
shockwave > wow very cool stuff :D
-
That looks amazing to be honest - the checkerboard just looks stunning! Along with bouncing cubes - wicked!
Nice colours too!
Wicked framework Shockwave! and nice work RBZ and Jim!
Andy
-
Kind comments :)
-
->shockwave - i dunno if you've done this already, but you should replace "Edit" in CreateWindow with the class you made by calling RegisterClass.
>benny - yup, you do normally have code like that to pump the message queue, else it can fill up and crash like you see when you click the mouse.
If you can, Shockwave, you should make your code like this
dim msg as MSG
repeat
if PeekMessage(@msg, NULL, 0, 0, PM_REMOVE) then
TranslateMessage(@msg)
DispatchMessage(@msg)
end if
drawframe()
until msg.message == WM_QUIT
Jim
-
@Jim:
Thanks for clearing this and providing FB version.
@Shocky:
Maybe you can add it - so I can test it again ?
-
Adding Jims code unfortunately meant that it was not possible to kill the process unless I used the task manager. Anyway the source is there if you want to play with it Benny, feel free :) I don't mind.
I am really happy that the death on exit in vista and resolution problems were resolved tbh. And the framework is still nice and small too!
-
I converted it from C on the hoof and probably made a mistake! Sorry!
It's worth fixing it. If you go one more step to handling your own messages that practically makes you a win32 coder ;)
Jim
-
Hehehe Me a coder? Never :)
I'm going to be using a different framework for my future stuff for sure Jim.
This one has been very good, it gave a stable(ish) launchpad and allowed me to learn a little bit of Opengl but you are right, it's time I became more compatible.
-
very nice...the checkboard is smooth and nice screeny
welldone :cheers: