SlideShare a Scribd company logo
1 of 29
Download to read offline
Woden 2: Developing a modern 3D
graphics engine
Ronie Salgado
Universidad de Chile
Talk Outline: Foundations
● Why rewriting Woden?
– OpenGL problems
– Classic graphics API (OpenGL, Direct 3D except 12)
– “Modern” PC architecture
– Modern graphics API (Vulkan, Direct 3D 12 and Metal)
● Core abstraction layers
– AbstractGPU
– Dastrel (Data Stream Language)
– Slovim (Dastrel back-end)
Talk Outline: Woden 2 Layers
● WodenMath library
● Core
– Pipeline state cache
– Resource cache
– GPU resource management
● Basic layers
– Scene graph
– Woden athens backend
● Application layers
– Woden Roassal ported to Woden 2
– Woden 2 Game System
– Level Editor
Why rewriting Woden 2?
● OpenGL is very complex.
● OpenGL drivers are very buggy!
– NVIDIA does not follow strictly the spec.
– AMD is very strict.
– Intel, OS specific behavior.
● OpenGL uses a thread local context.
● OpenGL is old.
● GLSL compiler is in the driver.
Choose a desktop OpenGL version
OpenGL GLSL
1.2 Not available
2.0 1.10
2.1 1.20
3.0 1.30
3.1 1.40
3.2 1.50
3.3 3.30
4.0 4.00
4.1 4.10
4.2 4.30
4.4 4.40
4.5 4.50
Classic graphics API
Canvas
Shader
CPU
● Set shader, depth buffer state, ...
● Set texture.
● Set vertex buffer.
● Set index buffer.
● Draw indexed elements.
GPU/CP
“Modern” PC Architecture
CPU
RAM
IOMMU VRAM
GPU
CP
Modern Low-Level Graphics API
CPU
CPCommand List
Pipeline State Object
Vertex BufferUniform Buffer Index Buffer
GPUMMap
Texture
Descriptor Set
DMA
Core Abstraction Layers
● AbstractGPU
– https://github.com/ronsaldo/abstract-gpu
● Dastrel (Data Stream Language)
– http://smalltalkhub.com/#!/~ronsaldo/Dastrel
● Slovim (LLVM inspired typed SSA form)
– http://smalltalkhub.com/#!/~ronsaldo/Slovim
AbstractGPU
● Abstraction above Vulkan, Metal and D3D 12.
● API in C inspired by OpenCL
● Implementation in C++
● XML spec for headers and bindings
● Mostly tested with Vulkan in Linux
Dastrel (Data Stream Language)
● Intended to be a semi-visual language
● Statically typed
● Syntax inspired by C, Rust, Swift and Smalltalk
● Dumb type inference
● Compiler front-end written in Pharo
● Emits Slovim SSA form
Dastrel Sample
import environment;
import fragment;
import material;
import lighting;
code_block(fragment) main
{
let N = normalize(FragmentInput.normal);
let V = normalize(-FragmentInput.position);
color: FragmentOutput.color <== forwardLightingModel
albedo: FragmentInput.color*MaterialState.albedo
fresnel: MaterialState.fresnel smoothness: MaterialState.smoothness
normal: N viewVector: V position: FragmentInput.position;
}
Dastrel Sample
struct ObjectStateData
{
matrix: float4x4;
inverseMatrix: float4x4;
color: float4;
visible: int;
}
uniform(set=0, binding=0) ObjectState
{
objectState: ObjectStateData;
}
buffer(set=0, binding=1) InstanceObjectState
{
instanceStates: ObjectStateData[];
}
uniform(set=1, binding=0) CameraState
{
inverseViewMatrix: float4x4;
viewMatrix: float4x4;
projectionMatrix: float4x4;
currentTime: float;
}
Dastrel
function transformPositionToWorld(position: float3) -> float4
{
using ObjectState;
using InstanceObjectState;
using VertexStage;
return objectState.matrix *
(instanceStates[instanceID].matrix * float4(position, 1.0f));
}
Slovim
● LLVM style SSA form in Pharo.
● Strongly typed.
● Some very basics optimizations.
● Backends for:
– Spir-V (Done)
– GLSL (Done for Vulkan, missing OpenGL)
– C++ (For testing/experimenting)
– HLSL (To be done)
– Metal Shading Language (To be done)
WodenMath
● 3D graphics linear algebra
– Vectors (2D, 3D, 4D)
– Complex
– Quaternions
– Matrices (3x3 and 4x4)
● Same memory layout as C/GPU structures.
● Optimized using Lowcode extended bytecodes.
WodenMath
● 3D graphics linear algebra
– Vectors (2D, 3D, 4D)
– Complex
– Quaternions
– Matrices (3x3 and 4x4)
● Same memory layout as C/GPU structures.
● Optimized using Lowcode extended bytecodes.
WodenMath
Woden 2 Core
● WTEngine is the main entry point
● WTPipelineStateCache loads PSO from JSON
● WTResourceCache for loading files
● WTApplication provides support for Morphic
and OSWindow
● They are wrappers above the AbstractGPU
object for supporting image session saving and
restoring
Woden 2 Core Utilities
● Custom bitmap font format
● Mesh building
● Some GPU structures matching shader
definitions
– WTObjectState
– WTCameraState
– WTLightSourceData
● 3D Model with skeletal animation loading
How do I get Woden 2
● https://github.com/ronsaldo/woden2
● newImage.sh builds dependencies and creates
a Woden 2 image
● Warning: this currently requires a modified VM
at https://github.com/ronsaldo/pharo-vm-
lowcode
Woden 2 Scene Graph
● Simpler than the scene graph in Woden 1.
● Only rendering a 3D scene (except for
WTSNodeModel)
WTFPSSampleApplicationCube
3D Scene Rendering
● Standard forward rendering.
● WTSForwardSceneRenderer
● Command lists are reused if the scene topology
does ot change
● Shadows and a deferred shading renderer are
not yet implemented
Woden 2 Athens Backend
Woden Roassal
Game System
Level Editor
● Bloc over Woden 2
Where is Woden 2?
● https://github.com/ronsaldo/woden2
● But, it requires a modified Pharo VM
● https://github.com/ronsaldo/pharo-vm-lowcode

