fullscreen vs. windowed

BlitzPlus Forums/BlitzPlus Programming/fullscreen vs. windowed

xlsior(Posted 2003) [#1]
I've been playing around with some of the graphics commands, and am running into a snag:

The code listed below works just fine in windowed mode -- but as soon as I switch to full-screen, it starts acting up.

What it is supposed to do:
1) Load a full-color image from disk
2) Change a rectangle to dark black-and-white
3) Load a masked 'frame'-image from disk, which will be used as a border around the B&W area. the screen outside of the border will remail full-color

In windowed mode this works just fine, but in full-screen mode both the B&W area and the full-color edges won't get drawn: just the frame itself, with a black box in the middle and black edges around it.

Note: To pull up or switch away from the frame image in the code below, press 'TAB'. Press ESC to quit.

Any insights would be much appreciated!

Global gfx$
Global frame$
Graphics 640,480,16,1
gfx$=LoadImage("background.jpg")	; 640x480 background image
frame$=LoadImage("frame.png")   ; 640x480 overlay image, color 0,255,0 transparent
MaskImage frame$,0,255,0

SetBuffer=BackBuffer()
DrawImage gfx$,0,0
Flip

While True
If KeyDown(1) Then End       ; Press Esc
If KeyDown(15) Then          ; Press TAB
	overlay(100,100,540,380) ; Changes a rectangle to dark greyscale
	FlushKeys
	While Not KeyDown(15)
	Wend
	FlushKeys
	DrawImage gfx$,0,0
	Flip
End If
Wend

Function overlay(xstart,ystart,xend,yend)
	SetBuffer=FrontBuffer()
	gfxtemp$=CreateImage(640,480)
	GrabImage gfxtemp$,0,0
	SetBuffer BackBuffer()
	DrawImage gfxtemp$,0,0
	LockBuffer
	For y=ystart To yend
		For x=xstart To xend
			temp1=ReadPixel(x,y)
			orgb=(temp1 And 255)
			orgg=(temp1 And 65280) Shr 8
			orgr=(temp1 And 16711680) Shr 16
			temp2=(orgr+orgg+orgb) Shr 3     ; Average red/green/blue, and darken
			WritePixel x,y,temp2+(temp2 Shl 8)+(temp2 Shl 16) ; write greyscale pixels
		Next 
	Next 
	UnlockBuffer
	DrawImage frame$,0,0
	Flip
	gfxtemp$=""
End Function



Tracer(Posted 2003) [#2]
Global gfx
Global frame

Graphics 640,480,16,1	

gfx = LoadImage("monkey4.jpg") ; 640x480 background image 
frame = LoadImage("frame4.png") ; 640x480 overlay image, color 0,255,0 transparent 
MaskImage frame,0,255,0 

Global overlay_image = CreateImage(1,1) ; temp image for overlay

While Not KeyHit(1)
	If KeyHit(15)
		create_overlay(100,100,540,380) ; create it

		display_overlay(100,100) ; show it and deal with inventory
	EndIf
	
	DrawImage gfx,0,0
	
	Flip
Wend 

; Create the overlay
Function create_overlay(xstart,ystart,xend,yend)
	FreeImage overlay_image
	
	width = xend - xstart
	height = yend - ystart

	overlay_image = CreateImage(width,height)
	CopyRect xstart,ystart,width,height,0,0,ImageBuffer(gfx),ImageBuffer(overlay_image)
	
	SetBuffer ImageBuffer(overlay_image)
	LockBuffer 
	For y = 0 To height
		For x = 0 To width
			temp1 = ReadPixel(x,y) 
			orgb = (temp1 And 255) 
			orgg = (temp1 And 65280) Shr 8 
			orgr = (temp1 And 16711680) Shr 16 
			temp2 = (orgr + orgg + orgb) Shr 3 ; Average red/green/blue, and darken 
			WritePixel x,y,temp2 + (temp2 Shl 8) + (temp2 Shl 16) ; write greyscale pixels 
		Next 
	Next 
	UnlockBuffer
	SetBuffer BackBuffer()
End Function

; Show the overlay and the function where you
; can deal with all inventory code.
Function display_overlay(ox,oy)
	While Not KeyHit(15)
		DrawImage gfx,0,0
		
		DrawImage overlay_image,ox,oy

		DrawImage frame,0,0
		
		Flip
	Wend
End Function


Working, completely different and a lot less memory intensive.

Have fun :)

Tracer


xlsior(Posted 2003) [#3]
Tracer: Unfortunately, your version doesn't work either...
createimage(0,0) failed. After changing to createimage(1,1) it started without errors, but doesn't appear to actually do anything.

Pressing TAB (scancode 15) doesn't appear to have any effect... In neither windows nor fullscreen mode.


Tracer(Posted 2003) [#4]
works fine here..

And yeah, the CreateImage(0,0) works fine under B3D, which is what i used to alter your code. BlitzPlus bombs on it (Mark?)

http://www.darkeffect.com/tracer/temp/overlay.zip <- try this.

Tracer


xlsior(Posted 2003) [#5]
Nevermind... For some reason Tracer's code didn't like the copy/paste from the forum much -- I downloaded the linked copy, and it worked flawlessly.

Thanks!


semar(Posted 2003) [#6]
@xlsior,
bare in mind that the right statement for setbuffer is:
setbuffer backbuffer()

and not, as you wrote in your above example:
setbuffer = backbuffer()

Read more here:
http://www.blitzbasic.com/bpdocs/command.php?name=SetBuffer&ref=goto

Sergio.


xlsior(Posted 2003) [#7]
Duh... You are absolutely right, looks like I kind of used those notations interchangable. (I'm surprised it didn't error out on it)

Either way, that by itself was not the only problem - even after fixing those setbuffer statements, my original code still doesn't work properly -- Tracer's version was much appreciated!