My code denies to appear in full screen

Blitz3D Forums/Blitz3D Beginners Area/My code denies to appear in full screen

bashc(Posted 2011) [#1]
My code denies to appear in full screen and I am not enable to discover why.


I am sure I have missing something, but I do not know what is it.

Can anyone tell me why this code works fine in windowed and images do not appear in full screen please?

My example code:


Graphics 800,600,32,1     ; <----- in mode 2 works, but not in full screen??

Global imgWide,imgHeight,PicCore

Global Index, NumCartas

Global Col_A, Col_B

SetBuffer BackBuffer()  
NumCartas=3
;PicCore=LoadAnimImage("core24X3b.bmp",128,128,0,NumCartas+1)   

imgWide=128
imgHeight=128


PicCore=CreateImage(imgWide*NumCartas+128,imgHeight,NumCartas+1) : SetBuffer BackBuffer()
x=0 :y =0

For n=1 To 4
	
	For a=1 To 150 
		r=Rand(0,255) :g=Rand(0,255) :b=Rand(0,255)
		For b=1 To 150
			r=Rand(0,255) :g=Rand(0,255) :b=Rand(0,255)
			Color r,g,b
			Plot Rand(x+1,x+127),Rand(1,127)  
			
		Next
	Next
	x=x+128
Next

x=0 :y =0
For n=0 To NumCartas
	GrabImage PicCore,x,y,Index
	Index=Index+1
	x=x+128
Next

MaskImage PicCore,255,0,255 



Dim PixCore(imgWide,imgHeight,NumCartas)  

MoveMouse 520,640 

x=1: y=1
For Index=0 To NumCartas
	DrawImage PicCore,x,y,Index
	x=x+128
Next




Flip


LockBuffer BackBuffer()  
; Use ReadPixel to get all the color information of the screen 
xst=0 :yst=0
For Index=0 To NumCartas
	For x=0 To imgHeight
		For y=0 To imgWide
			PixCore(x,y,Index)=ReadPixel(x+xst,y+yst) 
		Next 
	Next 
	xst=xst+128
Next





UnlockBuffer BackBuffer() 
Cls
Index=0



SeedRnd MilliSecs()


While Not KeyDown(1)  
	
	
	
	x=1:y=1
	For j=0 To NumCartas                        
		CambiaPinxels(x,y,j)
		x = x + 128
	Next
	
	
	Flip      ; < --- image not appera in mode 1 orfull screen why?
	
Wend

End

Function CambiaPinxels(Xcore,Ycore,Index)
	
	
	;****************************** hacer que los pinxels avancen sus posiciones hacie el exterior
	Color 255,255,255
	num=0
	For y=1 To imgHeight-1
		For x=1 To imgWide-1
			
			
			ytemp=y 
			xtemp=x
			Col_A=PixCore(xtemp,ytemp,Index)
			xz=Rand(-1,1) :yz=Rand(-1,1)
			Col_B=PixCore(xtemp+xz,ytemp+yz,Index)
			
			hecho=False
			
			If Col_A = -16777216 And Col_B <> -16777216 Then
				
				
				If y=2 And yz=-1 Then
					r1=imgHeight-3   ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; color is not black
					ytemp=imgHeight-2
					
					.up1
					If r1>3 Then r1=r1-1 
					If PixCore(xtemp,ytemp,Index)=Col_A Then  ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						ytemp=Rand(3,r1)   ; if a color pinxlel... random again
						Goto up1
					EndIf
					hecho =True
					Goto we
					
				EndIf
				
				
				If y=imgHeight-2 And yz=1 Then
					r2=3   ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; color is not black
					ytemp=2
					
					.up2
					If r2<imgHeight-3 Then r2=r2+1  
					If PixCore(xtemp,ytemp,Index)=Col_A Then ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						ytemp=Rand(3,r2)   ; if a color pinxlel... random again
						Goto up2
						
						
					EndIf
					
					hecho =True
					Goto we
					
				EndIf
				
				
				
				If x=2 And xz=-1 Then
					r3=imgWide-3   ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; el color  no-negro
					xtemp=imgWide-2
					
					.up3
					If r3>3 Then r3=r3-1 
					If PixCore(xtemp,ytemp,Index)=Col_A Then  ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						xtemp=Rand(3,r3)   ; if a color pinxlel... random again
						Goto up3
					EndIf
					hecho =True
					Goto we
					
				EndIf	
				
				
				
				If x=imgWide-2  And xz=1 Then
					r4=3  ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; color is not black
					xtemp=2
					
					.up4
					If r4<imgWide-3 Then r4=r4+1   
					If PixCore(xtemp,ytemp,Index)=Col_A Then ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						xtemp=Rand(3,r4)   ; if a color pinxlel... random again
						Goto up4
						
						
					EndIf
					
					hecho =True
					Goto we
					
				EndIf
				
				
				
				If hecho = False Then
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A
					PixCore(xtemp,ytemp,Index)=Col_B
					
					
				EndIf
				.we
				
				
				
			EndIf
		Next 
		
	Next
	
	
	
; Use WritePixel to redraw the screen 
	
	LockBuffer BackBuffer()
	For y=0 To imgHeight  
		For x=0 To imgWide
			WritePixelFast x+Xcore,y+Ycore,PixCore(x,y,Index)  
		Next 
	Next 	
	UnlockBuffer BackBuffer()
	
	GrabImage PicCore,0+Xcore,0+Ycore,Index
	
	
End Function




Last edited 2011

Last edited 2011


Captain Wicker (crazy hillbilly)(Posted 2011) [#2]
It is unlikely that your screen resolution is set to 16bit or 8bit but usually this fixes this known problem.

Here is a list of things to check for:
1. Resolution is set above 1024x768
2. You have applied updates to the screen
3. If you had Graphics3D you might could UpdateWorld
4. It could be the version of blitz that you are running Ex: V1.106 as I have found many bugs in this version.

5. You must have the most recent DirectX 9.0c Installed to run smoothly

If you have these all correct then all I can suggest is to rewrite the code and try to Include a code file instead of typing it all in one source.


Adam Novagen(Posted 2011) [#3]
Alright... I'm... Well, I'm not quite sure what Captain Wicker was on about. However, if you add this code to line 88 and 89, just inside your main loop:

ClsColor Rand(255),Rand(255),Rand(255)
Cls

Now, if you run your program again in mode 1, you can see that the image is there, and it's being drawn, but its contents are all erased, making it completely black. I don't have time right now to go through the complete CambiaPixels() function, but I would say that your problem is probably somewhere in there, in the logic.


Floyd(Posted 2011) [#4]
In this part of your code...

Flip

LockBuffer BackBuffer()  
; Use ReadPixel to get all the color information of the screen 
xst=0 :yst=0
For Index=0 To NumCartas
	For x=0 To imgHeight
		For y=0 To imgWide
			PixCore(x,y,Index)=ReadPixel(x+xst,y+yst) 
		Next 
	Next 
	xst=xst+128
Next

UnlockBuffer BackBuffer()

...Readpixel is reading from the active drawing buffer, i.e. the back buffer.

So you just need to move Flip to after UnlockBuffer BackBuffer().


bashc(Posted 2011) [#5]
@Captain Wicker

Screen Resolution is correct
This code do not use grapics 3D, it is only 2D
Direct X version is correct I think

It is a problem of bad written code mine I think.

Thank you


@Adam Novagen

Yes, this two comands you give me helps to see that you are right, my code runs, but bad still.

Thank you


@Floyd

place flip commad into Function would not work for me purpose because I need all draws or frames was draw at same time each screen update.

Thank you


But experimenting with your all ideas, Finally I realize were was this bug even I don't understand why bugs "works" so, hehe

I change SetBuffer BackBuffer() from line 10 and place it in line 61 after a flip and now works!!


I place code again for you can see SetBuffer BackBuffer() has changed and now it woks.


I appreciate you all help an inspiration believe me!!


Corrected code (I hope):



Graphics 800,600,32,1    

Global imgWide,imgHeight,PicCore

Global Index, NumCartas

Global Col_A, Col_B

; SetBuffer BackBuffer()  <---------------------------- Here was de damned problem!!!!!!!!! seems to be a bad site for placing BackBuffer()
NumCartas=3
;PicCore=LoadAnimImage("core24X3b.bmp",128,128,0,NumCartas+1)   

imgWide=128
imgHeight=128


PicCore=CreateImage(imgWide*NumCartas+128,imgHeight,NumCartas+1) 
x=0 :y =0

For n=1 To 4
	
	For a=1 To 150 
		r=Rand(0,255) :g=Rand(0,255) :b=Rand(0,255)
		For b=1 To 150
			r=Rand(0,255) :g=Rand(0,255) :b=Rand(0,255)
			Color r,g,b
			Plot Rand(x+1,x+127),Rand(1,127)  
			
		Next
	Next
	x=x+128
Next

x=0 :y =0
For n=0 To NumCartas
	GrabImage PicCore,x,y,Index
	Index=Index+1
	x=x+128
Next

MaskImage PicCore,255,0,255 



Dim PixCore(imgWide,imgHeight,NumCartas)  

MoveMouse 520,640 

x=1: y=1
For Index=0 To NumCartas
	DrawImage PicCore,x,y,Index
	x=x+128
Next




Flip

SetBuffer BackBuffer()   ; <------------------ I resolved finaly placing  SetBuffer BackBuffer()  here!!!

LockBuffer BackBuffer()  
; Use ReadPixel to get all the color information of the screen 
xst=0 :yst=0
For Index=0 To NumCartas
	For x=0 To imgHeight
		For y=0 To imgWide
			PixCore(x,y,Index)=ReadPixel(x+xst,y+yst) 
		Next 
	Next 
	xst=xst+128
Next





UnlockBuffer BackBuffer() 
Cls
Index=0



SeedRnd MilliSecs()
ClsColor Rand(255),Rand(255),Rand(255)

While Not KeyDown(1)  
	
	Cls
	
	
	x=1:y=1
	For j=0 To NumCartas                        
		CambiaPinxels(x,y,j)
		x = x + 128
	Next
	
	
	Flip      ; < --- image not appera in mode 1 orfull screen why?
	
Wend

End

Function CambiaPinxels(Xcore,Ycore,Index)
	
	
	;****************************** hacer que los pinxels avancen sus posiciones hacie el exterior
	Color 255,255,255
	num=0
	For y=1 To imgHeight-1
		For x=1 To imgWide-1
			
			
			ytemp=y 
			xtemp=x
			Col_A=PixCore(xtemp,ytemp,Index)
			xz=Rand(-1,1) :yz=Rand(-1,1)
			Col_B=PixCore(xtemp+xz,ytemp+yz,Index)
			
			hecho=False
			
			If Col_A = -16777216 And Col_B <> -16777216 Then
				
				
				If y=2 And yz=-1 Then
					r1=imgHeight-3   ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; color is not black
					ytemp=imgHeight-2
					
					.up1
					If r1>3 Then r1=r1-1 
					If PixCore(xtemp,ytemp,Index)=Col_A Then  ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						ytemp=Rand(3,r1)   ; if a color pinxlel... random again
						Goto up1
					EndIf
					hecho =True
					Goto we
					
				EndIf
				
				
				If y=imgHeight-2 And yz=1 Then
					r2=3   ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; color is not black
					ytemp=2
					
					.up2
					If r2<imgHeight-3 Then r2=r2+1  
					If PixCore(xtemp,ytemp,Index)=Col_A Then ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						ytemp=Rand(3,r2)   ; if a color pinxlel... random again
						Goto up2
						
						
					EndIf
					
					hecho =True
					Goto we
					
				EndIf
				
				
				
				If x=2 And xz=-1 Then
					r3=imgWide-3   ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; el color  no-negro
					xtemp=imgWide-2
					
					.up3
					If r3>3 Then r3=r3-1 
					If PixCore(xtemp,ytemp,Index)=Col_A Then  ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						xtemp=Rand(3,r3)   ; if a color pinxlel... random again
						Goto up3
					EndIf
					hecho =True
					Goto we
					
				EndIf	
				
				
				
				If x=imgWide-2  And xz=1 Then
					r4=3  ;place color near origen
					PixCore(x,y,Index)=Col_A  ; black color
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A ; color is not black
					xtemp=2
					
					.up4
					If r4<imgWide-3 Then r4=r4+1   
					If PixCore(xtemp,ytemp,Index)=Col_A Then ;if a black pinxel
						PixCore(xtemp,ytemp,Index)=Col_B ; el color no negro
					Else
						xtemp=Rand(3,r4)   ; if a color pinxlel... random again
						Goto up4
						
						
					EndIf
					
					hecho =True
					Goto we
					
				EndIf
				
				
				
				If hecho = False Then
					PixCore(xtemp+xz,ytemp+yz,Index)=Col_A
					PixCore(xtemp,ytemp,Index)=Col_B
					
					
				EndIf
				.we
				
				
				
			EndIf
		Next 
		
	Next
	
	
	
; Use WritePixel to redraw the screen 
	
	LockBuffer BackBuffer()
	For y=0 To imgHeight  
		For x=0 To imgWide
			WritePixelFast x+Xcore,y+Ycore,PixCore(x,y,Index) ,BackBuffer() 
		Next 
	Next 	
	UnlockBuffer BackBuffer()
	
	GrabImage PicCore,0+Xcore,0+Ycore,Index
	
	
End Function





Last edited 2011