More Related Content

What's hot

Lecture 16 memory bounded search
Lecture 16 memory bounded searchLecture 16 memory bounded search
Lecture 16 memory bounded searchHema Kashyap
 
Artificial Intelligence_ Knowledge Representation
Artificial Intelligence_ Knowledge RepresentationArtificial Intelligence_ Knowledge Representation
Artificial Intelligence_ Knowledge RepresentationThenmozhiK5
 
Digital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdf
Digital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdfDigital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdf
Digital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdfssuserbe3944
 
NLP_KASHK:Finite-State Morphological Parsing
NLP_KASHK:Finite-State Morphological ParsingNLP_KASHK:Finite-State Morphological Parsing
NLP_KASHK:Finite-State Morphological ParsingHemantha Kulathilake
 
Anti- aliasing computer graphics
Anti- aliasing computer graphicsAnti- aliasing computer graphics
Anti- aliasing computer graphicsSafayet Hossain
 
Dimensionality Reduction
Dimensionality ReductionDimensionality Reduction
Dimensionality Reductionmrizwan969
 
Reinforcement Learning
Reinforcement LearningReinforcement Learning
Reinforcement LearningSalem-Kabbani
 
Uninformed search /Blind search in AI
Uninformed search /Blind search in AIUninformed search /Blind search in AI
Uninformed search /Blind search in AIKirti Verma
 

What's hot (20)

AI: Planning and AI
AI: Planning and AIAI: Planning and AI
AI: Planning and AI
 
Structured Knowledge Representation
Structured Knowledge RepresentationStructured Knowledge Representation
Structured Knowledge Representation
 
Lecture 16 memory bounded search
Lecture 16 memory bounded searchLecture 16 memory bounded search
Lecture 16 memory bounded search
 
Ontology engineering
Ontology engineering Ontology engineering
Ontology engineering
 
Planning
PlanningPlanning
Planning
 
Ai notes
Ai notesAi notes
Ai notes
 
