Smaller is better.

Miscellaneous Forums/General Discussion/Smaller is better.

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

A 2000 tris single-surface vs 1000 surfaces.
I get around 3.01 FPS for both.
Graphics3D 640, 480, 0, 2
AmbientLight 255, 255, 255

Const T_SIZE = 2048  ; Texture size for the small textures, the sheet will be 2*T_SIZE
Const NB_QUADS = 250 ; NB_QUADS is not really the number of quad, it will be NB_QUADS*4

Dim t(4*NB_QUADS)
Dim s(4*NB_QUADS)

AppTitle "Single Surface Texture Sheet"
tex = CreateTexture(T_SIZE*2, T_SIZE*2)
SetBuffer TextureBuffer(tex)
Color 255, 0, 0
Rect 0, 0, T_SIZE, T_SIZE, True
Color 0, 0, 255
Rect 0, T_SIZE, T_SIZE, T_SIZE, True
Color 0, 255, 0
Rect T_SIZE, 0, T_SIZE, T_SIZE, True
Color 255, 0, 255
Rect T_SIZE, T_SIZE, T_SIZE, T_SIZE, True

SetBuffer BackBuffer()

t(0) = CreateMesh()
s(0) = CreateSurface(t(0))
EntityTexture t(0), tex

For j = 0 To NB_QUADS
For i = 1 To 4
	Select i
		Case 1
			v1 = AddVertex(s(0), -1 + i*3, 1,  0, 0,   0)
			v2 = AddVertex(s(0), 1 + i*3,  1,  0, 0.5, 0)
			v3 = AddVertex(s(0), -1 + i*3, -1, 0, 0,   0.5)
			v4 = AddVertex(s(0), 1 + i*3,  -1, 0, 0.5, 0.5)
		Case 2
			v1 = AddVertex(s(0), -1 + i*3, 1,  0, 0.5, 0)
			v2 = AddVertex(s(0), 1 + i*3,  1,  0, 1,   0)
			v3 = AddVertex(s(0), -1 + i*3, -1, 0, 0.5, 0.5)
			v4 = AddVertex(s(0), 1 + i*3,  -1, 0, 1,   0.5)
		Case 3
			v1 = AddVertex(s(0), -1 + i*3, 1,  0, 0,   0.5)
			v2 = AddVertex(s(0), 1 + i*3,  1,  0, 0.5, 0.5)
			v3 = AddVertex(s(0), -1 + i*3, -1, 0, 0,   1)
			v4 = AddVertex(s(0), 1 + i*3,  -1, 0, 0.5, 1)
		Case 4
			v1 = AddVertex(s(0), -1 + i*3, 1,  0, 0.5, 0.5)
			v2 = AddVertex(s(0), 1 + i*3,  1,  0, 1,   0.5)
			v3 = AddVertex(s(0), -1 + i*3, -1, 0, 0.5, 1)
			v4 = AddVertex(s(0), 1 + i*3,  -1, 0, 1,   1)
	End Select	
	AddTriangle(s(0), v1, v3, v4)
	AddTriangle(s(0), v1, v4, v2)
Next
Next

cam = CreateCamera()
MoveEntity cam, 2*3+1, 0, 10
TurnEntity cam, 0, 180, 0

Color 255, 255, 255

While Not KeyDown(1)

	m = MilliSecs()
	If m >= tm Then
		d = m - tm
		tm = m + 1000
		fps# = Float(f) / Float(1000+d) * 1000.0
		f = 0
	Else
		f = f + 1
	End If
	
	Cls
	
	RenderWorld

	Text 0, 0, "FPS: " + fps
	Text 0, 15, "Tris: " + TrisRendered()
	
	Flip False
	
Wend

While KeyDown(1)
Wend

ClearWorld

AppTitle "4 Textures, 4 Surfaces"
t1 = CreateTexture(T_SIZE, T_SIZE)
t2 = CreateTexture(T_SIZE, T_SIZE)
t3 = CreateTexture(T_SIZE, T_SIZE)
t4 = CreateTexture(T_SIZE, T_SIZE)
SetBuffer TextureBuffer(t1)
Color 255, 0, 0
Rect 0, 0, T_SIZE, T_SIZE, True
SetBuffer TextureBuffer(t2)
Color 0, 0, 255
Rect 0, 0, T_SIZE, T_SIZE, True
SetBuffer TextureBuffer(t3)
Color 0, 255, 0
Rect 0, 0, T_SIZE, T_SIZE, True
SetBuffer TextureBuffer(t4)
Color 255, 0, 255
Rect 0, 0, T_SIZE, T_SIZE, True

SetBuffer BackBuffer()

For j = 0 To NB_QUADS
For i = 1 To 4
	t(j*4+i) = CreateMesh()
	s(j*4+i) = CreateSurface(t(j*4+i))
	v1 = AddVertex(s(j*4+i), -1, 1,  0, 0, 0)
	v2 = AddVertex(s(j*4+i), 1,  1,  0, 1, 0)
	v3 = AddVertex(s(j*4+i), -1, -1, 0, 0, 1)
	v4 = AddVertex(s(j*4+i), 1,  -1, 0, 1, 1)
	Select i
		Case 1
			EntityTexture t(j*4+i), t1
		Case 2
			EntityTexture t(j*4+i), t2
		Case 3
			EntityTexture t(j*4+i), t3
		Case 4
			EntityTexture t(j*4+i), t4
	End Select	
	AddTriangle(s(j*4+i), v1, v3, v4)
	AddTriangle(s(j*4+i), v1, v4, v2)
	MoveEntity t(j*4+i), i * 3, 0, 0
Next
Next

cam = CreateCamera()
MoveEntity cam, 2*3+1, 0, 10
TurnEntity cam, 0, 180, 0

Color 255, 255, 255

While Not KeyDown(1)

	m = MilliSecs()
	If m >= tm Then
		d = m - tm
		tm = m + 1000
		fps# = Float(f) / Float(1000+d) * 1000.0
		f = 0
	Else
		f = f + 1
	End If
	
	Cls
	
	RenderWorld

	Text 0, 0, "FPS: " + fps
	Text 0, 15, "Tris: " + TrisRendered()
	
	Flip False
	
Wend