[{"id":"anatomy_of_a_chop","name":"Anatomy of a CHOP","category":"TUTORIAL","summary":"Parameters of SOPs, TOPs and objects (components) are able to get values from CHOP channels with expressions like the following: However, exporting is preferred where possible. It is faster and involves less typing."},{"id":"build_a_list_comp","name":"Build a List COMP","category":"TUTORIAL","summary":"This document explains the finer points of building a List COMP. It is assumed the reader already has an understanding of the Python language. The official Python documentation can be found at this address. The List COMP runs its init callbacks when the Reset parameter is pulsed or on load. These init functions are in place to let the user assign Table, Row, Col or Cell specific attributes which determine the layout and look of the List. The four init functions are called in this order: Once initialized the following callback functions are run on specific events:"},{"id":"introduction_to_python_tutorial","name":"Introduction to Python Tutorial","category":"TUTORIAL","summary":"This tutorial is a general introduction to using Python in TouchDesigner. It doesn't require previous knowledge of Python, but it also doesn't go into \"how to program\". Resources for learning Python i..."},{"id":"tdbitwig_user_guide","name":"TDBitwig User Guide","category":"TUTORIAL","summary":"TDBitwig is a set of TouchDesigner components that enables bi-directional communication between Bitwig Studio and TouchDesigner. The TDBitwig functionality enables users to create custom audio-visual ..."},{"id":"touchdesigner_video_server_specification_guide","name":"TouchDesigner Video Server Specification Guide","category":"TUTORIAL","summary":"Windows 10 is the suggested windows operating system."},{"id":"video_streaming_user_guide","name":"Video Streaming User Guide","category":"TUTORIAL","summary":"This guide will cover the supported protocols and services that are now available to TouchDesigner users for audio video streaming over the Internet."},{"id":"write_a_cplusplus_chop","name":"Write a CPlusPlus CHOP","category":"TUTORIAL","summary":"Make sure you've read through Write a CPlusPlus Plugin first for general information about writing a plugin for a CPlusPlus CHOP. The CPlusPlus CHOP allows you to manipulate CHOP data using custom code, or bring in/output CHOP data to and from external sources or file formats. You can use one of the CHOP's inputs to determine the number of channels, channel names, sample rate etc. of the output, or you can specify them in code (in getOutputInfo())."},{"id":"write_a_cplusplus_plugin","name":"Write a C++ Plugin","category":"TUTORIAL","summary":"The CPlusPlus OPs (CPlusPlus CHOP, CPlusPlus TOP, CPlusPlus SOP and CPlusPlus DAT) allow you to load your own C++ code that has been compiled into a plugin. You can use this node to create custom filt..."},{"id":"write_a_cplusplus_top","name":"Write a CPlusPlus TOP","category":"TUTORIAL","summary":"Make sure you've read through Write a CPlusPlus Plugin first for general information about writing a plugin for a CPlusPlus TOP. The CPlusPlus TOP allows you to write C++ code to create a TOP that can output multiple textures. Currently you can create your output by filling a CPU memory buffer (TOP_ExecuteMode::CPUMem) or by filling a cudaArray buffer (TOP_ExecuteMode::CUDA). Most of the documentation is held in the header files for the C++ API. The samples also contain a lot of comments about the workflow."},{"id":"write_a_cuda_dll","name":"Write a CUDA DLL","category":"TUTORIAL","summary":"CUDA is a programming language developed by NVIDIA to allow developers to use the power of GPUs in a way much more general than using them only for graphics. More details about CUDA can be found at th..."},{"id":"write_a_glsl_material","name":"Write a GLSL Material","category":"TUTORIAL","summary":"This document explains the finer points of writing a GLSL Material in TouchDesigner. It is assumed the reader already has an understanding of the GLSL language. The official GLSL documentation can be ..."},{"id":"write_a_glsl_top","name":"Write a GLSL TOP","category":"TUTORIAL","summary":"The official GLSL documentation can be found at this address. TouchDesigner's main supported version of GLSL is 4.60. Support for versions of GLSL 3.30 and earlier have been removed due to the switch to Vulkan. A shader written for 3.30 should work fine when targeting newer GLSL though. A shader written for the GLSL TOP is generally a image based operation. It does essentially no geometry based work. For users who are familiar with writing 3D GLSL shaders, a GLSL TOP is simply a shader applied to a single quad that is drawn to cover up the entire viewport (also known as a full-screen-aligned quad). To simplify the subject, this guide will avoid the extra complexities involved in 3D rendering, and present the topic of writing a GLSL shader in a 2D world only, dealing only with pixels."},{"id":"write_a_shared_memory_chop","name":"Write a Shared Memory CHOP","category":"TUTORIAL","summary":"This article refers to how to write external applications to interface with Shared Mem Out CHOP and Shared Mem In CHOP. In the TouchDesigner installation directory, under /touch/SharedMem/CHOP there is the header defined in CHOP_SharedMemHeader.h that needs to be filled in at the start of the shared memory buffer. The memory buffer should have this header, followed by the channel data and optionally the channel data. NOTE: The 'Shared Mem Type' parameter in the CHOP must be set to 'Local' for your app to be able interface with it"},{"id":"write_a_shared_memory_top","name":"Write a Shared Memory TOP","category":"TUTORIAL","summary":"In the TouchDesigner installation directory, under Samples/SharedMem/TOP there is the header defined in TOP_SharedMemHeader.h that needs to be filled in at the start of the shared memory buffer. The memory buffer should have this header, followed by the image data. NOTE: The 'Shared Mem Type' parameter in the TOP must be set to 'Local' for your app to be able interface with it. Refer to the article Using Shared Memory in TouchDesigner to learn how to create a shared memory buffer. If you are the sender, you need to create a buffer whose size will accommodate both the header, and the image data. Get the size of the header simply with"}]