port from perforce

This commit is contained in:
2026-04-18 22:31:51 +02:00
commit 8d0ab5b7cc
8409 changed files with 3972376 additions and 0 deletions

1612
evoke-64k/ev15-4k/4klang.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
// some useful song defines for 4klang
#define SAMPLE_RATE 44100
#define BPM 75.000000
#define MAX_INSTRUMENTS 12
#define MAX_PATTERNS 48
#define PATTERN_SIZE_SHIFT 4
#define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
#define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
#define SAMPLES_PER_TICK 8820
#define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
#define POLYPHONY 2
#define FLOAT_32BIT
#define SAMPLE_TYPE float
#define WINDOWS_OBJECT
// declaration of the external synth render function, you'll always need that
extern "C" void __stdcall _4klang_render(void*);
// declaration of the external envelope buffer. access only if you're song was exported with that option
extern "C" float _4klang_envelope_buffer;
// declaration of the external note buffer. access only if you're song was exported with that option
extern "C" int _4klang_note_buffer;

1057
evoke-64k/ev15-4k/4klang.inc Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

BIN
evoke-64k/ev15-4k/GlU32.Lib Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,364 @@
#include "Shaders.h"
//#define DEBUG_COMPRESSED_SHADER
#ifdef _DEBUG
PFNGLCREATESHADERPROC glCreateShader = NULL;
PFNGLSHADERSOURCEPROC glShaderSource = NULL;
PFNGLCOMPILESHADERPROC glCompileShader = NULL;
PFNGLGETSHADERIVPROC glGetShaderiv = NULL;
PFNGLGETPROGRAMIVPROC glGetProgramiv = NULL;
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
PFNGLATTACHSHADERPROC glAttachShader = NULL;
PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
PFNGLUSEPROGRAMPROC glUseProgram = NULL;
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL;
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = NULL;
void useProgram(GLhandleARB ah_Program)
{
glUseProgram(ah_Program);
}
void initShaders()
{
glCreateShader = (PFNGLCREATESHADERPROC)myGetProcAddress("glCreateShader");
glShaderSource = (PFNGLSHADERSOURCEPROC)myGetProcAddress("glShaderSource");
glCompileShader = (PFNGLCOMPILESHADERPROC)myGetProcAddress("glCompileShader");
glGetShaderiv = (PFNGLGETSHADERIVPROC)myGetProcAddress("glGetShaderiv");
glGetProgramiv = (PFNGLGETPROGRAMIVPROC)myGetProcAddress("glGetProgramiv");
glCreateProgram = (PFNGLCREATEPROGRAMPROC)myGetProcAddress("glCreateProgram");
glAttachShader = (PFNGLATTACHSHADERPROC)myGetProcAddress("glAttachShader");
glLinkProgram = (PFNGLLINKPROGRAMPROC)myGetProcAddress("glLinkProgram");
glUseProgram = (PFNGLUSEPROGRAMPROC)myGetProcAddress("glUseProgram");
glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)myGetProcAddress("glGetShaderInfoLog");
glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)myGetProcAddress("glGetProgramInfoLog");
if (!(glCreateShader && glShaderSource && glCompileShader && glGetShaderiv && glGetProgramiv && glCreateProgram && glAttachShader && glLinkProgram && glUseProgram && glGetShaderInfoLog && glGetProgramInfoLog))
{
std::cerr << "Some shader functions are not available!" << std::endl;
}
}
#include <sstream>
#include <fstream>
std::string ReplaceString(const std::string &stringSearchString, const std::string &stringReplaceString, std::string stringStringToReplace)
{
std::string::size_type pos = stringStringToReplace.find(stringSearchString, 0);
int intLengthSearch = stringSearchString.length();
int intLengthReplacment = stringReplaceString.length();
while(std::string::npos != pos)
{
stringStringToReplace.replace(pos, intLengthSearch, stringReplaceString);
pos = stringStringToReplace.find(stringSearchString, pos + intLengthReplacment);
}
return stringStringToReplace;
}
std::string MakeFileName( const char* as_FileName, int ShaderID, bool bDebug )
{
std::stringstream ss;
ss << as_FileName << "_" << ShaderID;
if( bDebug )
{
ss << "_dbg";
}
return ss.str();
}
void CreateSubShader( const char* as_FileName, int ShaderID, bool bDebug )
{
char* ls_ShaderSource = textFileRead(as_FileName);
std::string strData= ls_ShaderSource;
std::string strNewData;
bool bRemove= false;
for( size_t i= 0; i < strData.size(); ++i )
{
bool bEndRemove= false;
if( strData[ i ] == '@' )
{
if( i + 2 >= strData.size() )
{
break;
}
i++;
if( strData[ i ] == '@' )
{
bRemove= false;
}
else if( strData[ i ] == 'D' )
{
bRemove= !bDebug;
}
else
{
int ID= (int)(strData[ i ] - '0');
bRemove= ID!=ShaderID;
}
i++;
}
if( !bRemove || strData[ i ] == 10 || strData[ i ] == 13)
{
strNewData+= strData[ i ];
}
}
std::string strFileOut= MakeFileName( as_FileName, ShaderID, bDebug );
std::ofstream ofs(strFileOut.c_str());
// some Renaming
/*strNewData= ReplaceString( "rayDir","q", strNewData);
strNewData= ReplaceString( "cRes","b", strNewData);
strNewData= ReplaceString( "cFac","a", strNewData);
strNewData= ReplaceString( "CurStep","d", strNewData);
strNewData= ReplaceString( "CurStep","d", strNewData);
strNewData= ReplaceString( "rotate","r", strNewData);
strNewData= ReplaceString( "repeatHex","sh", strNewData);
strNewData= ReplaceString( "repeat","s", strNewData);
strNewData= ReplaceString( "pi2","P", strNewData);
strNewData= ReplaceString( "sqrtOf075","Q", strNewData);
strNewData= ReplaceString( "EndlessBar","O", strNewData);
strNewData= ReplaceString( "CurTime","R", strNewData);
strNewData= ReplaceString( "CurScene","S", strNewData);
strNewData= ReplaceString( "torus","T", strNewData);
strNewData= ReplaceString( "noise3D","N", strNewData);
strNewData= ReplaceString( "smoothnoise","M", strNewData);*/
ofs << strNewData;
}
void CreateAllSubShader( const char* as_FileName )
{
for( int i= 0; i < MAX_SHADER_ID; ++i )
{
CreateSubShader( as_FileName, i, true );
CreateSubShader( as_FileName, i, false );
}
}
void PrintErrors()
{
GLenum lr_Error = GL_NO_ERROR;
int li_ErrorCount = 5;
do
{
lr_Error = glGetError();
if (lr_Error != GL_NO_ERROR)
{
li_ErrorCount--;
char* ls_ErrorString = (char*)gluErrorString(lr_Error);
if (ls_ErrorString != 0)
std::cout << "OPENGL :: ERROR " << ls_ErrorString << std::endl;
}
if (li_ErrorCount == 0)
{
std::cout << "OPENGL :: ERROR Too many errors!" << std::endl;
break;
}
} while (lr_Error != GL_NO_ERROR);
}
GLhandleARB createVertexShader(const char* as_FileName)
{
GLhandleARB lh_Shader = 0;
char* ls_ShaderSource = textFileRead(as_FileName);
if (ls_ShaderSource == NULL)
{
std::cerr << "Error reading file: " << as_FileName << std::endl;
return lh_Shader;
}
lh_Shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(lh_Shader, 1, (const char**)&ls_ShaderSource, NULL);
glCompileShader(lh_Shader);
free(ls_ShaderSource);
int li_Status = 0;
glGetShaderiv(lh_Shader, GL_COMPILE_STATUS, &li_Status);
if (li_Status == GL_FALSE)
{
std::cerr << "Error compiling vertex shader: " << as_FileName << std::endl;
printShaderInfoLog(lh_Shader);
}
return lh_Shader;
}
#ifdef DEBUG_COMPRESSED_SHADER
#include "shader_code.h"
#endif
GLhandleARB createFragmentShader(const char* as_FileName, int ShaderID, bool bDebug)
{
CreateAllSubShader( as_FileName );
GLhandleARB lh_Shader = 0;
char* ls_ShaderSource = textFileRead(MakeFileName(as_FileName, ShaderID, bDebug).c_str());
if (ls_ShaderSource == NULL)
{
std::cerr << "Error reading file: " << as_FileName << std::endl;
return lh_Shader;
}
lh_Shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(lh_Shader, 1, (const char**)&ls_ShaderSource, NULL);
#ifdef DEBUG_COMPRESSED_SHADER
glShaderSource(lh_Shader, 1, (const char**)&mark_fs, NULL);
#endif
glCompileShader(lh_Shader);
int li_Status = 0;
glGetShaderiv(lh_Shader, GL_COMPILE_STATUS, &li_Status);
if (li_Status == GL_FALSE)
{
std::cerr << "Error compiling fragment shader: " << as_FileName << std::endl;
printShaderInfoLog(lh_Shader);
}
free(ls_ShaderSource);
return lh_Shader;
}
GLhandleARB createProgram(GLhandleARB ah_VertexShader, GLhandleARB ah_FragmentShader)
{
GLhandleARB lh_Program = 0;
if (ah_VertexShader + ah_FragmentShader <= 1)
{
std::cerr << "Cannot create program." << std::endl;
return lh_Program;
}
lh_Program = glCreateProgram();
glAttachShader(lh_Program, ah_VertexShader);
glAttachShader(lh_Program, ah_FragmentShader);
glLinkProgram(lh_Program);
int li_Status = 0;
glGetProgramiv(lh_Program, GL_LINK_STATUS, &li_Status);
if (li_Status == GL_FALSE)
{
std::cerr << "Error linking shaders." << std::endl;
printProgramInfoLog(lh_Program);
}
return lh_Program;
}
char* textFileRead(const char* as_FileName)
{
FILE* lh_File;
char* ls_Content = NULL;
size_t li_Count = 0;
if (as_FileName != NULL)
{
fopen_s(&lh_File, as_FileName, "rt");
if (lh_File != NULL)
{
fseek(lh_File, 0, SEEK_END);
li_Count = ftell(lh_File);
rewind(lh_File);
if (li_Count > 0)
{
ls_Content = (char*) malloc(sizeof(char) * (li_Count + 1));
li_Count = fread(ls_Content, sizeof(char), li_Count, lh_File);
ls_Content[li_Count] = '\0';
}
fclose(lh_File);
}
}
return ls_Content;
}
void printShaderInfoLog(GLhandleARB ah_Shader)
{
int li_InfologLength = 0;
int li_CharsWritten = 0;
char* li_InfoLog;
glGetShaderiv(ah_Shader, GL_INFO_LOG_LENGTH, &li_InfologLength);
if (li_InfologLength > 0)
{
li_InfoLog = (char*) malloc(li_InfologLength);
glGetShaderInfoLog(ah_Shader, li_InfologLength, &li_CharsWritten, li_InfoLog);
std::cerr << li_InfoLog << std::endl;
free(li_InfoLog);
}
}
void printProgramInfoLog(GLhandleARB ah_Program)
{
int li_InfologLength = 0;
int li_CharsWritten = 0;
char* ls_InfoLog;
glGetProgramiv(ah_Program, GL_INFO_LOG_LENGTH, &li_InfologLength);
if (li_InfologLength > 0)
{
ls_InfoLog = (char *)malloc(li_InfologLength);
glGetProgramInfoLog(ah_Program, li_InfologLength, &li_CharsWritten, ls_InfoLog);
std::cerr << ls_InfoLog << std::endl;
free(ls_InfoLog);
}
}
bool printShaderStatistics()
{
if (GL_VERSION_2_1) std::cout << "Supports OpenGL 2.1. " << std::endl;
else if (GL_VERSION_2_0) std::cout << "Supports OpenGL 2.0. " << std::endl;
else if (GL_VERSION_1_5) std::cout << "Supports OpenGL 1.5. " << std::endl;
else if (GL_VERSION_1_4) std::cout << "Supports OpenGL 1.4. " << std::endl;
else if (GL_VERSION_1_3) std::cout << "Supports OpenGL 1.3. " << std::endl;
else if (GL_VERSION_1_2) std::cout << "Supports OpenGL 1.2. " << std::endl;
else if (GL_VERSION_1_1) std::cout << "Supports OpenGL 1.1. " << std::endl;
if (GL_ARB_shader_objects && GL_ARB_vertex_shader && GL_ARB_fragment_shader)
{
std::cout << "Status: Using GLSL " << glGetString(GL_SHADING_LANGUAGE_VERSION_ARB) << std::endl;
}
else
{
std::cerr << "No GLSL support!" << std::endl;
return false;
}
return true;
}
#endif

View File

@@ -0,0 +1,21 @@
#pragma once
#define MAX_SHADER_ID 4
#include <windows.h>
#include <iostream>
#include <GL/gl.h>
#include <GL/glu.h>
#include "glext.h"
#define myGetProcAddress(name) wglGetProcAddress((LPCSTR)name)
void initShaders();
GLhandleARB createVertexShader(const char* as_FileName);
GLhandleARB createFragmentShader(const char* as_FileName, int ShaderID, bool bDebug);
GLhandleARB createProgram(GLhandleARB ah_VertexShader, GLhandleARB ah_FragmentShader);
void PrintErrors();
void useProgram(GLhandleARB ah_Program);
char* textFileRead(const char* as_FileName);
void printShaderInfoLog(GLhandleARB ah_Shader);
void printProgramInfoLog(GLhandleARB ah_Program);
bool printShaderStatistics();

View File

