| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package shader
- import rl "vendor:raylib"
- import r3d "../r3d"
- main :: proc() {
- // Initialize window
- rl.InitWindow(800, 450, "[r3d] - Shader example")
- defer rl.CloseWindow()
- rl.SetTargetFPS(60)
- // Initialize R3D
- r3d.Init(rl.GetScreenWidth(), rl.GetScreenHeight())
- defer r3d.Close()
- // Setup environment
- env := r3d.GetEnvironment()
- env.ambient.color = {10, 10, 10, 255}
- env.bloom.mode = .ADDITIVE
- // Create meshes
- plane := r3d.GenMeshPlane(1000, 1000, 1, 1)
- defer r3d.UnloadMesh(plane)
- torus := r3d.GenMeshTorus(0.5, 0.1, 32, 16)
- defer r3d.UnloadMesh(torus)
- // Create material
- material := r3d.GetDefaultMaterial()
- material.shader = r3d.LoadSurfaceShader("./resources/shaders/material.glsl")
- defer r3d.UnloadSurfaceShader(material.shader)
- // Generate a texture for custom sampler
- image := rl.GenImageChecked(512, 512, 16, 32, rl.WHITE, rl.BLACK)
- texture := rl.LoadTextureFromImage(image)
- defer rl.UnloadTexture(texture)
- rl.UnloadImage(image)
- // Set custom sampler
- r3d.SetSurfaceShaderSampler(material.shader, "u_texture", texture)
- // Load a screen shader
- shader := r3d.LoadScreenShader("./resources/shaders/screen.glsl")
- defer r3d.UnloadScreenShader(shader)
- shaderPtr := shader
- r3d.SetScreenShaderChain(&shaderPtr, 1)
- // Create light
- light := r3d.CreateLight(.SPOT)
- r3d.LightLookAt(light, {0, 10, 5}, {0, 0, 0})
- r3d.EnableShadow(light)
- r3d.SetLightActive(light, true)
- // Setup camera
- camera: rl.Camera3D = {
- position = {0, 2, 2},
- target = {0, 0, 0},
- up = {0, 1, 0},
- fovy = 60,
- }
- // Main loop
- for !rl.WindowShouldClose()
- {
- rl.UpdateCamera(&camera, rl.CameraMode.ORBITAL)
- rl.BeginDrawing()
- rl.ClearBackground(rl.RAYWHITE)
- time := 2.0 * f32(rl.GetTime())
- r3d.SetScreenShaderUniform(shader, "u_time", &time)
- r3d.SetSurfaceShaderUniform(material.shader, "u_time", &time)
- r3d.Begin(camera)
- r3d.DrawMesh(plane, r3d.GetDefaultMaterial(), {0, -0.5, 0}, 1.0)
- r3d.DrawMesh(torus, material, {0, 0, 0}, 1.0)
- r3d.End()
- rl.EndDrawing()
- }
- }
|