DirectDraw Max2D Driver?

BlitzMax Forums/BlitzMax Programming/DirectDraw Max2D Driver?

Does anyone have a DirectDraw Max2D Driver? How hard would it be to implement one?

What are you trying to do?

I believe drawpixmap uses directdraw interface. You then need to create a bitmap font using drawpixmap rather than use drawtext... I think.

What are you trying to do?

Make more graphics drivers for BlitzMax.

DirectDraw and D3D for DX7 are 2 different things.

DirectDraw and D3D for DX7 are 2 different things.

Thats true. I believe Bmax uses both.

Just wanted to verify that DirectDraw is not used in Blitzmax. All of the 2d plotting, rect, line drawing, etc, is actually via the 3d pipeline.

	Method DrawLine( x0#,y0#,x1#,y1#,tx#,ty# )
		If Not IsValid() Return

		Local lx0#,ly0#,lx1#,ly1#
		
		lx0=x0*ix+y0*iy+tx
		ly0=x0*jx+y0*jy+ty
		lx1=x1*ix+y1*iy+tx
		ly1=x1*jx+y1*jy+ty
		
		If linewidth=1.0
			cverts[0]=lx0+.5001
			cverts[1]=ly0+.5001
			cverts[4]=lx1+.5001
			cverts[5]=ly1+.5001
			SetActiveFrame Null
			device.DrawPrimitive(D3DPT_LINELIST,D3DFVF_XYZ|D3DFVF_DIFFUSE,cverts,2,0)
		Else
			Local lw#=linewidth*0.5
			If Abs(ly1-ly0)>Abs(lx1-lx0)
				cverts[0]=lx0-lw
				cverts[1]=ly0
				cverts[4]=lx0+lw
				cverts[5]=ly0
				cverts[8]=lx1-lw
				cverts[9]=ly1
				cverts[12]=lx1+lw
				cverts[13]=ly1
			Else
				cverts[0]=lx0
				cverts[1]=ly0-lw
				cverts[4]=lx0
				cverts[5]=ly0+lw
				cverts[8]=lx1
				cverts[9]=ly1-lw
				cverts[12]=lx1
				cverts[13]=ly1+lw
			EndIf
			SetActiveFrame Null
			device.DrawPrimitive(D3DPT_TRIANGLESTRIP,D3DFVF_XYZ|D3DFVF_DIFFUSE,cverts,4,0)
		EndIf
	End Method


DrawPixmap and GrabPixmap uses directDraw¡£

All of the 2d plotting, rect, line drawing, etc, is actually via the 3d pipeline.

Hence tonyg's original post...
I believe drawpixmap uses directdraw interface.


Yan - yep. Thanks for pointing that out. :)

	Method DrawPixmap( pixmap:TPixmap,x,y )
		If Not IsValid() Return

		Local srcdc,destdc
		Local surf:IDirectDrawSurface7
		Local renderSurf:IDirectDrawSurface7

		D3D7GraphicsDriver().EndScene

		device.GetRenderTarget Varptr renderSurf
		
		renderSurf.GetDC Varptr destdc
		surf=surffrompixmap( pixmap )
		surf.GetDC Varptr srcdc
		BitBlt destdc,x,y,pixmap.width,pixmap.height,srcdc,0,0,ROP_SRCCOPY
		surf.ReleaseDC srcdc
		renderSurf.ReleaseDC destdc
		surf.Release_

		D3D7GraphicsDriver().BeginScene
	End Method

	Method GrabPixmap:TPixmap( x,y,width,height )
		If Not IsValid() Return
		
		Local pixmap:TPixmap
		Local srcdc,destdc
		Local surf:IDirectDrawSurface7
		Local renderSurf:IDirectDrawSurface7
		
		D3D7GraphicsDriver().EndScene

		device.GetRenderTarget Varptr renderSurf
		
		pixmap=TPixmap.Create( width,height,PF_BGR888 )
		renderSurf.GetDC Varptr srcdc
		surf=surffrompixmap( pixmap )
		surf.GetDC Varptr destdc
		BitBlt destdc,0,0,width,height,srcdc,x,y,ROP_SRCCOPY
		surf.ReleaseDC destdc
		renderSurf.ReleaseDC srcdc
		surf.Release_()
		D3D7GraphicsDriver().BeginScene

		Return pixmap	
	End Method


I believe drawpixmap uses directdraw interface.

Didn't realize that before. That opens up a bunch of new possibilities. Like this.
http://www.blitzbasic.com/codearcs/codearcs.php?code=2352