leviathan-2.0
This commit is contained in:
288
.gitignore
vendored
Normal file
288
.gitignore
vendored
Normal file
@ -0,0 +1,288 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Roope Mäkinen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
72
README.md
72
README.md
@ -1,2 +1,72 @@
|
||||
# 4k_synthwave
|
||||
# Leviathan 2.0
|
||||
Leviathan is a simple "framework" for developing small (around 1-8 kilobyte) [Demoscene](https://en.wikipedia.org/wiki/Demoscene) productions. It is primarily developed for creating the [Prismbeings](https://www.pouet.net/groups.php?which=12646) 4k Intros. "Intro" is parlance for a size-wise small Demo.
|
||||
|
||||
## "Features"
|
||||
* Kept as simple as possible, made for productivity.
|
||||
* No external dependencies, instantly ready for development.
|
||||
* Readymade configurations for different use cases.
|
||||
* Automated shader minification upon compilation.
|
||||
* Simple unintrusive editor mode with seeking and hot reloading.
|
||||
* Easy to customize for your needs.
|
||||
|
||||
## Compatibility
|
||||
Current version intended to be used with Visual Studio 2017 (any version). Make sure you have a version with the latest Windows SDK installed (at least version 10.0.17134.0), or use version 8.1. With some extra configuration 2015 and 2013 should work as well. Leviathan is is very Windows-specific and isn't really sensibly portable anywhere else.
|
||||
|
||||
### Components
|
||||
Leviathan requires these componens to be installed with the Visual Studio configuration. Run the Visual Studio Installer to check you have at least these installed:
|
||||
* **VC++ 2017 version 15.9 v14.16 latest v141 tools**, or VC++ 2015.3 v14.00 (v140)
|
||||
* **Windows 10 SDK** (any version should be fine, Leviathan currently defaults to 10.0.17134.0, change as needed) or Windows 8.1 SDK
|
||||
* Windows Universal CRT SDK
|
||||
* Windows Universal C Runtime
|
||||
|
||||
## Configurations
|
||||
This section describes the different build configurations available from Visual Studio IDE
|
||||
### Heavy Release
|
||||
Uses heavier Crinkler settings to squeeze out maximum compression (note though that the /VERYSLOW flag could sometimes backfire and produce a larger executable). Also doesn't do shader minification since it assumes the user is performing hand minifications to the .inl source, which would be overwritten by the Shader Minifier.
|
||||
### Release
|
||||
Generally recommended for producing a final executable to be released. Uses moderate Crinkler settings.
|
||||
### Snapshot
|
||||
Use for general development. Only minimal crinklering but nothing extra included. Useful still for keeping track of relative size changes. This configuration overwrites Release configuration binaries, but doesn't generate and overwrite crinkler report.
|
||||
### Debug
|
||||
Deprecated, might work but currently not really useful and not updated. Editor covers everything in this configuration.
|
||||
### Editor
|
||||
Creates a bigger exe similar to Debug, but with keyboard controls for pausing and seeking around temporally. Requires a pre-rendered copy of the audio track used (well, not a must but...). Overwrites Debug configuration binaries.
|
||||
|
||||
## Build Flags
|
||||
This section describes the preprocessor definitions available for various features and size optimizations.
|
||||
### OPENGL_DEBUG
|
||||
Checks for shader compilation errors on initialization. Also enables to use the CHECK_ERRORS macro on debug.h. You want to leave this disabled in the final release obviously.
|
||||
### FULLSCREEN
|
||||
Changes the display mode to fullscreen instead of a static window. You want to use this in your final release but probably not while developing and debugging. Disabling this saves around 20 bytes.
|
||||
### DESPERATE
|
||||
Enabling this disables message handling, which isn't strictly necessary but makes running the intro much more reliable and compatible. Enabling this saves around 20 bytes.
|
||||
### BREAK_COMPATIBILITY
|
||||
Enabling this uses a pixel format descriptor that uses parameters that are mostly zeroes. This improves the compressability at the cost of violating the API specifications. You might be able to run your intro currently, but might break in the future or on other peoples' configurations right now. Enabling this saves around 5 bytes.
|
||||
### POST_PASS
|
||||
Enables using the OpenGL backbuffer as a framebuffer and texture to perform simple post processing or other functionality.
|
||||
### USE_MIPMAPS
|
||||
Generates mipmaps for the backbuffer texture.
|
||||
### USE_AUDIO
|
||||
Disabling this doesn't include or init 4klang at all.
|
||||
### NO_UNIFORMS
|
||||
Enables using the gl_Color vertex attribute to pass variables to the shader instead of the usual uniform uploading. This saves one function import and around 10 bytes.
|
||||
|
||||
## Contributing
|
||||
Fork your own and submit a pull request, ideas always welcome. Please don't add any additional dependencies unless it's a single-file-header library or something similar, and non-GPL licensed. Inclusion of CMake or other such tools is also not considered.
|
||||
|
||||
## TODO
|
||||
* Automatically render and dump audio in Editor mode if no .wav already exists.
|
||||
* Support for more softsynths?
|
||||
* Editor mode overlays (non-interactive seekbar, etc.).
|
||||
* More functionality to add further render passes easily.
|
||||
* Continue Structuring the code better so not everything is inlined in the main loop.
|
||||
* Write out a version in assembly to use in the Release configuration.
|
||||
|
||||
## Acknowledgements
|
||||
* Rimina for initial motivation and OpenGL debug functions.
|
||||
* LJ for giving suggestions for some nice hacks.
|
||||
* Fizzer for help with implementing some of said hacks.
|
||||
* iq for the original 4k intro framework.
|
||||
* Mentor and Blueberry for Crinkler.
|
||||
* LLB for Shader Minifier.
|
||||
* Numerous people for various resources and information: auld, ps, cce, msqrt, ferris, yzi, las to name a few.
|
||||
|
||||
55
crinkler-license.txt
Normal file
55
crinkler-license.txt
Normal file
@ -0,0 +1,55 @@
|
||||
|
||||
Crinkler - compressing linker for Windows
|
||||
Copyright 2005-2019 Aske Simon Christensen and Rune L. H. Stubbe.
|
||||
|
||||
|
||||
DISTRIBUTION
|
||||
|
||||
Crinkler is freeware. You may distribute it freely, as long as the
|
||||
Crinkler executable and all accompanying documentation files are kept
|
||||
together and intact. You may not distribute modified versions or any
|
||||
kind of derived work based on Crinkler or its documentation.
|
||||
|
||||
USE AND AUTHOR RIGHTS
|
||||
|
||||
The output of Crinkler (executable files, HTML compression reports
|
||||
and other textual output) is to be considered the original works of
|
||||
you as a user of Crinkler. You may use Crinkler and its output for
|
||||
any legal purpose with the following restrictions:
|
||||
- You may not use Crinkler or its output for any commercial purpose.
|
||||
- You may not use Crinkler or its output in any setting where security
|
||||
is essential.
|
||||
- You may not use Crinkler or its output for any safety critical
|
||||
purpose.
|
||||
- You may not use Crinkler or its output in the production of any
|
||||
virus, worm, trojan, spyware or other malicious software.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
Crinkler comes with no warranties of any kind. Crinkler is
|
||||
experimental software that relies on many undocumented features of the
|
||||
Windows PE loader. It has been created with the sole purpose of
|
||||
producing tiny executable files that may or may not work as intended
|
||||
on current and/or future versions of Windows.
|
||||
|
||||
LICENSE OF DISTORM
|
||||
|
||||
Crinkler uses the BSD-licensed diStorm disassembler library for
|
||||
producing disassembly output of the compressed code. The license for
|
||||
diStorm requires that the license below is included with derivative
|
||||
works. The license below applies only to diStorm and not to Crinkler
|
||||
as a whole.
|
||||
|
||||
|
||||
:[diStorm64}:
|
||||
The ultimate disassembler library.
|
||||
Copyright (c) 2003,2004,2005,2006,2007,2008, Gil Dabah
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the diStorm nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
1229
crinkler-manual.txt
Normal file
1229
crinkler-manual.txt
Normal file
File diff suppressed because it is too large
Load Diff
616
leviathan.vcxproj
Normal file
616
leviathan.vcxproj
Normal file
@ -0,0 +1,616 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Editor|Win32">
|
||||
<Configuration>Editor</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Heavy Release|Win32">
|
||||
<Configuration>Heavy Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Snapshot|Win32">
|
||||
<Configuration>Snapshot</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}</ProjectGuid>
|
||||
<ProjectName>Leviathan 2.0</ProjectName>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings" />
|
||||
<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" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
|
||||
</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" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>out\</OutDir>
|
||||
<IntDir>bin\debug\</IntDir>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<ExecutablePath>$(SolutionDir);$(ExecutablePath)</ExecutablePath>
|
||||
<TargetName>leviathan-debug</TargetName>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'">
|
||||
<OutDir>out\</OutDir>
|
||||
<IntDir>bin\debug\</IntDir>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<ExecutablePath>$(SolutionDir);$(ExecutablePath)</ExecutablePath>
|
||||
<TargetName>leviathan-debug</TargetName>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>out\</OutDir>
|
||||
<IntDir>bin\release\</IntDir>
|
||||
<LinkIncremental>
|
||||
</LinkIncremental>
|
||||
<GenerateManifest>
|
||||
</GenerateManifest>
|
||||
<ExecutablePath>$(SolutionDir);$(ExecutablePath)</ExecutablePath>
|
||||
<TargetName>leviathan-release</TargetName>
|
||||
<IgnoreImportLibrary>true</IgnoreImportLibrary>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">
|
||||
<OutDir>out\</OutDir>
|
||||
<IntDir>bin\release\</IntDir>
|
||||
<LinkIncremental>
|
||||
</LinkIncremental>
|
||||
<GenerateManifest>
|
||||
</GenerateManifest>
|
||||
<ExecutablePath>$(SolutionDir);$(ExecutablePath)</ExecutablePath>
|
||||
<TargetName>leviathan-release</TargetName>
|
||||
<PreBuildEventUseInBuild>false</PreBuildEventUseInBuild>
|
||||
<IgnoreImportLibrary>true</IgnoreImportLibrary>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">
|
||||
<OutDir>out\</OutDir>
|
||||
<IntDir>bin\release\</IntDir>
|
||||
<LinkIncremental>
|
||||
</LinkIncremental>
|
||||
<GenerateManifest>
|
||||
</GenerateManifest>
|
||||
<ExecutablePath>$(SolutionDir);$(ExecutablePath)</ExecutablePath>
|
||||
<TargetName>leviathan-snapshot</TargetName>
|
||||
<IgnoreImportLibrary>true</IgnoreImportLibrary>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<TargetEnvironment>Win32</TargetEnvironment>
|
||||
<TypeLibraryName>.\bin/Debug/Leviathan.tlb</TypeLibraryName>
|
||||
<HeaderFileName />
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<AdditionalIncludeDirectories>../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_DEBUG;WINDOWS;DEBUG;SIMD;A32BITS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>bin\debug\</AssemblerListingLocation>
|
||||
<ObjectFileName>bin\debug\</ObjectFileName>
|
||||
<ProgramDataBaseFileName>bin\debug\</ProgramDataBaseFileName>
|
||||
<BrowseInformation>false</BrowseInformation>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<LanguageStandard>stdcpp14</LanguageStandard>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>winmm.lib;opengl32.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>out/leviathan-debug.exe</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>bin\debug\$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention />
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<EntryPointSymbol>entrypoint</EntryPointSymbol>
|
||||
<AssemblyDebug>true</AssemblyDebug>
|
||||
<ProfileGuidedDatabase>bin\debug\$(TargetName).pgd</ProfileGuidedDatabase>
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>$(OutDir)Leviathan.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
<ProjectReference>
|
||||
<LinkLibraryDependencies>false</LinkLibraryDependencies>
|
||||
</ProjectReference>
|
||||
<PreBuildEvent>
|
||||
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag
|
||||
shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
|
||||
<Message>Minify user-supplied shader files.</Message>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'">
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<TargetEnvironment>Win32</TargetEnvironment>
|
||||
<TypeLibraryName>.\bin/Debug/Leviathan.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<AdditionalIncludeDirectories>../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>EDITOR_CONTROLS;_DEBUG;WINDOWS;DEBUG;SIMD;A32BITS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>bin\debug\</AssemblerListingLocation>
|
||||
<ObjectFileName>bin\debug\</ObjectFileName>
|
||||
<ProgramDataBaseFileName>bin\debug\</ProgramDataBaseFileName>
|
||||
<BrowseInformation>false</BrowseInformation>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<OmitDefaultLibName>false</OmitDefaultLibName>
|
||||
<LanguageStandard>
|
||||
</LanguageStandard>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>winmm.lib;opengl32.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>out/leviathan-debug.exe</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>bin\debug\$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<EntryPointSymbol>
|
||||
</EntryPointSymbol>
|
||||
<AssemblyDebug>true</AssemblyDebug>
|
||||
<ProfileGuidedDatabase>bin\debug\$(TargetName).pgd</ProfileGuidedDatabase>
|
||||
<IgnoreAllDefaultLibraries>
|
||||
</IgnoreAllDefaultLibraries>
|
||||
<ManifestFile />
|
||||
<ImageHasSafeExceptionHandlers>
|
||||
</ImageHasSafeExceptionHandlers>
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>$(OutDir)Leviathan.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
<ProjectReference>
|
||||
<LinkLibraryDependencies>false</LinkLibraryDependencies>
|
||||
</ProjectReference>
|
||||
<PreBuildEvent>
|
||||
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag
|
||||
shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
|
||||
<Message>Minify user-supplied shader files.</Message>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<TargetEnvironment>Win32</TargetEnvironment>
|
||||
<TypeLibraryName>.\bin/Release/Leviathan.tlb</TypeLibraryName>
|
||||
<HeaderFileName />
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<AdditionalIncludeDirectories>../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WINDOWS;A32BITS;SIMD;NDEBUG;_CRT_SECURE_NO_WARNINGS;WINDOWS_IGNORE_PACKING_MISMATCH;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>false</StringPooling>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<StructMemberAlignment>1Byte</StructMemberAlignment>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<PrecompiledHeaderOutputFile>bin\Release\Leviathan.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
|
||||
<AssemblerListingLocation>bin\release\</AssemblerListingLocation>
|
||||
<ObjectFileName>bin\release\</ObjectFileName>
|
||||
<ProgramDataBaseFileName>bin\release\</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<SmallerTypeCheck>false</SmallerTypeCheck>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<LanguageStandard>
|
||||
</LanguageStandard>
|
||||
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||
<AdditionalOptions>/GR- /EHa- %(AdditionalOptions)</AdditionalOptions>
|
||||
<ForceConformanceInForLoopScope />
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalOptions>/CRINKLER /RANGE:opengl32 /HASHTRIES:300 /COMPMODE:SLOW /ORDERTRIES:9000 /REPORT:out.html /PROGRESSGUI /HASHSIZE:1000 /UNSAFEIMPORT /UNALIGNCODE /SATURATE /NOINITIALIZERS /TRANSFORM:CALLS /TRUNCATEFLOATS:32 %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>opengl32.lib;winmm.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>out\leviathan-release.exe</OutputFile>
|
||||
<SuppressStartupBanner>
|
||||
</SuppressStartupBanner>
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EntryPointSymbol>entrypoint</EntryPointSymbol>
|
||||
<BaseAddress />
|
||||
<RandomizedBaseAddress>
|
||||
</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention />
|
||||
<TargetMachine>
|
||||
</TargetMachine>
|
||||
<GenerateDebugInformation>
|
||||
</GenerateDebugInformation>
|
||||
<AssemblyDebug>
|
||||
</AssemblyDebug>
|
||||
<ProgramDatabaseFile>bin\release\$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<ProfileGuidedDatabase>
|
||||
</ProfileGuidedDatabase>
|
||||
<ManifestFile />
|
||||
<ImageHasSafeExceptionHandlers />
|
||||
<EnableUAC />
|
||||
<LinkErrorReporting />
|
||||
<TypeLibraryResourceID />
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>.\bin/Release/Leviathan.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
<ProjectReference>
|
||||
<LinkLibraryDependencies>false</LinkLibraryDependencies>
|
||||
</ProjectReference>
|
||||
<PreBuildEvent>
|
||||
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag
|
||||
shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
|
||||
<Message>Minify user-supplied shader files.</Message>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<TargetEnvironment>Win32</TargetEnvironment>
|
||||
<TypeLibraryName>.\bin/Release/Leviathan.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<AdditionalOptions>/GR- /EHa- %(AdditionalOptions)</AdditionalOptions>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<AdditionalIncludeDirectories>../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WINDOWS;A32BITS;SIMD;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>false</StringPooling>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<StructMemberAlignment>1Byte</StructMemberAlignment>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<PrecompiledHeaderOutputFile>bin\Release\Leviathan.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
|
||||
<AssemblerListingLocation>bin\release\</AssemblerListingLocation>
|
||||
<ObjectFileName>bin\release\</ObjectFileName>
|
||||
<ProgramDataBaseFileName>bin\release\</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<SmallerTypeCheck>false</SmallerTypeCheck>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<LanguageStandard>
|
||||
</LanguageStandard>
|
||||
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||
<ForceConformanceInForLoopScope />
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalOptions>/CRINKLER /RANGE:opengl32 /HASHTRIES:1000 /COMPMODE:VERYSLOW /ORDERTRIES:30000 /REPORT:out.html /PROGRESSGUI /HASHSIZE:1000 /UNSAFEIMPORT /UNALIGNCODE /SATURATE /NOINITIALIZERS /TRANSFORM:CALLS %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>opengl32.lib;winmm.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>out\leviathan-release.exe</OutputFile>
|
||||
<SuppressStartupBanner>
|
||||
</SuppressStartupBanner>
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EntryPointSymbol>entrypoint</EntryPointSymbol>
|
||||
<BaseAddress>
|
||||
</BaseAddress>
|
||||
<RandomizedBaseAddress>
|
||||
</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>
|
||||
</TargetMachine>
|
||||
<GenerateDebugInformation>
|
||||
</GenerateDebugInformation>
|
||||
<AssemblyDebug>
|
||||
</AssemblyDebug>
|
||||
<ProgramDatabaseFile>bin\release\$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<ProfileGuidedDatabase>
|
||||
</ProfileGuidedDatabase>
|
||||
<ManifestFile />
|
||||
<ImageHasSafeExceptionHandlers />
|
||||
<EnableUAC />
|
||||
<LinkErrorReporting />
|
||||
<TypeLibraryResourceID />
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>.\bin/Release/Leviathan.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
<ProjectReference>
|
||||
<LinkLibraryDependencies>false</LinkLibraryDependencies>
|
||||
</ProjectReference>
|
||||
<PreBuildEvent>
|
||||
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag</Command>
|
||||
<Message>Minify user-supplied shader files.</Message>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<TargetEnvironment>Win32</TargetEnvironment>
|
||||
<TypeLibraryName>.\bin/Release/Leviathan.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<AdditionalIncludeDirectories>../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WINDOWS;A32BITS;SIMD;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>false</StringPooling>
|
||||
<ExceptionHandling>false</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<StructMemberAlignment>1Byte</StructMemberAlignment>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<PrecompiledHeaderOutputFile>bin\Release\Leviathan.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
|
||||
<AssemblerListingLocation>bin\release\</AssemblerListingLocation>
|
||||
<ObjectFileName>bin\release\</ObjectFileName>
|
||||
<ProgramDataBaseFileName>bin\release\</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<CallingConvention>StdCall</CallingConvention>
|
||||
<CompileAs>CompileAsCpp</CompileAs>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
<SmallerTypeCheck>false</SmallerTypeCheck>
|
||||
<BasicRuntimeChecks>
|
||||
</BasicRuntimeChecks>
|
||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
||||
<OmitDefaultLibName>true</OmitDefaultLibName>
|
||||
<DisableLanguageExtensions>false</DisableLanguageExtensions>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<LanguageStandard>
|
||||
</LanguageStandard>
|
||||
<SDLCheck>
|
||||
</SDLCheck>
|
||||
<CompileAsWinRT>false</CompileAsWinRT>
|
||||
<AdditionalOptions>/GR- /EHa- %(AdditionalOptions)</AdditionalOptions>
|
||||
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||
<ForceConformanceInForLoopScope />
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0409</Culture>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalOptions>/CRINKLER /RANGE:opengl32 /HASHTRIES:100 /COMPMODE:INSTANT /ORDERTRIES:2000 /PROGRESSGUI /HASHSIZE:100 /UNSAFEIMPORT /UNALIGNCODE /SATURATE /NOINITIALIZERS /TRANSFORM:CALLS %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>opengl32.lib;winmm.lib;src/4klang/4klang.obj;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>out\leviathan-snapshot.exe</OutputFile>
|
||||
<SuppressStartupBanner>
|
||||
</SuppressStartupBanner>
|
||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EntryPointSymbol>entrypoint</EntryPointSymbol>
|
||||
<BaseAddress>
|
||||
</BaseAddress>
|
||||
<RandomizedBaseAddress>
|
||||
</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>
|
||||
</TargetMachine>
|
||||
<GenerateDebugInformation>
|
||||
</GenerateDebugInformation>
|
||||
<AssemblyDebug>
|
||||
</AssemblyDebug>
|
||||
<ProgramDatabaseFile>bin\release\$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<ProfileGuidedDatabase>
|
||||
</ProfileGuidedDatabase>
|
||||
<LinkTimeCodeGeneration>
|
||||
</LinkTimeCodeGeneration>
|
||||
<EnableUAC />
|
||||
<LinkErrorReporting />
|
||||
<ManifestFile />
|
||||
<ImageHasSafeExceptionHandlers />
|
||||
<TypeLibraryResourceID />
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>.\bin/Release/Leviathan.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
<ProjectReference>
|
||||
<LinkLibraryDependencies>false</LinkLibraryDependencies>
|
||||
</ProjectReference>
|
||||
<PreBuildEvent>
|
||||
<Command>shader_minifier.exe -v -o src\shaders\fragment.inl src\shaders\fragment.frag
|
||||
shader_minifier.exe -v -o src\shaders\post.inl src\shaders\post.frag</Command>
|
||||
<Message>Minify user-supplied shader files.</Message>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\editor.h">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\4klang\4klang.h" />
|
||||
<ClInclude Include="src\debug.h">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">false</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">false</ExcludedFromBuild>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\definitions.h" />
|
||||
<ClInclude Include="src\fp.h" />
|
||||
<ClInclude Include="src\glext.h" />
|
||||
<ClInclude Include="src\song.h">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'">false</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\editor.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\main.cpp" />
|
||||
<ClCompile Include="src\song.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'">false</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="src\shaders\fragment.frag">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">true</ExcludedFromBuild>
|
||||
</None>
|
||||
<None Include="src\shaders\fragment.inl" />
|
||||
<None Include="src\shaders\post.frag">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Editor|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Snapshot|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Heavy Release|Win32'">true</ExcludedFromBuild>
|
||||
</None>
|
||||
<None Include="src\shaders\post.inl" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets" />
|
||||
</Project>
|
||||
43
leviathan.vcxproj.filters
Normal file
43
leviathan.vcxproj.filters
Normal file
@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\main.cpp" />
|
||||
<ClCompile Include="src\song.cpp" />
|
||||
<ClCompile Include="src\editor.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\4klang\4klang.h" />
|
||||
<ClInclude Include="src\debug.h" />
|
||||
<ClInclude Include="src\definitions.h" />
|
||||
<ClInclude Include="src\glext.h">
|
||||
<Filter>ext</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\fp.h">
|
||||
<Filter>ext</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\song.h" />
|
||||
<ClInclude Include="src\editor.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="src\shaders\post.inl">
|
||||
<Filter>shaders</Filter>
|
||||
</None>
|
||||
<None Include="src\shaders\fragment.inl">
|
||||
<Filter>shaders</Filter>
|
||||
</None>
|
||||
<None Include="src\shaders\fragment.frag">
|
||||
<Filter>shaders</Filter>
|
||||
</None>
|
||||
<None Include="src\shaders\post.frag">
|
||||
<Filter>shaders</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="ext">
|
||||
<UniqueIdentifier>{3ade9a72-96b0-4936-93c4-4926808a1ab2}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="shaders">
|
||||
<UniqueIdentifier>{84f225d6-acf8-4151-aab3-e246410cdeba}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
BIN
out/audio.wav
Normal file
BIN
out/audio.wav
Normal file
Binary file not shown.
5
out/editor.txt
Normal file
5
out/editor.txt
Normal file
@ -0,0 +1,5 @@
|
||||
place your pre-rendered audio for the editor here
|
||||
it is by default loaded from file 'audio.wav'
|
||||
|
||||
you can download an example from
|
||||
http://noby.untergrund.net/misc/audio.wav
|
||||
BIN
out/leviathan-debug.exe
Normal file
BIN
out/leviathan-debug.exe
Normal file
Binary file not shown.
BIN
out/leviathan-release.exe
Normal file
BIN
out/leviathan-release.exe
Normal file
Binary file not shown.
34
pbr-leviathan-2.0.sln
Normal file
34
pbr-leviathan-2.0.sln
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.28307.168
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Leviathan 2.0", "leviathan.vcxproj", "{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Editor|Win32 = Editor|Win32
|
||||
Heavy Release|Win32 = Heavy Release|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
Snapshot|Win32 = Snapshot|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Editor|Win32.ActiveCfg = Editor|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Editor|Win32.Build.0 = Editor|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Heavy Release|Win32.ActiveCfg = Heavy Release|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Heavy Release|Win32.Build.0 = Heavy Release|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Release|Win32.Build.0 = Release|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Snapshot|Win32.ActiveCfg = Snapshot|Win32
|
||||
{59C1D4F3-AE93-4A0A-B4FE-60841CA865E5}.Snapshot|Win32.Build.0 = Snapshot|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BFFCE7AC-AF44-47A1-9B82-AB82AB604DD0}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
BIN
shader_minifier.exe
Normal file
BIN
shader_minifier.exe
Normal file
Binary file not shown.
19
src/4klang/4klang.h
Normal file
19
src/4klang/4klang.h
Normal file
@ -0,0 +1,19 @@
|
||||
// some useful song defines for 4klang
|
||||
#define SAMPLE_RATE 44100
|
||||
#define BPM 120.000000
|
||||
#define MAX_INSTRUMENTS 5
|
||||
#define MAX_PATTERNS 136
|
||||
#define PATTERN_SIZE_SHIFT 3
|
||||
#define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
|
||||
#define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
|
||||
#define SAMPLES_PER_TICK 5512
|
||||
#define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
|
||||
#define POLYPHONY 2
|
||||
#define INTEGER_16BIT
|
||||
#define SAMPLE_TYPE short
|
||||
|
||||
#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
|
||||
48
src/debug.h
Normal file
48
src/debug.h
Normal file
@ -0,0 +1,48 @@
|
||||
// This header contains some useful functions for debugging OpenGL.
|
||||
// Remember to disable them when building your final releases.
|
||||
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
#include "glext.h"
|
||||
|
||||
#define STRINGIFY2(x) #x // Thanks sooda!
|
||||
#define STRINGIFY(x) STRINGIFY2(x)
|
||||
#define CHECK_ERRORS() assertGlError(STRINGIFY(__LINE__))
|
||||
|
||||
static GLchar* getErrorString(GLenum errorCode)
|
||||
{
|
||||
if (errorCode == GL_NO_ERROR) {
|
||||
return (GLchar*) "No error";
|
||||
}
|
||||
else if (errorCode == GL_INVALID_VALUE) {
|
||||
return (GLchar*) "Invalid value";
|
||||
}
|
||||
else if (errorCode == GL_INVALID_ENUM) {
|
||||
return (GLchar*) "Invalid enum";
|
||||
}
|
||||
else if (errorCode == GL_INVALID_OPERATION) {
|
||||
return (GLchar*) "Invalid operation";
|
||||
}
|
||||
else if (errorCode == GL_STACK_OVERFLOW) {
|
||||
return (GLchar*) "Stack overflow";
|
||||
}
|
||||
else if (errorCode == GL_STACK_UNDERFLOW) {
|
||||
return (GLchar*) "Stack underflow";
|
||||
}
|
||||
else if (errorCode == GL_OUT_OF_MEMORY) {
|
||||
return (GLchar*) "Out of memory";
|
||||
}
|
||||
return (GLchar*) "Unknown";
|
||||
}
|
||||
|
||||
static void assertGlError(const char* error_message)
|
||||
{
|
||||
const GLenum ErrorValue = glGetError();
|
||||
if (ErrorValue == GL_NO_ERROR) return;
|
||||
|
||||
const char* APPEND_DETAIL_STRING = ": %s\n";
|
||||
const size_t APPEND_LENGTH = strlen(APPEND_DETAIL_STRING) + 1;
|
||||
const size_t message_length = strlen(error_message);
|
||||
MessageBox(NULL, error_message, getErrorString(ErrorValue), 0x00000000L);
|
||||
ExitProcess(0);
|
||||
}
|
||||
94
src/definitions.h
Normal file
94
src/definitions.h
Normal file
@ -0,0 +1,94 @@
|
||||
// This header contains necessary structures for setting up correct screen modes,
|
||||
// pixel formats, audio formats, and so on.
|
||||
|
||||
// minify windows.h
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_EXTRA_LEAN
|
||||
#define VC_LEANMEAN
|
||||
#define VC_EXTRALEAN
|
||||
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
|
||||
// global resolution
|
||||
#define XRES 1920
|
||||
#define YRES 1080
|
||||
|
||||
// declare this symbol if your code uses floating point types
|
||||
// extern "C" int _fltused;
|
||||
|
||||
#pragma data_seg(".pixelfmt")
|
||||
static const PIXELFORMATDESCRIPTOR pfd = {
|
||||
#if BREAK_COMPATIBILITY
|
||||
#if POST_PASS
|
||||
0, 0, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,
|
||||
0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0
|
||||
#else
|
||||
0, 0, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0
|
||||
#endif
|
||||
#else
|
||||
sizeof(pfd), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,
|
||||
32, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 32, 0, 0, PFD_MAIN_PLANE, 0, 0, 0, 0
|
||||
#endif
|
||||
};
|
||||
|
||||
#pragma data_seg(".screensettings")
|
||||
static DEVMODE screenSettings = {
|
||||
{0}, 0, 0, sizeof(screenSettings), 0, DM_PELSWIDTH|DM_PELSHEIGHT,
|
||||
{0}, 0, 0, 0, 0, 0, {0}, 0, 0, XRES, YRES, 0, 0,
|
||||
#if(WINVER >= 0x0400)
|
||||
0, 0, 0, 0, 0, 0,
|
||||
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
|
||||
0, 0
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
#if USE_AUDIO
|
||||
#include <mmsystem.h>
|
||||
#include <mmreg.h>
|
||||
|
||||
// this file is auto generated by 4klang
|
||||
#include "4klang/4klang.h"
|
||||
|
||||
#pragma data_seg(".4klangout")
|
||||
static SAMPLE_TYPE lpSoundBuffer[MAX_SAMPLES * 2];
|
||||
static HWAVEOUT hWaveOut;
|
||||
|
||||
#pragma data_seg(".wavefmt")
|
||||
static 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")
|
||||
static WAVEHDR WaveHDR =
|
||||
{
|
||||
(LPSTR)lpSoundBuffer, MAX_SAMPLES * sizeof(SAMPLE_TYPE) * 2, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
static MMTIME MMTime =
|
||||
{
|
||||
TIME_SAMPLES, 0
|
||||
};
|
||||
#endif
|
||||
|
||||
// currently unused definitions
|
||||
#ifdef EDITOR_CONTROLS
|
||||
#define FAIL_KILL false
|
||||
#define PID_QUALIFIER
|
||||
#else
|
||||
#define FAIL_KILL true
|
||||
#define PID_QUALIFIER const
|
||||
#endif
|
||||
185
src/editor.cpp
Normal file
185
src/editor.cpp
Normal file
@ -0,0 +1,185 @@
|
||||
#include "editor.h"
|
||||
#include "song.h"
|
||||
|
||||
#include "stdio.h"
|
||||
#include "windows.h"
|
||||
#include "GL/gl.h"
|
||||
#include "glext.h"
|
||||
|
||||
using namespace Leviathan;
|
||||
|
||||
#define USE_MESSAGEBOX 0
|
||||
|
||||
Editor::Editor() : lastFrameStart(0), lastFrameStop(0), trackPosition(0.0), trackEnd(0.0), state(Playing)
|
||||
{
|
||||
printf("Editor opened...\n");
|
||||
}
|
||||
|
||||
void Editor::beginFrame(const unsigned long time)
|
||||
{
|
||||
lastFrameStart = time;
|
||||
}
|
||||
|
||||
void Editor::endFrame(const unsigned long time)
|
||||
{
|
||||
lastFrameStop = time;
|
||||
}
|
||||
|
||||
void Editor::printFrameStatistics()
|
||||
{
|
||||
const int frameTime = lastFrameStop - lastFrameStart;
|
||||
|
||||
// calculate average fps over 'windowSize' of frames
|
||||
float fps = 0.0f;
|
||||
for (int i = 0; i < windowSize - 1; ++i)
|
||||
{
|
||||
timeHistory[i] = timeHistory[i + 1];
|
||||
fps += 1.0f / static_cast<float>(timeHistory[i]);
|
||||
}
|
||||
timeHistory[windowSize - 1] = frameTime;
|
||||
fps += 1.0f / static_cast<float>(frameTime);
|
||||
fps *= 1000.0f / static_cast<float>(windowSize);
|
||||
|
||||
printf("%s: %0.2i:%0.2i (%i%%), frame duration: %i ms (running fps average: %2.2f) \r",
|
||||
state == Playing ? "Playing" : " Paused",
|
||||
// assuming y'all won't be making intros more than an hour long
|
||||
int(trackPosition/60.0), int(trackPosition) % 60, int(100.0f*trackPosition/trackEnd),
|
||||
frameTime, fps);
|
||||
}
|
||||
|
||||
double Editor::handleEvents(Leviathan::Song* track, double position)
|
||||
{
|
||||
if (GetAsyncKeyState(VK_MENU))
|
||||
{
|
||||
double seek = 0.0;
|
||||
if (GetAsyncKeyState(VK_DOWN))
|
||||
{
|
||||
state = Paused;
|
||||
track->pause();
|
||||
}
|
||||
if (GetAsyncKeyState(VK_UP))
|
||||
{
|
||||
state = Playing;
|
||||
track->play();
|
||||
}
|
||||
if (GetAsyncKeyState(VK_RIGHT) && !GetAsyncKeyState(VK_SHIFT)) seek += 1.0;
|
||||
if (GetAsyncKeyState(VK_LEFT) && !GetAsyncKeyState(VK_SHIFT)) seek -= 1.0;
|
||||
if (GetAsyncKeyState(VK_RIGHT) && GetAsyncKeyState(VK_SHIFT)) seek += 0.1;
|
||||
if (GetAsyncKeyState(VK_LEFT) && GetAsyncKeyState(VK_SHIFT)) seek -= 0.1;
|
||||
if (position + seek != position)
|
||||
{
|
||||
position += seek;
|
||||
track->seek(position);
|
||||
}
|
||||
}
|
||||
|
||||
if (GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState('S'))
|
||||
shaderUpdatePending = true;
|
||||
|
||||
trackPosition = position;
|
||||
trackEnd = track->getLength();
|
||||
|
||||
return position;
|
||||
}
|
||||
|
||||
void Editor::updateShaders(int* mainShaderPID, int* postShaderPID, bool force_update)
|
||||
{
|
||||
if (shaderUpdatePending || force_update)
|
||||
{
|
||||
// make sure the file has finished writing to disk
|
||||
if (timeGetTime() - previousUpdateTime > 200)
|
||||
{
|
||||
// only way i can think of to clear the line without "status line" residue
|
||||
printf("Refreshing shaders... \n");
|
||||
|
||||
Sleep(100);
|
||||
int newPID = reloadShaderSource("../src/shaders/fragment.frag");
|
||||
if (newPID > 0)
|
||||
*mainShaderPID = newPID;
|
||||
|
||||
newPID = reloadShaderSource("../src/shaders/post.frag");
|
||||
if (newPID > 0)
|
||||
*postShaderPID = newPID;
|
||||
}
|
||||
|
||||
previousUpdateTime = timeGetTime();
|
||||
shaderUpdatePending = false;
|
||||
}
|
||||
}
|
||||
|
||||
int Editor::reloadShaderSource(const char* filename)
|
||||
{
|
||||
long inputSize = 0;
|
||||
// we're of course opening a text file, but should be opened in binary ('b')
|
||||
// longer shaders are known to cause problems by producing garbage input when read
|
||||
FILE* file = fopen(filename, "rb");
|
||||
|
||||
if (file)
|
||||
{
|
||||
fseek(file, 0, SEEK_END);
|
||||
inputSize = ftell(file);
|
||||
rewind(file);
|
||||
|
||||
char* shaderString = static_cast<char*>(calloc(inputSize + 1, sizeof(char)));
|
||||
fread(shaderString, sizeof(char), inputSize, file);
|
||||
fclose(file);
|
||||
|
||||
// just to be sure...
|
||||
shaderString[inputSize] = '\0';
|
||||
|
||||
if (!compileAndDebugShader(shaderString, filename, false))
|
||||
{
|
||||
free(shaderString);
|
||||
// return an invalid PID value if compilation fails
|
||||
return -1;
|
||||
}
|
||||
|
||||
int pid = ((PFNGLCREATESHADERPROGRAMVPROC)wglGetProcAddress("glCreateShaderProgramv"))(GL_FRAGMENT_SHADER, 1, &shaderString);
|
||||
free(shaderString);
|
||||
|
||||
printf("Loaded shader from \"%s\"\n", filename);
|
||||
return pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Input shader file at \"%s\" not found, shader not reloaded\n", filename);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
bool Editor::compileAndDebugShader(const char* shader, const char* filename, bool kill_on_failure)
|
||||
{
|
||||
// try and compile the shader
|
||||
int result = 0;
|
||||
const int debugid = ((PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader"))(GL_FRAGMENT_SHADER);
|
||||
((PFNGLSHADERSOURCEPROC)wglGetProcAddress("glShaderSource"))(debugid, 1, &shader, 0);
|
||||
((PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader"))(debugid);
|
||||
|
||||
// get compile result
|
||||
((PFNGLGETSHADERIVPROC)wglGetProcAddress("glGetShaderiv"))(debugid, GL_COMPILE_STATUS, &result);
|
||||
if (result == GL_FALSE)
|
||||
{
|
||||
// display compile log on failure
|
||||
static char errorBuffer[shaderErrorBufferLength];
|
||||
((PFNGLGETSHADERINFOLOGPROC)wglGetProcAddress("glGetShaderInfoLog"))(debugid, shaderErrorBufferLength-1, NULL, static_cast<char*>(errorBuffer));
|
||||
|
||||
#if USE_MESSAGEBOX
|
||||
MessageBox(NULL, errorBuffer, "", 0x00000000L);
|
||||
#endif
|
||||
printf("Compilation errors in %s:\n\n %s\n", filename, errorBuffer);
|
||||
|
||||
if (kill_on_failure)
|
||||
{
|
||||
ExitProcess(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
((PFNGLDELETESHADERPROC)wglGetProcAddress("glDeleteShader"))(debugid);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
46
src/editor.h
Normal file
46
src/editor.h
Normal file
@ -0,0 +1,46 @@
|
||||
namespace Leviathan
|
||||
{
|
||||
// forward declaration
|
||||
class Song;
|
||||
}
|
||||
|
||||
namespace Leviathan
|
||||
{
|
||||
// simpler wrapper class for the editor functionality
|
||||
class Editor
|
||||
{
|
||||
public:
|
||||
Editor();
|
||||
|
||||
void beginFrame(const unsigned long time);
|
||||
|
||||
void endFrame(const unsigned long time);
|
||||
|
||||
void printFrameStatistics();
|
||||
|
||||
double handleEvents(Song* track, double position);
|
||||
|
||||
void updateShaders(int* mainShaderPID, int* postShaderPID, bool force_update = false);
|
||||
|
||||
private:
|
||||
int reloadShaderSource(const char* filename);
|
||||
|
||||
bool compileAndDebugShader(const char* shader, const char* filename, bool kill_on_failure = true);
|
||||
|
||||
enum PlayState {Playing, Paused};
|
||||
PlayState state;
|
||||
|
||||
unsigned long lastFrameStart;
|
||||
unsigned long lastFrameStop;
|
||||
|
||||
static const int shaderErrorBufferLength = 4096;
|
||||
static const int windowSize = 10;
|
||||
int timeHistory[windowSize] = {};
|
||||
|
||||
bool shaderUpdatePending = false;
|
||||
int previousUpdateTime;
|
||||
|
||||
double trackPosition;
|
||||
double trackEnd;
|
||||
};
|
||||
}
|
||||
209
src/fp.h
Normal file
209
src/fp.h
Normal file
@ -0,0 +1,209 @@
|
||||
// This header is by iq of RGBA and includes some float constants.
|
||||
// I've never used these myself but I guess they're useful???
|
||||
|
||||
#ifndef _FPCONSTANTS_H_
|
||||
#define _FPCONSTANTS_H_
|
||||
#define p0d00 0.0000000000f // 0.00f 0x00000000
|
||||
#define p0d01 0.0100097656f // 0.01f 0x3c240000
|
||||
#define p0d02 0.0200195313f // 0.02f 0x3ca40000
|
||||
#define p0d03 0.0300292969f // 0.03f 0x3cf60000
|
||||
#define p0d04 0.0400390625f // 0.04f 0x3d240000
|
||||
#define p0d05 0.0500488281f // 0.05f 0x3d4d0000
|
||||
#define p0d06 0.0600585938f // 0.06f 0x3d760000
|
||||
#define p0d07 0.0698242188f // 0.07f 0x3d8f0000
|
||||
#define p0d08 0.0800781250f // 0.08f 0x3da40000
|
||||
#define p0d09 0.0898437500f // 0.09f 0x3db80000
|
||||
#define p0d10 0.1000976563f // 0.10f 0x3dcd0000
|
||||
#define p0d11 0.1098632813f // 0.11f 0x3de10000
|
||||
#define p0d12 0.1201171875f // 0.12f 0x3df60000
|
||||
#define p0d13 0.1298828125f // 0.13f 0x3e050000
|
||||
#define p0d14 0.1396484375f // 0.14f 0x3e0f0000
|
||||
#define p0d15 0.1503906250f // 0.15f 0x3e1a0000
|
||||
#define p0d16 0.1601562500f // 0.16f 0x3e240000
|
||||
#define p0d17 0.1699218750f // 0.17f 0x3e2e0000
|
||||
#define p0d18 0.1796875000f // 0.18f 0x3e380000
|
||||
#define p0d19 0.1904296875f // 0.19f 0x3e430000
|
||||
#define p0d20 0.2001953125f // 0.20f 0x3e4d0000
|
||||
#define p0d21 0.2099609375f // 0.21f 0x3e570000
|
||||
#define p0d22 0.2197265625f // 0.22f 0x3e610000
|
||||
#define p0d23 0.2304687500f // 0.23f 0x3e6c0000
|
||||
#define p0d24 0.2402343750f // 0.24f 0x3e760000
|
||||
#define p0d25 0.2500000000f // 0.25f 0x3e800000
|
||||
#define p0d26 0.2597656250f // 0.26f 0x3e850000
|
||||
#define p0d27 0.2695312500f // 0.27f 0x3e8a0000
|
||||
#define p0d28 0.2792968750f // 0.28f 0x3e8f0000
|
||||
#define p0d29 0.2890625000f // 0.29f 0x3e940000
|
||||
#define p0d30 0.3007812500f // 0.30f 0x3e9a0000
|
||||
#define p0d31 0.3105468750f // 0.31f 0x3e9f0000
|
||||
#define p0d32 0.3203125000f // 0.32f 0x3ea40000
|
||||
#define p0d33 0.3300781250f // 0.33f 0x3ea90000
|
||||
#define p0d34 0.3398437500f // 0.34f 0x3eae0000
|
||||
#define p0d35 0.3496093750f // 0.35f 0x3eb30000
|
||||
#define p0d36 0.3593750000f // 0.36f 0x3eb80000
|
||||
#define p0d37 0.3691406250f // 0.37f 0x3ebd0000
|
||||
#define p0d38 0.3808593750f // 0.38f 0x3ec30000
|
||||
#define p0d39 0.3906250000f // 0.39f 0x3ec80000
|
||||
#define p0d40 0.4003906250f // 0.40f 0x3ecd0000
|
||||
#define p0d41 0.4101562500f // 0.41f 0x3ed20000
|
||||
#define p0d42 0.4199218750f // 0.42f 0x3ed70000
|
||||
#define p0d43 0.4296875000f // 0.43f 0x3edc0000
|
||||
#define p0d44 0.4394531250f // 0.44f 0x3ee10000
|
||||
#define p0d45 0.4492187500f // 0.45f 0x3ee60000
|
||||
#define p0d46 0.4609375000f // 0.46f 0x3eec0000
|
||||
#define p0d47 0.4707031250f // 0.47f 0x3ef10000
|
||||
#define p0d48 0.4804687500f // 0.48f 0x3ef60000
|
||||
#define p0d49 0.4902343750f // 0.49f 0x3efb0000
|
||||
#define p0d50 0.5000000000f // 0.50f 0x3f000000
|
||||
#define p0d51 0.5117187500f // 0.51f 0x3f030000
|
||||
#define p0d52 0.5195312500f // 0.52f 0x3f050000
|
||||
#define p0d53 0.5312500000f // 0.53f 0x3f080000
|
||||
#define p0d54 0.5390625000f // 0.54f 0x3f0a0000
|
||||
#define p0d55 0.5507812500f // 0.55f 0x3f0d0000
|
||||
#define p0d56 0.5585937500f // 0.56f 0x3f0f0000
|
||||
#define p0d57 0.5703125000f // 0.57f 0x3f120000
|
||||
#define p0d58 0.5781250000f // 0.58f 0x3f140000
|
||||
#define p0d59 0.5898437500f // 0.59f 0x3f170000
|
||||
#define p0d60 0.6015625000f // 0.60f 0x3f1a0000
|
||||
#define p0d61 0.6093750000f // 0.61f 0x3f1c0000
|
||||
#define p0d62 0.6210937500f // 0.62f 0x3f1f0000
|
||||
#define p0d63 0.6289062500f // 0.63f 0x3f210000
|
||||
#define p0d64 0.6406250000f // 0.64f 0x3f240000
|
||||
#define p0d65 0.6484375000f // 0.65f 0x3f260000
|
||||
#define p0d66 0.6601562500f // 0.66f 0x3f290000
|
||||
#define p0d67 0.6718750000f // 0.67f 0x3f2c0000
|
||||
#define p0d68 0.6796875000f // 0.68f 0x3f2e0000
|
||||
#define p0d69 0.6914062500f // 0.69f 0x3f310000
|
||||
#define p0d70 0.6992187500f // 0.70f 0x3f330000
|
||||
#define p0d71 0.7109375000f // 0.71f 0x3f360000
|
||||
#define p0d72 0.7187500000f // 0.72f 0x3f380000
|
||||
#define p0d73 0.7304687500f // 0.73f 0x3f3b0000
|
||||
#define p0d74 0.7382812500f // 0.74f 0x3f3d0000
|
||||
#define p0d75 0.7500000000f // 0.75f 0x3f400000
|
||||
#define p0d76 0.7617187500f // 0.76f 0x3f430000
|
||||
#define p0d77 0.7695312500f // 0.77f 0x3f450000
|
||||
#define p0d78 0.7812500000f // 0.78f 0x3f480000
|
||||
#define p0d79 0.7890625000f // 0.79f 0x3f4a0000
|
||||
#define p0d80 0.8007812500f // 0.80f 0x3f4d0000
|
||||
#define p0d81 0.8085937500f // 0.81f 0x3f4f0000
|
||||
#define p0d82 0.8203125000f // 0.82f 0x3f520000
|
||||
#define p0d83 0.8281250000f // 0.83f 0x3f540000
|
||||
#define p0d84 0.8398437500f // 0.84f 0x3f570000
|
||||
#define p0d85 0.8515625000f // 0.85f 0x3f5a0000
|
||||
#define p0d86 0.8593750000f // 0.86f 0x3f5c0000
|
||||
#define p0d87 0.8710937500f // 0.87f 0x3f5f0000
|
||||
#define p0d88 0.8789062500f // 0.88f 0x3f610000
|
||||
#define p0d89 0.8906250000f // 0.89f 0x3f640000
|
||||
#define p0d90 0.8984375000f // 0.90f 0x3f660000
|
||||
#define p0d91 0.9101562500f // 0.91f 0x3f690000
|
||||
#define p0d92 0.9218750000f // 0.92f 0x3f6c0000
|
||||
#define p0d93 0.9296875000f // 0.93f 0x3f6e0000
|
||||
#define p0d94 0.9414062500f // 0.94f 0x3f710000
|
||||
#define p0d95 0.9492187500f // 0.95f 0x3f730000
|
||||
#define p0d96 0.9609375000f // 0.96f 0x3f760000
|
||||
#define p0d97 0.9687500000f // 0.97f 0x3f780000
|
||||
#define p0d98 0.9804687500f // 0.98f 0x3f7b0000
|
||||
#define p0d99 0.9882812500f // 0.99f 0x3f7d0000
|
||||
#define p1d00 1.0000000000f // 1.00f 0x3f800000
|
||||
#define p1d01 1.0078125000f // 1.01f 0x3f810000
|
||||
#define p1d02 1.0234375000f // 1.02f 0x3f830000
|
||||
#define p1d03 1.0312500000f // 1.03f 0x3f840000
|
||||
#define p1d04 1.0390625000f // 1.04f 0x3f850000
|
||||
#define p1d05 1.0468750000f // 1.05f 0x3f860000
|
||||
#define p1d06 1.0625000000f // 1.06f 0x3f880000
|
||||
#define p1d07 1.0703125000f // 1.07f 0x3f890000
|
||||
#define p1d08 1.0781250000f // 1.08f 0x3f8a0000
|
||||
#define p1d09 1.0937500000f // 1.09f 0x3f8c0000
|
||||
#define p1d10 1.1015625000f // 1.10f 0x3f8d0000
|
||||
#define p1d11 1.1093750000f // 1.11f 0x3f8e0000
|
||||
#define p1d12 1.1171875000f // 1.12f 0x3f8f0000
|
||||
#define p1d13 1.1328125000f // 1.13f 0x3f910000
|
||||
#define p1d14 1.1406250000f // 1.14f 0x3f920000
|
||||
#define p1d15 1.1484375000f // 1.15f 0x3f930000
|
||||
#define p1d16 1.1562500000f // 1.16f 0x3f940000
|
||||
#define p1d17 1.1718750000f // 1.17f 0x3f960000
|
||||
#define p1d18 1.1796875000f // 1.18f 0x3f970000
|
||||
#define p1d19 1.1875000000f // 1.19f 0x3f980000
|
||||
#define p1d20 1.2031250000f // 1.20f 0x3f9a0000
|
||||
#define p1d21 1.2109375000f // 1.21f 0x3f9b0000
|
||||
#define p1d22 1.2187500000f // 1.22f 0x3f9c0000
|
||||
#define p1d23 1.2265625000f // 1.23f 0x3f9d0000
|
||||
#define p1d24 1.2421875000f // 1.24f 0x3f9f0000
|
||||
#define p1d25 1.2500000000f // 1.25f 0x3fa00000
|
||||
#define p1d26 1.2578125000f // 1.26f 0x3fa10000
|
||||
#define p1d27 1.2734375000f // 1.27f 0x3fa30000
|
||||
#define p1d28 1.2812500000f // 1.28f 0x3fa40000
|
||||
#define p1d29 1.2890625000f // 1.29f 0x3fa50000
|
||||
#define p1d30 1.2968750000f // 1.30f 0x3fa60000
|
||||
#define p1d31 1.3125000000f // 1.31f 0x3fa80000
|
||||
#define p1d32 1.3203125000f // 1.32f 0x3fa90000
|
||||
#define p1d33 1.3281250000f // 1.33f 0x3faa0000
|
||||
#define p1d34 1.3437500000f // 1.34f 0x3fac0000
|
||||
#define p1d35 1.3515625000f // 1.35f 0x3fad0000
|
||||
#define p1d36 1.3593750000f // 1.36f 0x3fae0000
|
||||
#define p1d37 1.3671875000f // 1.37f 0x3faf0000
|
||||
#define p1d38 1.3828125000f // 1.38f 0x3fb10000
|
||||
#define p1d39 1.3906250000f // 1.39f 0x3fb20000
|
||||
#define p1d40 1.3984375000f // 1.40f 0x3fb30000
|
||||
#define p1d41 1.4062500000f // 1.41f 0x3fb40000
|
||||
#define p1d42 1.4218750000f // 1.42f 0x3fb60000
|
||||
#define p1d43 1.4296875000f // 1.43f 0x3fb70000
|
||||
#define p1d44 1.4375000000f // 1.44f 0x3fb80000
|
||||
#define p1d45 1.4531250000f // 1.45f 0x3fba0000
|
||||
#define p1d46 1.4609375000f // 1.46f 0x3fbb0000
|
||||
#define p1d47 1.4687500000f // 1.47f 0x3fbc0000
|
||||
#define p1d48 1.4765625000f // 1.48f 0x3fbd0000
|
||||
#define p1d49 1.4921875000f // 1.49f 0x3fbf0000
|
||||
#define p1d50 1.5000000000f // 1.50f 0x3fc00000
|
||||
#define p1d51 1.5078125000f // 1.51f 0x3fc10000
|
||||
#define p1d52 1.5234375000f // 1.52f 0x3fc30000
|
||||
#define p1d53 1.5312500000f // 1.53f 0x3fc40000
|
||||
#define p1d54 1.5390625000f // 1.54f 0x3fc50000
|
||||
#define p1d55 1.5468750000f // 1.55f 0x3fc60000
|
||||
#define p1d56 1.5625000000f // 1.56f 0x3fc80000
|
||||
#define p1d57 1.5703125000f // 1.57f 0x3fc90000
|
||||
#define p1d58 1.5781250000f // 1.58f 0x3fca0000
|
||||
#define p1d59 1.5937500000f // 1.59f 0x3fcc0000
|
||||
#define p1d60 1.6015625000f // 1.60f 0x3fcd0000
|
||||
#define p1d61 1.6093750000f // 1.61f 0x3fce0000
|
||||
#define p1d62 1.6171875000f // 1.62f 0x3fcf0000
|
||||
#define p1d63 1.6328125000f // 1.63f 0x3fd10000
|
||||
#define p1d64 1.6406250000f // 1.64f 0x3fd20000
|
||||
#define p1d65 1.6484375000f // 1.65f 0x3fd30000
|
||||
#define p1d66 1.6562500000f // 1.66f 0x3fd40000
|
||||
#define p1d67 1.6718750000f // 1.67f 0x3fd60000
|
||||
#define p1d68 1.6796875000f // 1.68f 0x3fd70000
|
||||
#define p1d69 1.6875000000f // 1.69f 0x3fd80000
|
||||
#define p1d70 1.7031250000f // 1.70f 0x3fda0000
|
||||
#define p1d71 1.7109375000f // 1.71f 0x3fdb0000
|
||||
#define p1d72 1.7187500000f // 1.72f 0x3fdc0000
|
||||
#define p1d73 1.7265625000f // 1.73f 0x3fdd0000
|
||||
#define p1d74 1.7421875000f // 1.74f 0x3fdf0000
|
||||
#define p1d75 1.7500000000f // 1.75f 0x3fe00000
|
||||
#define p1d76 1.7578125000f // 1.76f 0x3fe10000
|
||||
#define p1d77 1.7734375000f // 1.77f 0x3fe30000
|
||||
#define p1d78 1.7812500000f // 1.78f 0x3fe40000
|
||||
#define p1d79 1.7890625000f // 1.79f 0x3fe50000
|
||||
#define p1d80 1.7968750000f // 1.80f 0x3fe60000
|
||||
#define p1d81 1.8125000000f // 1.81f 0x3fe80000
|
||||
#define p1d82 1.8203125000f // 1.82f 0x3fe90000
|
||||
#define p1d83 1.8281250000f // 1.83f 0x3fea0000
|
||||
#define p1d84 1.8437500000f // 1.84f 0x3fec0000
|
||||
#define p1d85 1.8515625000f // 1.85f 0x3fed0000
|
||||
#define p1d86 1.8593750000f // 1.86f 0x3fee0000
|
||||
#define p1d87 1.8671875000f // 1.87f 0x3fef0000
|
||||
#define p1d88 1.8828125000f // 1.88f 0x3ff10000
|
||||
#define p1d89 1.8906250000f // 1.89f 0x3ff20000
|
||||
#define p1d90 1.8984375000f // 1.90f 0x3ff30000
|
||||
#define p1d91 1.9062500000f // 1.91f 0x3ff40000
|
||||
#define p1d92 1.9218750000f // 1.92f 0x3ff60000
|
||||
#define p1d93 1.9296875000f // 1.93f 0x3ff70000
|
||||
#define p1d94 1.9375000000f // 1.94f 0x3ff80000
|
||||
#define p1d95 1.9531250000f // 1.95f 0x3ffa0000
|
||||
#define p1d96 1.9609375000f // 1.96f 0x3ffb0000
|
||||
#define p1d97 1.9687500000f // 1.97f 0x3ffc0000
|
||||
#define p1d98 1.9765625000f // 1.98f 0x3ffd0000
|
||||
#define p1d99 1.9921875000f // 1.99f 0x3fff0000
|
||||
#define p2d00 2.0000000000f
|
||||
#define p2d10 2.0937500000f
|
||||
|
||||
#endif
|
||||
12416
src/glext.h
Normal file
12416
src/glext.h
Normal file
File diff suppressed because it is too large
Load Diff
162
src/main.cpp
Normal file
162
src/main.cpp
Normal file
@ -0,0 +1,162 @@
|
||||
// custom build and feature flags
|
||||
#ifdef DEBUG
|
||||
#define OPENGL_DEBUG 1
|
||||
#define FULLSCREEN 0
|
||||
#define DESPERATE 0
|
||||
#define BREAK_COMPATIBILITY 0
|
||||
#else
|
||||
#define OPENGL_DEBUG 0
|
||||
#define FULLSCREEN 1
|
||||
#define DESPERATE 0
|
||||
#define BREAK_COMPATIBILITY 0
|
||||
#endif
|
||||
|
||||
#define POST_PASS 0
|
||||
#define USE_MIPMAPS 1
|
||||
#define USE_AUDIO 1
|
||||
#define NO_UNIFORMS 0
|
||||
|
||||
#include "definitions.h"
|
||||
#if OPENGL_DEBUG
|
||||
#include "debug.h"
|
||||
#endif
|
||||
|
||||
#include "glext.h"
|
||||
#pragma data_seg(".shader")
|
||||
#include "shaders/fragment.inl"
|
||||
#if POST_PASS
|
||||
#pragma data_seg(".shader")
|
||||
#include "shaders/post.inl"
|
||||
#endif
|
||||
|
||||
#pragma data_seg(".pids")
|
||||
// static allocation saves a few bytes
|
||||
static int pidMain;
|
||||
static int pidPost;
|
||||
// static HDC hDC;
|
||||
|
||||
#ifndef EDITOR_CONTROLS
|
||||
#pragma code_seg(".main")
|
||||
void entrypoint(void)
|
||||
#else
|
||||
#include "editor.h"
|
||||
#include "song.h"
|
||||
int __cdecl main(int argc, char* argv[])
|
||||
#endif
|
||||
{
|
||||
// initialize window
|
||||
#if FULLSCREEN
|
||||
ChangeDisplaySettings(&screenSettings, CDS_FULLSCREEN);
|
||||
ShowCursor(0);
|
||||
const HDC hDC = GetDC(CreateWindow((LPCSTR)0xC018, 0, WS_POPUP | WS_VISIBLE | WS_MAXIMIZE, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||
#else
|
||||
#ifdef EDITOR_CONTROLS
|
||||
HWND window = CreateWindow("static", 0, WS_POPUP | WS_VISIBLE, 0, 0, XRES, YRES, 0, 0, 0, 0);
|
||||
HDC hDC = GetDC(window);
|
||||
#else
|
||||
// you can create a pseudo fullscreen window by similarly enabling the WS_MAXIMIZE flag as above
|
||||
// in which case you can replace the resolution parameters with 0s and save a couple bytes
|
||||
// this only works if the resolution is set to the display device's native resolution
|
||||
HDC hDC = GetDC(CreateWindow((LPCSTR)0xC018, 0, WS_POPUP | WS_VISIBLE, 0, 0, XRES, YRES, 0, 0, 0, 0));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// initalize opengl context
|
||||
SetPixelFormat(hDC, ChoosePixelFormat(hDC, &pfd), &pfd);
|
||||
wglMakeCurrent(hDC, wglCreateContext(hDC));
|
||||
|
||||
// create and compile shader programs
|
||||
pidMain = ((PFNGLCREATESHADERPROGRAMVPROC)wglGetProcAddress("glCreateShaderProgramv"))(GL_FRAGMENT_SHADER, 1, &fragment_frag);
|
||||
#if POST_PASS
|
||||
pidPost = ((PFNGLCREATESHADERPROGRAMVPROC)wglGetProcAddress("glCreateShaderProgramv"))(GL_FRAGMENT_SHADER, 1, &post_frag);
|
||||
#endif
|
||||
|
||||
// initialize sound
|
||||
#ifndef EDITOR_CONTROLS
|
||||
#if USE_AUDIO
|
||||
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)_4klang_render, lpSoundBuffer, 0, 0);
|
||||
waveOutOpen(&hWaveOut, WAVE_MAPPER, &WaveFMT, NULL, 0, CALLBACK_NULL);
|
||||
waveOutPrepareHeader(hWaveOut, &WaveHDR, sizeof(WaveHDR));
|
||||
waveOutWrite(hWaveOut, &WaveHDR, sizeof(WaveHDR));
|
||||
#endif
|
||||
#else
|
||||
Leviathan::Editor editor = Leviathan::Editor();
|
||||
editor.updateShaders(&pidMain, &pidPost, true);
|
||||
|
||||
// absolute path always works here
|
||||
// relative path works only when not ran from visual studio directly
|
||||
Leviathan::Song track(L"audio.wav");
|
||||
track.play();
|
||||
double position = 0.0;
|
||||
#endif
|
||||
|
||||
// main loop
|
||||
do
|
||||
{
|
||||
#ifdef EDITOR_CONTROLS
|
||||
editor.beginFrame(timeGetTime());
|
||||
#endif
|
||||
|
||||
#if !(DESPERATE)
|
||||
// do minimal message handling so windows doesn't kill your application
|
||||
// not always strictly necessary but increases compatibility and reliability a lot
|
||||
// normally you'd pass an msg struct as the first argument but it's just an
|
||||
// output parameter and the implementation presumably does a NULL check
|
||||
PeekMessage(0, 0, 0, 0, PM_REMOVE);
|
||||
#endif
|
||||
|
||||
// render with the primary shader
|
||||
((PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram"))(pidMain);
|
||||
#ifndef EDITOR_CONTROLS
|
||||
// if you don't have an audio system figure some other way to pass time to your shader
|
||||
#if USE_AUDIO
|
||||
waveOutGetPosition(hWaveOut, &MMTime, sizeof(MMTIME));
|
||||
// it is possible to upload your vars as vertex color attribute (gl_Color) to save one function import
|
||||
#if NO_UNIFORMS
|
||||
glColor3ui(MMTime.u.sample, 0, 0);
|
||||
#else
|
||||
// remember to divide your shader time variable with the SAMPLE_RATE (44100 with 4klang)
|
||||
((PFNGLUNIFORM1IPROC)wglGetProcAddress("glUniform1i"))(0, MMTime.u.sample);
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
position = track.getTime();
|
||||
((PFNGLUNIFORM1IPROC)wglGetProcAddress("glUniform1i"))(0, (static_cast<int>(position*44100.0)));
|
||||
#endif
|
||||
glRects(-1, -1, 1, 1);
|
||||
|
||||
// render "post process" using the opengl backbuffer
|
||||
#if POST_PASS
|
||||
glBindTexture(GL_TEXTURE_2D, 1);
|
||||
#if USE_MIPMAPS
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, XRES, YRES, 0);
|
||||
((PFNGLGENERATEMIPMAPPROC)wglGetProcAddress("glGenerateMipmap"))(GL_TEXTURE_2D);
|
||||
#else
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, XRES, YRES, 0);
|
||||
#endif
|
||||
((PFNGLACTIVETEXTUREPROC)wglGetProcAddress("glActiveTexture"))(GL_TEXTURE0);
|
||||
((PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram"))(pidPost);
|
||||
((PFNGLUNIFORM1IPROC)wglGetProcAddress("glUniform1i"))(0, 0);
|
||||
glRects(-1, -1, 1, 1);
|
||||
#endif
|
||||
|
||||
SwapBuffers(hDC);
|
||||
|
||||
// handle functionality of the editor
|
||||
#ifdef EDITOR_CONTROLS
|
||||
editor.endFrame(timeGetTime());
|
||||
position = editor.handleEvents(&track, position);
|
||||
editor.printFrameStatistics();
|
||||
editor.updateShaders(&pidMain, &pidPost);
|
||||
#endif
|
||||
|
||||
} while(!GetAsyncKeyState(VK_ESCAPE)
|
||||
#if USE_AUDIO
|
||||
&& MMTime.u.sample < MAX_SAMPLES
|
||||
#endif
|
||||
);
|
||||
|
||||
ExitProcess(0);
|
||||
}
|
||||
440
src/shaders/fragment.frag
Normal file
440
src/shaders/fragment.frag
Normal file
@ -0,0 +1,440 @@
|
||||
/* uses some snippets from:
|
||||
* "Seascape" by Alexander Alekseev aka TDM - 2014
|
||||
* License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
|
||||
* Contact: tdmaav@gmail.com
|
||||
*/
|
||||
|
||||
//precision mediump float;
|
||||
#version 460
|
||||
uniform int m;
|
||||
out vec4 o;
|
||||
float u_time = m/float(44100);
|
||||
//uniform float u_time;
|
||||
const float PI = 22./7.;
|
||||
|
||||
vec3 no(vec3 v) { return normalize(v); }
|
||||
float cl(float a, float b, float c) { return clamp(a,b,c); }
|
||||
|
||||
// Rotate
|
||||
mat2 rot2D(float angle) {
|
||||
float s = sin(angle), c = cos(angle);
|
||||
return mat2(c, -s, s, c);
|
||||
}
|
||||
|
||||
float smax( float a, float b, float k )
|
||||
{
|
||||
float h = max(k-abs(a-b),0.0);
|
||||
return max(a, b) + h*h*0.25/k;
|
||||
}
|
||||
|
||||
float hash(vec2 p, int algo)
|
||||
{
|
||||
if (algo == 1) {
|
||||
float h = dot(p,vec2(127.1,311.7));
|
||||
return fract(sin(h)*43758.5453123);
|
||||
}
|
||||
p = 50. * fract( p*0.3183099);
|
||||
return fract( p.x*p.y*(p.x+p.y) );
|
||||
}
|
||||
|
||||
float noise(vec2 p, float scale, int a)
|
||||
{
|
||||
vec2 i = floor( p ),
|
||||
f = fract( p ),
|
||||
u = f*f*(3.-2.*f);
|
||||
float sc = scale;
|
||||
if (a == 1) sc = 2.;
|
||||
return -scale+sc*mix( mix( hash( i + vec2(0.), a),
|
||||
hash( i + vec2(1.0,0.0), a ), u.x),
|
||||
mix( hash( i + vec2(0.0,1.0), a),
|
||||
hash( i + vec2(1.), a), u.x), u.y);
|
||||
}
|
||||
|
||||
/////////////////
|
||||
// GEOMETRY //
|
||||
/////////////////
|
||||
/*float sdSphere(vec3 p, float r) {
|
||||
return length(p)-r;
|
||||
}*/
|
||||
|
||||
float sdCappedCylinder( vec3 p, float h, float r )
|
||||
{
|
||||
vec2 d = abs(vec2(length(p.xy),p.z)) - vec2(r,h);
|
||||
return min(max(d.x,d.y),0.0) + length(max(d,0.0));
|
||||
}
|
||||
|
||||
float sdBox2(vec3 p, vec3 b) {
|
||||
vec3 q = abs(p) - b;
|
||||
return length(max(q,0.)) + min(max(q.x,max(q.y,q.z)),0.);
|
||||
}
|
||||
|
||||
float sdTriPrism( vec3 p, vec2 h, float rot )
|
||||
{
|
||||
p.xy *= rot2D(rot);
|
||||
vec3 q = abs(p);
|
||||
return max(q.z-h.y,max(q.x*.866025+p.y*.5,-p.y)-h.x*.5);
|
||||
}
|
||||
|
||||
float sdPyramid( vec3 p, float s)
|
||||
{
|
||||
p = abs(p);
|
||||
return (p.x+p.y+p.z-s)*0.577;// 35027;
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// ANIMATION //
|
||||
//////////////////
|
||||
|
||||
// POSITIONS
|
||||
//const vec3 glyph1Pos = vec3(1.7,-1.1,0.0);
|
||||
//const vec3 glyph2Pos = vec3(2.0,0.0,0.0);
|
||||
|
||||
//const vec3 glyph4Pos = vec3(0.0,2.0,0.0)
|
||||
//const vec3 glyph6Pos = vec3(1.5 * -1.,1.4,0.0);
|
||||
//const vec3 glyph7Pos = vec3(1.7 * -1.,-1.1,0.0);
|
||||
|
||||
// DELAYS
|
||||
float STARTDELAY = 9., glow = 0.;
|
||||
|
||||
// POSITIONS
|
||||
|
||||
|
||||
// COLORS
|
||||
vec3 chevronColor = vec3(0.36, 0.9, 0.0);
|
||||
|
||||
// with duration d, startTime s and speed up with timeFact
|
||||
float timedSine(vec3 i) {
|
||||
return min((u_time - i.y)*i.z, i.x*PI);
|
||||
}
|
||||
|
||||
float calcFactor (float startTime)
|
||||
{
|
||||
return STARTDELAY + STARTDELAY*cl(sin(timedSine(vec3(1.5, startTime, 4.)) * 0.06), -.9, .9);
|
||||
}
|
||||
|
||||
// Animate ring movements
|
||||
vec3 ringAnim(vec3 p) {
|
||||
for (float i = 0.; i < 7.; i++) {
|
||||
float rotateDelay = STARTDELAY + (i * 3.), o=1.;
|
||||
if(u_time > rotateDelay) {
|
||||
if(mod(i,2.) >= 1.) o = -1.;
|
||||
p.xy *= rot2D(calcFactor(rotateDelay)*o);
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
// Animate prism movements
|
||||
float prismAnim(vec2 i) {
|
||||
if(u_time >= i.y) {
|
||||
i.x += (.045*cl(sin((timedSine(vec3(3., i.y, 40.)) * .4)),-.8, .8));
|
||||
}
|
||||
return i.x;
|
||||
}
|
||||
|
||||
//////////////
|
||||
// SCENE //
|
||||
//////////////
|
||||
float sea_octave(vec2 uv, float choppy) {
|
||||
uv += noise(uv, 1., 1);
|
||||
vec2 wv = 1.0-abs(sin(uv));
|
||||
wv = mix(wv, abs(cos(uv)),wv);
|
||||
return pow(1.0-pow(wv.x * wv.y,0.65),choppy);
|
||||
}
|
||||
|
||||
vec3 map(vec3 p, int displace)
|
||||
{
|
||||
float mat = 0., glo = 1e3,
|
||||
// Ring boxes
|
||||
an = PI/12.,
|
||||
step,
|
||||
anRot = floor(atan(p.y,p.x)/an + .5)*an;
|
||||
vec3 q = p;
|
||||
q.xy = rot2D(anRot)*q.xy;
|
||||
float d = length(max(abs(q.xy - vec2(1.8,0.))-vec2(0.24,0.14),0.)) - .02,
|
||||
|
||||
// Main ring
|
||||
d2 = abs(length(p.xy) - 1.8) - .2;
|
||||
d = min(d,d2);
|
||||
|
||||
// Inner ring
|
||||
d2 = smax( abs(length(p.xy) - 1.75) - .08, abs(p.z - .1)-.04, .005 );
|
||||
d = max(-d2,d);
|
||||
|
||||
// Depth slice rings
|
||||
d = smax( d, abs(p.z)-.1, .02 );
|
||||
|
||||
//Rotating glyphs
|
||||
vec3 p2 = ringAnim(p), q2=p2;
|
||||
an = PI/16.;
|
||||
q2.xy = rot2D(floor((atan(p2.y,p2.x)/an) + .5)*an)*q2.xy;
|
||||
d2 = sdBox2( q2.xyz - vec3(1.75,0.,0.), vec3(.04, .14, .05) ) - .02 + noise(p.xy*100.,1e-3,0);
|
||||
d = min(d, d2);
|
||||
if (d==d2) mat = 6.;
|
||||
|
||||
// Gate Base
|
||||
d2 = 1e3;
|
||||
float stepDist = 1.5, h = 0.0, d3, choppy=4., freq=0.6, amp=.2;
|
||||
for(int i = 0; i < 4; i++) {
|
||||
step = sdBox2(vec3(p.x,p.y+stepDist+0.05,p.z), vec3(2., .2,stepDist)) - .05;
|
||||
d2 = min(d2, step);
|
||||
stepDist += .2;
|
||||
}
|
||||
d2 += noise(p.xz * 50.+200., .007, 0);
|
||||
d = min(d, d2);
|
||||
if (d==d2) mat = 2.0;
|
||||
|
||||
if (displace == 1) {
|
||||
vec2 uv = p.xy;
|
||||
for(int i = 0; i < 4; i++) {
|
||||
d3 = sea_octave((uv+u_time)*freq,choppy);
|
||||
d3 += sea_octave((uv-u_time)*freq,choppy);
|
||||
h += d3 * amp;
|
||||
uv *= mat2(1.6,1.2,-1.2,1.6); freq *= 1.9; amp *= 0.22;
|
||||
choppy = mix(choppy,1.0,0.4);
|
||||
}
|
||||
}
|
||||
d2 = max(-sdCappedCylinder(p, 2.0, min((1.7 - (u_time - 28.9)*2.5),2.3)), sdCappedCylinder(p, .025, 1.6) - h*0.15);
|
||||
d2 = max(d2, sdCappedCylinder ( p, 0.3, 1.7));
|
||||
d = min(d, d2);
|
||||
if (d==d2) {
|
||||
mat = 1.0;
|
||||
}
|
||||
|
||||
// sand
|
||||
d2 = (p.y +3.7) + noise((vec2((p.x),(p.z*.44-40.))*.04)+100., 20., 0) + .25*sin(p.z*.5+u_time);
|
||||
d = min(d,d2);
|
||||
if (d==d2) mat = 3.0;
|
||||
|
||||
// pyradmid
|
||||
d2 = sdPyramid(p+vec3(-75., 0., 100.), 60.);
|
||||
d = min(d, d2);
|
||||
if (d==d2) mat=3.;
|
||||
// Prisms
|
||||
for(float i = 0.; i < 8.; i++ ) {
|
||||
q = p;
|
||||
anRot = 24.67 / (PI * 2.) + (i+1.) * PI / 4.;
|
||||
|
||||
// Nudge first and the last prism out of the ground
|
||||
if (i == 1.) anRot += .2;
|
||||
if (i == 7.) anRot -= .2;
|
||||
q.xy = rot2D(anRot) * q.xy;
|
||||
float rotateDelay = STARTDELAY + (i - 1.) * 3. + 1.5;
|
||||
// We can now call each prism by it's index
|
||||
// draw all except the middle bottom prism
|
||||
if (i > 0.) {
|
||||
q.x -= 1.95;
|
||||
vec3 q2 = q; // new point for movable parts
|
||||
if(u_time > rotateDelay) q2.x = prismAnim(vec2(q2.x, rotateDelay));
|
||||
float prismTop = sdTriPrism(vec3(q.x - .06, q.y, q.z), vec2(.1,.15), .5) -.01;
|
||||
d2 = max(-sdTriPrism(vec3(q2.x - .14, q2.y - 0. , q2.z), vec2(.22), .5) - .01 , sdTriPrism(vec3(q2.x, q2.y, q2.z ), vec2(.2,.12), .5) - .02);
|
||||
d2 = min(d2, prismTop);
|
||||
d = min(d, d2);
|
||||
// glyph locking thing material
|
||||
if (d == d2) mat = 4.;
|
||||
// glyph locking prism material
|
||||
if( d == prismTop) if(u_time > rotateDelay + .2) {
|
||||
mat = 5.;
|
||||
glo = min(d2, prismTop);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return vec3( d, mat, glo);
|
||||
}
|
||||
|
||||
////////////////
|
||||
// DRAWING //
|
||||
////////////////
|
||||
|
||||
float rayMarch(vec3 ro, vec3 rd, int a) {
|
||||
vec3 d;
|
||||
float t = 0.; // total distance travelled
|
||||
// Raymarching
|
||||
for (int i = 0; i < 100; i++) {
|
||||
d = map(ro + rd * t, 0); // Get distance to objects
|
||||
if (a==0&&d.z<0.3) glow += pow(0.01/d.z,0.8)*0.6;
|
||||
t += d.x; // "march" the ray
|
||||
if (d.x < 1e-3 || t > 500.) break;
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
vec3 getNormal(vec3 p) {
|
||||
vec2 e = vec2(.01, 0.);
|
||||
vec3 n = map(p, 1).x - vec3(
|
||||
map(p-e.xyy,1).x,
|
||||
map(p-e.yxy,1).x,
|
||||
map(p-e.yyx,1).x);
|
||||
return no(n);
|
||||
}
|
||||
|
||||
float getLight(vec3 p, vec3 lightPos, float intensity, float shadow, vec3 n, float atte) {
|
||||
vec3 l = no(lightPos - p);
|
||||
float len = length( lightPos - p ); // Distance from the light to the surface point.
|
||||
float dif = cl(dot(n, l)*intensity, 0., intensity) * 1.0 / (1.0 + atte*len),
|
||||
d = rayMarch(p+n*.0025, l, 1);
|
||||
if(d<length(lightPos-p)) dif *= shadow;
|
||||
return dif;
|
||||
}
|
||||
|
||||
// lighting
|
||||
float diffuse(vec3 n,vec3 l,float p) {
|
||||
return pow(dot(n,l) * 0.4 + 0.6,p);
|
||||
}
|
||||
|
||||
float specular(vec3 normal,vec3 lightPos,vec3 rayOrigin,float specular) {
|
||||
float nrm = (specular + 8.0) / (PI * 8.0);
|
||||
return pow(max(dot(reflect(rayOrigin,normal),lightPos),0.0),specular) * nrm;
|
||||
}
|
||||
|
||||
vec3 getSeaColor(vec3 p, vec3 n, vec3 l, vec3 eye) {
|
||||
|
||||
vec3 color = vec3(0.0, 0.1, 0.3) + diffuse(n,l,60.0) * vec3(0.11, 0.16, 0.18) * 0.3;
|
||||
color -= vec3(0.73, 0.15, 0.66) * pow(cl(1.-dot(n, -eye), 0., 1.), .7);
|
||||
color += vec3(specular(n,l,eye,60.0))*0.2;
|
||||
return color;
|
||||
}
|
||||
|
||||
|
||||
vec3 applyFog(vec3 col, float t, vec3 rd, vec3 lightDir, float b ) {
|
||||
vec3 fogColor = mix( vec3(0.34, 0.11, 0.34), // blue
|
||||
vec3(0.93, 0.37, 0.16), // yellow
|
||||
pow(max( dot(rd, lightDir), 0.) ,8.));
|
||||
return mix( col, fogColor, 1.0 - exp(-t*b) );
|
||||
}
|
||||
|
||||
vec3 getCameraRayDir(vec2 uv, vec3 p, vec3 l, float z)
|
||||
{
|
||||
vec3 f = no(l-p),
|
||||
r = no(cross(vec3(0.,1.,0.), f)),
|
||||
u = cross(f,r),
|
||||
c = f*z,
|
||||
i = c + uv.x*r + uv.y*u,
|
||||
d = no(i);
|
||||
return d;
|
||||
}
|
||||
|
||||
vec3 postProcess(vec3 col) {
|
||||
// Vignette
|
||||
//col *= smoothstep(0.9, 0.5, length(gl_FragCoord.xy/u_resolution.xy-vec2(.5)));
|
||||
// Colour mapping
|
||||
col *= vec3(.9, 0.8, 0.7);
|
||||
// gamma
|
||||
col = pow( col, vec3(.45) );
|
||||
// Contrast = a
|
||||
col = smoothstep(0., 1., col);
|
||||
|
||||
// fade out at the end
|
||||
col += 1.0 - vec3(cl((46. - u_time)*.5, 0., 1.0));
|
||||
return col;
|
||||
}
|
||||
|
||||
vec3 cameraPos()
|
||||
{
|
||||
// first zoom in to the gate
|
||||
vec3 cPos = vec3(0., cl(6.-u_time,2.,6.), cl((100.-u_time*11.),6.,100.));
|
||||
if (u_time > 7.5) cPos += vec3(0., cl(7.5-u_time,-1.,0.), 0.);
|
||||
// close up shot for 1st glyph lock
|
||||
if (u_time > 10.5) cPos = vec3(2.,-1.,1.);
|
||||
// zoom away for 2nd glyph animation
|
||||
if (u_time > 12.) cPos = vec3(-1., -.7, 4.);
|
||||
if (u_time > 14.5) {
|
||||
cPos = vec3(0., 0., 4.);
|
||||
cPos.yz *= rot2D(-0.6-(cos(u_time-15.))*0.05);
|
||||
cPos.xz *= rot2D(sin((u_time-16.5)*0.1));
|
||||
}
|
||||
if (u_time > 23.5)
|
||||
{
|
||||
cPos = vec3(3., -.7, 4.);
|
||||
}
|
||||
if (u_time > 32.5)
|
||||
{
|
||||
cPos = vec3(-20.,10.,50.);
|
||||
}
|
||||
if (u_time > 36.5) {
|
||||
cPos = vec3(3., -.7, 4.);
|
||||
cPos.yz *= rot2D(((1.-cos(u_time-36.5))*-0.025));
|
||||
cPos.xz *= rot2D(sin((u_time-36.5)*0.07));
|
||||
}
|
||||
|
||||
return cPos;
|
||||
}
|
||||
|
||||
vec3 cameraPointAt() {
|
||||
vec3 p = vec3(0., -.5, 0.);
|
||||
// look at 1st glyph
|
||||
if (u_time > 10.5) p = vec3(1.7,-1.1,0.);
|
||||
// look gate at distance
|
||||
if(u_time > 12.) p = vec3(0.);
|
||||
if(u_time > 14.5) p = mix(vec3(1.5,1.4,0.0),vec3(-1.5,1.4,0.0), (u_time-16.5)*0.13);
|
||||
if(u_time > 23.5) p = vec3(0.);
|
||||
return p;
|
||||
}
|
||||
|
||||
// flash screen with glyph color when it is locked
|
||||
vec3 colorFlashesAnim(vec3 col) {
|
||||
if(u_time > 10.75) {
|
||||
float x = smoothstep(-1.,.8,sin((timedSine(vec3(.8, 10.75, 8.))*2.)));
|
||||
col = mix(col, chevronColor * (x * 1.4), x *.76);
|
||||
}
|
||||
return col;
|
||||
}
|
||||
|
||||
vec3 addSpecular(vec3 nor, vec3 rod, float amount, float phong)
|
||||
{
|
||||
return vec3(specular(nor,no(vec3(0.0,0.3,0.8)),no(rod),pow(10.,phong)))*amount;
|
||||
}
|
||||
|
||||
vec3 sceneGate(vec2 uv)
|
||||
{
|
||||
// Initialization
|
||||
vec3 ro = cameraPos(),
|
||||
rd = getCameraRayDir(uv, ro, cameraPointAt(), cl((43.-u_time)*-2.,2.,25.)),
|
||||
col = vec3(0.);
|
||||
float d = rayMarch(ro, rd,0), mat = 0.;
|
||||
|
||||
if (d < 500.) {
|
||||
// Lighting
|
||||
vec3 p = ro + rd * d,
|
||||
n = getNormal(p);
|
||||
mat = map(p,0).y;
|
||||
// Light 1 Arguments
|
||||
// 1: Ray starting point
|
||||
// 2: Light position
|
||||
// 3: Light intensity
|
||||
// 4: Shadow intensity
|
||||
|
||||
// Lights
|
||||
col += vec3(0.82, 0.5, 0.9) * getLight(p, vec3( 10., 15., 25.), 1., .2,n,1e-10);
|
||||
col += vec3(0.79, 0.66, 0.43) * getLight(p, vec3( 4., 2., -15.), 1., 1.,n,1e-10);
|
||||
col += vec3(0.0, 0.06, 0.7) * getLight(p, vec3( 0., 0., 5.),cl((u_time-29.0)*100.,0.,50.), 0.0,n,3.1);
|
||||
// indirect lightning -> vec3 in normalize is light direction
|
||||
col += vec3(0.29, 0.28, 0.33) * cl( dot( n, no(vec3(0. , 1., 10.))), 0., 1.);
|
||||
|
||||
if(mat==0.)
|
||||
col *= vec3(0.2, 0.3, 0.3) + addSpecular(n,rd,.5, 2.);
|
||||
if(mat==1.)
|
||||
col *= getSeaColor(p, n, no(vec3(0.0,0.3,0.8)),no(rd));
|
||||
if(mat==2.)
|
||||
col *= vec3(0.7, 0.7, 0.4) + noise (p.xz*3.+1.5, 0.1,0);
|
||||
if(mat==3.)
|
||||
col *= vec3(.8, .8, .5) + noise(p.xz*500.+1e5, .3,0);
|
||||
if(mat==4.)
|
||||
col *= vec3(0.0, 0.08, 0.11) + addSpecular(n,rd,0.3,0.7);
|
||||
if(mat ==5.)
|
||||
col = chevronColor*0.4;// * pow(cl(1. -dot(n, -rd), 0., 1.), .3);
|
||||
if(mat == 6.)
|
||||
col *= vec3(0.01, 0.04, 0.06) + addSpecular(n,rd,.1, 2.5);
|
||||
}
|
||||
col += glow * chevronColor*.25;
|
||||
return postProcess(colorFlashesAnim(applyFog(col, d, rd, vec3(0., -.1, -1.), .01)));
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 u_resolution = vec2(1920,1080);
|
||||
vec2 qor = gl_FragCoord.xy/u_resolution.xy;
|
||||
vec2 resoultion = -1.0+2.0*qor;
|
||||
resoultion.x *= u_resolution.x/u_resolution.y;
|
||||
o = vec4(sceneGate( resoultion ),1.);
|
||||
}
|
||||
322
src/shaders/fragment.inl
Normal file
322
src/shaders/fragment.inl
Normal file
@ -0,0 +1,322 @@
|
||||
/* File generated with Shader Minifier 1.2
|
||||
* http://www.ctrl-alt-test.fr
|
||||
*/
|
||||
#ifndef FRAGMENT_INL_
|
||||
# define FRAGMENT_INL_
|
||||
# define VAR_M "v"
|
||||
# define VAR_O "i"
|
||||
|
||||
const char *fragment_frag =
|
||||
"#version 460\n"
|
||||
"uniform int v;"
|
||||
"out vec4 i;"
|
||||
"float m=3.1416,y=v/float(44100);"
|
||||
"const float z=22./7.;"
|
||||
"vec3 f(vec3 v)"
|
||||
"{"
|
||||
"return normalize(v);"
|
||||
"}"
|
||||
"float f(float v,float f,float y)"
|
||||
"{"
|
||||
"return clamp(v,f,y);"
|
||||
"}"
|
||||
"mat2 n(float v)"
|
||||
"{"
|
||||
"float f=sin(v),y=cos(v);"
|
||||
"return mat2(y,-f,f,y);"
|
||||
"}"
|
||||
"float n(float v,float y,float m)"
|
||||
"{"
|
||||
"float z=max(m-abs(v-y),0.);"
|
||||
"return max(v,y)+z*z*.25/m;"
|
||||
"}"
|
||||
"float f(vec2 v,int y)"
|
||||
"{"
|
||||
"if(y==1)"
|
||||
"{"
|
||||
"float m=dot(v,vec2(127.1,311.7));"
|
||||
"return fract(sin(m)*43758.5453123);"
|
||||
"}"
|
||||
"v=50.*fract(v*.3183099);"
|
||||
"return fract(v.x*v.y*(v.x+v.y));"
|
||||
"}"
|
||||
"float x(vec2 v,float y,int m)"
|
||||
"{"
|
||||
"vec2 a=floor(v),z=fract(v),i=z*z*(3.-2.*z);"
|
||||
"float x=y;"
|
||||
"if(m==1)"
|
||||
"x=2.;"
|
||||
"return-y+x*mix(mix(f(a+vec2(0.),m),f(a+vec2(1.,0.),m),i.x),mix(f(a+vec2(0.,1.),m),f(a+vec2(1.),m),i.x),i.y);"
|
||||
"}"
|
||||
"float s(vec3 v,float y,float m)"
|
||||
"{"
|
||||
"vec2 f=abs(vec2(length(v.xy),v.z))-vec2(m,y);"
|
||||
"return min(max(f.x,f.y),0.)+length(max(f,0.));"
|
||||
"}"
|
||||
"float n(vec3 v,vec3 y)"
|
||||
"{"
|
||||
"vec3 f=abs(v)-y;"
|
||||
"return length(max(f,0.))+min(max(f.x,max(f.y,f.z)),0.);"
|
||||
"}"
|
||||
"float t(vec3 v,vec2 y,float m)"
|
||||
"{"
|
||||
"v.xy*=n(m);"
|
||||
"vec3 f=abs(v);"
|
||||
"return max(f.z-y.y,max(f.x*.866025+v.y*.5,-v.y)-y.x*.5);"
|
||||
"}"
|
||||
"float s(vec3 v,float y)"
|
||||
"{"
|
||||
"return v=abs(v),(v.x+v.y+v.z-y)*.577;"
|
||||
"}"
|
||||
"float a=9.,p=0.;"
|
||||
"vec3 c=vec3(.36,.9,0.);"
|
||||
"float s(vec3 v)"
|
||||
"{"
|
||||
"return min((y-v.y)*v.z,v.x*z);"
|
||||
"}"
|
||||
"float t(float v)"
|
||||
"{"
|
||||
"return a+a*f(sin(s(vec3(1.5,v,4.))*.06),-.9,.9);"
|
||||
"}"
|
||||
"vec3 x(vec3 v)"
|
||||
"{"
|
||||
"for(float f=0.;f<7.;f++)"
|
||||
"{"
|
||||
"float m=a+f*3.,z=1.;"
|
||||
"if(y>m)"
|
||||
"{"
|
||||
"if(mod(f,2.)>=1.)"
|
||||
"z=-1.;"
|
||||
"v.xy*=n(t(m)*z);"
|
||||
"}"
|
||||
"}"
|
||||
"return v;"
|
||||
"}"
|
||||
"float w(vec2 v)"
|
||||
"{"
|
||||
"if(y>=v.y)"
|
||||
"v.x+=.045*f(sin(s(vec3(3.,v.y,40.))*.4),-.8,.8);"
|
||||
"return v.x;"
|
||||
"}"
|
||||
"float t(vec2 v,float f)"
|
||||
"{"
|
||||
"v+=x(v,1.,1);"
|
||||
"vec2 y=1.-abs(sin(v));"
|
||||
"y=mix(y,abs(cos(v)),y);"
|
||||
"return pow(1.-pow(y.x*y.y,.65),f);"
|
||||
"}"
|
||||
"vec3 w(vec3 v,int m)"
|
||||
"{"
|
||||
"float f=0.,i=1e3,r=z/12.,p,d=floor(atan(v.y,v.x)/r+.5)*r;"
|
||||
"vec3 c=v;"
|
||||
"c.xy=n(d)*c.xy;"
|
||||
"float l=length(max(abs(c.xy-vec2(1.8,0.))-vec2(.24,.14),0.))-.02,e=abs(length(v.xy)-1.8)-.2;"
|
||||
"l=min(l,e);"
|
||||
"e=n(abs(length(v.xy)-1.75)-.08,abs(v.z-.1)-.04,.005);"
|
||||
"l=max(-e,l);"
|
||||
"l=n(l,abs(v.z)-.1,.02);"
|
||||
"vec3 h=x(v),o=h;"
|
||||
"r=z/16.;"
|
||||
"o.xy=n(floor(atan(h.y,h.x)/r+.5)*r)*o.xy;"
|
||||
"e=n(o.xyz-vec3(1.75,0.,0.),vec3(.04,.14,.05))-.02+x(v.xy*100.,.001,0);"
|
||||
"l=min(l,e);"
|
||||
"if(l==e)"
|
||||
"f=6.;"
|
||||
"e=1e3;"
|
||||
"float u=1.5,b=0.,g,F=4.,C=.6,k=.2;"
|
||||
"for(int Z=0;Z<4;Z++)"
|
||||
"p=n(vec3(v.x,v.y+u+.05,v.z),vec3(2.,.2,u))-.05,e=min(e,p),u+=.2;"
|
||||
"e+=x(v.xz*50.+200.,.007,0);"
|
||||
"l=min(l,e);"
|
||||
"if(l==e)"
|
||||
"f=2.;"
|
||||
"if(m==1)"
|
||||
"{"
|
||||
"vec2 Z=v.xy;"
|
||||
"for(int Y=0;Y<4;Y++)"
|
||||
"g=t((Z+y)*C,F),g+=t((Z-y)*C,F),b+=g*k,Z*=mat2(1.6,1.2,-1.2,1.6),C*=1.9,k*=.22,F=mix(F,1.,.4);"
|
||||
"}"
|
||||
"e=max(-s(v,2.,min(1.7-(y-28.9)*2.5,2.3)),s(v,.025,1.6)-b*.15);"
|
||||
"e=max(e,s(v,.3,1.7));"
|
||||
"l=min(l,e);"
|
||||
"if(l==e)"
|
||||
"f=1.;"
|
||||
"e=v.y+3.7+x(vec2(v.x,v.z*.44-40.)*.04+100.,20.,0)+.25*sin(v.z*.5+y);"
|
||||
"l=min(l,e);"
|
||||
"if(l==e)"
|
||||
"f=3.;"
|
||||
"e=s(v+vec3(-75.,0.,100.),60.);"
|
||||
"l=min(l,e);"
|
||||
"if(l==e)"
|
||||
"f=3.;"
|
||||
"for(float Z=0.;Z<8.;Z++)"
|
||||
"{"
|
||||
"c=v;"
|
||||
"d=24.67/(z*2.)+(Z+1.)*z/4.;"
|
||||
"if(Z==1.)"
|
||||
"d+=.2;"
|
||||
"if(Z==7.)"
|
||||
"d-=.2;"
|
||||
"c.xy=n(d)*c.xy;"
|
||||
"float Y=a+(Z-1.)*3.+1.5;"
|
||||
"if(Z>0.)"
|
||||
"{"
|
||||
"c.x-=1.95;"
|
||||
"vec3 X=c;"
|
||||
"if(y>Y)"
|
||||
"X.x=w(vec2(X.x,Y));"
|
||||
"float W=t(vec3(c.x-.06,c.y,c.z),vec2(.1,.15),.5)-.01;"
|
||||
"e=max(-t(vec3(X.x-.14,X.y,X.z),vec2(.22),.5)-.01,t(vec3(X.x,X.y,X.z),vec2(.2,.12),.5)-.02);"
|
||||
"e=min(e,W);"
|
||||
"l=min(l,e);"
|
||||
"if(l==e)"
|
||||
"f=4.;"
|
||||
"if(l==W)"
|
||||
"if(y>Y+.2)"
|
||||
"f=5.,i=min(e,W);"
|
||||
"}"
|
||||
"}"
|
||||
"return vec3(l,f,i);"
|
||||
"}"
|
||||
"float w(vec3 v,vec3 y,int m)"
|
||||
"{"
|
||||
"vec3 f;"
|
||||
"float i=0.;"
|
||||
"for(int l=0;l<100;l++)"
|
||||
"{"
|
||||
"f=w(v+y*i,0);"
|
||||
"if(m==0&&f.z<.3)"
|
||||
"p+=pow(.01/f.z,.8)*.6;"
|
||||
"i+=f.x;"
|
||||
"if(f.x<.001||i>500.)"
|
||||
"break;"
|
||||
"}"
|
||||
"return i;"
|
||||
"}"
|
||||
"vec3 r(vec3 v)"
|
||||
"{"
|
||||
"vec2 y=vec2(.01,0.);"
|
||||
"vec3 m=w(v,1).x-vec3(w(v-y.xyy,1).x,w(v-y.yxy,1).x,w(v-y.yyx,1).x);"
|
||||
"return f(m);"
|
||||
"}"
|
||||
"float f(vec3 v,vec3 y,float m,float x,vec3 l,float z)"
|
||||
"{"
|
||||
"vec3 e=f(y-v);"
|
||||
"float i=length(y-v),p=f(dot(l,e)*m,0.,m)/(1.+z*i),Z=w(v+l*.0025,e,1);"
|
||||
"if(Z<length(y-v))"
|
||||
"p*=x;"
|
||||
"return p;"
|
||||
"}"
|
||||
"float r(vec3 v,vec3 y,float f)"
|
||||
"{"
|
||||
"return pow(dot(v,y)*.4+.6,f);"
|
||||
"}"
|
||||
"float f(vec3 v,vec3 y,vec3 m,float f)"
|
||||
"{"
|
||||
"float l=(f+8.)/(z*8.);"
|
||||
"return pow(max(dot(reflect(m,v),y),0.),f)*l;"
|
||||
"}"
|
||||
"vec3 n(vec3 v,vec3 y,vec3 m,vec3 e)"
|
||||
"{"
|
||||
"vec3 i=vec3(0.,.1,.3)+r(y,m,60.)*vec3(.11,.16,.18)*.3;"
|
||||
"i-=vec3(.73,.15,.66)*pow(f(1.-dot(y,-e),0.,1.),.7);"
|
||||
"i+=vec3(f(y,m,e,60.))*.2;"
|
||||
"return i;"
|
||||
"}"
|
||||
"vec3 f(vec3 v,float y,vec3 m,vec3 f,float z)"
|
||||
"{"
|
||||
"vec3 l=mix(vec3(.34,.11,.34),vec3(.93,.37,.16),pow(max(dot(m,f),0.),8.));"
|
||||
"return mix(v,l,1.-exp(-y*z));"
|
||||
"}"
|
||||
"vec3 r(vec2 v,vec3 y,vec3 m,float z)"
|
||||
"{"
|
||||
"vec3 l=f(m-y),e=f(cross(vec3(0.,1.,0.),l)),i=cross(l,e),a=l*z,Z=a+v.x*e+v.y*i,g=f(Z);"
|
||||
"return g;"
|
||||
"}"
|
||||
"vec3 h(vec3 v)"
|
||||
"{"
|
||||
"return v*=vec3(.9,.8,.7),v=pow(v,vec3(.45)),v=smoothstep(0.,1.,v),v+=1.-vec3(f((46.-y)*.5,0.,1.)),v;"
|
||||
"}"
|
||||
"vec3 f()"
|
||||
"{"
|
||||
"vec3 v=vec3(0.,f(6.-y,2.,6.),f(100.-y*11.,6.,100.));"
|
||||
"if(y>7.5)"
|
||||
"v+=vec3(0.,f(7.5-y,-1.,0.),0.);"
|
||||
"if(y>10.5)"
|
||||
"v=vec3(2.,-1.,1.);"
|
||||
"if(y>12.)"
|
||||
"v=vec3(-1.,-.7,4.);"
|
||||
"if(y>14.5)"
|
||||
"v=vec3(0.,0.,4.),v.yz*=n(-.6-cos(y-15.)*.05),v.xz*=n(sin((y-16.5)*.1));"
|
||||
"if(y>23.5)"
|
||||
"v=vec3(3.,-.7,4.);"
|
||||
"if(y>32.5)"
|
||||
"v=vec3(-20.,10.,50.);"
|
||||
"if(y>36.5)"
|
||||
"v=vec3(3.,-.7,4.),v.yz*=n((1.-cos(y-36.5))*-.025),v.xz*=n(sin((y-36.5)*.07));"
|
||||
"return v;"
|
||||
"}"
|
||||
"vec3 h()"
|
||||
"{"
|
||||
"vec3 v=vec3(0.,-.5,0.);"
|
||||
"if(y>10.5)"
|
||||
"v=vec3(1.7,-1.1,0.);"
|
||||
"if(y>12.)"
|
||||
"v=vec3(0.);"
|
||||
"if(y>14.5)"
|
||||
"v=mix(vec3(1.5,1.4,0.),vec3(-1.5,1.4,0.),(y-16.5)*.13);"
|
||||
"if(y>23.5)"
|
||||
"v=vec3(0.);"
|
||||
"return v;"
|
||||
"}"
|
||||
"vec3 d(vec3 v)"
|
||||
"{"
|
||||
"if(y>10.75)"
|
||||
"{"
|
||||
"float f=smoothstep(-1.,.8,sin(s(vec3(.8,10.75,8.))*2.));"
|
||||
"v=mix(v,c*(f*1.4),f*.76);"
|
||||
"}"
|
||||
"return v;"
|
||||
"}"
|
||||
"vec3 d(vec3 v,vec3 y,float m,float e)"
|
||||
"{"
|
||||
"return vec3(f(v,f(vec3(0.,.3,.8)),f(y),pow(10.,e)))*m;"
|
||||
"}"
|
||||
"vec3 l(vec2 v)"
|
||||
"{"
|
||||
"vec3 m=f(),l=r(v,m,h(),f((43.-y)*-2.,2.,25.)),i=vec3(0.);"
|
||||
"float e=w(m,l,0),Z=0.;"
|
||||
"if(e<500.)"
|
||||
"{"
|
||||
"vec3 z=m+l*e,a=r(z);"
|
||||
"Z=w(z,0).y;"
|
||||
"i+=vec3(.82,.5,.9)*f(z,vec3(10.,15.,25.),1.,.2,a,1e-10);"
|
||||
"i+=vec3(.79,.66,.43)*f(z,vec3(4.,2.,-15.),1.,1.,a,1e-10);"
|
||||
"i+=vec3(0.,.06,.7)*f(z,vec3(0.,0.,5.),f((y-29.)*100.,0.,50.),0.,a,3.1);"
|
||||
"i+=vec3(.29,.28,.33)*f(dot(a,f(vec3(0.,1.,10.))),0.,1.);"
|
||||
"if(Z==0.)"
|
||||
"i*=vec3(.2,.3,.3)+d(a,l,.5,2.);"
|
||||
"if(Z==1.)"
|
||||
"i*=n(z,a,f(vec3(0.,.3,.8)),f(l));"
|
||||
"if(Z==2.)"
|
||||
"i*=vec3(.7,.7,.4)+x(z.xz*3.+1.5,.1,0);"
|
||||
"if(Z==3.)"
|
||||
"i*=vec3(.8,.8,.5)+x(z.xz*500.+1e5,.3,0);"
|
||||
"if(Z==4.)"
|
||||
"i*=vec3(0.,.08,.11)+d(a,l,.3,.7);"
|
||||
"if(Z==5.)"
|
||||
"i=c*.4;"
|
||||
"if(Z==6.)"
|
||||
"i*=vec3(.01,.04,.06)+d(a,l,.1,2.5);"
|
||||
"}"
|
||||
"i+=p*c*.25;"
|
||||
"return h(d(f(i,e,l,vec3(0.,-.1,-1.),.01)));"
|
||||
"}"
|
||||
"void main()"
|
||||
"{"
|
||||
"vec2 v=vec2(1920,1080),f=gl_FragCoord.xy/v.xy,y=-1.+2.*f;"
|
||||
"y.x*=v.x/v.y;"
|
||||
"i=vec4(l(y),1.);"
|
||||
"}";
|
||||
|
||||
#endif // FRAGMENT_INL_
|
||||
18
src/shaders/post.frag
Normal file
18
src/shaders/post.frag
Normal file
@ -0,0 +1,18 @@
|
||||
// A simple chromatic aberration example
|
||||
|
||||
// Mipmap fake glossy thing!
|
||||
#version 130
|
||||
uniform sampler2D o;
|
||||
out vec4 i;
|
||||
float hash(float c){return fract(sin(dot(c, 12.9898)) * 43758.5453);}
|
||||
void main(){
|
||||
i = vec4(0);
|
||||
for(int t = 0; t < 25; t++){
|
||||
vec2 uv = gl_FragCoord.xy*2./vec2(1920,1080);
|
||||
float s1 = hash(float(t+dot(uv,uv)));
|
||||
float s2 = hash(float(1-t+dot(uv,uv)));
|
||||
vec2 f = 0.01*(-1.0+2.0*vec2(s1,s2));
|
||||
i += vec4(textureLod(o, uv, (0.3+0.7*s1)*texture(o, (1.0+1.0*f)*uv).a*8).rgb,1);
|
||||
}
|
||||
i /= vec4(25);
|
||||
}
|
||||
30
src/shaders/post.inl
Normal file
30
src/shaders/post.inl
Normal file
@ -0,0 +1,30 @@
|
||||
/* File generated with Shader Minifier 1.2
|
||||
* http://www.ctrl-alt-test.fr
|
||||
*/
|
||||
#ifndef POST_INL_
|
||||
# define POST_INL_
|
||||
# define VAR_I "v"
|
||||
# define VAR_O "f"
|
||||
|
||||
const char *post_frag =
|
||||
"#version 130\n"
|
||||
"uniform sampler2D f;"
|
||||
"out vec4 v;"
|
||||
"float t(float f)"
|
||||
"{"
|
||||
"return fract(sin(dot(f,12.9898))*43758.5453);"
|
||||
"}"
|
||||
"void main()"
|
||||
"{"
|
||||
"v=vec4(0);"
|
||||
"for(int s=0;s<25;s++)"
|
||||
"{"
|
||||
"vec2 i=gl_FragCoord.xy*2./vec2(1920,1080);"
|
||||
"float d=t(float(s+dot(i,i))),o=t(float(1-s+dot(i,i)));"
|
||||
"vec2 m=.01*(-1.+2.*vec2(d,o));"
|
||||
"v+=vec4(textureLod(f,i,(.3+.7*d)*texture(f,(1.+m)*i).w*8).xyz,1);"
|
||||
"}"
|
||||
"v/=vec4(25);"
|
||||
"}";
|
||||
|
||||
#endif // POST_INL_
|
||||
115
src/song.cpp
Normal file
115
src/song.cpp
Normal file
@ -0,0 +1,115 @@
|
||||
#include <string>
|
||||
#include "song.h"
|
||||
#pragma comment(lib, "strmiids.lib")
|
||||
#pragma comment(lib, "ComCtl32.lib")
|
||||
#pragma comment(lib, "winmm.lib")
|
||||
|
||||
#pragma comment(lib, "strmbase.lib")
|
||||
|
||||
using namespace Leviathan;
|
||||
|
||||
Song::Song()
|
||||
{
|
||||
}
|
||||
|
||||
Song::Song(LPCWSTR path) : playing(false)
|
||||
{
|
||||
__int64 trackLength;
|
||||
IGraphBuilder * graph;
|
||||
|
||||
CoInitialize(0);
|
||||
CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC, IID_IGraphBuilder, (void**)&graph);
|
||||
|
||||
graph->QueryInterface(IID_IMediaControl, (void**)&mediaControl);
|
||||
graph->QueryInterface(IID_IMediaSeeking, (void**)&mediaSeeking);
|
||||
graph->QueryInterface(IID_IBasicAudio, (void**)&audioControl);
|
||||
audioControl->put_Volume(long(-90000));
|
||||
|
||||
HRESULT hr = graph->RenderFile(path, 0);
|
||||
|
||||
if (hr == S_OK)
|
||||
printf("Audio file opened successfully\n");
|
||||
else
|
||||
printf("Failed to open audio file\n");
|
||||
|
||||
graph->Release();
|
||||
|
||||
mediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);
|
||||
mediaSeeking->GetDuration(&trackLength);
|
||||
length = (long double)(trackLength) / (long double)10000000.0;
|
||||
|
||||
__int64 position = 0;
|
||||
mediaSeeking->SetPositions(&position, AM_SEEKING_AbsolutePositioning, &position, AM_SEEKING_NoPositioning);
|
||||
pause();
|
||||
}
|
||||
|
||||
Song::~Song()
|
||||
{
|
||||
audioControl->Release();
|
||||
mediaControl->Release();
|
||||
mediaSeeking->Release();
|
||||
}
|
||||
|
||||
int Song::play()
|
||||
{
|
||||
mediaControl->Run();
|
||||
playing = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Song::pause()
|
||||
{
|
||||
mediaControl->Stop();
|
||||
playing = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Song::toggle()
|
||||
{
|
||||
playing = !playing;
|
||||
if (playing)
|
||||
play();
|
||||
else
|
||||
pause();
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Song::is_playing()
|
||||
{
|
||||
OAFilterState state;
|
||||
mediaControl->GetState(INFINITE, &state);
|
||||
__int64 trackLength, position;
|
||||
mediaSeeking->GetDuration(&trackLength);
|
||||
mediaSeeking->GetCurrentPosition(&position);
|
||||
return position<trackLength;
|
||||
}
|
||||
|
||||
int Song::seek(long double position)
|
||||
{
|
||||
if (position>length)
|
||||
position = length;
|
||||
if (position<.0)
|
||||
position = .0;
|
||||
|
||||
__int64 seekPosition = __int64(10000000.0*position);
|
||||
|
||||
if (playing)
|
||||
mediaControl->Stop();
|
||||
mediaSeeking->SetPositions(&seekPosition, AM_SEEKING_AbsolutePositioning, &seekPosition, AM_SEEKING_NoPositioning);
|
||||
if (playing)
|
||||
mediaControl->Run();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
long double Song::getTime()
|
||||
{
|
||||
__int64 position;
|
||||
mediaSeeking->GetCurrentPosition(&position);
|
||||
return (long double)(position) / (long double)10000000.0;
|
||||
}
|
||||
|
||||
long double Song::getLength()
|
||||
{
|
||||
return length;
|
||||
}
|
||||
39
src/song.h
Normal file
39
src/song.h
Normal file
@ -0,0 +1,39 @@
|
||||
#pragma once
|
||||
|
||||
#pragma warning(disable:995)
|
||||
#include <dshow.h>
|
||||
#pragma warning(default:995)
|
||||
|
||||
namespace Leviathan
|
||||
{
|
||||
class Song
|
||||
{
|
||||
public:
|
||||
Song();
|
||||
|
||||
Song(LPCWSTR path);
|
||||
|
||||
~Song();
|
||||
|
||||
int play();
|
||||
|
||||
int pause();
|
||||
|
||||
int toggle();
|
||||
|
||||
bool is_playing();
|
||||
|
||||
int seek(long double position);
|
||||
|
||||
long double getTime();
|
||||
|
||||
long double getLength();
|
||||
|
||||
private:
|
||||
long double length;
|
||||
bool playing;
|
||||
IMediaControl * mediaControl;
|
||||
IMediaSeeking * mediaSeeking;
|
||||
IBasicAudio * audioControl;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user