This document provides an overview of shaders in XNA game development. It discusses what shaders are and how they allow developers to program graphics pipelines rather than relying on fixed function pipelines. It also covers HLSL (High Level Shader Language) and how to define vertex formats, vertex shaders, and techniques in HLSL code files to render 3D objects with customized shaders. Specific topics covered include declaring effects, loading shader files, using techniques and passes, defining a custom vertex format structure, and writing a simple vertex shader to render colored triangles.
The document discusses experimenting with shaders in XNA game development. It describes replacing code in an HLSL file to output vertex color values directly from position data. This avoids color clipping issues. It also discusses passing unclipped position data to the pixel shader and interpolating color values properly. Examples of other shader techniques are briefly mentioned like texturing, lighting, shadow mapping, and post-processing effects.
XNA L04–Primitives, IndexBuffer and VertexBufferMohammad Shaker
This document discusses drawing 3D primitives and using vertex and index buffers in XNA game development. It begins with an overview of different primitive types like points, lines, and triangles. It then covers drawing triangles by defining vertex positions and colors. Next, it demonstrates creating a rotating tetrahedron using triangle lists. The document concludes by explaining how to create an icosahedron mesh using vertex and index buffers to store vertex data more efficiently for rendering. Key steps include generating vertex and index data, creating vertex and index buffers, and drawing indexed triangles.
Collision detection determines whether two objects in a virtual world overlap and have collided. Accurate collision detection is fundamental to a solid game engine. XNA has two main types for implementing collision detection: bounding boxes and bounding spheres. Bounding boxes are better for rectangular objects while bounding spheres offer a better fit for rounded objects. Both bounding boxes and bounding spheres can be used to check for intersections and containment between game objects.
The document discusses using 3D models, textures, lighting, fog, and animation in XNA game development. It explains how to load 3D models, apply the BasicEffect to set textures, lighting properties, and fog. It also demonstrates how to create simple animation by updating the model's position over time in the game's update loop and applying the transformation to the world matrix.
The document discusses 3D matrix transformations in XNA game development. It explains that to render a 3D scene, a camera matrix, projection matrix, and separate world matrix for each object must be set up. It provides details on creating view matrices with CreateLookAt, projection matrices with CreatePerspectiveFieldOfView or CreateOrthographic, and transforming objects using world matrices created from scaling, rotation, translation and other transformations. Multiple transformations can be combined by multiplying the matrices together in order.
The document discusses deferred lighting, ellipsoidal light shadows, and a screen-space material system. It describes how deferred lighting detaches lighting from scene complexity by rendering geometry to buffers and then lighting the scene many times. It also explains how ellipsoidal light shadows are rendered to cube shadow maps using geometry shaders and various culling techniques. Finally, it summarizes an approach to applying materials like skin and hair in screen-space through blurred passes rather than per-object.
- The document introduces real-time shaders for artists working in Softimage and discusses three key hurdles for understanding shaders: 1) dot products and shading calculations, 2) normal mapping and environment mapping, and 3) shader blending techniques.
- It provides examples of shader code to illustrate dot products, normal mapping, and blurring textures.
- The goal is to help artists understand and use shaders through a tutorial on basic shader concepts and translating shader logic into Softimage.
The document discusses experimenting with shaders in XNA game development. It describes replacing code in an HLSL file to output vertex color values directly from position data. This avoids color clipping issues. It also discusses passing unclipped position data to the pixel shader and interpolating color values properly. Examples of other shader techniques are briefly mentioned like texturing, lighting, shadow mapping, and post-processing effects.
XNA L04–Primitives, IndexBuffer and VertexBufferMohammad Shaker
This document discusses drawing 3D primitives and using vertex and index buffers in XNA game development. It begins with an overview of different primitive types like points, lines, and triangles. It then covers drawing triangles by defining vertex positions and colors. Next, it demonstrates creating a rotating tetrahedron using triangle lists. The document concludes by explaining how to create an icosahedron mesh using vertex and index buffers to store vertex data more efficiently for rendering. Key steps include generating vertex and index data, creating vertex and index buffers, and drawing indexed triangles.
Collision detection determines whether two objects in a virtual world overlap and have collided. Accurate collision detection is fundamental to a solid game engine. XNA has two main types for implementing collision detection: bounding boxes and bounding spheres. Bounding boxes are better for rectangular objects while bounding spheres offer a better fit for rounded objects. Both bounding boxes and bounding spheres can be used to check for intersections and containment between game objects.
The document discusses using 3D models, textures, lighting, fog, and animation in XNA game development. It explains how to load 3D models, apply the BasicEffect to set textures, lighting properties, and fog. It also demonstrates how to create simple animation by updating the model's position over time in the game's update loop and applying the transformation to the world matrix.
The document discusses 3D matrix transformations in XNA game development. It explains that to render a 3D scene, a camera matrix, projection matrix, and separate world matrix for each object must be set up. It provides details on creating view matrices with CreateLookAt, projection matrices with CreatePerspectiveFieldOfView or CreateOrthographic, and transforming objects using world matrices created from scaling, rotation, translation and other transformations. Multiple transformations can be combined by multiplying the matrices together in order.
The document discusses deferred lighting, ellipsoidal light shadows, and a screen-space material system. It describes how deferred lighting detaches lighting from scene complexity by rendering geometry to buffers and then lighting the scene many times. It also explains how ellipsoidal light shadows are rendered to cube shadow maps using geometry shaders and various culling techniques. Finally, it summarizes an approach to applying materials like skin and hair in screen-space through blurred passes rather than per-object.
- The document introduces real-time shaders for artists working in Softimage and discusses three key hurdles for understanding shaders: 1) dot products and shading calculations, 2) normal mapping and environment mapping, and 3) shader blending techniques.
- It provides examples of shader code to illustrate dot products, normal mapping, and blurring textures.
- The goal is to help artists understand and use shaders through a tutorial on basic shader concepts and translating shader logic into Softimage.
This document discusses using graphics to teach core Python concepts. It describes some challenges in using graphics APIs that are too complex or produce trivial results. Some solutions proposed are wrapping graphics APIs to simplify them, reusing code through classes, and using simple algorithms that generate complex patterns. Examples provided include using the POV-Ray and PIL libraries to generate 3D shapes and fractal images, as well as cellular automata with Tkinter. The goal is to focus on core Python concepts while producing interesting visual results.
This document provides an overview and objectives for a course on mastering AutoLISP in 80 minutes. The course aims to lay a foundation of the basics of Visual LISP and prepare students to write their own Visual LISP routines. It will teach some quick basics of Visual LISP and how to create new AutoCAD commands using AutoLISP. The instructor will cover key concepts like lists, functions, arguments, and the DEFUN command for creating new AutoCAD commands in Visual LISP.
This document discusses Python comprehensions including list, set, and dictionary comprehensions. List comprehensions allow converting iterable objects from one format to another in a concise way. Set and dictionary comprehensions also allow creating sets and dictionaries from iterable objects. Examples are provided to demonstrate converting a list of strings to integers, filtering a list based on a condition, creating a set of authors from a list of books, and creating a dictionary of book titles mapped to book details. Comprehensions provide a powerful and Pythonic way to transform and filter iterable objects.
You probably can't imagine that Monoids (not monads) are so simple maths creatures that you can understand them in just a few minutes.
You probably can't imagine that Monoids (not monads) are so simple maths creatures that you can understand them in just a few minutes.
But you probably don't imagine either that they can help you craft elegant and powerful domain models that scale very well.
Through various examples, we will have a closer look at monoids used for domain modeling in a style that mixes the best of DDD and FP. Even in languages like Java or C#, this talk will influence your coding style forever!
'More entertaining and educational explanation of Monoids I've heard' - Martin Thompson, DDD exchange London 2014.
See more at http://skillsmatter.com/conferences/1880-ddd-exchange-nyc-2014#program
Loom & Functional Graphs in Clojure @ LambdaConf 2015Aysylu Greenberg
Graphs are ubiquitous data structures, and the algorithms for analyzing them are fascinating. Loom is an open-source Clojure library that provides many graph algorithms and visualizations. We will discuss how graphs are represented in a functional world, bridge the gap between procedural description of algorithms and their functional implementation, and learn about the way Loom integrates with other graph representations.
The document discusses Loom, an open source Clojure library for working with graphs and implementing graph algorithms. It provides an overview of Loom, including the types of graphs it supports (undirected, directed, weighted), algorithms it implements (DFS, BFS, shortest paths, etc.), and how graphs can be visualized. It then covers Loom's graph API for representing graphs and defining custom graph types. Finally, it gives examples of using Loom to implement graph algorithms like Bellman-Ford and integrate with other graph systems like core.async's SSA form and Titanium.
Graph algorithms are cool and fascinating. We'll look at a graph algorithms and visualization library, Loom, which is written in Clojure. We will discuss the graph API, look at implementation of the algorithms and learn about the integration of Loom with Titanium, which allows us to run the algorithms on and visualize data in graph databases.
The document discusses TypeScript modules. It begins by showing how to organize validators into a single file module. It then demonstrates splitting the module across multiple files by creating LettersOnlyValidator.ts and ZipCodeValidator.ts files that both reference a Validation.ts file and export classes that implement the module's interface. This allows validators to be modularized while splitting code across separate files.
This document contains notes from a coding workshop. It introduces students to Processing, an open-source programming language and environment used for creating visuals and graphics. It provides examples of basic Processing code for shapes, colors, and coordinates. Students are given exercises to practice drawing in Processing, such as creating a face using ellipses and rectangles. The document concludes by assigning homework for students to find patterns in the real world and read an interview about algorithms.
TypeScript provides basic types like Boolean, Number, String, Array, Enum, Any, and Void to define the type of a variable. It allows defining interfaces to describe the shape of an object and ensure variables match the expected structure. Classes can be created that implement interfaces, support inheritance, and use public/private modifiers. Accessors can be used to control read/write access to class properties. Static properties exist on the class level rather than instance level. Classes can also be defined using constructor functions for additional flexibility.
Functional Programming Patterns for the Pragmatic ProgrammerRaúl Raja Martínez
In this talk we will see a pragmatic approach to building a purely functional architecture that delivers cohesive functional components.
We will cover functional patterns such as Free Monads, Transformers, Kleisli arrows, dependently typed checked exceptions
and types as well as how they can be glued together to achieve pure functions that are composable, context free, dependently injectable and testable.
Dome project and code with instructions to run it can be found at:
https://github.com/47deg/func-architecture
The document summarizes a Scala meetup discussing functional programming concepts and techniques. It covers topics like monadic IO, monad transformers, free monads, tagless final encoding, and domain specific languages. Sample code is provided demonstrating storing a file using monadic IO and rewriting it without side effects using equational reasoning.
Introduces the functional programming ideas of Functor, Apply, Applicative And Monad. Shows how to implement each in Scala with Scalaz and how to validate the implementation using property based test using specs2 and scalacheck.
This document discusses monad transformers in Scala. It begins by introducing the OptionT monad transformer, which lifts an Option into a monad M. It defines the point and map methods for OptionT to make it an instance of the Monad type class. Later sections discuss using monad transformers to compose monads like IO and Option that normally do not compose, and how this allows embedding domain-specific languages within programs.
Drawing graphics in C++.NET requires:
1. Creating a Pen object to define the line/shape color and thickness.
2. Getting a Graphics object from the control to draw on using CreateGraphics().
3. Calling DrawLine() or other drawing methods on the Graphics object, passing the Pen and point coordinates.
Utilizing Kinect Control for a More Immersive Interaction with 3D EnvironmentMohammad Shaker
Utilizing Kinect Control for a More Immersive Interaction with 3D Environment. Implemented by Saed Haj Ali, Kinda Tarboush and Marah Halawah and Supervised by me, Dr. Noor Shaker and Dr. Ammar Joukhadar.
The document discusses object cloning in C# programming. It explains shallow cloning versus deep cloning and demonstrates different approaches to cloning objects, including using the ICloneable interface and MemberwiseClone() method. It notes issues with these approaches. The fastest way to do a deep clone, it states, is to serialize an object to a stream and then deserialize it back, which performs a full deep copy. Code is provided to implement this serialization/deserialization cloning approach.
This document provides an introduction to event-driven programming and forms using Delphi. It discusses various controls that can be used in forms like labels, edits, combo boxes, check boxes, group boxes, radio buttons, radio groups, and list boxes. It provides examples of how to use these controls and their properties. Tips are also provided like using auto-completion, differentiating between control properties, and changing the application icon. Functions for manipulating strings are also listed.
The document discusses various web technologies including HTML5, CSS, JavaScript, jQuery, ASP.NET, MVC pattern, and more. It provides an overview of each topic with definitions and examples. It also includes a brief history and future directions of web standards.
The document discusses 3D rendering in WPF. It provides code examples for creating 3D models like a cuboid using triangles, adding lighting and cameras, and manipulating 3D objects. It also covers using the Viewport2DVisual3D control to display 2D UI elements in a 3D environment. Code is provided to construct the geometry and add 2D components like text blocks and buttons to the visual host.
This document discusses using graphics to teach core Python concepts. It describes some challenges in using graphics APIs that are too complex or produce trivial results. Some solutions proposed are wrapping graphics APIs to simplify them, reusing code through classes, and using simple algorithms that generate complex patterns. Examples provided include using the POV-Ray and PIL libraries to generate 3D shapes and fractal images, as well as cellular automata with Tkinter. The goal is to focus on core Python concepts while producing interesting visual results.
This document provides an overview and objectives for a course on mastering AutoLISP in 80 minutes. The course aims to lay a foundation of the basics of Visual LISP and prepare students to write their own Visual LISP routines. It will teach some quick basics of Visual LISP and how to create new AutoCAD commands using AutoLISP. The instructor will cover key concepts like lists, functions, arguments, and the DEFUN command for creating new AutoCAD commands in Visual LISP.
This document discusses Python comprehensions including list, set, and dictionary comprehensions. List comprehensions allow converting iterable objects from one format to another in a concise way. Set and dictionary comprehensions also allow creating sets and dictionaries from iterable objects. Examples are provided to demonstrate converting a list of strings to integers, filtering a list based on a condition, creating a set of authors from a list of books, and creating a dictionary of book titles mapped to book details. Comprehensions provide a powerful and Pythonic way to transform and filter iterable objects.
You probably can't imagine that Monoids (not monads) are so simple maths creatures that you can understand them in just a few minutes.
You probably can't imagine that Monoids (not monads) are so simple maths creatures that you can understand them in just a few minutes.
But you probably don't imagine either that they can help you craft elegant and powerful domain models that scale very well.
Through various examples, we will have a closer look at monoids used for domain modeling in a style that mixes the best of DDD and FP. Even in languages like Java or C#, this talk will influence your coding style forever!
'More entertaining and educational explanation of Monoids I've heard' - Martin Thompson, DDD exchange London 2014.
See more at http://skillsmatter.com/conferences/1880-ddd-exchange-nyc-2014#program
Loom & Functional Graphs in Clojure @ LambdaConf 2015Aysylu Greenberg
Graphs are ubiquitous data structures, and the algorithms for analyzing them are fascinating. Loom is an open-source Clojure library that provides many graph algorithms and visualizations. We will discuss how graphs are represented in a functional world, bridge the gap between procedural description of algorithms and their functional implementation, and learn about the way Loom integrates with other graph representations.
The document discusses Loom, an open source Clojure library for working with graphs and implementing graph algorithms. It provides an overview of Loom, including the types of graphs it supports (undirected, directed, weighted), algorithms it implements (DFS, BFS, shortest paths, etc.), and how graphs can be visualized. It then covers Loom's graph API for representing graphs and defining custom graph types. Finally, it gives examples of using Loom to implement graph algorithms like Bellman-Ford and integrate with other graph systems like core.async's SSA form and Titanium.
Graph algorithms are cool and fascinating. We'll look at a graph algorithms and visualization library, Loom, which is written in Clojure. We will discuss the graph API, look at implementation of the algorithms and learn about the integration of Loom with Titanium, which allows us to run the algorithms on and visualize data in graph databases.
The document discusses TypeScript modules. It begins by showing how to organize validators into a single file module. It then demonstrates splitting the module across multiple files by creating LettersOnlyValidator.ts and ZipCodeValidator.ts files that both reference a Validation.ts file and export classes that implement the module's interface. This allows validators to be modularized while splitting code across separate files.
This document contains notes from a coding workshop. It introduces students to Processing, an open-source programming language and environment used for creating visuals and graphics. It provides examples of basic Processing code for shapes, colors, and coordinates. Students are given exercises to practice drawing in Processing, such as creating a face using ellipses and rectangles. The document concludes by assigning homework for students to find patterns in the real world and read an interview about algorithms.
TypeScript provides basic types like Boolean, Number, String, Array, Enum, Any, and Void to define the type of a variable. It allows defining interfaces to describe the shape of an object and ensure variables match the expected structure. Classes can be created that implement interfaces, support inheritance, and use public/private modifiers. Accessors can be used to control read/write access to class properties. Static properties exist on the class level rather than instance level. Classes can also be defined using constructor functions for additional flexibility.
Functional Programming Patterns for the Pragmatic ProgrammerRaúl Raja Martínez
In this talk we will see a pragmatic approach to building a purely functional architecture that delivers cohesive functional components.
We will cover functional patterns such as Free Monads, Transformers, Kleisli arrows, dependently typed checked exceptions
and types as well as how they can be glued together to achieve pure functions that are composable, context free, dependently injectable and testable.
Dome project and code with instructions to run it can be found at:
https://github.com/47deg/func-architecture
The document summarizes a Scala meetup discussing functional programming concepts and techniques. It covers topics like monadic IO, monad transformers, free monads, tagless final encoding, and domain specific languages. Sample code is provided demonstrating storing a file using monadic IO and rewriting it without side effects using equational reasoning.
Introduces the functional programming ideas of Functor, Apply, Applicative And Monad. Shows how to implement each in Scala with Scalaz and how to validate the implementation using property based test using specs2 and scalacheck.
This document discusses monad transformers in Scala. It begins by introducing the OptionT monad transformer, which lifts an Option into a monad M. It defines the point and map methods for OptionT to make it an instance of the Monad type class. Later sections discuss using monad transformers to compose monads like IO and Option that normally do not compose, and how this allows embedding domain-specific languages within programs.
Drawing graphics in C++.NET requires:
1. Creating a Pen object to define the line/shape color and thickness.
2. Getting a Graphics object from the control to draw on using CreateGraphics().
3. Calling DrawLine() or other drawing methods on the Graphics object, passing the Pen and point coordinates.
Utilizing Kinect Control for a More Immersive Interaction with 3D EnvironmentMohammad Shaker
Utilizing Kinect Control for a More Immersive Interaction with 3D Environment. Implemented by Saed Haj Ali, Kinda Tarboush and Marah Halawah and Supervised by me, Dr. Noor Shaker and Dr. Ammar Joukhadar.
The document discusses object cloning in C# programming. It explains shallow cloning versus deep cloning and demonstrates different approaches to cloning objects, including using the ICloneable interface and MemberwiseClone() method. It notes issues with these approaches. The fastest way to do a deep clone, it states, is to serialize an object to a stream and then deserialize it back, which performs a full deep copy. Code is provided to implement this serialization/deserialization cloning approach.
This document provides an introduction to event-driven programming and forms using Delphi. It discusses various controls that can be used in forms like labels, edits, combo boxes, check boxes, group boxes, radio buttons, radio groups, and list boxes. It provides examples of how to use these controls and their properties. Tips are also provided like using auto-completion, differentiating between control properties, and changing the application icon. Functions for manipulating strings are also listed.
The document discusses various web technologies including HTML5, CSS, JavaScript, jQuery, ASP.NET, MVC pattern, and more. It provides an overview of each topic with definitions and examples. It also includes a brief history and future directions of web standards.
The document discusses 3D rendering in WPF. It provides code examples for creating 3D models like a cuboid using triangles, adding lighting and cameras, and manipulating 3D objects. It also covers using the Viewport2DVisual3D control to display 2D UI elements in a 3D environment. Code is provided to construct the geometry and add 2D components like text blocks and buttons to the visual host.
This document provides an overview of various topics related to mobile application development including cloud computing, interaction design, Android, iOS, web technologies like HTML5 and JavaScript, programming languages like Java and Objective-C, frameworks, gaming, user experience design, and more. It discusses tools for Android development and covers basics of creating an Android app like setting up the IDE, creating the UI, adding interactivity, debugging, and referencing documentation.
The document discusses Windows Workflow Foundation (WF), a framework that enables users to create system or human workflows in applications. WF allows for workflows within line-of-business apps, user interface page flows, document workflows, and more. A WF project can be created to define workflows as classes using C# or XML. The document provides a link to an MSDN tutorial about a simple expense report workflow that routes approvals based on amount and uses controls like If, Assign, and Sequence.
WPF L01-Layouts, Controls, Styles and TemplatesMohammad Shaker
The document provides an overview of Windows Presentation Foundation (WPF) layouts, controls, and other UI elements. It includes code examples for common controls like text boxes, buttons, grids, menus, toolbars and dialog boxes. It also covers more advanced elements like tab controls, scroll viewers, expanders and popups. The document appears to be from a WPF starter course, aiming to introduce developers to the core concepts and building blocks of WPF applications.
The document describes code for implementing a client-server application using TCP sockets in C#. It includes code for initializing connections on both the client and server sides, with the client connecting to the server on a specific port and IP address. Event handler methods are used to handle connection events like accepting new client connections, receiving and sending data. The overall purpose is to create a chat application where the client can connect to the server and they can exchange messages.
Short, Matters, Love - Passioneers Event 2015Mohammad Shaker
Short, Matters, Love is a presentation I prepared for freshmen students at the Faculty of Information Technology in Damascus, Syria organised by Passioneers - 2015
C# Starter L06-Delegates, Event Handling and Extension MethodsMohammad Shaker
The document discusses delegates, events, and extension methods in C#. It explains that delegates allow functions to be passed as parameters and can point to methods. Events use delegates to call subscriber methods when an event is raised. Extension methods extend existing classes with new methods without modifying the original class. The document provides examples of how to use delegates to handle events, attach multiple event handlers, and create anonymous methods. It also demonstrates how to write an extension method to add new functionality to the string class.
The document provides an overview of various computer graphics and OpenGL concepts including cube maps, texture mapping, lighting, blending, shadowing, fog, blurring, cameras, clipping, reflection, particles systems, loaders for 3D objects, terrain generation, and sound engines. It also includes code snippets and explanations for implementing concepts like lighting, blending, shadow mapping, and simple particle systems in OpenGL. The document serves as a short introductory course covering essential topics for OpenGL graphics programming.
This is my project in my third year of studying in the Faculty of Information Technology Engineering in Damascus, Syria, 2011 with Ismaeel Abo Abdalla, Zaher Wanli and Mhd Noor Alhamwi. The project simulates the physics of the car movement with/without Anti Brake-Lock System (ABS), Electronic Stability Program (ESP) and Global Positioning System (GPS) all in realtime.
Ultra Fast, Cross Genre, Procedural Content Generation in Games [Master Thesis]Mohammad Shaker
In my MSc. thesis, I have re-tackled the problem of procedurally generating content for physics-based games I have previously investigated in my BSc. graduation thesis. This time around I propose two novel methods: the first is projection based for faster generation of physics-based games content. The other, The Progressive Generation, is a generic, wide-range, across genre, customisable with playability check method all bundled in a fast progressive approach. This new method is applied on two completely different games: NEXT And Cut the Rope.
An overview of the changes in Adobe Flex 4. Includes a description of component architecture methods and updates to the Flex 4 feature set and component life-cycle.
Xtext beyond the defaults - how to tackle performance problemsHolger Schill
Nearly every Eclipse user is aware what Xtext is and what it is useful for. It is always a pleasure to see in which kind of areas it is used.
One reason is clearly, that it is really easy to build a first working example in no time. The grammar alone is sufficient and the rest is done by a code generator. Xtext will generate stub classes, that are ready to fill in individual logic for different areas.
By doing that most of the things just work, because Xtext comes with a lot of defaults that suits in most of the cases.
But as projects get bigger and the amount of models grow, the defaults might not scale and you might need to tweak your language to make working smooth again.
Here it becomes more complicated and you need to understand what’s going on under the covers.
In this session I will go through typical problems and solutions, that we have seen in customer projects. Sometimes it’s a tradeoff to tackle those problems, but it’s important to understand the implications.
For some typical examples I will go into details and explain what’s going on under the covers.
After the session attendees should have an idea how to tweak their own languages and why it might be worth the effort to migrate to a newer version of Xtext.
COMP 4026 Advanced HCI lecture 6 on OpenFrameworks and Google's Project Soli. Taught by Mark Billinghurst at the University of South Australia on August 25th 2016.
This document provides an overview of migrating from Flex 3 to Flex 4. It discusses the key requirements and enhancements in Flex 4, including support for Flash Player 10, new concepts like TLF and OSMF, and changes to components, states, effects, and more. Common migration pitfalls are also addressed, such as differences in component polarity and accessing the application object.
The document introduces Cockatrice, a hardware design environment that uses Elixir as its description language. Cockatrice aims to synthesize hardware description language (HDL) from Elixir code written in a "Zen style" with Enum and Flow functions. This allows hardware to be designed and operated from Elixir code. Cockatrice provides templates to synthesize HDL modules from Elixir functions and connects them as a dataflow circuit from the abstract syntax tree. It also generates an interface driver in C to enable communication between the synthesized hardware and controlling Elixir software.
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...AboutYouGmbH
Stefan Richter gave a presentation on writing simple, readable, and robust code using examples in Java, Clojure, and Go. He discussed his programming experience and showed how Martin Fowler used Java to parse a fixed-length file format into objects. Richter then demonstrated how the same task could be accomplished more concisely in Common Lisp and Clojure using macros to define domain-specific languages. He argued that macros are a powerful feature of Lisp-like languages.
This document provides an overview of the VHDL design flow process from modeling a digital system in VHDL to implementing it in an FPGA. It describes 5 main steps: 1) design entry using a hardware description language like VHDL, 2) functional simulation to verify logical behavior, 3) synthesis to convert the design to logic gates and components, 4) implementation which places and routes the design in the target FPGA, and 5) generating a configuration bitstream file to download to the FPGA. It then guides the reader through an example of designing an 8-bit up/down counter using this flow in Xilinx tools including writing VHDL code, simulating in ModelSim, and synthesizing and
Processing (processing.org) is a great tool in learning to program and you can make some amazing stuff with it - just look at the exhibit. These slides step through creating your first little applet, how to override PApplet, the setup() and draw() methods, and animating your applet.
Managing and Using Assets in Rich Flash ExperiencesDavid Ortinau
My presentation from Flash Camp St. Louis 2010. We discussed SWC, SWF loaders, FDT, casalib, LoaderMax, and sundry other bits.
Visit http://davidortinau.com for code samples.
Remix Your Language Tooling (JSConf.eu 2012)lennartkats
This document discusses remixing language tooling by creating a functional interface for language services. It proposes defining individual language services like parsing, analyzing and completing as standalone functions. This makes the interface technology agnostic and allows reusing existing tooling. It demonstrates implementing such services by combining parser generators, analysis frameworks and other reusable components without having to build everything from scratch. The overall approach aims to accelerate creation of customized IDEs.
TensorFlow Lite is TensorFlow's lightweight solution for running machine learning models on mobile and embedded devices. It provides optimized operations for low latency and small binary size on these devices. TensorFlow Lite supports hardware acceleration using the Android Neural Networks API and contains a set of core operators, a new FlatBuffers-based model format, and a mobile-optimized interpreter. It allows converting models trained in TensorFlow to the TFLite format and running them efficiently on mobile.
The Next Mainstream Programming Language: A Game Developer's Perspectivekfrdbs
Keynote at POPL 2006 by Tim Sweeney, Epic Games
Abstract:
Game developers have long been early adopters of new technologies. This is so because we are largely unburdened by legacy code: With each new hardware generation, we are free to rethink our software assumptions and develop new products using new tools and even new programming languages. As a result, games are fertile ground for applying academic advances in these areas.And never has our industry been in need of such advances as it is now! The scale and scope of game development has increased more than ten-fold over the past ten years, yet the underlying limitations of the mainstream C/C++/Java/C# language family remain largely unaddressed.The talk begins with a high-level presentation of the game developer's world: the kinds of algorithms we employ on modern CPUs and GPUs, the difficulties of componentization and concurrency, and the challenges of writing very complex software with real-time performance requirements.The talk then outlines the ways that future programming languages could help us write better code, providing examples derived from experience writing games and software frameworks that support games. The major areas covered are abstraction facilities -- how we can use them to develop more extensible frameworks and components; practical opportunities for employing stronger typing to reduce run-time failures; and the need for pervasive concurrency support, both implicit and explicit, to effectively exploit the several forms of parallelism present in games and graphics.
HFM, Workspace, and FDM – Voiding your warrantyCharles Beyer
While these three products work well out of the box and offer plenty of functionality for end users, administrators and power users are always looking for ways to increase productivity and functionality of their tools. While some updates have introduced functionality for the administrators/power users such as LCM, there are plenty of areas that could be improved. Gathering system usage statistics, performing bulk import/export operations between development/production environments, improving data import/export, generating more useful security audit data, and improving system performance are all items that can be improved upon.
This presentation will provide viewers with a selection of real world “hacks” that they can apply to their environments. Viewers will first be presented with a low level technical discussion on how these products work and how they can leverage that knowledge. Fully working “hacks” are also attached at the end of the powerpoint.
This document discusses interaction design for rich internet applications (RIAs) using Adobe Flash Catalyst. It explains that Flash Catalyst allows designers to create wireframes, interactive design comps, and self-contained Flash sites without coding. The designer can start with a Photoshop comp, import it into Flash Catalyst to convert artwork into reusable components, define states, interactions and animations, and then roundtrip changes back to Photoshop. This streamlines the design process and handoff to developers. The document also provides an example using Flash Catalyst to declaratively design the graphics for a commerce site using shapes, fills, strokes and filters.
This document discusses Tippett Studio's use of Python to develop a new visual effects and animation pipeline called JET. Tippett Studio is an Academy Award-winning visual effects company that employs over 200 artists. They developed JET to replace their outdated pipeline. JET uses Python to rapidly develop a cross-platform, modular pipeline tool with a dynamic user interface. Key aspects of JET include chunk templates that perform pipeline tasks, batch job script generation, and UI templates to customize interfaces for different artist roles. JET provides Tippett Studio with a flexible, customizable and scalable pipeline to efficiently create computer-generated imagery.
[CCP Games] Versioning Everything with PerforcePerforce
How far can you take versioning everything in and around your product? How far should you take it? This man says that you should take it all the way—and he has hard-won lessons from the MMO game development and operation of EVE Online and Dust 514 to share with you.
Wwx2014 - Todd Kulick "Shipping One Million Lines of Haxe to (Over) One Milli...antopensource
Haxe has allowed TiVo to move away from Flash and Adobe dependencies while reusing over 900,000 lines of existing ActionScript code. TiVo converted their large codebase to Haxe over the course of a year and now deploys to set-top boxes and other devices using Haxe backends like NME and OpenFL. This has improved performance and allowed multi-platform development. Challenges included IDE support issues and application requirements, but contributions from TiVo helped improve Haxe tools and libraries. Going forward, TiVo plans to deploy to more platforms using Haxe and continue optimizing the compiler and runtime.
Build a game with javascript (may 21 atlanta)Thinkful
This document provides an overview of building a game with JavaScript. It discusses setting up the project, refresher lessons on HTML/CSS, breaking the game into JavaScript functions, and getting user input. The roadmap outlines generating a random number on page load, accepting user guesses, providing feedback, and allowing new games. Homework involves adding more specific feedback, counting guesses, outputting guesses to a list, and a new game button. Learning support includes 1-on-1 mentoring from experienced developers and round-the-clock support. Thinkful reports job placements within months in titles like web developer.
This document discusses Unity3D and game development. It provides an overview of Unity3D and other game engines like Unreal Engine, comparing their features and costs. Examples are given of popular games made with each engine. The document also lists several games the author has made using Unity3D and provides some additional resources and references.
The document discusses various topics related to mobile application design including cloud interaction, Android touch and gesture interaction, UI element sizing, screen sizes, changing orientation, retaining objects during configuration changes, multi-device targeting, and wearables. It provides examples and guidelines for designing applications that can adapt to different devices and configurations.
The document discusses principles of interaction design, color theory, and game design. It covers topics like primary and secondary colors, color harmonies, using color to attract attention and set mood, the importance of white space and negative space in design, and how games like Journey, Fez, Luftrausers, Monument Valley, Ori and the Blind Forest, and Limbo effectively use techniques like the rule of thirds, establishing a sense of goal, and game feel.
This document discusses various topics related to typography including letter shapes like the letter "T", how words for concepts like water have evolved across languages, symbols for ideas like fish, and different writing styles such as styles that would be impossible to write. It examines typography from multiple perspectives like shapes, language evolution, symbols, and stylization.
Interaction Design L04 - Materialise and CouplingMohammad Shaker
This document discusses various aspects of coupling and interaction design in mobile applications. It addresses good and bad examples of coupling on Android and iOS, such as how apps are switched between. It also discusses using accurate text to represent backend processes, and using faster progress bars to reduce cognitive load on users. Visualizations are suggested to improve progress bars.
The document discusses various options for storing data in an Android application including SharedPreferences for simple key-value pairs, internal storage for private files, external storage for public files, SQLite databases for structured data, network connections for storing data on a web server, and ContentProviders for sharing data between applications. It provides details on using SharedPreferences, internal SQLite databases stored in the application's files, and ContentProviders for sharing Contacts data with other apps.
The document discusses various interaction design concepts in Android including toasts, notifications, threads, broadcast receivers, and alarms. It provides code examples for creating toasts, setting notification priorities, and scheduling alarms to fire at boot or at specific times using the AlarmManager. Broadcast receivers can be used to set alarms during device boot by listening for the BOOT_COMPLETED intent filter and implementing the onReceive callback.
This document provides an overview of various mobile development technologies and frameworks including Cloud, iOS, Android, iPad Pro, Xcode, Model-View-Controller (MVC), C, Objective-C, Foundation data types, functions calls, Swift, iOS Dev Center, coordinate systems, Windows Phone, .NET support, MVVM, binding, WebClient, and navigation. It also mentions tools like Expression Blend and frameworks like jQuery Mobile, PhoneGap, Sencha Touch, and Xamarin.
This document discusses various topics related to mobile app design including user experience (UX), user interface (UI), interaction design, user constraints like limited data/battery and screen size, and using context like location to improve the user experience. It provides examples of a pizza ordering app and making ATM machines smarter. It also covers design patterns and principles like focusing on user needs and testing designs through feedback.
This document discusses principles of visual organization and responsive grid systems for web design. It mentions laws of proximity, similarity, common fate, continuity, closure, and symmetry which help organize visual elements. It also discusses column-based and ratio-based grid systems as well as responsive grid systems that adapt to different screen widths, citing examples from Pinterest, Bootstrap, and the website www.mohammadshaker.com which demonstrates responsive design.
This document provides an overview comparison of key aspects of mobile app development for iOS and Android platforms. It discusses differences in app store policies, pricing, monetization options like ads and in-app purchases, development tools including engines like Unity and Unreal, and the publishing process. Key points mentioned include Android apps averaging over 2.5x the price of similar iOS apps, Apple's restrictive app review policies, the 70/30 revenue split in Google Play Store, and tools for user testing and publishing on both platforms. It also shares stats on the revenue and success of specific apps like Monument Valley.
The document discusses various ways to implement cloud functionality in Android applications using services like Parse and Android Backup. It provides code examples for backing up app data to the cloud using Android Backup, setting up a backend using Parse, pushing notifications with Parse, and performing analytics tracking with Parse.
This document discusses several topics related to developing Android apps including:
1. Adding markers to maps by setting an onMapClickListener and adding a MarkerOptions to the clicked location.
2. Signing into apps with Google accounts using the Google Identity API.
3. Following Material Design guidelines for visual style and user interfaces.
4. Maintaining multiple APK versions and using OpenGL ES for games.
This document discusses various techniques for styling Android applications including adding styles, overriding styles, using themes, custom backgrounds, nine-patch images, and animations. It provides links to tutorials and documentation on animating views with zoom animations and other motion effects.
This document provides information about various Android development topics including:
- ListAdapters and mapping models to UI using an MVVM-like pattern
- Creating custom lists
- Starting a new activity using an Intent and passing data between activities
- Understanding the Android activity lifecycle and methods like onPause() and onResume()
- Handling configuration changes that recreate the activity
- Working with permissions
The document discusses common patterns for working with lists, launching new screens, and handling activity state changes. It also provides code examples for starting a new activity, passing data between activities, and handling the activity lifecycle callbacks.
This document provides an overview of game development topics including types of games, game engines, platforms, and ratings systems. It compares the popular game engines Unity and Unreal Engine, noting their key features such as scripting languages, cost structures, and graphics capabilities. Examples of games built with Unity and Unreal are also mentioned. The document concludes with brief discussions of other game engines like Source and CryEngine, gamification techniques, and uses of games for serious purposes.
1. Mohammad Shaker discusses his rhythm-based game SyncSeven which uses procedural content generation to generate levels based on music.
2. He outlines the music-based content generation process which extracts notes, rhythm and beats from music to drive a game model through a mapper.
3. The talk describes implementing SyncSeven using C# and Unity3D, including features like ads, leaderboards through Google Play, and social sharing.
A software employing Domain-Specific Language (DSL) for Roboconf architecture for distributed cloud-based applications. HTML5 graphical representation along with ECA scaling rules are implemented.
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Sudheer Mechineni, Head of Application Frameworks, Standard Chartered Bank
Discover how Standard Chartered Bank harnessed the power of Neo4j to transform complex data access challenges into a dynamic, scalable graph database solution. This keynote will cover their journey from initial adoption to deploying a fully automated, enterprise-grade causal cluster, highlighting key strategies for modelling organisational changes and ensuring robust disaster recovery. Learn how these innovations have not only enhanced Standard Chartered Bank’s data infrastructure but also positioned them as pioneers in the banking sector’s adoption of graph technology.
Full-RAG: A modern architecture for hyper-personalizationZilliz
Mike Del Balso, CEO & Co-Founder at Tecton, presents "Full RAG," a novel approach to AI recommendation systems, aiming to push beyond the limitations of traditional models through a deep integration of contextual insights and real-time data, leveraging the Retrieval-Augmented Generation architecture. This talk will outline Full RAG's potential to significantly enhance personalization, address engineering challenges such as data management and model training, and introduce data enrichment with reranking as a key solution. Attendees will gain crucial insights into the importance of hyperpersonalization in AI, the capabilities of Full RAG for advanced personalization, and strategies for managing complex data integrations for deploying cutting-edge AI solutions.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Speck&Tech
ABSTRACT: A prima vista, un mattoncino Lego e la backdoor XZ potrebbero avere in comune il fatto di essere entrambi blocchi di costruzione, o dipendenze di progetti creativi e software. La realtà è che un mattoncino Lego e il caso della backdoor XZ hanno molto di più di tutto ciò in comune.
Partecipate alla presentazione per immergervi in una storia di interoperabilità, standard e formati aperti, per poi discutere del ruolo importante che i contributori hanno in una comunità open source sostenibile.
BIO: Sostenitrice del software libero e dei formati standard e aperti. È stata un membro attivo dei progetti Fedora e openSUSE e ha co-fondato l'Associazione LibreItalia dove è stata coinvolta in diversi eventi, migrazioni e formazione relativi a LibreOffice. In precedenza ha lavorato a migrazioni e corsi di formazione su LibreOffice per diverse amministrazioni pubbliche e privati. Da gennaio 2020 lavora in SUSE come Software Release Engineer per Uyuni e SUSE Manager e quando non segue la sua passione per i computer e per Geeko coltiva la sua curiosità per l'astronomia (da cui deriva il suo nickname deneb_alpha).
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
UiPath Test Automation using UiPath Test Suite series, part 5DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 5. In this session, we will cover CI/CD with devops.
Topics covered:
CI/CD with in UiPath
End-to-end overview of CI/CD pipeline with Azure devops
Speaker:
Lyndsey Byblow, Test Suite Sales Engineer @ UiPath, Inc.
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
4. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
5. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
6. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
7. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
8. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
9. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
10. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
11. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
12. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
13. What a shader is?!
• Fixed Function Pipeline (FFP)
– limits what game developers can do, but ease things off for them
• Programmable graphics pipelines
– You get to decide exactly how things should be performed
22. The effect file
• An effect is some code that instructs your hardware (the graphics card) how it
should display these triangles
• An effect file contains one or more “techniques”
• For example technique A and technique B. Drawing triangles using technique A
will for example draw them semi-transparent, while drawing them using technique
B will for example draw all objects using only blue-gray colors as seen in some
horror movies.
25. The effect file
• Declaring an effect
• Loading the effect file
Effect effect;
effect = Content.Load<Effect> ("effects");
26. The effect file
• Declaring an effect
• Loading the effect file
Effect effect;
effect = Content.Load<Effect> ("effects");
27. The effect file
• Declaring an effect
• Loading the effect file
Effect effect;
effect = Content.Load<Effect> ("effects");
28. The effect file
• Declaring an effect
• Loading the effect file
• Draw() method
Effect effect;
effect = Content.Load<Effect> ("effects");
device.Clear(Color.DarkSlateBlue);
29. The effect file
• Using a “User-Defined Technique”!
effect.CurrentTechnique = effect.Techniques["Pretransformed"];
30. The effect file
• Using a “User-Defined Technique”!
effect.CurrentTechnique = effect.Techniques["Pretransformed"];
31. The effect file
• Using a “User-Defined Technique”!
effect.CurrentTechnique = effect.Techniques["Pretransformed"];
• A technique can be made up of multiple passes, so we need to iterate
through them. Add this code below the code you just entered:
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
}
32. The effect file
• Using a “User-Defined Technique”!
effect.CurrentTechnique = effect.Techniques["Pretransformed"];
• A technique can be made up of multiple passes, so we need to iterate
through them. Add this code below the code you just entered:
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
// Drawing code that this technique applies its effect to!
}
33. The effect file
• Using a “User-Defined Technique”!
effect.CurrentTechnique = effect.Techniques["Pretransformed"];
• A technique can be made up of multiple passes, so we need to iterate
through them. Add this code below the code you just entered:
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
// Drawing code that this technique applies its effect to!
}
38. HLSL – Vertex Format
• Remember VertexPositionColor?
39. HLSL – Vertex Format
• We’ll just design our own
• “VertexPositionColor”!
40. HLSL – Vertex Format
• We’ll just design our own
• “VertexPositionColor”!
41. HLSL – Vertex Format
• Let’s name it
• “MyOwnVertexFormat”
42. HLSL – Vertex Format
• What we need is
– A structure that can hold the necessary data for each vertex and
• What we need is
– A structure that can hold the necessary data for each vertex and
– A definition of the data, so the vertex shader knows which data is included with every vertex.
• A simple colored triangle through using our format “MyOwnVertexFormat”
• What should our vertex shader hold?!
• Just holding a position and a color!
43. HLSL – Vertex Format
struct MyOwnVertexFormat
{
private Vector3 position;
private Color color;
public MyOwnVertexFormat (Vector3 position, Color color)
{
this.position = position;
this.color = color;
}
}
44. struct MyOwnVertexFormat
{
private Vector3 position;
private Color color;
public MyOwnVertexFormat (Vector3 position, Color color)
{
this.position = position;
this.color = color;
}
}
HLSL – Vertex Format
45. HLSL – Vertex Format
• Now, since we are dealing with the graphics card ,
• the graphics card needs to be told explicitly which data it will receive.
46. HLSL – Vertex Format
• Adding the following code to our struct
public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
47. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
48. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
49. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
50. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
51. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
52. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
53. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
54. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
55. public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
(
new VertexElement(
0,
VertexElementFormat.Vector3,
VertexElementUsage.Position,
0),
new VertexElement(
sizeof(float) * 3,
VertexElementFormat.Color,
VertexElementUsage.Color,
0)
);
HLSL – Vertex Format
• Adding the following code to our struct
56. HLSL – Vertex Format
• Now, Implementing it in our XNA code!
private void SetUpVertices()
{
MyOwnVertexFormat[] vertices = new MyOwnVertexFormat[3];
vertices[0] = new MyOwnVertexFormat(new Vector3(-2, 2, 0), Color.Red);
vertices[1] = new MyOwnVertexFormat(new Vector3(2, -2, -2), Color.Green);
vertices[2] = new MyOwnVertexFormat(new Vector3(0, 0, 2), Color.Yellow);
vertexBuffer = new VertexBuffer(device, MyOwnVertexFormat.VertexDeclaration,
vertices.Length, BufferUsage.WriteOnly);
vertexBuffer.SetData(vertices);
}
57. HLSL – Vertex Format
• Now, Implementing it in our XNA code!
private void SetUpVertices()
{
MyOwnVertexFormat[] vertices = new MyOwnVertexFormat[3];
vertices[0] = new MyOwnVertexFormat(new Vector3(-2, 2, 0), Color.Red);
vertices[1] = new MyOwnVertexFormat(new Vector3(2, -2, -2), Color.Green);
vertices[2] = new MyOwnVertexFormat(new Vector3(0, 0, 2), Color.Yellow);
vertexBuffer = new VertexBuffer(device, MyOwnVertexFormat.VertexDeclaration,
vertices.Length, BufferUsage.WriteOnly);
vertexBuffer.SetData(vertices);
}
70. HLSL – Vertex Shader
• So put this code at the top of your.fx file:
struct VertexToPixel
{
float4 Position : POSITION;
float4 Color : COLOR0;
};
71. HLSL – Vertex Shader
• So put this code at the top of your.fx file:
struct VertexToPixel
{
float4 Position : POSITION;
float4 Color : COLOR0;
};
72. HLSL – Vertex Shader
• So put this code at the top of your.fx file:
• Now, Place this method between the structure definition and our technique
definition:
struct VertexToPixel
{
float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{
VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
73. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
74. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
75. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
76. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
77. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
78. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
79. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
80. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
81. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
82. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
83. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
84. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
85. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
86. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
Output.Color.rba = 1.0f;
Output.Color.g = 0.0f;
87. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
88. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
89. HLSL – Vertex Shader
• The hole code for now will be
struct VertexToPixel
{ float4 Position : POSITION;
float4 Color : COLOR0;
};
VertexToPixel SimplestVertexShader(float4 inPos : POSITION)
{ VertexToPixel Output = (VertexToPixel)0;
Output.Position = mul(inPos, xViewProjection);
Output.Color = 1.0f;
return Output;
}
technique Simplest
{ pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = NULL;
}
}
99. Pixel Shader
• We have the our last lesson Vertex Shader up and running, we just need a Pixel
Shader now to get the job done and draw using our own custom way of
rendering!
• The pixel shader receives its input (position and color, in our case) from our vertex
shader, and needs to output only color
100. Pixel Shader
• So let’s define its output structure at the top of our.fx file “Pixel Format”
struct PixelToFrame
{
float4 Color : COLOR0;
};
101. Pixel Shader
• So let’s define its output structure at the top of our.fx file “Pixel Format”
• Our first pixel shader will be a very simple method, here it is “Pixel Shader”
struct PixelToFrame
{
float4 Color : COLOR0;
};
PixelToFrame OurFirstPixelShader(VertexToPixel PSIn)
{
PixelToFrame Output = (PixelToFrame)0;
Output.Color = PSIn.Color;
return Output;
}
102. Pixel Shader
• So let’s define its output structure at the top of our.fx file “Pixel Format”
• Our first pixel shader will be a very simple method, here it is “Pixel Shader”
struct PixelToFrame
{
float4 Color : COLOR0;
};
PixelToFrame OurFirstPixelShader(VertexToPixel PSIn)
{
PixelToFrame Output = (PixelToFrame)0;
Output.Color = PSIn.Color;
return Output;
}
103. Pixel Shader
• Now we still need to set this method as pixel shader for our technique, at the
bottom of the file:
PixelShader = compile ps_2_0 OurFirstPixelShader();
104. Pixel Shader
• Now we still need to set this method as pixel shader for our technique, at the
bottom of the file:
PixelShader = compile ps_2_0 OurFirstPixelShader();
technique Simplest
{
pass Pass0
{
VertexShader = compile vs_2_0 SimplestVertexShader();
PixelShader = compile ps_2_0 OurFirstPixelShader();
}
}