Artificial Intelligence_ Knowledge Representation
Artificial Intelligence_ Knowledge RepresentationArtificial Intelligence_ Knowledge Representation
Artificial Intelligence_ Knowledge Representation
 
Digital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdf
Digital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdfDigital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdf
Digital Image Processing 3rd edition Rafael C. Gonzalez, Richard E. Woods.pdf
 
Frames
FramesFrames
Frames
 
NLP_KASHK:Finite-State Morphological Parsing
NLP_KASHK:Finite-State Morphological ParsingNLP_KASHK:Finite-State Morphological Parsing
NLP_KASHK:Finite-State Morphological Parsing
 
Anti- aliasing computer graphics
Anti- aliasing computer graphicsAnti- aliasing computer graphics
Anti- aliasing computer graphics
 
Dimensionality Reduction
Dimensionality ReductionDimensionality Reduction
Dimensionality Reduction
 
AI Lecture 2 (intelligent agents)
AI Lecture 2 (intelligent agents)AI Lecture 2 (intelligent agents)
AI Lecture 2 (intelligent agents)
 
Reinforcement Learning
Reinforcement LearningReinforcement Learning
Reinforcement Learning
 
Knowledge representation
Knowledge representationKnowledge representation
Knowledge representation
 
Semantic Networks
Semantic NetworksSemantic Networks
Semantic Networks
 
Problems, Problem spaces and Search
Problems, Problem spaces and SearchProblems, Problem spaces and Search
Problems, Problem spaces and Search
 
Uninformed search /Blind search in AI
Uninformed search /Blind search in AIUninformed search /Blind search in AI
Uninformed search /Blind search in AI
 
Problem Solving
Problem Solving Problem Solving
Problem Solving
 
First order logic
First order logicFirst order logic
First order logic
 

Viewers also liked

Replicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed ApplicationsReplicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed ApplicationsESUG
 
GemStone/64 product update and road map
GemStone/64 product update and road mapGemStone/64 product update and road map
GemStone/64 product update and road mapESUG
 
Perfection & Feedback Loops or: why worse is better
Perfection & Feedback Loops or: why worse is betterPerfection & Feedback Loops or: why worse is better
Perfection & Feedback Loops or: why worse is betterESUG
 
Lub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented ProgrammingLub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented ProgrammingESUG
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevAMD Developer Central
 
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel” Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel” Shane Tilton
 
Human Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal featuresHuman Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal featuresnikhilus85
 
Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011Glenn Waldron
 
UP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CADUP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CADDragon Cai
 
Special Photo Effects
Special Photo EffectsSpecial Photo Effects
Special Photo EffectsMarco Belzoni
 
Radiosity algorithm
Radiosity algorithmRadiosity algorithm
Radiosity algorithmHung Sun
 
GLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraphGLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraphMike Weiblen
 
Shtanchaev_SPEKTR
Shtanchaev_SPEKTRShtanchaev_SPEKTR
Shtanchaev_SPEKTRshtanchaev
 
Steel monkeys: Unity3D глазами программиста графики
Steel monkeys: Unity3D глазами программиста графикиSteel monkeys: Unity3D глазами программиста графики
Steel monkeys: Unity3D глазами программиста графикиDevGAMM Conference
 
Typography on the Web
Typography on the WebTypography on the Web
Typography on the WebSara Cannon
 
Quadtree In Game
Quadtree In GameQuadtree In Game
Quadtree In GameDương Nyl
 
What is 3 d modeling unit 66
What is 3 d modeling   unit 66What is 3 d modeling   unit 66
What is 3 d modeling unit 66Richard Marshall
 
Orthographic projection
Orthographic projectionOrthographic projection
Orthographic projectionlaura_gerold
 
Building a DIY 3D Scanner
Building a DIY 3D ScannerBuilding a DIY 3D Scanner
Building a DIY 3D ScannerMatthewShotton
 

Viewers also liked (20)

Replicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed ApplicationsReplicated Service Objects -- A Strategy for Distributed Applications
Replicated Service Objects -- A Strategy for Distributed Applications
 
GemStone/64 product update and road map
GemStone/64 product update and road mapGemStone/64 product update and road map
GemStone/64 product update and road map
 