@@ -0,0 +1,369 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Name="bp4k"
ProjectGUID="{213903DE-E40A-4D23-9310-E520AC2B412E}"
RootNamespace="bp4k"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)bin"
IntermediateDirectory="$(SolutionDir)obj\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
CallingConvention="2"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="Gdi32.lib user32.lib opengl32.lib winmm.lib glu32.lib"
OutputFile="$(OutDir)\$(ProjectName)_$(ConfigurationName).exe"
LinkIncremental="2"
AdditionalLibraryDirectories="&quot;$(ProjectDir)&quot;"
GenerateDebugInformation="true"
SubSystem="1"
EntryPointSymbol="main"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)bin"
IntermediateDirectory="$(SolutionDir)obj\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
CommandLine="rem minify\shader_minifier.exe &quot;mark.fs_0&quot; -o mark_0.h -v --no-renaming&#x0D;&#x0A;rem minify\shader_minifier.exe &quot;mark.fs_1&quot; -o mark_1.h -v --no-renaming&#x0D;&#x0A;rem minify\shader_minifier.exe &quot;mark.fs_2&quot; -o mark_2.h -v --no-renaming&#x0D;&#x0A;rem minify\shader_minifier.exe &quot;mark.fs_0&quot; -o mark_small.h -v&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="1"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="2"
WholeProgramOptimization="false"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
ExceptionHandling="0"
RuntimeLibrary="0"
BufferSecurityCheck="false"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="0"
DebugInformationFormat="3"
CallingConvention="2"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/CRINKLER"
AdditionalDependencies="Gdi32.lib user32.lib opengl32.lib winmm.lib libcmt.lib"
OutputFile="$(OutDir)\$(ProjectName)_$(ConfigurationName).exe"
AdditionalLibraryDirectories="&quot;$(ProjectDir)&quot;"
GenerateManifest="false"
ManifestFile=""
GenerateDebugInformation="true"
SubSystem="2"
LinkTimeCodeGeneration="0"
EntryPointSymbol="main"
TargetMachine="1"
ErrorReporting="0"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Compress (Slow)|Win32"
OutputDirectory="$(SolutionDir)bin"
IntermediateDirectory="$(SolutionDir)obj\$(ProjectName)_$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
CommandLine=""
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/QIfist"
Optimization="1"
EnableIntrinsicFunctions="true"
FavorSizeOrSpeed="2"
WholeProgramOptimization="false"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
ExceptionHandling="0"
RuntimeLibrary="0"
BufferSecurityCheck="false"
EnableFunctionLevelLinking="false"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="0"
WarningLevel="0"
DebugInformationFormat="0"
CallingConvention="2"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/CRINKLER /COMPMODE:SLOW /ORDERTRIES:4000 /HASHTRIES:300 /UNSAFEIMPORT /TRUNCATEFLOATS:24 /HASHSIZE:200 /REPORT:report.html /RANGE:opengl32 /PROGRESSGUI /TRANSFORM:CALLS"
AdditionalDependencies="opengl32.lib winmm.lib"
OutputFile="$(OutDir)\$(ProjectName)_$(ConfigurationName).exe"
AdditionalLibraryDirectories="&quot;$(ProjectDir)&quot;"
GenerateManifest="false"
ManifestFile=""
GenerateDebugInformation="false"
SubSystem="2"
LinkTimeCodeGeneration="0"
EntryPointSymbol="main"
TargetMachine="1"
ErrorReporting="0"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\main.cpp"
>
</File>
<File
RelativePath=".\Shaders.cpp"
>
</File>
<File
RelativePath=".\synth.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\glext.h"
>
</File>
<File
RelativePath=".\release.h"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description=""
CommandLine=""
AdditionalDependencies=""
Outputs=""
/>
</FileConfiguration>
<FileConfiguration
Name="Compress (Slow)|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description=""
CommandLine=""
AdditionalDependencies=""
Outputs=""
/>
</FileConfiguration>
</File>
<File
RelativePath=".\Shaders.h"
>
</File>
<File
RelativePath=".\small.h"
>
</File>
<File
RelativePath=".\synth.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<File
RelativePath=".\4klang.obj"
>
</File>
<File
RelativePath=".\generic.vs"
>
</File>
<File
RelativePath=".\mark.fs"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Compress (Slow)|Win32">
<Configuration>Compress (Slow)</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{213903DE-E40A-4D23-9310-E520AC2B412E}</ProjectGuid>
<RootNamespace>bp4k</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v100</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>12.0.21005.1</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)bin\</OutDir>
<IntDir>$(SolutionDir)obj\$(ProjectName)_$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)_$(Configuration)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)bin\</OutDir>
<IntDir>$(SolutionDir)obj\$(ProjectName)_$(Configuration)\</IntDir>
<GenerateManifest>false</GenerateManifest>
<TargetName>$(ProjectName)_$(Configuration)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">
<OutDir>$(SolutionDir)bin\</OutDir>
<IntDir>$(SolutionDir)obj\$(ProjectName)_$(Configuration)\</IntDir>
<GenerateManifest>false</GenerateManifest>
<TargetName>$(ProjectName)_$(Configuration)</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CallingConvention>StdCall</CallingConvention>
<CompileAsManaged>false</CompileAsManaged>
<CompileAsWinRT>false</CompileAsWinRT>
</ClCompile>
<Link>
<AdditionalDependencies>Gdi32.lib;user32.lib;opengl32.lib;winmm.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName)_$(Configuration).exe</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<EntryPointSymbol>main</EntryPointSymbol>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<PreBuildEvent>
<Command>rem minify\shader_minifier.exe "mark.fs_0" -o mark_0.h -v --no-renaming
rem minify\shader_minifier.exe "mark.fs_1" -o mark_1.h -v --no-renaming
rem minify\shader_minifier.exe "mark.fs_2" -o mark_2.h -v --no-renaming
rem minify\shader_minifier.exe "mark.fs_0" -o mark_small.h -v
</Command>
</PreBuildEvent>
<ClCompile>
<Optimization>Disabled</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling />
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<PrecompiledHeader />
<WarningLevel>TurnOffAllWarnings</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CallingConvention>StdCall</CallingConvention>
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
<AdditionalOptions>/QIfist %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>Gdi32.lib;user32.lib;opengl32.lib;winmm.lib;libcmt.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName)_$(Configuration).exe</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ManifestFile />
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<LinkTimeCodeGeneration />
<EntryPointSymbol>main</EntryPointSymbol>
<TargetMachine>MachineX86</TargetMachine>
<LinkErrorReporting />
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">
<PreBuildEvent>
<Command />
</PreBuildEvent>
<ClCompile>
<Optimization>MinSpace</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>false</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<FunctionLevelLinking>false</FunctionLevelLinking>
<FloatingPointModel>Precise</FloatingPointModel>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<PrecompiledHeader />
<WarningLevel>TurnOffAllWarnings</WarningLevel>
<CallingConvention>StdCall</CallingConvention>
<CompileAsManaged>false</CompileAsManaged>
<CompileAsWinRT>false</CompileAsWinRT>
<MultiProcessorCompilation>false</MultiProcessorCompilation>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
<StringPooling>true</StringPooling>
<AdditionalOptions>/QIfist %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>opengl32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName)_$(Configuration).exe</OutputFile>
<AdditionalLibraryDirectories>$(ProjectDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ManifestFile />
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<LinkTimeCodeGeneration />
<EntryPointSymbol>main</EntryPointSymbol>
<TargetMachine>MachineX86</TargetMachine>
<LinkErrorReporting />
<AdditionalOptions>/CRINKLER /COMPMODE:SLOW /ORDERTRIES:4000 /HASHTRIES:300 /UNSAFEIMPORT /TRUNCATEFLOATS:24 /HASHSIZE:200 /REPORT:report.html /RANGE:opengl32 /PROGRESSGUI /TRANSFORM:CALLS /UNALIGNCODE %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.compress.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">false</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="main.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="main_rel.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="Shaders.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">true</ExcludedFromBuild>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="4klang.h" />
<ClInclude Include="glext.h" />
<ClInclude Include="mark_small.h" />
<ClInclude Include="Shaders.h" />
<ClInclude Include="synth.h" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="4klang.asm">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">yasm-1.2.0-win32.exe -f win32 -o 4klang.obj 4klang.asm</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">Compiling 4klang...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">4klang.obj</Outputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Compress (Slow)|Win32'">4klang.inc</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">yasm-1.2.0-win32.exe -f win32 -o 4klang.obj 4klang.asm</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compiling 4klang...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4klang.obj</Outputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4klang.inc</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">yasm-1.2.0-win32.exe -f win32 -o 4klang.obj 4klang.asm</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Compiling 4klang...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4klang.obj</Outputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4klang.inc</AdditionalInputs>
</CustomBuild>
<None Include="4klang.inc" />
<None Include="generic.vs">
<DeploymentContent>true</DeploymentContent>
</None>
<None Include="mark.fs" />
<None Include="mark.fs_0" />
</ItemGroup>
<ItemGroup>
<Object Include="4klang.obj" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Shaders.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="main.compress.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="main_rel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="glext.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Shaders.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="synth.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="4klang.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="mark_small.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="generic.vs" />
<None Include="mark.fs" />
<None Include="mark.fs_0" />
<None Include="4klang.inc">
<Filter>Header Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="4klang.asm">
<Filter>Source Files</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<Object Include="4klang.obj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ShowAllFiles>false</ShowAllFiles>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,16 @@
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
call "build.cmd" 0.125f 1280 1024
call "build.cmd" 0.166f 800 600 W
call "build.cmd" 0.15f 1024 768
call "build.cmd" 0.166f 1280 960
call "build.cmd" 0.15f 1400 1050
call "build.cmd" 0.15f 1600 1200
call "build.cmd" 0.166f 800 600
call "build.cmd" 0.277f 1400 900
call "build.cmd" 0.3f 1280 800
call "build.cmd" 0.31f 1680 1050
call "build.cmd" 0.305f 1920 1200
call "build.cmd" 0.375f 1280 720
call "build.cmd" 0.375f 1920 1080
call "build.cmd" 0.44f 960 510 W

View File

@@ -0,0 +1,9 @@
IF [%4]==[W] GOTO :windowed
:fullscreen
cl /c @switches.txt /DASPECTOFFSET=%1 /DSCREENWIDTH=%2 /DSCREENHEIGHT=%3 main.compress.cpp
link @linkparams.txt /out:"final\bf_metallic_%2x%3.exe"
goto :end
:windowed
cl /c @switches.txt /DASPECTOFFSET=%1 /DSCREENWIDTH=%2 /DSCREENHEIGHT=%3 /DWINDOWED main.compress.cpp
link @linkparams.txt /out:"final\bf_metallic_%2x%3_window.exe"
:end

View File

@@ -0,0 +1 @@
shader_minifier.exe "mark.fs_0" -o mark_small.h -v

View File

@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2013
VisualStudioVersion = 12.0.21005.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bp4k", "bp4k.vcxproj", "{213903DE-E40A-4D23-9310-E520AC2B412E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Compress (Slow)|Win32 = Compress (Slow)|Win32
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{213903DE-E40A-4D23-9310-E520AC2B412E}.Compress (Slow)|Win32.ActiveCfg = Compress (Slow)|Win32
{213903DE-E40A-4D23-9310-E520AC2B412E}.Compress (Slow)|Win32.Build.0 = Compress (Slow)|Win32
{213903DE-E40A-4D23-9310-E520AC2B412E}.Debug|Win32.ActiveCfg = Debug|Win32
{213903DE-E40A-4D23-9310-E520AC2B412E}.Debug|Win32.Build.0 = Debug|Win32
{213903DE-E40A-4D23-9310-E520AC2B412E}.Release|Win32.ActiveCfg = Release|Win32
{213903DE-E40A-4D23-9310-E520AC2B412E}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,9 @@
varying vec4 Y;
varying vec2 Z;
void main()
{
Y = gl_Color;
Z = (gl_Vertex.xy*vec2(1.6,1.0))*0.5+0.5;
gl_Position = gl_Vertex;
}

13146
evoke-64k/ev15-4k/glext.h Normal file

File diff suppressed because it is too large Load Diff

BIN
evoke-64k/ev15-4k/link.exe Normal file

Binary file not shown.

View File

@@ -0,0 +1,29 @@
/CRINKLER
/COMPMODE:SLOW
/ORDERTRIES:5000
/HASHTRIES:400
/UNSAFEIMPORT
/TRUNCATEFLOATS:24
/HASHSIZE:500
/REPORT:report.html
/RANGE:opengl32
/TRANSFORM:CALLS
/UNALIGNCODE
/ENTRY:"main"
/SUBSYSTEM:WINDOWS
"obj\bp4k_Compress (Slow)\main.compress.obj"
4klang.obj
opengl32.lib
winmm.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

View File

@@ -0,0 +1,272 @@
#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN
#include "synth.h"
#include <GL/gl.h>
#include "glext.h"
#include "mark_small.h"
#ifndef SCREENWIDTH
#define SCREENWIDTH 1280
//#define SCREENWIDTH 320
#endif
#ifndef SCREENHEIGHT
#define SCREENHEIGHT 720
//#define SCREENHEIGHT 180
#endif
#ifndef ASPECTOFFSET
#define ASPECTOFFSET 0.375f
#endif
#define shaderCountOffset 14
#define ATOM_EDIT 0xC018
#define ATOM_STATIC 0xC019
#define SCENE_LENGTH (SAMPLES_PER_TICK * 64)
#pragma data_seg(".aspectOffset")
static const float gfAspectOffset = ASPECTOFFSET;
#pragma data_seg(".scebeLength")
static const int giSceneLength = SCENE_LENGTH;
//#define PFD_HACK
#define SHADER_WARMUP
//#define WINDOWED
#define START_BLACK
#pragma data_seg(".Shader0")
#include "mark_small.h"
struct FAKEDEVMODE
{
BYTE _a[36];
DWORD dmSize;
DWORD dmFields;
struct
{
BYTE _b[4];
DWORD pfdFlags;
} pfd;
BYTE _c[56];
DWORD width;
DWORD height;
BYTE _d[8];
};
#pragma data_seg("fcw")
static WORD fcw = 0x0E7f;
#pragma data_seg(".devmode")
static FAKEDEVMODE devmode = {
"", sizeof(devmode), DM_PELSWIDTH | DM_PELSHEIGHT, "", PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL, "", SCREENWIDTH, SCREENHEIGHT, ""
};
#pragma bss_seg(".mainbss")
static PFNGLCREATESHADERPROGRAMEXTPROC glCreateShaderProgramEXT;
static PFNGLUSEPROGRAMPROC glUseProgram;
static PFNGLUNIFORM3FPROC glUniform3f;
#pragma data_seg(".fltused")
int _fltused = 1;
#pragma data_seg(".glCreateShaderProgramEXT")
static const char* sglCreateShaderProgramEXT = "glCreateShaderProgramEXT";
#pragma data_seg(".glUseProgram")
static const char* sglUseProgram = "glUseProgram";
#pragma data_seg(".glUniform3f")
static const char* sglUniform3f = "glUniform3f";
#pragma code_seg(".main")
void _cdecl main()
{
_asm
{
fldcw [fcw]
xor esi, esi
push esi
push esi
push esi
push esi
#ifndef WINDOWED
push esi
push esi
push esi
push esi
push WS_POPUP | WS_VISIBLE | WS_MAXIMIZE
push esi
push ATOM_STATIC
push esi
push CDS_FULLSCREEN
push offset devmode
push esi
push esi
push offset lpSoundBuffer
push _4klang_render
push esi
push esi
call CreateThread
call ChangeDisplaySettings
call CreateWindowExA
#else
push SCREENHEIGHT
push SCREENWIDTH
push esi
push esi
push WS_EX_APPWINDOW | WS_VISIBLE | WS_SYSMENU
push esi
push ATOM_STATIC
push esi
push esi
push esi
push offset lpSoundBuffer
push _4klang_render
push esi
push esi
call CreateThread
call CreateWindowExA
#endif
push eax
call GetDC
mov edi, eax
push esi
#ifdef START_BLACK
push edi
#endif
push edi
#ifdef PFD_HACK
push esi
push 8
#else
push esi
push offset devmode.pfd
push edi
call ChoosePixelFormat
push eax
#endif
push edi
call SetPixelFormat
call wglCreateContext
push eax
push edi
call wglMakeCurrent
#ifdef START_BLACK
call SwapBuffers
#endif
call ShowCursor
xor ebx, ebx
shaderwarmup :
#ifdef SHADER_WARMUP
push 1
push 1
push - 1
push - 1
#endif
push offset mark_fs_0
push GL_FRAGMENT_SHADER
push sglCreateShaderProgramEXT
call wglGetProcAddress
call eax
#ifdef SHADER_WARMUP
push eax
push sglUseProgram
call wglGetProcAddress
call eax
#endif
inc byte ptr[mark_fs_0 + shaderCountOffset]
cmp ebx, 9
jnz skip
mov byte ptr[mark_fs_0 + shaderCountOffset], 'A'
skip:
#ifdef SHADER_WARMUP
push gfAspectOffset
push dword ptr[devmode.height]
fild dword ptr[esp]
fstp dword ptr[esp]
push ebx
fild dword ptr[esp]
fstp dword ptr[esp]
push esi
push sglUniform3f
call wglGetProcAddress
call eax
call glRecti
#endif
inc ebx
cmp ebx, 12
jnz shaderwarmup
push 0x20
push offset WaveHDR
push esi
push esi
push esi
push offset WaveFMT
push -1
push offset hWaveOut
call waveOutOpen
push [hWaveOut]
call waveOutWrite
}
do
{
_asm
{
push 0xC
push offset MMTime
push [hWaveOut]
call waveOutGetPosition
push esi
push esi
push esi
push esi
push esi
push edi
push 1
push 1
push -1
push -1
push gfAspectOffset
push dword ptr[devmode.height]
fild dword ptr[esp]
fstp dword ptr[esp]
push dword ptr[MMTime.u.sample]
fild dword ptr[esp]
fild giSceneLength
fdiv
fst dword ptr[esp]
push esi
push esi
fistp dword ptr[esp]
pop eax
inc eax
push eax
push sglUseProgram
call wglGetProcAddress
call eax
push sglUniform3f
call wglGetProcAddress
call eax
call glRecti
call SwapBuffers
call PeekMessage
}
} while (MMTime.u.sample < MAX_SAMPLES && !GetAsyncKeyState(VK_ESCAPE));
ExitProcess(0);
}

547
evoke-64k/ev15-4k/main.cpp Normal file
View File

@@ -0,0 +1,547 @@
//#define NOMUSICTIMING
#define MULTISHADER
#ifdef _DEBUG
#include <time.h>
#include <io.h>
#include <process.h>
#include "Shaders.h"
#include "synth.h"
#include "4klang.h"
#else
#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN
#include <windows.h>
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "glext.h"
#include "synth.h"
#include "4klang.h"
#ifdef NOMUSICTIMING
#include "Mmsystem.h"
#endif
#define V_Y "Y"
#define V_Z "Z"
#ifndef ASPECT
#define ASPECT 1.78
#endif
#ifndef SCREENWIDTH
//#define SCREENWIDTH 1280
#define SCREENWIDTH 320
#endif
#ifndef SCREENHEIGTH
//#define SCREENHEIGTH 720
#define SCREENHEIGTH 180
#endif
#define WINDOWED
#include "mark_small.h"
#define STR2(x) #x
#define STR(x) STR2(x)
//static char* vsh = "varying vec4 Y;varying vec2 Z;void main(){Y=gl_Color;Z=(gl_Vertex.xy*vec2(Y.w,1))*.5+.5;gl_Position=gl_Vertex;}";
static char* vsh = "varying vec4 "V_Y";varying vec2 "V_Z";void main(){"V_Y"=gl_Color;"V_Z"=(gl_Vertex.xy*vec2("STR( ASPECT )",1))*.5+.5;gl_Position=gl_Vertex;}";
#endif
#ifdef _DEBUG
#define HALF_FAC 1
static const int gi_ScreenWidth = 1280/HALF_FAC;
static const int gi_ScreenHeight = 720/HALF_FAC;
#else
static const int gi_ScreenWidth = SCREENWIDTH;
static const int gi_ScreenHeight = SCREENHEIGTH ;
#endif
#pragma data_seg(".glUniform3f")
static const char* glUniform3f = "glUniform3f";
#ifdef _DEBUG
HANDLE gh_ShaderCompileEvent;
static char** gs_LastShader_;
static __time64_t gi_ShaderChangedDate;
static unsigned int gi_ShaderProgram;
static unsigned int gi_LastShaderProgram;
static const char* gs_VertexShader = "generic.vs";
static const char* gs_ShaderFile = "mark.fs";
#endif
static const PIXELFORMATDESCRIPTOR pfd={
0, 1, PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 8
};
static DEVMODE dmScreenSettings={
0,0,0,sizeof(dmScreenSettings),0,DM_PELSWIDTH|DM_PELSHEIGHT,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,gi_ScreenWidth,gi_ScreenHeight
};
__forceinline unsigned int compileShader(const char* vsh, const char* fsh)
{
GLuint s,p;
p = ((PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram"))();
s = ((PFNGLCREATESHADERPROC)(wglGetProcAddress("glCreateShader")))(GL_VERTEX_SHADER);
((PFNGLSHADERSOURCEPROC)wglGetProcAddress("glShaderSource")) (s, 1, &vsh, NULL);
((PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader"))(s);
((PFNGLATTACHSHADERPROC)wglGetProcAddress("glAttachShader")) (p,s);
s = ((PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader"))(GL_FRAGMENT_SHADER);
((PFNGLSHADERSOURCEPROC)wglGetProcAddress("glShaderSource")) (s, 1, &fsh, NULL);
((PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader"))(s);
((PFNGLATTACHSHADERPROC)wglGetProcAddress("glAttachShader")) (p,s);
((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"))(p);
#ifndef MULTISHADER
((PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram"))(p);
#endif
return p;
}
#ifdef _DEBUG
#define CHECK_DEBUG_OUTPUT(shader) \
{\
GLint success = 0;\
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);\
if (!success)\
{\
GLchar infoLog[16384];\
glGetShaderInfoLog(shader, 16384, NULL, infoLog);\
OutputDebugString(infoLog);\
}\
}
#else
#define CHECK_DEBUG_OUTPUT(shader)
#endif
#ifdef _DEBUG
DWORD WINAPI filemon(void* args)
{
while (true)
{
_finddata_t fdata;
long hfile = _findfirst(gs_ShaderFile, &fdata);
if (hfile != -1)
{
if (fdata.time_write != gi_ShaderChangedDate)
{
gi_ShaderChangedDate = fdata.time_write;
::SetEvent(gh_ShaderCompileEvent);
std::cout << "Shader loaded." << std::endl;
}
_findclose(hfile);
}
::Sleep(100);
}
return 0;
}
#endif
#ifdef _DEBUG
#include <cmath>
float g_DebugCamPos[ 3 ]= {0,2.0f,-5.0f};
float g_DebugCamRot[ 2 ]= {0,0};
bool g_ShaderDebug= true;
int g_ShaderID= 0;
int g_SceneID= 0;
int g_MaxSceneID= 16;
float g_fSqrAnimFac= 0.0f;
float g_fSpeedFac= 8.0f;
bool g_bForceCompile= true;
void MoveCam( float& fCurTime )
{
float fSpeed= 0.25f;
bool bShift= GetAsyncKeyState( VK_SHIFT ) || GetAsyncKeyState( VK_MBUTTON ) || GetAsyncKeyState( VK_RBUTTON );
bool bStrg= GetAsyncKeyState( VK_CONTROL ) != 0;
float a= g_DebugCamRot[ 0 ];
float b= g_DebugCamRot[ 1 ];
float g_Forward[ 3 ]= {sinf( a )*cosf(b),-sinf(b), cosf( a )*cosf(b)};
float g_Right[ 3 ]= {cosf( a ),0, -sinf( a )};
if( bShift )
{
if(bStrg)
{
fSpeed *= 4.0f;
}
if( GetAsyncKeyState( VK_HOME ) && bStrg)
{
g_DebugCamPos[ 0 ]= 0.0f;
g_DebugCamPos[ 1 ]= 2.0f;
g_DebugCamPos[ 2 ]= -5.0f;
g_DebugCamRot[ 0 ]= 0.0f;
g_DebugCamRot[ 1 ]= 0.0f;
}
if( GetAsyncKeyState( 'W' ) )
{
g_DebugCamPos[ 0 ]+= fSpeed * g_Forward[ 0 ];
g_DebugCamPos[ 1 ]+= fSpeed * g_Forward[ 1 ];
g_DebugCamPos[ 2 ]+= fSpeed * g_Forward[ 2 ];
}
if( GetAsyncKeyState( 'S' ) )
{
g_DebugCamPos[ 0 ]-= fSpeed * g_Forward[ 0 ];
g_DebugCamPos[ 1 ]-= fSpeed * g_Forward[ 1 ];
g_DebugCamPos[ 2 ]-= fSpeed * g_Forward[ 2 ];
}
if( GetAsyncKeyState( 'A' ) )
{
g_DebugCamPos[ 0 ]-= fSpeed * g_Right[ 0 ];
g_DebugCamPos[ 1 ]-= fSpeed * g_Right[ 1 ];
g_DebugCamPos[ 2 ]-= fSpeed * g_Right[ 2 ];
}
if( GetAsyncKeyState( 'D' ) )
{
g_DebugCamPos[ 0 ]+= fSpeed * g_Right[ 0 ];
g_DebugCamPos[ 1 ]+= fSpeed * g_Right[ 1 ];
g_DebugCamPos[ 2 ]+= fSpeed * g_Right[ 2 ];
}
if( GetAsyncKeyState( 'F' ) )
{
g_DebugCamPos[ 1 ]+= fSpeed;
}
if( GetAsyncKeyState( 'V' ) )
{
g_DebugCamPos[ 1 ]-= fSpeed;
}
if( bStrg )
{
if( ( GetAsyncKeyState( VK_F2 ) & 1 ) != 0)
{
g_ShaderDebug= !g_ShaderDebug;
g_bForceCompile= true;
}
if( ( GetAsyncKeyState( VK_F3 ) & 1 ) != 0)
{
g_ShaderID= (g_ShaderID + MAX_SHADER_ID - 1 ) % MAX_SHADER_ID;
g_bForceCompile= true;
}
if( ( GetAsyncKeyState( VK_F4 ) & 1 )!= 0)
{
g_ShaderID= (g_ShaderID + MAX_SHADER_ID + 1 ) % MAX_SHADER_ID;
g_bForceCompile= true;
}
if( ( GetAsyncKeyState( VK_F7 ) & 1 ) != 0)
{
g_SceneID= (g_SceneID + g_MaxSceneID - 1 ) % g_MaxSceneID;
}
if( ( GetAsyncKeyState( VK_F8 ) & 1 )!= 0)
{
g_SceneID= (g_SceneID + g_MaxSceneID + 1 ) % g_MaxSceneID;
}
if( ( GetAsyncKeyState( VK_F9 ) & 1 ) != 0)
{
g_fSqrAnimFac-= 1.0f;
}
if( ( GetAsyncKeyState( VK_F10 ) & 1 )!= 0)
{
g_fSqrAnimFac+= 1.0f;
}
}
else
{
if( ( GetAsyncKeyState( VK_F6 ) & 1 )!= 0)
{
fCurTime= 0.0f;
}
if( ( GetAsyncKeyState( VK_F7 ) & 1 )!= 0)
{
g_fSpeedFac*= 2.0f;
if( g_fSpeedFac > 32.0f )
{
g_fSpeedFac= 32.0f;
}
}
if( ( GetAsyncKeyState( VK_F8 ) & 1 ) != 0)
{
g_fSpeedFac/= 2.0f;
if( g_fSpeedFac < 2.0f )
{
g_fSpeedFac= 2.0f;
}
}
}
}
static POINT OldCurPos;
POINT CurPos;
GetCursorPos( &CurPos );
if( bShift )
{
g_DebugCamRot[ 0 ]-= 0.003f * ( OldCurPos.x - CurPos.x );
g_DebugCamRot[ 1 ]-= 0.003f * ( OldCurPos.y - CurPos.y );
g_DebugCamRot[ 1 ]= max( g_DebugCamRot[ 1 ], -1.56f );
g_DebugCamRot[ 1 ]= min( g_DebugCamRot[ 1 ], 1.56f );
}
OldCurPos= CurPos;
}
#endif
#ifdef _DEBUG
LRESULT MessageCallback(HWND ar_Handle, UINT aw_Message, WPARAM aw_Param, LPARAM al_Param)
{
return DefWindowProc(ar_Handle, aw_Message, aw_Param, al_Param);
}
#endif
int gCurScene= 0;
int gCurSceneStart= 0;
/*int g_SceneLength[]=
{
16, 16, 16,
16, 16, 16,
16, 32, 16,
16, 16, 16,
0x80000000
};
int g_SceneShader[]=
{
0,0,0,
1,1,1,
2,2,2,
3,3,3,
};
float g_SceneFactor[]=
{
0, 0, 0,
0, 0, 1.0f,
0, 0, 1.0f,
0, 1.0f, 1.0f,
0,
};*/
void _cdecl main()
{
#ifdef _DEBUG
//ChangeDisplaySettings (&dmScreenSettings,CDS_FULLSCREEN);
//HDC hDC = GetDC(CreateWindow("edit", 0, WS_POPUP | WS_VISIBLE | WS_MAXIMIZE, 0, 0, 0, 0, 0, 0, 0, 0));
//HWND hWnd = CreateWindow("MDICLIENT", "Test", WS_OVERLAPPED | WS_VISIBLE | WS_SYSMENU, 0, 0, gi_ScreenWidth, gi_ScreenHeight, 0, 0, 0, 0);
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wndclass.lpfnWndProc = (WNDPROC)MessageCallback ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = NULL ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (DKGRAY_BRUSH) ;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = "Window" ;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;
RegisterClassEx(&wndclass);
HWND hWnd = CreateWindow(
"Window", /* Classname */
"Title", /* Title Text */
WS_EX_APPWINDOW, /* default window */
10, /* Windows decides the position */
30, /* where the window ends up on the screen */
gi_ScreenWidth, /* The programs width */
gi_ScreenHeight, /* and height in pixels */
NULL, /* The window is a child-window to desktop */
NULL, /* No menu */
GetModuleHandle(NULL), //GetModuleHandle(NULL), /* Program Instance handler */
NULL /* No Window Creation data */
);
HDC hDC = GetDC(hWnd);
SetPixelFormat(hDC, ChoosePixelFormat(hDC, &pfd), &pfd);
wglMakeCurrent(hDC, wglCreateContext(hDC));
initShaders();
gh_ShaderCompileEvent = ::CreateEvent(NULL, FALSE, FALSE, TEXT("WriteEvent"));
SetThreadPriority((HANDLE)CreateThread(0, 0, &filemon, 0, 0, 0), THREAD_PRIORITY_BELOW_NORMAL);
ShowWindow (hWnd , SW_NORMAL );
::Sleep(100);
#else
#ifndef WINDOWED
ChangeDisplaySettings (&dmScreenSettings,CDS_FULLSCREEN);
HDC hDC = GetDC(CreateWindow("edit", 0, WS_POPUP | WS_VISIBLE | WS_MAXIMIZE, 0, 0, 0, 0, 0, 0, 0, 0));
#else
HDC hDC = GetDC(CreateWindow("static", "static", WS_EX_APPWINDOW | WS_VISIBLE | WS_SYSMENU, 0, 0, gi_ScreenWidth, gi_ScreenHeight, 0, 0, 0, 0));
#endif
::Sleep(10000);
SetPixelFormat(hDC, ChoosePixelFormat(hDC, &pfd), &pfd);
wglMakeCurrent(hDC, wglCreateContext(hDC));
#ifdef MULTISHADER
unsigned int shaders[16];
mark_fs_0[6] = '0';
for(int i = 0; i < 16; ++i)
{
mark_fs_0[6]++;
if( i == 10)
{
mark_fs_0[6] = 'a';
}
shaders[i]=compileShader(vsh, mark_fs_0 ),
}
#else
compileShader(vsh, mark_fs_0 );
#endif
ShowCursor(FALSE);
#endif
#ifdef _DEBUG
if (::WaitForSingleObject(gh_ShaderCompileEvent, 0) == WAIT_OBJECT_0)
{
::Sleep(250);
gi_ShaderProgram = createProgram(
createVertexShader(gs_VertexShader),
createFragmentShader(gs_ShaderFile, g_ShaderID, g_ShaderDebug ));
((PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram"))(gi_ShaderProgram);
PrintErrors();
}
glColor4f(0,0, (GLfloat)gi_ScreenWidth, (GLfloat)gi_ScreenHeight);
glRectf(-1, -1, 1, 1);
SwapBuffers(hDC);
#endif
#ifndef _DEBUG
InitSound();
#else
LARGE_INTEGER li_OldTime = { 0 };
#endif
#ifdef NOMUSICTIMING
int iStartTick= timeGetTime();
#endif
float lf_Time= 0.0f;
do
{
#ifdef _DEBUG
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
return;
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
if (::WaitForSingleObject(gh_ShaderCompileEvent, 0) == WAIT_OBJECT_0 || g_bForceCompile)
{
::Sleep(50);
gi_ShaderProgram = createProgram(
createVertexShader(gs_VertexShader),
createFragmentShader(gs_ShaderFile, g_ShaderID, g_ShaderDebug));
((PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram"))(gi_ShaderProgram);
PrintErrors();
g_bForceCompile= false;
}
#endif
get_Sample();
int Sample= MMTime.u.sample - gCurSceneStart;
int SceneEnd = 8 * SAMPLES_PER_TICK * 8;//samples per tick
#ifdef NOMUSICTIMING
lf_Time = ( timeGetTime() - iStartTick ) * 0.001f / 16.0f;
#endif
glLoadIdentity();
#ifdef _DEBUG
LARGE_INTEGER li_CurrentTime, li_CurrentFrequency;
QueryPerformanceCounter(&li_CurrentTime);
QueryPerformanceFrequency(&li_CurrentFrequency);
//lf_Time = (float)li_CurrentTime.QuadPart / (float)li_CurrentFrequency.QuadPart;
float lf_DiffTime = (float)(li_CurrentTime.QuadPart - li_OldTime.QuadPart) / (float)li_CurrentFrequency.QuadPart;
char windowText[255];
sprintf_s(
windowText,
"Shader: %d Scene: %d AnimFac: %2.2f FPS: %.2f, Render time: %.4fms",
g_ShaderID,
g_SceneID,
g_fSqrAnimFac,
1.0f / lf_DiffTime,
lf_DiffTime );
::SetWindowTextA(hWnd, windowText);
li_OldTime = li_CurrentTime;
lf_Time+= lf_DiffTime * 145.0f / 60.0f / g_fSpeedFac;
if( lf_Time > 1.0f )
{
lf_Time= 0.0f;
if (g_fSqrAnimFac < 0.0)
{
g_SceneID = (g_SceneID + 1) % 16;
}
}
if( lf_Time < 0.0f )
{
lf_Time = 0.0f;
}
if (g_fSqrAnimFac == 0)
{
lf_Time = 0.0f;
}
((PFNGLUNIFORM3FPROC)wglGetProcAddress(glUniform3f))(0, (float)g_SceneID + lf_Time, (GLfloat)gi_ScreenHeight, (GLfloat)0.375f);
#else
#ifdef MULTISHADER
((PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram"))(shaders[gCurScene ]);
#endif
lf_Time= (float)Sample / (float)SceneEnd;
glColor4f((float)gCurScene, lf_Time, gi_ScreenWidth, gi_ScreenHeight);
#endif
#ifdef _DEBUG
MoveCam( lf_Time );
float fDebugData[ 16 ];
fDebugData[ 0 ]= g_DebugCamPos[ 0 ];
fDebugData[ 1 ]= g_DebugCamPos[ 1 ];
fDebugData[ 2 ]= g_DebugCamPos[ 2 ];
fDebugData[ 4 ]= g_DebugCamRot[ 0 ];
fDebugData[ 5 ]= g_DebugCamRot[ 1 ];
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf((GLfloat*)&fDebugData);
#endif
glRects(-1, -1, 1, 1);
SwapBuffers(hDC);
#ifndef _DEBUG
if( Sample > SceneEnd )
{
gCurSceneStart+= SceneEnd;
gCurScene++;
}
#endif
}
#ifdef _DEBUG
while ( !GetAsyncKeyState(VK_ESCAPE) );
#else
while ( g_SceneLength[ gCurScene ] > 0 && !GetAsyncKeyState(VK_ESCAPE) );
#endif
ExitProcess(0);
}

View File

@@ -0,0 +1,154 @@
#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN
#include "synth.h"
#include <GL/gl.h>
#include "glext.h"
#include "mark_small.h"
#ifndef SCREENWIDTH
//#define SCREENWIDTH 1280
#define SCREENWIDTH 640
#endif
#ifndef SCREENHEIGHT
//#define SCREENHEIGHT 720
#define SCREENHEIGHT 480
#endif
#ifndef ASPECTOFFSET
#define ASPECTOFFSET 0.375f
#endif
//#define WINDOWED
#pragma data_seg(".Shader0")
#include "mark_small.h"
struct FAKEPFD
{
WORD nSize;
WORD nVersion;
DWORD dwFlags;
// Snip
};
struct FAKEDEVMODE
{
BYTE dmDeviceName[CCHDEVICENAME];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;
DWORD dmFields;
union {
/* printer only fields */
struct {
short dmOrientation;
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
short dmScale;
short dmCopies;
short dmDefaultSource;
short dmPrintQuality;
};
FAKEPFD pfd;
};
short dmColor;
short dmDuplex;
short dmYResolution;
short dmTTOption;
short dmCollate;
BYTE dmFormName[CCHFORMNAME];
WORD dmLogPixels;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
union {
DWORD dmDisplayFlags;
DWORD dmNup;
};
DWORD dmDisplayFrequency;
};
#pragma bss_seg(".mainbss")
static PFNGLCREATESHADERPROGRAMEXTPROC glCreateShaderProgramEXT;
static PFNGLUSEPROGRAMPROC glUseProgram;
static PFNGLUNIFORM3FPROC glUniform3f;
#pragma data_seg(".devmode")
static FAKEDEVMODE devmode = {
"", 0, 0, sizeof(devmode), 0, DM_PELSWIDTH | DM_PELSHEIGHT, 0, 0, PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, SCREENWIDTH, SCREENHEIGHT, 0, 0
};
#pragma data_seg(".fltused")
int _fltused = 1;
#pragma data_seg(".glCreateShaderProgramEXT")
static const char* sglCreateShaderProgramEXT = "glCreateShaderProgramEXT";
#pragma data_seg(".glUseProgram")
static const char* sglUseProgram = "glUseProgram";
#pragma data_seg(".glUniform3f")
static const char* sglUniform3f = "glUniform3f";
#define shaderCountOffset 14
#define ATOM_EDIT 0xC018
#define ATOM_STATIC 0xC019
#define SCENE_LENGTH (SAMPLES_PER_TICK * 64)
#pragma code_seg(".main")
void _cdecl main()
{
InitSound();
#ifndef WINDOWED
ChangeDisplaySettings((DEVMODEA*)&devmode, CDS_FULLSCREEN);
HDC hDC = GetDC(CreateWindowExA(0, (LPCSTR)ATOM_STATIC, 0, WS_POPUP | WS_VISIBLE | WS_MAXIMIZE, 0, 0, 0, 0, 0, 0, 0, 0));
#else
HDC hDC = GetDC(CreateWindowExA(0, (LPCSTR)ATOM_STATIC, 0, WS_EX_APPWINDOW | WS_VISIBLE | WS_SYSMENU, 0, 0, SCREENWIDTH, SCREENHEIGHT, 0, 0, 0, 0));
#endif
SetPixelFormat(hDC, ChoosePixelFormat(hDC, (const PIXELFORMATDESCRIPTOR*)&devmode.pfd), 0);
// if size is a problem, try this:
// SetPixelFormat(hDC, 8, 0);
wglMakeCurrent(hDC, wglCreateContext(hDC));
glCreateShaderProgramEXT = (PFNGLCREATESHADERPROGRAMEXTPROC)wglGetProcAddress(sglCreateShaderProgramEXT);
glUseProgram = (PFNGLUSEPROGRAMPROC)wglGetProcAddress(sglUseProgram);
glUniform3f = (PFNGLUNIFORM3FPROC)wglGetProcAddress(sglUniform3f);
for (int i = 0; i < 12; ++i)
{
glUseProgram(glCreateShaderProgramEXT(GL_FRAGMENT_SHADER, mark_fs_0));
mark_fs_0[shaderCountOffset]++;
if (i == 9)
{
mark_fs_0[shaderCountOffset] = 'A';
}
glUniform3f(0, i, SCREENHEIGHT, ASPECTOFFSET);
glRecti(-1, -1, 1, 1);
}
ShowCursor(FALSE);
PlaySound();
do
{
get_Sample();
float fTime = (float)MMTime.u.sample / SCENE_LENGTH;
glUseProgram((int)fTime + 1);
glUniform3f(0, fTime, SCREENHEIGHT, ASPECTOFFSET);
glRecti(-1, -1, 1, 1);
SwapBuffers(hDC);
::PeekMessage(0, 0, 0, 0, 0);
} while (MMTime.u.sample < MAX_SAMPLES && !GetAsyncKeyState(VK_ESCAPE));
ExitProcess(0);
}

568
evoke-64k/ev15-4k/mark.fs Normal file
View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
@D
/////////////////////////////////////////////////////////////////////
//Debugzeug fuer Kamerasteuerung
if( true )
{
p.x= gl_ModelViewMatrix[0][0];
p.y= gl_ModelViewMatrix[0][1];
p.z= gl_ModelViewMatrix[0][2];
float a1= gl_ModelViewMatrix[1][1];
float c1,s1;
//vec3 q1= vec3((Z.xy - 0.5), 0.6);
float ScreenHeight = Y.z;
float AspectOffset = 1280.0 / 720.0 * 0.5 - 0.5; //= 0.445;
vec3 q1 = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.6);
q1.x -= Y.z;
c1 = cos(a1); s1 = sin(a1);
rayDir.y = c1 * q1.y - s1 * q1.z;
rayDir.x= q1.x;
rayDir.z = s1 * q1.y + c1 * q1.z;
a1= gl_ModelViewMatrix[1][0];
q1=rayDir;
c1 = cos(a1); s1 = sin(a1);
rayDir.x = c1 * q1.x + s1 * q1.z;
rayDir.z = -s1 * q1.x + c1 * q1.z;
}
//Ende Debugzeug fuer Kamerasteuerung
/////////////////////////////////////////////////////////////////////
@@
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

View File

@@ -0,0 +1,496 @@
const int shader= 0;
@D
//#version 430
@@
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspect
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurScene, CurStep, pi2= 6.28319;
int m;
vec2 CurNormal;
vec3 cRes, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 8., 4., 2.0);
vec3 BackColor= vec3( 0.7, 1.0, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}
//radius of the torus/ radius of the ring
float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wdings(vec3 p, float t)
{
p.y -= min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float r = p.y;
p /= 0.2;
p.x += CurTime;
r += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
r += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
r += abs (0.04 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
r += abs (0.2 * noise(p.xz));
return smin (r, r + w - 2.0, 2.0);
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
o.y -= min( 18.0, -50.0 + 18.0 * Y.x);
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float r = min(1.0, 1.0 + p.z + Y.x * 44.0 - 377.0);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return CBox2D(p.xy, vec2(r * 0.2, r), r * 0.2);
max(
max(
CBox(o, vec3(12.0,12.0,12.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 50.0 * (Y.x - 6.0))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 22.0);
}
float f(vec3 p)
{
//if( shader == 0 )
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
//else if ( shader == 1 )
// return .0; //min(min(min(f4(p),f5(p)),f6(p)),f7(p));
//else if ( shader == 2 )
// return .0; //min(min(min(f8(p),f9(p)),f10(p)),f11(p));
//else if ( shader == 3 )
// return .0; //min( min(f12(p),f13(p)),f14(p));
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f3(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= .1;
}
if( z > f3(p) )
{
z= f2(p);
HitMaterial = vec4(-1.0, 2., 0.8, 1.2);
CurColor = vec3(.9,.7,.6);
CurStep= .8;
CurNormal.y= 0.;
CurNormal.x= 0.;
//m=2;
}
}
void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
<<<<<<< .mine
vec3 rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 1.0);
rayDir.x -= Y.z;
=======
vec3 rayDir = vec3((gl_FragCoord.xy / Y.z - 0.5), 0.8);
rayDir.x -= Y.w;
>>>>>>> .r1084
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene-- < 1.0 )
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene-- < 1.0 )
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.5 );
}
else if( CurScene-- < 1.0 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene-- < 1.0 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene-- < 1.0 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
else if( CurScene-- < 1.0 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}
else if( CurScene-- < 1.0 )
{
p= vec3( -11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 4.0* (1.0 - CurTime * 0.2) );
//CurTime2 = 0.0;
}
else if( CurScene-- < 1.0 )
{
p= vec3( 0.0, -99.* (0.5 + CurTime * 1.5), -6.);
rayDir.yz= rotate( rayDir.yz, -1.0 );
//CurTime2 = 0.0;
}
else if( CurScene-- < 1.0 )
{
////////////// Shader 2
p= vec3(-88.* (1. + CurTime * 1.), 10.0, -4.);
rayDir.yz= rotate( rayDir.yz, -0.3 );
rayDir.xz= rotate( rayDir.xz, 1. - CurTime );
}
else if( CurScene-- < 1.0 )
{
p= vec3(-88.* (1. - CurTime * 0.4), 13.0, 4.);
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 3. + CurTime );
}
else if( CurScene-- < 1.0 )
{
p= vec3(-33.* (1. - CurTime * 0.6), 103.0, -6.);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 6. );
CurTime2 *= 2.0;
}
else if( CurScene-- < 1.0 )
{
p= vec3( -8.0, -99.* (CurTime * 1.8), 6.);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 3. );
CurTime2 *= 2.0;
}
else if( CurScene-- < 1.0 )
{
////////////// Shader 3
p= vec3( -88., 22.0, -99.0 * (1.0 - CurTime * 1.2));
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 5.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene-- < 1.0 )
{
p= vec3( 166.0, 44.0, 99.0 * (1.0 - CurTime * 3.3));
rayDir.yz= rotate( rayDir.yz, 0.4 );
rayDir.xz= rotate( rayDir.xz, 1.0 - CurTime );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene-- < 1.0 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene-- < 1.0 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
CurScene= Y.x - fract(Y.x);
@D
/////////////////////////////////////////////////////////////////////
//Debugzeug fuer Kamerasteuerung
if( true )
{
p.x= gl_ModelViewMatrix[0][0];
p.y= gl_ModelViewMatrix[0][1];
p.z= gl_ModelViewMatrix[0][2];
float a1= gl_ModelViewMatrix[1][1];
float c1,s1;
//vec3 q1= vec3((Z.xy - 0.5), 0.6);
float ScreenHeight = Y.z;
float AspectOffset = 1280.0 / 720.0 * 0.5 - 0.5; //= 0.445;
vec3 q1 = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.6);
q1.x -= Y.z;
c1 = cos(a1); s1 = sin(a1);
rayDir.y = c1 * q1.y - s1 * q1.z;
rayDir.x= q1.x;
rayDir.z = s1 * q1.y + c1 * q1.z;
a1= gl_ModelViewMatrix[1][0];
q1=rayDir;
c1 = cos(a1); s1 = sin(a1);
rayDir.x = c1 * q1.x + s1 * q1.z;
rayDir.z = -s1 * q1.x + c1 * q1.z;
}
//Ende Debugzeug fuer Kamerasteuerung
/////////////////////////////////////////////////////////////////////
@@
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<250.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
for (CurStep=1.0;t<250.0 && CurStep>t*.0005;t+=CurStep,RayStep=rayDir*t )
{
CurStep = f(p+RayStep);
}
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( f(p + CurNormal.xyy) - f(p - CurNormal.xyy), f(p + CurNormal.yxy) - f(p - CurNormal.yxy), f(p + CurNormal.yyx) - f(p - CurNormal.yyx) );
n= normalize(n);
//CurStep ab hier == Reflektion !!!
mat(p);
if( t > 250.0 )
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*CurColor;//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
}
gl_FragColor.xyz = smoothstep(15.8, 15.79, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
}

568
evoke-64k/ev15-4k/mark.fs_0 Normal file
View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
/////////////////////////////////////////////////////////////////////
//Debugzeug fuer Kamerasteuerung
if( true )
{
p.x= gl_ModelViewMatrix[0][0];
p.y= gl_ModelViewMatrix[0][1];
p.z= gl_ModelViewMatrix[0][2];
float a1= gl_ModelViewMatrix[1][1];
float c1,s1;
//vec3 q1= vec3((Z.xy - 0.5), 0.6);
float ScreenHeight = Y.z;
float AspectOffset = 1280.0 / 720.0 * 0.5 - 0.5; //= 0.445;
vec3 q1 = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.6);
q1.x -= Y.z;
c1 = cos(a1); s1 = sin(a1);
rayDir.y = c1 * q1.y - s1 * q1.z;
rayDir.x= q1.x;
rayDir.z = s1 * q1.y + c1 * q1.z;
a1= gl_ModelViewMatrix[1][0];
q1=rayDir;
c1 = cos(a1); s1 = sin(a1);
rayDir.x = c1 * q1.x + s1 * q1.z;
rayDir.z = -s1 * q1.x + c1 * q1.z;
}
//Ende Debugzeug fuer Kamerasteuerung
/////////////////////////////////////////////////////////////////////
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

568
evoke-64k/ev15-4k/mark.fs_1 Normal file
View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
/////////////////////////////////////////////////////////////////////
//Debugzeug fuer Kamerasteuerung
if( true )
{
p.x= gl_ModelViewMatrix[0][0];
p.y= gl_ModelViewMatrix[0][1];
p.z= gl_ModelViewMatrix[0][2];
float a1= gl_ModelViewMatrix[1][1];
float c1,s1;
//vec3 q1= vec3((Z.xy - 0.5), 0.6);
float ScreenHeight = Y.z;
float AspectOffset = 1280.0 / 720.0 * 0.5 - 0.5; //= 0.445;
vec3 q1 = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.6);
q1.x -= Y.z;
c1 = cos(a1); s1 = sin(a1);
rayDir.y = c1 * q1.y - s1 * q1.z;
rayDir.x= q1.x;
rayDir.z = s1 * q1.y + c1 * q1.z;
a1= gl_ModelViewMatrix[1][0];
q1=rayDir;
c1 = cos(a1); s1 = sin(a1);
rayDir.x = c1 * q1.x + s1 * q1.z;
rayDir.z = -s1 * q1.x + c1 * q1.z;
}
//Ende Debugzeug fuer Kamerasteuerung
/////////////////////////////////////////////////////////////////////
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

568
evoke-64k/ev15-4k/mark.fs_2 Normal file
View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
/////////////////////////////////////////////////////////////////////
//Debugzeug fuer Kamerasteuerung
if( true )
{
p.x= gl_ModelViewMatrix[0][0];
p.y= gl_ModelViewMatrix[0][1];
p.z= gl_ModelViewMatrix[0][2];
float a1= gl_ModelViewMatrix[1][1];
float c1,s1;
//vec3 q1= vec3((Z.xy - 0.5), 0.6);
float ScreenHeight = Y.z;
float AspectOffset = 1280.0 / 720.0 * 0.5 - 0.5; //= 0.445;
vec3 q1 = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.6);
q1.x -= Y.z;
c1 = cos(a1); s1 = sin(a1);
rayDir.y = c1 * q1.y - s1 * q1.z;
rayDir.x= q1.x;
rayDir.z = s1 * q1.y + c1 * q1.z;
a1= gl_ModelViewMatrix[1][0];
q1=rayDir;
c1 = cos(a1); s1 = sin(a1);
rayDir.x = c1 * q1.x + s1 * q1.z;
rayDir.z = -s1 * q1.x + c1 * q1.z;
}
//Ende Debugzeug fuer Kamerasteuerung
/////////////////////////////////////////////////////////////////////
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

568
evoke-64k/ev15-4k/mark.fs_3 Normal file
View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

View File

@@ -0,0 +1,568 @@
const int CurScene = 0x6;
// Parameters from our host
// x: Scene+Zeit
// y: Hoehe
// z: Aspec
uniform vec3 Y;
// All data of our world
float cFac, CurTime, CurTime2, CurStep, pi2= 6.28319;//, CurScene;
int m;
vec2 CurNormal;
vec3 cRes, rayDir, CurColor = vec3(0.), RayStep = vec3(0.);
vec3 LightColor= vec3( 5., 4.5, 4.0);
vec3 BackColor= vec3( 0.7, 0.9, 1.2);
vec4 HitMaterial;
vec2 rotate(vec2 v,float y)
{
return cos(y)*v+sin(y)*vec2(-v.y,v.x);
}
//repeat around y axis w times
//void rp(inout vec3 p, float trans, float w)
float repeatr(inout vec2 v,float x, float y)
{
float a= atan(v.y,v.x);
float z=mod(a,y)-y*.5;
v=(length(v))*vec2(cos(z),sin(z));
v.x-=x;
return a-z;
}
void repeat( inout float w, float y )
{
w= mod( w - y*.5, y ) - y*.5;
}
void repeate( inout float w, float y, float z )
{
w= max( abs(w)-z, mod( w - y*.5, y ) - y*.5);
}
/*float row( float w, float y)
{
return floor( ( w - y*.5 )/ y );
}*/
//radius of the torus/ radius of the ring
/*float torus(vec3 p,float f)
{
return length(vec2(length(p.xz) - f,p.y));
}*/
/*float signedDistToBox( vec3 p, vec3 b )
{
vec3 di = abs(p) - b;
float mc = maxcomp(di);
return mc<0.0 ? mc : length(max(di,0.0));
}*/
float CBox( in vec3 p, in vec3 box, float rad )
{
return length( max( abs(p) - box + vec3(rad), 0.0 ) ) - rad;
}
float CBox2D( in vec2 p, in vec2 box, float rad )
{
return length( max( abs(p) - box + vec2(rad), 0.0 ) ) - rad;
}
/*float EndlessBar( vec2 p, float y, float z )
{
return length( max( abs(p) - vec2(y) + vec2(z), 0.0 ) ) - z;
}*/
/*float noise3D( vec3 p )
{
return fract( sin( p.x * 151.0 + p.y * 33.0 + p.z ) * 11.0 );
}
float smoothnoise(vec3 p)
{
vec2 e = vec2(1.0, 0.0);
vec3 o= smoothstep(0.0,1.0,fract( p ));
p= floor( p );
vec4 n= mix(
vec4(
noise3D( p+e.yyy),//n000,
noise3D( p+e.xyy),//n100,
noise3D( p+e.yxy),//n010,
noise3D( p+e.xxy)),//n110),
vec4(
noise3D( p+e.yyx),//n001,
noise3D( p+e.xyx),//n101,
noise3D( p+e.yxx),//n011,
noise3D( p+e.xxx)),//n111),
o.z);
e = mix(n.xy, n.zw, o.y);
return mix(e.x, e.y, o.x);
}*/
float plasm(float x, float a, float b,float c)
{
return sin(x+a+c*sin(x+b));
}
float smin( float a, float b, float k )
{
float h = clamp( 0.5+0.5*(b-a)/k, 0.0, 1.0 );
return mix( b, a, h ) - k*h*(1.0-h);
}
float hash( vec2 p )
{
float h = dot(p,vec2(23.2,15.7));
return fract(sin(h)*232.45);
}
float noise(vec2 p)
{
vec2 e = vec2(1.0, 0.0);
vec2 i = floor( p );
vec2 f = fract( p );
f *= f*(3.0-2.0*f);
return -0.5 + mix( mix( hash( i + e.yy ),
hash( i + e.xy ), f.x),
mix( hash( i + e.yx ),
hash( i + e.xx ), f.x), f.y);
}
float wHeight()
{
if (CurScene > 9)
{
return -22.0;
}
else if (CurScene == 9)
{
return 11.0 - CurTime * 33.0;
}
else
{
return min( 11.0, -33.0 + 22.0 * Y.x - CurScene * 11.0);
}
return 11.0 - CurTime * 33.0;
}
float wdings(vec3 p, float t)
{
p.y -= wHeight();
p.xy= rotate( p.xy, 2.3 * t );
p.yz= rotate( p.yz, 1.9 * t );
repeate(p.x, 10.0, 10.0);
repeate(p.y, 10.0, 10.0);
repeate(p.z, 10.0, 10.0);
vec2 e = vec2(6.0, 0.5);
float b = min(min(CBox(p, e.xyy, 0.2), CBox(p, e.yxy, 0.2)), CBox(p, e.yyx, 0.2));
return smin(length(p) - 3.0, b, 1.0);
}
float f0(vec3 p)
{
float w = wdings(p, CurTime - 0.02);
float d = rayDir.y < 0. ? (p.y + 0.3)/rayDir.y : 999.0;
d= smin (max(p.y, d), p.y + w - 2.0, 2.0);
if (CurScene > 9)
{
float Walk = (Y.x - 10.1) * 444.0;
Walk = smoothstep( Walk - 166., Walk - 66.0, length(p.xz));
d = p.y - Walk * 33.0 + 33. + 3.0 * (1.0 - Walk) * sin(length(p.xz) * 0.1 - CurTime * 66.0);
}
if (d > 0.5)
{
return d;
}
p *= 0.4;
p.x += CurTime;
return d + abs (0.2 * noise(p.xz));
}
float f0N(vec3 p)
{
float d = f0(p);
if (d > 0.5)
{
return d;
}
p /= 0.1;
p.x += CurTime;
d += abs (0.005 * noise(p.xz));
p.x += CurTime;
d += abs (0.01 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.02 * noise(p.xz));
p /= 2.8;
p.x += CurTime;
d += abs (0.04 * noise(p.xz));
return d;
}
float f1(vec3 p)
{
return wdings(p, CurTime);
}
float f2(vec3 p)
{
vec3 o = p;
float b = length(o.xz) * 0.2;
o.y -= 5.0 * b - 0.2 * b * b - 30.0;
//repeate(o.y, 8.0, 16.0);
repeatr(o.zx, 172.0 * Y.x - 1899.0, pi2 / 48.0);
//o.z += 5.0 * hash(d);
repeate(o.z, 44.0, 88.0);
repeate(o.z, 4.0, 4.0);
o.z = length(o.z) - 0.7;
b = (o.z < 0.0 ? length( o.xy ): length( o )) - 1.0;
o = p;
o.y -= wHeight();
o.xy= rotate( o.xy, 2.3 * CurTime );
o.yz= rotate( o.yz, 1.9 * CurTime );
float a = max(
max(
CBox(o, vec3(11.0,11.0,11.0), 1.0),
1.0 - wdings(p, CurTime)),
length(o) - 6.0 * (Y.x - 6.2))
- plasm(0.3 * p.x, 8.0 * CurTime, 0.3 * p.y, sin(0.3 *p.z));
a *= 0.5;
if(CurScene > 9)
return smin(a, b, 16.0);
else if(CurScene > 8)
return a;
else
{
//float r = min(1.0, 1.0 + p.z + min( 0.0, Y.x * 44.0 - 377.0));
float r = -min(-5.0, Y.x * 88.0 - 555.0) - p.z;
r = 1. - (r < 0. ? 0. : 0.04 * r * r);
p.x -= plasm(p.z * 0.3, 0.5, CurTime, 0.4);
p.y -= 5.0 + plasm(p.z * 0.2, CurTime, 0.0, 1.2 + sin(CurTime));
return smin( a, CBox2D(p.xy, vec2(r * 0.4, r), r * 0.4), 8.0);
}
}
float f3(vec3 p)
{
repeatr(p.zx, 88.0, pi2 / 6.0);
repeatr(p.zx, 33.0, pi2 / 12.0);
float d = length(p.x);
return max(p.z - d + pow(d, 1.1), p.y - 44.0);
}
float f(vec3 p)
{
return min( min( min( f0(p), f1(p) ), f2(p) ), f3(p) );
}
float fN(vec3 p)
{
return min( min( min(f0N(p), f1(p) ), f2(p) ), f3(p) );
}
void mat(vec3 p)
{
float z= 0.1;
if( z > f1(p) )
{
z= f1(p);
HitMaterial = vec4(-2.0, 3.0, 0.7, 1.1);
CurColor = vec3(1.0,1.5,1.8 );
CurStep= .1;
}
if( z > f2(p) )
{
z= f2(p);
HitMaterial = vec4(-2.0, 0.8, 0.5, 1.2);
CurColor = vec3(1.8,1.0,0.2);
CurStep= 0.1;
}
if( z > f3(p) )
{
z= f3(p);
HitMaterial = vec4(-1.0, 3., 0.8, 1.2);
CurColor = vec3(.3,.2,.5);
CurStep= .8;
}
if( z > f0(p) )
{
HitMaterial = vec4(-1.0, 9.0, 0.95, 1.0);
CurColor = vec3(.0,.0,.0 );
CurStep= 0.6;
}
}
/*void ToRes(vec3 Color, float Factor)
{
cRes+= Color * cFac;
cFac*= Factor;
}*/
vec3 lightSphere(vec3 normal, vec3 color, vec2 desc)
{
return smoothstep(desc.x, desc.y, dot(vec3( 0.86, 0.5, 0.0),normal)) * color;
}
void main()
{
//Z = (gl_FragCoord.xy / Y.zw) * vec2(Y.z/Y.w, 1);
CurTime= fract(Y.x);
//CurScene= Y.x - fract(Y.x);
CurTime2= CurTime * CurTime;
// Get the look direction for the current pixel (always look forwards)
rayDir = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.8);
rayDir.x -= Y.z;
//Kamera sitzt an dieser Position
vec3 p = vec3( 0.0, 11.0, -CurTime * 33.0);
if( CurScene < 1)
{
rayDir.yz= rotate( rayDir.yz, 1.5 - 2.0 * CurTime );
rayDir.xz= rotate( rayDir.xz, 4.0 + CurTime);
}
else if( CurScene < 2)
{
p = vec3( -33.0, 6.0, -3.0);
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
}
else if( CurScene < 3 )
{
p = vec3( 0.0, 6.0, -22.0);
rayDir.yz= rotate( rayDir.yz, 0.4 - 0.6 *CurTime );
//rayDir.xz= rotate( rayDir.xz, 0.0 );
}
else if( CurScene < 4 )
{
p = vec3( -44.0, 8.0, -40.0);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 4.5 + CurTime );
}
else if( CurScene < 5 )
{
////////////// Shader 1
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.7), 190.);
rayDir.yz= rotate( rayDir.yz, 1.0 * (1.0 - CurTime * 0.5) );
rayDir.xz= rotate( rayDir.xz, 3.0 );
//CurTime2 = CurTime;
}
/*else if( CurScene < 6 )
{
p= vec3( -22.0, 11., 150.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.2 );
rayDir.xz= rotate( rayDir.xz, 4.0 );
//CurTime2 = CurTime;
}*/
else if( CurScene < 6 )
{
p= vec3( 11.0, 9.0, 111.* (1.0 - CurTime * 0.1));
rayDir.yz= rotate( rayDir.yz, 0.3 );
rayDir.xz= rotate( rayDir.xz, 2.0 + CurTime * 0.8 );
}
/*else if( CurScene < 8 )
{
p= vec3( -33.0, 7.0, 0.);
rayDir.yz= rotate( rayDir.yz, 0.0 );
rayDir.xz= rotate( rayDir.xz, 5.0);
}*/
else if( CurScene < 7 )
{
////////////// Shader 2
p= vec3( 11.0, 33.* (1.0 - CurTime * 0.1), 11.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 2.0 );
}
else if( CurScene < 8 )
{
p = vec3( -22.0, 6.0, 22.0);
rayDir.yz= rotate( rayDir.yz, -0.2 );
rayDir.xz= rotate( rayDir.xz, 4.2 );
}
else if( CurScene < 9 )
{
p= vec3( 11.0, 66.* (1.0 - CurTime * 0.3), 22.);
rayDir.yz= rotate( rayDir.yz, 1.0);
rayDir.xz= rotate( rayDir.xz, 3.0 );
}
else if( CurScene < 10 )
{
p = vec3( -22.0, 8.0, -22.0);
rayDir.yz= rotate( rayDir.yz, CurTime * 0.4 - 0.3 );
rayDir.xz= rotate( rayDir.xz, 5.3 );
}
else if( CurScene < 11 )
{
////////////// Shader 3
p= vec3( -66., 60.0, 22.0);
rayDir.yz= rotate( rayDir.yz, 0.6 );
rayDir.xz= rotate( rayDir.xz, 4.4 );
//CurTime = CurTime * 8.0 + 0.6;
//CurTime2 = mod( CurTime, 1.0);
}
else //if( CurScene < 12 )
{
p= vec3( -33., 22.0 * (1.0-CurTime), 11.0);
rayDir.yz= rotate( rayDir.yz, 0.5 );
rayDir.xz= rotate( rayDir.xz, 5.0 );
}
/*else if( CurScene < 15 )
{
p= vec3( -99.0 * (1.0 - CurTime * 3.3), 88.0, -44.0);
rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 2.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}
else if( CurScene < 16 )
{
p= vec3( -99.0 * (1.0 - CurTime * 0.8 ), 12.0, 99.0);
//rayDir.yz= rotate( rayDir.yz, 0.6 + CurTime );
rayDir.xz= rotate( rayDir.xz, 4.5 );
CurTime = CurTime * 8.0 + 0.6;
CurTime2 = mod( CurTime, 1.0);
}*/
//CurScene= Y.x - fract(Y.x);
/////////////////////////////////////////////////////////////////////
//Debugzeug fuer Kamerasteuerung
if( true )
{
p.x= gl_ModelViewMatrix[0][0];
p.y= gl_ModelViewMatrix[0][1];
p.z= gl_ModelViewMatrix[0][2];
float a1= gl_ModelViewMatrix[1][1];
float c1,s1;
//vec3 q1= vec3((Z.xy - 0.5), 0.6);
float ScreenHeight = Y.z;
float AspectOffset = 1280.0 / 720.0 * 0.5 - 0.5; //= 0.445;
vec3 q1 = vec3((gl_FragCoord.xy / Y.y - 0.5), 0.6);
q1.x -= Y.z;
c1 = cos(a1); s1 = sin(a1);
rayDir.y = c1 * q1.y - s1 * q1.z;
rayDir.x= q1.x;
rayDir.z = s1 * q1.y + c1 * q1.z;
a1= gl_ModelViewMatrix[1][0];
q1=rayDir;
c1 = cos(a1); s1 = sin(a1);
rayDir.x = c1 * q1.x + s1 * q1.z;
rayDir.z = -s1 * q1.x + c1 * q1.z;
}
//Ende Debugzeug fuer Kamerasteuerung
/////////////////////////////////////////////////////////////////////
rayDir = normalize(rayDir);
cRes= vec3( .0,.0,.0 );
cFac=1.0;
//float t=smoothnoise( rayDir*666.0 )*0.1,y,z;
//float t= 0.5 * plasm(999. * rayDir.x, 999. * rayDir.z, 999. * rayDir.y,999. * rayDir.z),y,z;
float t= 0.0,y,z;
m=0;
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
vec3 fog =
lightSphere(rayDir, LightColor, HitMaterial.zw);// +
//lightSphere(rayDir, BackColor, HitMaterial.xy);
while(m++<2)
{
//bis zu einer Oberflaeche steppen
//for (CurStep=1.0;t<999.0 && CurStep>t*.003;t+=0.01+max(0.0, CurStep),RayStep=rayDir*t )
float ii = 80.0;
for (CurStep=1.0;ii >=0.0 && t<999.0 && CurStep>t*.001;t+=CurStep,RayStep=rayDir*t,--ii )
{
CurStep = f(p+RayStep);
}
if (ii <= 1)
{
ii = 0.;
t = 999.3 ;
RayStep=rayDir*t;
break;
}
ii = smoothstep(44., 1., ii);
vec3 NextPos = p+RayStep;
//Startpunkt und Richtung fuer reflektierten Strahl;
p= NextPos;
CurNormal = vec2(0.04, 0.0);
vec3 n= vec3( fN(p + CurNormal.xyy) - fN(p - CurNormal.xyy), fN(p + CurNormal.yxy) - fN(p - CurNormal.yxy), fN(p + CurNormal.yyx) - fN(p - CurNormal.yyx) );
// float gradlen = length(n / (2 * CurNormal.x));
// float error = abs(gradlen - 1.0);
// gl_FragColor.xyz = mix(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), error);
// return;
//CurNormal = vec2(0.0, 0.0);
mat(p);
//n.xz += CurNormal;
n= normalize(n);
//CurStep ab hier == Reflektion !!!
if( t > 999.0)
{
if( m < 2)
{
HitMaterial = vec4(-3.0, 8.0, 0.98, 1.0);
}
break;
}
rayDir= reflect( rayDir, n );
//float ao(vec3 p, vec3 n, float d, float i) {
y= 8.0;
for (z=1.0;y>0.;y--)
{
z-=.5*(y-f(p+n*y))/exp2(y);
}
CurColor*= z;
CurColor*= lightSphere(rayDir, BackColor, HitMaterial.xy);
cRes+= cFac*mix(CurColor, fog, ii);//*(1.0-Reflect);
cFac*= CurStep;// Reflect * (1.0-t/tmax);
t= 0.5;
RayStep = rayDir * t;
}
gl_FragColor.xyz = smoothstep(11.92, 11.8, Y.x) * (cRes + cFac*
( lightSphere(rayDir, LightColor, HitMaterial.zw) +
lightSphere(rayDir, BackColor, HitMaterial.xy)));
//gl_FragColor.xyz = smoothstep(-12.0, -11.8, -Y.x) * mix((cRes + cFac*
// ( lightSphere(rayDir, LightColor, HitMaterial.zw) +
// lightSphere(rayDir, BackColor, HitMaterial.xy))), fog, fogAmount / 2.0);
}

View File

@@ -0,0 +1,272 @@
/* File generated with Shader Minifier 1.1.1
* http://www.ctrl-alt-test.fr
*/
#ifndef MARK_SMALL_H_
# define MARK_SMALL_H_
# define U_Y "v"
char mark_fs_0[] = ""
"const int z=0x0;"
"uniform vec3 v;"
"float i,y,f,m,l=6.28319;"
"int e;"
"vec2 r;"
"vec3 x,a,s=vec3(0.),w=vec3(0.),d=vec3(5.,4.5,4.),t=vec3(.7,.9,1.2);"
"vec4 b;"
"vec2 n(vec2 a,float z)"
"{"
"return cos(z)*a+sin(z)*vec2(-a.y,a.x);"
"}"
"float n(inout vec2 a,float v,float y)"
"{"
"float z=atan(a.y,a.x),m=mod(z,y)-y*.5;"
"a=length(a)*vec2(cos(m),sin(m));"
"a.x-=v;"
"return z-m;"
"}"
"void h(inout float z,float y)"
"{"
"z=mod(z-y*.5,y)-y*.5;"
"}"
"void h(inout float z,float y,float x)"
"{"
"z=max(abs(z)-x,mod(z-y*.5,y)-y*.5);"
"}"
"float p(in vec3 z,in vec3 y,float a)"
"{"
"return length(max(abs(z)-y+vec3(a),0.))-a;"
"}"
"float c(in vec2 z,in vec2 y,float a)"
"{"
"return length(max(abs(z)-y+vec2(a),0.))-a;"
"}"
"float c(float z,float y,float x,float i)"
"{"
"return sin(z+y+i*sin(z+x));"
"}"
"float o(float y,float z,float x)"
"{"
"float a=clamp(.5+.5*(z-y)/x,0.,1.);"
"return mix(z,y,a)-x*a*(1.-a);"
"}"
"float c(vec2 z)"
"{"
"float a=dot(z,vec2(23.2,15.7));"
"return fract(sin(a)*232.45);"
"}"
"float h(vec2 z)"
"{"
"vec2 a=vec2(1.,0.),m=floor(z),y=fract(z);"
"y*=y*(3.-2.*y);"
"return-.5+mix(mix(c(m+a.yy),c(m+a.xy),y.x),mix(c(m+a.yx),c(m+a.xx),y.x),y.y);"
"}"
"float c()"
"{"
"if(z>9)"
"return-22.;"
"else"
" if(z==9)"
"return 11.-y*33.;"
"else"
" return min(11.,-33.+22.*v.x-z*11.);"
"return 11.-y*33.;"
"}"
"float c(vec3 a,float y)"
"{"
"a.y-=c();"
"a.xy=n(a.xy,2.3*y);"
"a.yz=n(a.yz,1.9*y);"
"h(a.x,10.,10.);"
"h(a.y,10.,10.);"
"h(a.z,10.,10.);"
"vec2 z=vec2(6.,.5);"
"float m=min(min(p(a,z.xyy,.2),p(a,z.yxy,.2)),p(a,z.yyx,.2));"
"return o(length(a)-3.,m,1.);"
"}"
"float n(vec3 m)"
"{"
"float i=c(m,y-.02),f=a.y<0.?(m.y+.3)/a.y:999.;"
"f=o(max(m.y,f),m.y+i-2.,2.);"
"if(z>9)"
"{"
"float x=(v.x-10.1)*444.;"
"x=smoothstep(x-166.,x-66.,length(m.xz));"
"f=m.y-x*33.+33.+3.*(1.-x)*sin(length(m.xz)*.1-y*66.);"
"}"
"if(f>.5)"
"return f;"
"m*=.4;"
"m.x+=y;"
"return f+abs(.2*h(m.xz));"
"}"
"float o(vec3 a)"
"{"
"float z=n(a);"
"if(z>.5)"
"return z;"
"a/=.1;"
"a.x+=y;"
"z+=abs(.005*h(a.xz));"
"a.x+=y;"
"z+=abs(.01*h(a.xz));"
"a/=2.8;"
"a.x+=y;"
"z+=abs(.02*h(a.xz));"
"a/=2.8;"
"a.x+=y;"
"z+=abs(.04*h(a.xz));"
"return z;"
"}"
"float p(vec3 z)"
"{"
"return c(z,y);"
"}"
"float u(vec3 a)"
"{"
"vec3 m=a;"
"float i=length(m.xz)*.2;"
"m.y-=5.*i-.2*i*i-30.;"
"n(m.zx,172.*v.x-1899.,l/48.);"
"h(m.z,44.,88.);"
"h(m.z,4.,4.);"
"m.z=length(m.z)-.7;"
"i=(m.z<0.?length(m.xy):length(m))-1.;"
"m=a;"
"m.y-=c();"
"m.xy=n(m.xy,2.3*y);"
"m.yz=n(m.yz,1.9*y);"
"float x=max(max(p(m,vec3(11.,11.,11.),1.),1.-c(a,y)),length(m)-6.*(v.x-6.2))-c(.3*a.x,8.*y,.3*a.y,sin(.3*a.z));"
"x*=.5;"
"if(z>9)"
"return o(x,i,16.);"
"else"
" if(z>8)"
"return x;"
"else"
"{"
"float f=-min(-5.,v.x*88.-555.)-a.z;"
"f=1.-(f<0.?0.:.04*f*f);"
"a.x-=c(a.z*.3,.5,y,.4);"
"a.y-=5.+c(a.z*.2,y,0.,1.2+sin(y));"
"return o(x,c(a.xy,vec2(f*.4,f),f*.4),8.);"
"}"
"}"
"float g(vec3 a)"
"{"
"n(a.zx,88.,l/6.);"
"n(a.zx,33.,l/12.);"
"float z=length(a.x);"
"return max(a.z-z+pow(z,1.1),a.y-44.);"
"}"
"float F(vec3 a)"
"{"
"return min(min(min(n(a),p(a)),u(a)),g(a));"
"}"
"float C(vec3 a)"
"{"
"return min(min(min(o(a),p(a)),u(a)),g(a));"
"}"
"void k(vec3 a)"
"{"
"float z=.1;"
"if(z>p(a))"
"z=p(a),b=vec4(-2.,3.,.7,1.1),s=vec3(1.,1.5,1.8),m=.1;"
"if(z>u(a))"
"z=u(a),b=vec4(-2.,.8,.5,1.2),s=vec3(1.8,1.,.2),m=.1;"
"if(z>g(a))"
"z=g(a),b=vec4(-1.,3.,.8,1.2),s=vec3(.3,.2,.5),m=.8;"
"if(z>n(a))"
"b=vec4(-1.,9.,.95,1.),s=vec3(0.,0.,0.),m=.6;"
"}"
"vec3 C(vec3 a,vec3 z,vec2 m)"
"{"
"return smoothstep(m.x,m.y,dot(vec3(.86,.5,0.),a))*z;"
"}"
"void main()"
"{"
"y=fract(v.x);"
"f=y*y;"
"a=vec3(gl_FragCoord.xy/v.y-.5,.8);"
"a.x-=v.z;"
"vec3 l=vec3(0.,11.,-y*33.);"
"if(z<1)"
"a.yz=n(a.yz,1.5-2.*y),a.xz=n(a.xz,4.+y);"
"else"
" if(z<2)"
"l=vec3(-33.,6.,-3.),a.yz=n(a.yz,.2),a.xz=n(a.xz,4.4);"
"else"
" if(z<3)"
"l=vec3(0.,6.,-22.),a.yz=n(a.yz,.4-.6*y);"
"else"
" if(z<4)"
"l=vec3(-44.,8.,-40.),a.yz=n(a.yz,0.),a.xz=n(a.xz,4.5+y);"
"else"
" if(z<5)"
"l=vec3(11.,66.*(1.-y*.7),190.),a.yz=n(a.yz,1.-y*.5),a.xz=n(a.xz,3.);"
"else"
" if(z<6)"
"l=vec3(11.,9.,111.*(1.-y*.1)),a.yz=n(a.yz,.3),a.xz=n(a.xz,2.+y*.8);"
"else"
" if(z<7)"
"l=vec3(11.,33.*(1.-y*.1),11.),a.yz=n(a.yz,1.),a.xz=n(a.xz,2.);"
"else"
" if(z<8)"
"l=vec3(-22.,6.,22.),a.yz=n(a.yz,-.2),a.xz=n(a.xz,4.2);"
"else"
" if(z<9)"
"l=vec3(11.,66.*(1.-y*.3),22.),a.yz=n(a.yz,1.),a.xz=n(a.xz,3.);"
"else"
" if(z<10)"
"l=vec3(-22.,8.,-22.),a.yz=n(a.yz,y*.4-.3),a.xz=n(a.xz,5.3);"
"else"
" if(z<11)"
"l=vec3(-66.,60.,22.),a.yz=n(a.yz,.6),a.xz=n(a.xz,4.4);"
"else"
" l=vec3(-33.,22.*(1.-y),11.),a.yz=n(a.yz,.5),a.xz=n(a.xz,5.);"
"a=normalize(a);"
"x=vec3(0.,0.,0.);"
"i=1.;"
"float o=0.,p,g;"
"e=0;"
"b=vec4(-3.,8.,.98,1.);"
"vec3 c=C(a,d,b.zw);"
"while(e++<2)"
"{"
"float u=80.;"
"for(m=1.;u>=0.&&o<999.&&m>o*.001;o+=m,w=a*o,--u)"
"m=F(l+w);"
"if(u<=1)"
"{"
"u=0.;"
"o=999.3;"
"w=a*o;"
"break;"
"}"
"u=smoothstep(44.,1.,u);"
"vec3 h=l+w;"
"l=h;"
"r=vec2(.04,0.);"
"vec3 Z=vec3(C(l+r.xyy)-C(l-r.xyy),C(l+r.yxy)-C(l-r.yxy),C(l+r.yyx)-C(l-r.yyx));"
"k(l);"
"Z=normalize(Z);"
"if(o>999.)"
"{"
"if(e<2)"
"b=vec4(-3.,8.,.98,1.);"
"break;"
"}"
"a=reflect(a,Z);"
"p=8.;"
"for(g=1.;p>0.;p--)"
"g-=.5*(p-F(l+Z*p))/exp2(p);"
"s*=g;"
"s*=C(a,t,b.xy);"
"x+=i*mix(s,c,u);"
"i*=m;"
"o=.5;"
"w=a*o;"
"}"
"gl_FragColor.xyz=smoothstep(11.92,11.8,v.x)*(x+i*(C(a,d,b.zw)+C(a,t,b.xy)));"
"}";
#endif // MARK_SMALL_H_

View File

@@ -0,0 +1,784 @@
Instrument0:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 72, HLD, 72, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, 72, HLD, 72, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, 72, HLD, 72, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument1:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument2:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
72, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
72, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
72, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
72, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
72, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
72, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
72, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 72, HLD,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0,
Instrument3:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 59, 59,
0, 0, 0, 0, 0, 0, 0, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 67, 59, 59,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument4:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 59, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument5:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
60, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60,
65, 65, 0, 0, 0, 0, 65, 0, 65, 0, 0, 0, 0, 0, 0, 65,
61, 61, 0, 0, 0, 0, 61, 0, 61, 0, 0, 0, 0, 0, 0, 61,
63, 63, 0, 0, 0, 0, 63, 0, 63, 0, 0, 0, 0, 0, 0, 63,
60, 60, 0, 0, 0, 0, 60, 0, 60, 0, 0, 0, 0, 0, 0, 60,
65, 65, 0, 0, 0, 0, 65, 0, 65, 0, 0, 0, 0, 0, 0, 65,
58, 58, 0, 0, 0, 0, 58, 0, 58, 0, 0, 0, 0, 0, 0, 58,
63, 63, 0, 0, 0, 0, 63, 0, 63, 0, 0, 0, 0, 0, 0, 63,
63, 63, 0, 0, 0, 0, 63, 0, 63, 0, 0, 0, 0, 0, 0, 63,
59, 59, 0, 0, 0, 0, 59, 0, 59, 0, 0, 0, 0, 0, 0, 59,
68, 68, 0, 0, 0, 0, 68, 0, 68, 0, 0, 0, 0, 0, 0, 68,
58, 58, 0, 0, 0, 0, 58, 0, 58, 0, 0, 0, 0, 0, 0, 58,
67, 67, 0, 0, 0, 0, 67, 0, 67, 0, 0, 0, 0, 0, 0, 67,
59, 59, 0, 0, 0, 0, 59, 0, 59, 0, 0, 0, 0, 0, 0, 59,
65, 65, 0, 0, 0, 0, 65, 0, 65, 0, 0, 0, 0, 0, 0, 65,
70, 70, 0, 0, 0, 0, 70, 0, 70, 0, 0, 0, 0, 0, 0, 70,
70, 70, 0, 0, 0, 0, 70, 0, 70, 0, 0, 0, 0, 0, 0, 70,
59, 59, 0, 0, 0, 0, 59, 0, 59, 0, 0, 0, 0, 0, 0, 59,
68, 68, 0, 0, 0, 0, 68, 0, 68, 0, 0, 0, 0, 0, 0, 68,
58, 58, 0, 0, 0, 0, 58, 0, 58, 0, 0, 0, 0, 0, 0, 58,
67, 67, 0, 0, 0, 0, 67, 0, 67, 0, 0, 0, 0, 0, 0, 67,
59, 59, 0, 0, 0, 0, 59, 0, 59, 0, 0, 0, 0, 0, 0, 59,
65, 65, 0, 0, 0, 0, 65, 0, 65, 0, 0, 0, 0, 0, 0, 65,
70, 70, 0, 0, 0, 0, 70, 0, 70, 0, 0, 0, 0, 0, 0, 70,
70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70,
59, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument6:
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
55, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
57, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
57, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 73, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
52, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
57, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
57, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 73, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
55, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
57, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
54, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 69, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
52, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
57, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
57, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 73, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
66, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
62, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 81, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 80, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
49, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 68, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
66, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 83, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
83, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
66, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
62, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 81, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 80, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
49, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 68, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
66, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
59, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 80, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
42, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument7:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
66, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
71, 59, 59, 71, 59, 59, 71, 59, 59, 71, 59, 71, 59, 59, 71, 59,
67, 55, 55, 67, 55, 55, 67, 55, 55, 67, 55, 67, 55, 55, 67, 55,
69, 57, 57, 69, 57, 57, 69, 57, 57, 69, 57, 69, 57, 57, 69, 57,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
71, 59, 59, 71, 59, 59, 71, 59, 59, 71, 59, 71, 59, 59, 71, 59,
64, 52, 52, 64, 52, 52, 64, 52, 52, 64, 52, 64, 52, 52, 64, 52,
69, 57, 57, 69, 57, 57, 69, 57, 57, 69, 57, 69, 57, 57, 69, 57,
69, 57, 57, 69, 57, 57, 69, 57, 57, 69, 57, 69, 57, 57, 69, 57,
54, 42, 42, 54, 42, 42, 54, 42, 42, 54, 42, 54, 42, 42, 54, 42,
62, 50, 50, 62, 50, 50, 62, 50, 50, 62, 50, 62, 50, 50, 62, 50,
64, 52, 52, 64, 52, 52, 64, 52, 52, 64, 52, 64, 52, 52, 64, 52,
61, 49, 49, 61, 49, 49, 61, 49, 49, 61, 49, 61, 49, 49, 61, 49,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
71, 59, 59, 71, 59, 59, 71, 59, 59, 71, 59, 71, 59, 59, 71, 59,
76, 64, 64, 76, 64, 64, 76, 64, 64, 76, 64, 76, 64, 64, 76, 64,
76, 64, 64, 76, 64, 64, 76, 64, 64, 76, 64, 76, 64, 64, 76, 64,
54, 42, 42, 54, 42, 42, 54, 42, 42, 54, 42, 54, 42, 42, 54, 42,
62, 50, 50, 62, 50, 50, 62, 50, 50, 62, 50, 62, 50, 50, 62, 50,
64, 52, 52, 64, 52, 52, 64, 52, 52, 64, 52, 64, 52, 52, 64, 52,
61, 49, 49, 61, 49, 49, 61, 49, 49, 61, 49, 61, 49, 49, 61, 49,
66, 54, 54, 66, 54, 54, 66, 54, 54, 66, 54, 66, 54, 54, 66, 54,
71, 59, 59, 71, 59, 59, 71, 59, 59, 71, 59, 71, 59, 59, 71, 59,
64, 52, 52, 64, 52, 52, 64, 52, 52, 64, 52, 64, 52, 52, 64, 52,
64, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument8:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument9:
71, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
71, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
71, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
71, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
78, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
76, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
78, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
78, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
76, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
78, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument10:
74, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
74, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, 69, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
74, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, 67, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
74, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, 81, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 57, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 52, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 57, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 54, 59, 61, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 57, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 52, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 69, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 66, 71, 73, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0,
74, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, 71, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
74, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, 69, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
74, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, 67, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
74, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, 81, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
81, HLD, HLD, HLD, HLD, HLD, 85, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
81, HLD, HLD, HLD, HLD, HLD, 83, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
81, HLD, HLD, HLD, HLD, HLD, 85, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
76, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD, HLD, HLD, 80, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
81, HLD, HLD, HLD, HLD, HLD, 85, HLD, HLD, HLD, HLD, HLD, 78, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
81, HLD, HLD, HLD, HLD, HLD, 83, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
81, HLD, HLD, HLD, HLD, HLD, 85, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD,
HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
76, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
42, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
30, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
30, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
30, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
30, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument11:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
47, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
43, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
45, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
42, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
47, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
40, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
45, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
50, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
52, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
49, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
54, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
47, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
52, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
40, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
54, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
50, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
52, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
49, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
54, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
47, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
40, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument12:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument13:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument14:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument15:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

View File

@@ -0,0 +1,163 @@
/* File generated with Shader Minifier 1.0.3
* http://www.ctrl-alt-test.fr
*/
#ifndef SHADER_CODE_H_
# define SHADER_CODE_H_
# define V_Y "v"
# define V_Z "m"
const char *mark_fs = ""
"varying vec4 v;"
"varying vec2 m;"
"vec3 f,z;"
"float x=6.28319;"
"vec2 n(vec2 f,float v)"
"{"
"return cos(v)*f+sin(v)*vec2(-f.y,f.x);"
"}"
"void i(inout vec3 v,float f)"
"{"
"float z=mod(atan(v.z,v.x),f)-f*.5;"
"v.xz=length(v.xz)*vec2(cos(z),sin(z));"
"}"
"float i(vec3 v,float f,float z)"
"{"
"return length(vec2(length(v.xz)-f,v.y))-z;"
"}"
"float s(vec3 v,float z)"
"{"
"return length(v)-z;"
"}"
"float i(vec3 v)"
"{"
"return v.y+.6;"
"}"
"float n(vec3 v)"
"{"
"return min(s(v+vec3(0,8.,0),8.5),i(v,2.3,.5));"
"}"
"float s(vec3 v)"
"{"
"float z=max(s(v,6.),v.y);"
"i(v,x/64.);"
"v.x=abs(v.x-5.)-2.;"
"float f=mix(length(v.yz),length(v.xyz),step(0.,v.x));"
"return min(z,f-.4);"
"}"
"float l(vec3 f)"
"{"
"return f.y-=4.,f.xz=n(f.xz,v.y*6.),i(f,x/12.),f.yz=n(f.yz,x/4.),min(i(f,2.,.15),s(f,1.5));"
"}"
"float h(vec3 v)"
"{"
"return min(min(min(i(v),n(v)),s(v)),l(v));"
"}"
"int g(vec3 v)"
"{"
"float z=1000.;"
"int f;"
"if(i(v)<z)"
"z=i(v),f=0;"
"if(n(v)<z)"
"z=n(v),f=1;"
"if(s(v)<z)"
"z=s(v),f=2;"
"if(l(v)<z)"
"z=l(v),f=3;"
"return f;"
"}"
"vec3 p(vec3 v)"
"{"
"vec3 z=vec3(.04,0.,0.),f;"
"f.x=h(v+z.xyy)-h(v-z.xyy);"
"f.y=h(v+z.yxy)-h(v-z.yxy);"
"f.z=h(v+z.yyx)-h(v-z.yyx);"
"return normalize(f);"
"}"
"float e(vec3 v)"
"{"
"float z=1.;"
"for(float f=.2;f<12.;f=f*1.1+.125)"
"z+=min(h(v+vec3(0.,1.,0.)*f),0.);"
"return clamp(z,.2,1.);"
"}"
"float e(vec3 v,vec3 f,float z,float i)"
"{"
"float x,y=sign(z);"
"for(x=y*.5+.5;i>0.;i--)"
"x-=(i*z-h(v+f*i*z*y))/exp2(i);"
"return x;"
"}"
"vec3 t(vec3 v)"
"{"
"float z=.3+.3*dot(v,vec3(0.,1.,0.));"
"i(v,x/16.);"
"v.x=abs(v.x-.2)-.08;"
"float f=mix(abs(v.z),length(v.xz),step(0.,v.x));"
"z+=pow(smoothstep(.1,0.,f),15.);"
"return vec3(z);"
"}"
"float c(vec3 v)"
"{"
"float z=abs(v.y-.9);"
"return.4+.3*(1-z);"
"}"
"void main()"
"{"
"int x=int(v.y);"
"float y=mod(v.y,1.);"
"z=vec3(m.xy-.5,1);"
"f=vec3(-30.-y*5.,3.,-16.+y*24.);"
"z.xz=n(z.xz,y*-2.5);"
"if(false)"
"{"
"f.x=gl_ModelViewMatrix[0][0];"
"f.y=gl_ModelViewMatrix[0][1];"
"f.z=gl_ModelViewMatrix[0][2];"
"float i=gl_ModelViewMatrix[1][1],s,r;"
"vec3 l=vec3(m.xy-.5,1);"
"s=cos(i);"
"r=sin(i);"
"z.y=s*l.y-r*l.z;"
"z.x=l.x;"
"z.z=r*l.y+s*l.z;"
"i=gl_ModelViewMatrix[1][0];"
"l=z;"
"s=cos(i);"
"r=sin(i);"
"z.x=s*l.x+r*l.z;"
"z.z=-r*l.x+s*l.z;"
"}"
"z=normalize(z);"
"vec3 i=vec3(0.,0.,0.);"
"float s=1.,l=0.,r=256.,a;"
"while(s>.1)"
"{"
"for(a=1.;l<r&&a>.05;l+=a)"
"a=h(f+z*l);"
"if(l<r)"
"{"
"f+=z*l;"
"vec3 o=p(f);"
"z=reflect(z,o);"
"l=.1;"
"vec3 d=vec3(.3,.2,.1);"
"float u=.125;"
"int M=g(f);"
"if(M==1)"
"d=vec3(.1,.1,.1),u=.8;"
"if(M==2)"
"d=vec3(.4,.3,.03),u=.2;"
"if(M==3)"
"d=vec3(.7,0.,0.),u=.2;"
"d*=c(o)*e(f)*e(f,o,.4,10.);"
"i+=s*d;"
"s*=u;"
"}"
"else"
" i+=s*t(z),s=0.;"
"}"
"gl_FragColor.xyz=i;"
"}";
#endif // SHADER_CODE_H_

Binary file not shown.

View File

@@ -0,0 +1,24 @@
/O1
/Oi
/Os
/D "WIN32"
/D "NDEBUG"
/D "_WINDOWS"
/FD
/MT
/GS-
/GR-
/Fp".\obj\bp4k_Compress (Slow)/cmath.pch"
/FAs
/Fa".\obj\bp4k_Compress (Slow)/"
/Fo".\obj\bp4k_Compress (Slow)/"
/Fd".\obj\bp4k_Compress (Slow)/"
/FR".\obj\bp4k_Compress (Slow)\\"
/W0
/nologo
/c
/Zi
/Gz
/TP
/errorReport:prompt
/QIfist

79
evoke-64k/ev15-4k/synth.h Normal file
View File

@@ -0,0 +1,79 @@
#pragma once
#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN
#include "windows.h"
#include "mmsystem.h"
#include "mmreg.h"
#include "4klang.h"
#define USE_SOUND_THREAD
#pragma bss_seg(".synthnothing")
static float lpSoundBuffer[MAX_SAMPLES * 2];
static HWAVEOUT hWaveOut;
#pragma data_seg(".wavefmt")
WAVEFORMATEX WaveFMT =
{
#ifdef FLOAT_32BIT
WAVE_FORMAT_IEEE_FLOAT,
#else
WAVE_FORMAT_PCM,
#endif
2, // channels
SAMPLE_RATE, // samples per sec
SAMPLE_RATE*sizeof(SAMPLE_TYPE)* 2, // bytes per sec
sizeof(SAMPLE_TYPE)* 2, // block alignment;
sizeof(SAMPLE_TYPE)* 8, // bits per sample
0 // extension not needed
};
#pragma data_seg(".wavehdr")
WAVEHDR WaveHDR =
{
(LPSTR)lpSoundBuffer,
MAX_SAMPLES*sizeof(SAMPLE_TYPE)* 2, // MAX_SAMPLES*sizeof(float)*2(stereo)
0,
0,
WHDR_PREPARED,
0,
0,
0
};
#pragma data_seg(".mmtime")
MMTIME MMTime =
{
TIME_SAMPLES,
0
};
#ifndef _DEBUG
#pragma code_seg(".initsnd")
#endif
__forceinline void InitSound()
{
#ifdef USE_SOUND_THREAD
::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)_4klang_render, lpSoundBuffer, 0, 0);
#else
_4klang_render(lpSoundBuffer);
#endif
}
#ifndef _DEBUG
#pragma code_seg(".playsnd")
#endif
__forceinline void PlaySound()
{
waveOutOpen(&hWaveOut, WAVE_MAPPER, &WaveFMT, NULL, 0, CALLBACK_NULL);
//waveOutPrepareHeader( hWaveOut, &WaveHDR, sizeof(WaveHDR) );
waveOutWrite(hWaveOut, &WaveHDR, sizeof(WaveHDR));
}
#ifndef _DEBUG
#pragma code_seg(".sample")
#endif
__forceinline void get_Sample()
{
waveOutGetPosition(hWaveOut, &MMTime, sizeof(MMTIME));
}

Binary file not shown.