; Built-in Standard Material
; Extended language mode only. No external media is required.
Include "_common\ShowcaseCamera.bb"

Graphics3D 960,600,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,1,-9
target=CreatePivot():PositionEntity target,0,.4,2
PointEntity camera,target
CameraClsColor camera,5,8,15

light=CreateLight(1)
RotateEntity light,35,-35,0
LightColor light,255,235,210
AmbientLight 10,10,14

; Standard environments use ordinary 2:1 equirectangular textures.
environment=CreateTexture(256,128,1+8+32)
SetBuffer TextureBuffer(environment)
For y=0 To 127
    If y<64
        red=15+y:green=35+y:blue=100+y*2
    Else
        red=120+(y-64)*2:green=80+(y-64):blue=45
    EndIf
    Color red,green,blue:Line 0,y,255,y
Next
Color 255,240,170:Oval 188,22,24,24,True
SetBuffer BackBuffer()

sky=CreateSkyBox(environment)
SkyBoxIntensity sky,.75

; Rows become rougher from front to back; columns become more metallic.
For row=0 To 2
    For column=0 To 4
        brush=CreateStandardBrush(215,135,55)
        BrushPBR brush,column/4.0,.08+row*.4
        BrushEnvironmentMap brush,environment,0,1.25
        sphere=CreateSphere(32)
        PaintEntity sphere,brush
        PositionEntity sphere,(column-2)*1.35,1.35-row*1.35,2
        FreeBrush brush
    Next
Next

; The same brush system also covers textures, normal maps and emission.
base_map=CreateTexture(64,64,1+8)
SetBuffer TextureBuffer(base_map):ClsColor 35,55,80:Cls
Color 250,170,45:Rect 8,8,48,48,True
Color 40,90,170:Rect 18,18,28,28,True:SetBuffer BackBuffer()
normal_map=SolidTexture(128,128,255)

feature_brush=CreateStandardBrush()
BrushBaseColorMap feature_brush,base_map
BrushNormalMap feature_brush,normal_map
BrushPBR feature_brush,.15,.35
BrushEmissive feature_brush,30,100,255,.7
BrushEnvironmentMap feature_brush,environment
BrushDoubleSided feature_brush,True
feature=CreateCube():PaintEntity feature,feature_brush
PositionEntity feature,0,-2.7,2:ScaleEntity feature,.8,.8,.8

bright=True
ResetShowcaseCameraTimer()
While Not KeyHit(1)
    UpdateShowcaseCamera camera,4,70
    If KeyHit(57)
        bright=Not bright
        If bright Then SkyBoxIntensity sky,.75 Else SkyBoxIntensity sky,.2
    EndIf
    TurnEntity feature,.2,.45,0
    RenderWorld
    Color 255,255,255
    Text 20,18,"BUILT-IN STANDARD MATERIAL"
    Text 20,40,"Across: dielectric to metal    Down: smooth to rough"
    Text 20,62,"SPACE changes sky brightness    ESC exits"
    DrawShowcaseCameraHelp 570
    Flip
Wend

End

Function SolidTexture(red,green,blue)
    texture=CreateTexture(2,2,1+8)
    SetBuffer TextureBuffer(texture):ClsColor red,green,blue:Cls
    SetBuffer BackBuffer()
    Return texture
End Function
