GithubHelp home page GithubHelp logo

weaseltoyd11's Introduction

######################################################################################## WeaselToy Direct11 ReadMe Instructions Copyright Weaseltron Entertainment 2018 ########################################################################################

=== PURPOSE ===

WeaselToy is a windows application developed by Weaseltron Entertainment for prototyping and trying out pixel shaders.

inspired by ShaderToy

=== First Use ===

-When starting for the first time, without a 'settings.ini' file, you get prompted with the option to insert the path to a text editor. If this is left empty it will default to notepad. This can be changed later through the 'Default Editor' drop down in the 'Control Panel' window.

-The application should show the 'Control Panel' window, the 'ShaderToy' window and the 'Resources' window. If there is a compile error in one of the pixel shaders then the 'Shader Error Message' window will also be visible and displaying the compile error.

=== Usage ===

-The 'ShaderToy' window has 5 tabs at the top where you can change between the main scene or onto one of the other 4 buffers. 'Expand' fills out the application window with the current shader. In the bottom left you have access to the shader that is being used to display the current image. If there is a shader compilation error then it will default to a colorful shader.

-The 'Resources' window shows what resources you have access to. It can be a texture or a buffer. You can see the texture you have set and if it is a buffer you can see what the buffer contains. The texture format currently supported is .dds. By adding to the directory with the other textures you can use your own textures. The textures already included come from https://freestocktextures.com/ x You can double click on a texture to open it in the default viewer, or you can right click to open the explorer in the directory. x By left clicking on a texture, 'Choose File' pops up and you can change textures. x By right clicking you can change the type of resource, to none if you don't need the current resource, or you can change a texture to buffer for example.

-The 'Control Panel' window shows a lot of controls, such as showing what project you are in and you can copy the project to a new location if you want to create a backup, you can create a new project or load an existing project.

You can also use stop and pause, where stop resets the iTime to 0.0, but pause stops updating it. The play speed multiplies the delta time, allowing you to speed up or slow down the shader.

You can also reload the shaders, if you don't have auto reload on. This can be done by pressing the 'Reload Shaders' or pressing F5.

You can make the application full-screen by pressing the 'Go Fullscreen' button or by pressing Alt+Return. There are known issues if some other application is full-screen.

The 'Default Editor' has some built in options and a chance to insert a custom editor. This is used when opening the shader, either through the link on the 'ShaderToy' window or by clicking an error in the error window.

The desired resolution can be entered into the resolution fields, by selecting it from the dropdown or possibly by dragging and resizing the 'ShaderToy' window. If the application is resized then it will also resize the ImGui windows.

The 'Constant Buffer Info' node shows the constant buffer values.

The 'Customizable Shader Parameters' only shows values when a constant buffer of that name is in the pixel shader and is initialised and used (otherwise dxc will strip the variable).

-The 'Customizable Shader Parameters' shows the shader variables in the

cbuffer cbCustomisable : register (b2)
{
};

section. It currently only supports floats and ints. But the input types are managed through comments in headers. The commands are: x // input variableName step # ( f.ex. // input colour step 0.1) x // slider variableName min # max # ( f.ex. // slider colour min -1.0 max 1.0) x // colourEdit variableName ( f.ex. // colourEdit colour)

It allows colourEdit and colorEdit. The step, min and max values might not work if your variable is an int but you want the step to be a 0.1; If a variable is missing the comment headers, then it will be defaulted to the input type.

=== Differences compared to ShaderToy.com ===

  • Textures can be added. They just need to be int the textures directory
  • Customisable shader parameters
  • Longer shaders in ShaderToy can take too long to compile, killing the app. This is not an issue.
  • Disable VSync to time your shaders.

-Currently when copying code in GLSL from shadertoy it usually contains f.ex. vec3(1.0) which has to be changed to float3(1.0, 1.0, 1.0) in HLSL since it does not support the notation of float3(1.0).

-GLSL can multiply matrices and vectors together by using *, HLSL needs to use the method mul()

-ShaderToy samples textures using texture(iChannel0, ...), need to change this according to the HLSL standard of tx0.Sample(iChannel0, ...)

-In ShaderToy global constant(const) variables are often declared. One option is to change them to 'static const' variables. Global variables that get their values changed in functions, do also need to be made static.

-ShaderToy uses the function

	void mainImage( out vec4 fragColor, in vec2 fragCoord )

as the main function to draw, I am only using

	float4 main( PS_INPUT input ) : SV_Target

switching this out and making sure that we are returning the color for the pixel instead of setting it as the value of fragColor.

*** LICENCE ***

Links that might be of assistance

-Convert jpg to dds https://www.aconvert.com/image/jpg-to-dds/

-Mapping between GLSL and HLSL https://anteru.net/blog/2016/mapping-between-hlsl-and-glsl/index.html

weaseltoyd11's People

Contributors

morstius avatar valgeirk avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.