Perfection & Feedback Loops or: why worse is better
Perfection & Feedback Loops or: why worse is betterPerfection & Feedback Loops or: why worse is better
Perfection & Feedback Loops or: why worse is better
 
Lub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented ProgrammingLub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented Programming
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan Nevraev
 
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel” Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
Interactive Graphic Storytelling: “How the Internet Impacts the Graphic Novel”
 
Human Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal featuresHuman Action Recognition Based on Spacio-temporal features
Human Action Recognition Based on Spacio-temporal features
 
Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011Pelican Mapping - FOSS4G 2011
Pelican Mapping - FOSS4G 2011
 
UP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CADUP200 dental 3d scanner with dental CAD
UP200 dental 3d scanner with dental CAD
 
Special Photo Effects
Special Photo EffectsSpecial Photo Effects
Special Photo Effects
 
Radiosity algorithm
Radiosity algorithmRadiosity algorithm
Radiosity algorithm
 
GLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraphGLSL Shading with OpenSceneGraph
GLSL Shading with OpenSceneGraph
 
Shtanchaev_SPEKTR
Shtanchaev_SPEKTRShtanchaev_SPEKTR
Shtanchaev_SPEKTR
 
Steel monkeys: Unity3D глазами программиста графики
Steel monkeys: Unity3D глазами программиста графикиSteel monkeys: Unity3D глазами программиста графики
Steel monkeys: Unity3D глазами программиста графики
 
Shells
ShellsShells
Shells
 
Typography on the Web
Typography on the WebTypography on the Web
Typography on the Web
 
Quadtree In Game
Quadtree In GameQuadtree In Game
Quadtree In Game
 
What is 3 d modeling unit 66
What is 3 d modeling   unit 66What is 3 d modeling   unit 66
What is 3 d modeling unit 66
 
Orthographic projection
Orthographic projectionOrthographic projection
Orthographic projection
 
Building a DIY 3D Scanner
Building a DIY 3D ScannerBuilding a DIY 3D Scanner
Building a DIY 3D Scanner
 

Similar to Woden 2: Developing a modern 3D graphics engine in Smalltalk

Developing games and graphic visualizations in Pascal
Developing games and graphic visualizations in PascalDeveloping games and graphic visualizations in Pascal
Developing games and graphic visualizations in PascalMichalis Kamburelis
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I💻 Anton Gerdelan
 
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray TracingSyysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray TracingElectronic Arts / DICE
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computingArka Ghosh
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computingArka Ghosh
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computingArka Ghosh
 
Newbie’s guide to_the_gpgpu_universe
Newbie’s guide to_the_gpgpu_universeNewbie’s guide to_the_gpgpu_universe
Newbie’s guide to_the_gpgpu_universeOfer Rosenberg
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computingArka Ghosh
 
One Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launchesOne Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launchesLeszek Godlewski
 
Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011Prabindh Sundareson
 
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio [Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio Owen Wu
 
Graphics processing uni computer archiecture
Graphics processing uni computer archiectureGraphics processing uni computer archiecture
Graphics processing uni computer archiectureHaris456
 
Ceph RBD Update - June 2021
Ceph RBD Update - June 2021Ceph RBD Update - June 2021
Ceph RBD Update - June 2021Ceph Community
 
Javascript Update May 2013
Javascript Update May 2013Javascript Update May 2013
Javascript Update May 2013Ramesh Nair
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xrkr10
 
Introduction to Docker (as presented at December 2013 Global Hackathon)
Introduction to Docker (as presented at December 2013 Global Hackathon)Introduction to Docker (as presented at December 2013 Global Hackathon)
Introduction to Docker (as presented at December 2013 Global Hackathon)Jérôme Petazzoni
 
Challenges in GPU compilers
Challenges in GPU compilersChallenges in GPU compilers
Challenges in GPU compilersAnastasiaStulova
 
Rohit Yadav - The future of the CloudStack Virtual Router
Rohit Yadav - The future of the CloudStack Virtual RouterRohit Yadav - The future of the CloudStack Virtual Router
Rohit Yadav - The future of the CloudStack Virtual RouterShapeBlue
 

Similar to Woden 2: Developing a modern 3D graphics engine in Smalltalk (20)

Developing games and graphic visualizations in Pascal
Developing games and graphic visualizations in PascalDeveloping games and graphic visualizations in Pascal
Developing games and graphic visualizations in Pascal
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I
 
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray TracingSyysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
 
GPU Programming with Java
GPU Programming with JavaGPU Programming with Java
GPU Programming with Java
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computing
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computing
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computing
 
Newbie’s guide to_the_gpgpu_universe
Newbie’s guide to_the_gpgpu_universeNewbie’s guide to_the_gpgpu_universe
Newbie’s guide to_the_gpgpu_universe
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computing
 
One Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launchesOne Year of Porting - Post-mortem of two Linux/SteamOS launches
One Year of Porting - Post-mortem of two Linux/SteamOS launches
 
Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011Advanced Graphics Workshop - GFX2011
Advanced Graphics Workshop - GFX2011
 
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio [Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
[Unite Seoul 2019] Mali GPU Architecture and Mobile Studio
 
Graphics processing uni computer archiecture
Graphics processing uni computer archiectureGraphics processing uni computer archiecture
Graphics processing uni computer archiecture
 
Ceph RBD Update - June 2021
Ceph RBD Update - June 2021Ceph RBD Update - June 2021
Ceph RBD Update - June 2021
 
Javascript Update May 2013
Javascript Update May 2013Javascript Update May 2013
Javascript Update May 2013
 
Cuda Architecture
Cuda ArchitectureCuda Architecture
Cuda Architecture
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12x
 
Introduction to Docker (as presented at December 2013 Global Hackathon)
Introduction to Docker (as presented at December 2013 Global Hackathon)Introduction to Docker (as presented at December 2013 Global Hackathon)
Introduction to Docker (as presented at December 2013 Global Hackathon)
 
Challenges in GPU compilers
Challenges in GPU compilersChallenges in GPU compilers
Challenges in GPU compilers
 
Rohit Yadav - The future of the CloudStack Virtual Router
Rohit Yadav - The future of the CloudStack Virtual RouterRohit Yadav - The future of the CloudStack Virtual Router
Rohit Yadav - The future of the CloudStack Virtual Router
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 

Recently uploaded (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

Woden 2: Developing a modern 3D graphics engine in Smalltalk

  • 1. Woden 2: Developing a modern 3D graphics engine Ronie Salgado Universidad de Chile
  • 2. Talk Outline: Foundations ● Why rewriting Woden? – OpenGL problems – Classic graphics API (OpenGL, Direct 3D except 12) – “Modern” PC architecture – Modern graphics API (Vulkan, Direct 3D 12 and Metal) ● Core abstraction layers – AbstractGPU – Dastrel (Data Stream Language) – Slovim (Dastrel back-end)
  • 3. Talk Outline: Woden 2 Layers ● WodenMath library ● Core – Pipeline state cache – Resource cache – GPU resource management ● Basic layers – Scene graph – Woden athens backend ● Application layers – Woden Roassal ported to Woden 2 – Woden 2 Game System – Level Editor
  • 4. Why rewriting Woden 2? ● OpenGL is very complex. ● OpenGL drivers are very buggy! – NVIDIA does not follow strictly the spec. – AMD is very strict. – Intel, OS specific behavior. ● OpenGL uses a thread local context. ● OpenGL is old. ● GLSL compiler is in the driver.
  • 5. Choose a desktop OpenGL version OpenGL GLSL 1.2 Not available 2.0 1.10 2.1 1.20 3.0 1.30 3.1 1.40 3.2 1.50 3.3 3.30 4.0 4.00 4.1 4.10 4.2 4.30 4.4 4.40 4.5 4.50
  • 6. Classic graphics API Canvas Shader CPU ● Set shader, depth buffer state, ... ● Set texture. ● Set vertex buffer. ● Set index buffer. ● Draw indexed elements. GPU/CP
  • 8. Modern Low-Level Graphics API CPU CPCommand List Pipeline State Object Vertex BufferUniform Buffer Index Buffer GPUMMap Texture Descriptor Set DMA
  • 9. Core Abstraction Layers ● AbstractGPU – https://github.com/ronsaldo/abstract-gpu ● Dastrel (Data Stream Language) – http://smalltalkhub.com/#!/~ronsaldo/Dastrel ● Slovim (LLVM inspired typed SSA form) – http://smalltalkhub.com/#!/~ronsaldo/Slovim
  • 10. AbstractGPU ● Abstraction above Vulkan, Metal and D3D 12. ● API in C inspired by OpenCL ● Implementation in C++ ● XML spec for headers and bindings ● Mostly tested with Vulkan in Linux
  • 11. Dastrel (Data Stream Language) ● Intended to be a semi-visual language ● Statically typed ● Syntax inspired by C, Rust, Swift and Smalltalk ● Dumb type inference ● Compiler front-end written in Pharo ● Emits Slovim SSA form
  • 12. Dastrel Sample import environment; import fragment; import material; import lighting; code_block(fragment) main { let N = normalize(FragmentInput.normal); let V = normalize(-FragmentInput.position); color: FragmentOutput.color <== forwardLightingModel albedo: FragmentInput.color*MaterialState.albedo fresnel: MaterialState.fresnel smoothness: MaterialState.smoothness normal: N viewVector: V position: FragmentInput.position; }
  • 13. Dastrel Sample struct ObjectStateData { matrix: float4x4; inverseMatrix: float4x4; color: float4; visible: int; } uniform(set=0, binding=0) ObjectState { objectState: ObjectStateData; } buffer(set=0, binding=1) InstanceObjectState { instanceStates: ObjectStateData[]; } uniform(set=1, binding=0) CameraState { inverseViewMatrix: float4x4; viewMatrix: float4x4; projectionMatrix: float4x4; currentTime: float; }
  • 14. Dastrel function transformPositionToWorld(position: float3) -> float4 { using ObjectState; using InstanceObjectState; using VertexStage; return objectState.matrix * (instanceStates[instanceID].matrix * float4(position, 1.0f)); }
  • 15. Slovim ● LLVM style SSA form in Pharo. ● Strongly typed. ● Some very basics optimizations. ● Backends for: – Spir-V (Done) – GLSL (Done for Vulkan, missing OpenGL) – C++ (For testing/experimenting) – HLSL (To be done) – Metal Shading Language (To be done)
  • 16. WodenMath ● 3D graphics linear algebra – Vectors (2D, 3D, 4D) – Complex – Quaternions – Matrices (3x3 and 4x4) ● Same memory layout as C/GPU structures. ● Optimized using Lowcode extended bytecodes.
  • 17. WodenMath ● 3D graphics linear algebra – Vectors (2D, 3D, 4D) – Complex – Quaternions – Matrices (3x3 and 4x4) ● Same memory layout as C/GPU structures. ● Optimized using Lowcode extended bytecodes.
  • 19. Woden 2 Core ● WTEngine is the main entry point ● WTPipelineStateCache loads PSO from JSON ● WTResourceCache for loading files ● WTApplication provides support for Morphic and OSWindow ● They are wrappers above the AbstractGPU object for supporting image session saving and restoring
  • 20. Woden 2 Core Utilities ● Custom bitmap font format ● Mesh building ● Some GPU structures matching shader definitions – WTObjectState – WTCameraState – WTLightSourceData ● 3D Model with skeletal animation loading
  • 21. How do I get Woden 2 ● https://github.com/ronsaldo/woden2 ● newImage.sh builds dependencies and creates a Woden 2 image ● Warning: this currently requires a modified VM at https://github.com/ronsaldo/pharo-vm- lowcode
  • 22. Woden 2 Scene Graph ● Simpler than the scene graph in Woden 1. ● Only rendering a 3D scene (except for WTSNodeModel)
  • 24. 3D Scene Rendering ● Standard forward rendering. ● WTSForwardSceneRenderer ● Command lists are reused if the scene topology does ot change ● Shadows and a deferred shading renderer are not yet implemented
  • 25. Woden 2 Athens Backend
  • 28. Level Editor ● Bloc over Woden 2
  • 29. Where is Woden 2? ● https://github.com/ronsaldo/woden2 ● But, it requires a modified Pharo VM ● https://github.com/ronsaldo/pharo-vm-lowcode