@@ -72,6 +72,7 @@ test/xolotl/xolotl | |||
tools/make-font | |||
tutorial/01_triangle | |||
tutorial/02_cube | |||
tutorial/03_noise | |||
tutorial/05_easymesh | |||
tutorial/08_fbo | |||
tutorial/11_fractal | |||
@@ -105,6 +105,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Peeweek", "Peeweek", "{E27F | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo-peeweek", "..\..\people\peeweek\demo-peeweek.vcxproj", "{C2E01551-B636-4324-8461-71811DF6FBB5}" | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03_noise", "..\..\tutorial\03_noise.vcxproj", "{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
Debug|PS3 = Debug|PS3 | |||
@@ -445,6 +447,24 @@ Global | |||
{C2E01551-B636-4324-8461-71811DF6FBB5}.Release|Xbox 360.ActiveCfg = Release|Xbox 360 | |||
{C2E01551-B636-4324-8461-71811DF6FBB5}.Release|Xbox 360.Build.0 = Release|Xbox 360 | |||
{C2E01551-B636-4324-8461-71811DF6FBB5}.Release|Xbox 360.Deploy.0 = Release|Xbox 360 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|PS3.ActiveCfg = Debug|PS3 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|PS3.Build.0 = Debug|PS3 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|Win32.Build.0 = Debug|Win32 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|x64.ActiveCfg = Debug|x64 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|x64.Build.0 = Debug|x64 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|Xbox 360.ActiveCfg = Debug|Xbox 360 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|Xbox 360.Build.0 = Debug|Xbox 360 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Debug|Xbox 360.Deploy.0 = Debug|Xbox 360 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|PS3.ActiveCfg = Release|PS3 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|PS3.Build.0 = Release|PS3 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|Win32.ActiveCfg = Release|Win32 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|Win32.Build.0 = Release|Win32 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|x64.ActiveCfg = Release|x64 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|x64.Build.0 = Release|x64 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|Xbox 360.ActiveCfg = Release|Xbox 360 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|Xbox 360.Build.0 = Release|Xbox 360 | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E}.Release|Xbox 360.Deploy.0 = Release|Xbox 360 | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
@@ -470,6 +490,8 @@ Global | |||
{7B083DA2-FE08-4F6D-BFDD-195D5C2783EB} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{1C5B8702-290C-42DA-AA9E-671348F5B747} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{6BF81B39-EDC2-4227-9992-C2D8ABEA95AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{BCEE0132-8E24-49BE-AFEB-96DAD14396BA} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{32F3F8CF-D22E-45E4-BEB8-AD909E8C5515} = {33704AA4-F2B5-4138-A40D-E3E77F89ED46} | |||
{EE203B88-44CF-4859-9D42-7A5F40FECB52} = {8C77EAA8-1077-4EF7-AE53-97C6C60A3601} | |||
{B357514A-7881-422D-8358-161B689E7620} = {3D341D8A-E400-4B1D-BC05-B5C35487D9B5} | |||
@@ -0,0 +1,102 @@ | |||
// | |||
// Lol Engine - Noise tutorial | |||
// | |||
// Copyright: (c) 2012 Sam Hocevar <sam@hocevar.net> | |||
// This program is free software; you can redistribute it and/or | |||
// modify it under the terms of the Do What The Fuck You Want To | |||
// Public License, Version 2, as published by Sam Hocevar. See | |||
// http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||
// | |||
#if defined HAVE_CONFIG_H | |||
# include "config.h" | |||
#endif | |||
#include "core.h" | |||
#include "loldebug.h" | |||
using namespace std; | |||
using namespace lol; | |||
#if defined _WIN32 | |||
# include <direct.h> | |||
#endif | |||
extern char const *lolfx_03_noise; | |||
class NoiseDemo : public WorldEntity | |||
{ | |||
public: | |||
NoiseDemo() : | |||
m_time(0.0), | |||
m_ready(false) | |||
{ | |||
m_vertices << vec2(-1.0, 1.0); | |||
m_vertices << vec2(-1.0, -1.0); | |||
m_vertices << vec2( 1.0, -1.0); | |||
m_vertices << vec2(-1.0, 1.0); | |||
m_vertices << vec2( 1.0, -1.0); | |||
m_vertices << vec2( 1.0, 1.0); | |||
m_ready = false; | |||
} | |||
virtual void TickDraw(float seconds) | |||
{ | |||
WorldEntity::TickDraw(seconds); | |||
m_time += seconds; | |||
if (!m_ready) | |||
{ | |||
m_shader = Shader::Create(lolfx_03_noise); | |||
m_coord = m_shader->GetAttribLocation("in_Position", VertexUsage::Position, 0); | |||
m_time_uni = m_shader->GetUniformLocation("in_Time"); | |||
m_vdecl = new VertexDeclaration(VertexStream<vec2>(VertexUsage::Position)); | |||
m_vbo = new VertexBuffer(m_vertices.Bytes()); | |||
void *vertices = m_vbo->Lock(0, 0); | |||
memcpy(vertices, &m_vertices[0], m_vertices.Bytes()); | |||
m_vbo->Unlock(); | |||
m_ready = true; | |||
/* FIXME: this object never cleans up */ | |||
} | |||
m_shader->Bind(); | |||
m_shader->SetUniform(m_time_uni, m_time); | |||
m_vdecl->SetStream(m_vbo, m_coord); | |||
m_vdecl->Bind(); | |||
m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 2); | |||
m_vdecl->Unbind(); | |||
} | |||
private: | |||
Array<vec2> m_vertices; | |||
Shader *m_shader; | |||
ShaderAttrib m_coord; | |||
ShaderUniform m_time_uni; | |||
VertexDeclaration *m_vdecl; | |||
VertexBuffer *m_vbo; | |||
float m_time; | |||
bool m_ready; | |||
}; | |||
int main(int argc, char **argv) | |||
{ | |||
Application app("Tutorial 3: Noise", ivec2(1280, 720), 60.0f); | |||
#if defined _MSC_VER && !defined _XBOX | |||
_chdir(".."); | |||
#elif defined _WIN32 && !defined _XBOX | |||
_chdir("../.."); | |||
#endif | |||
new DebugFps(5, 5); | |||
new NoiseDemo(); | |||
app.Run(); | |||
return EXIT_SUCCESS; | |||
} | |||
@@ -0,0 +1,112 @@ | |||
-- GLSL.Vert -- | |||
#version 120 | |||
attribute vec2 in_Position; | |||
void main(void) | |||
{ | |||
gl_Position = vec4(in_Position, 0.0, 1.0); | |||
} | |||
-- GLSL.Frag -- | |||
#version 120 | |||
uniform float in_Time; | |||
vec3 noise3(vec2 p) | |||
{ | |||
return vec3(fract(sin(dot(p, vec2(12.3453, -54.3353432))) * 8433.235443), | |||
fract(sin(dot(p, vec2(34.23232, 98.03537))) * 8294.5345433), | |||
fract(sin(dot(p, vec2(82.91234, -19.243533))) * 2912.454369)); | |||
} | |||
vec3 noise3(vec3 p) | |||
{ | |||
return vec3(fract(sin(54.343909 + dot(p, vec3(12.3453, -54.3353432, 34.3490432))) * 8433.235443), | |||
fract(sin(93.329945 - dot(p, vec3(34.23232, 98.0353743, 90.2390984))) * 8294.5345433), | |||
fract(sin(32.039284 + dot(p, vec3(82.91234, -19.243533, 22.3294090))) * 2912.454369)); | |||
} | |||
vec3 perlin3(vec2 p) | |||
{ | |||
vec2 a = floor(p); | |||
vec2 d = p - a; | |||
d = d * d * (3.0 - 2.0 * d); | |||
vec3 n1 = noise3(a); | |||
vec3 n2 = noise3(a + vec2(1.0, 0.0)); | |||
vec3 n3 = noise3(a + vec2(0.0, 1.0)); | |||
vec3 n4 = noise3(a + vec2(1.0, 1.0)); | |||
vec3 q1 = n2 * d.x + n1 * (1.0 - d.x); | |||
vec3 q2 = n4 * d.x + n3 * (1.0 - d.x); | |||
vec3 q3 = q2 * d.y + q1 * (1.0 - d.y); | |||
return q3; | |||
} | |||
vec3 perlin3(vec3 p) | |||
{ | |||
vec3 a = floor(p); | |||
vec3 d = p - a; | |||
d = d * d * (3.0 - 2.0 * d); | |||
vec3 o1 = noise3(a); | |||
vec3 o2 = noise3(a + vec3(1.0, 0.0, 0.0)); | |||
vec3 o3 = noise3(a + vec3(0.0, 1.0, 0.0)); | |||
vec3 o4 = noise3(a + vec3(1.0, 1.0, 0.0)); | |||
vec3 o5 = noise3(a + vec3(0.0, 0.0, 1.0)); | |||
vec3 o6 = noise3(a + vec3(1.0, 0.0, 1.0)); | |||
vec3 o7 = noise3(a + vec3(0.0, 1.0, 1.0)); | |||
vec3 o8 = noise3(a + vec3(1.0, 1.0, 1.0)); | |||
vec3 n1 = o2 * d.x + o1 * (1.0 - d.x); | |||
vec3 n2 = o4 * d.x + o3 * (1.0 - d.x); | |||
vec3 n3 = o6 * d.x + o5 * (1.0 - d.x); | |||
vec3 n4 = o8 * d.x + o7 * (1.0 - d.x); | |||
vec3 q1 = n2 * d.y + n1 * (1.0 - d.y); | |||
vec3 q2 = n4 * d.y + n3 * (1.0 - d.y); | |||
vec3 q3 = q2 * d.z + q1 * (1.0 - d.z); | |||
return q3; | |||
} | |||
void main(void) | |||
{ | |||
//vec3 input = vec3(gl_FragCoord.xy, in_Time * 200.0); | |||
vec3 input = vec3(in_Time * 20.0, gl_FragCoord.xy); | |||
vec3 p = perlin3(input / 160.0) / 2.0 | |||
+ perlin3(input / 80.0) / 4.0 | |||
+ perlin3(input / 40.0) / 8.0 | |||
+ perlin3(input / 20.0) / 16.0 | |||
+ perlin3(input / 10.0) / 32.0 | |||
+ perlin3(input / 5.0) / 64.0 | |||
+ perlin3(input / 2.5) / 128.0; | |||
gl_FragColor = vec4(p.xxx, 1.0); | |||
//inputvec4(perlin3(input), 1.0); | |||
//inputvec4(noise3(floor(input / 10.0)).xxx, 1.0); | |||
//inputvec4(noise3(input), 1.0); | |||
} | |||
-- HLSL.Vert -- | |||
void main(float2 in_Position : POSITION, | |||
out float4 out_Position : POSITION) | |||
{ | |||
out_Position = float4(in_Position, 0.0, 1.0); | |||
} | |||
-- HLSL.Frag -- | |||
void main(out float4 out_FragColor : COLOR) | |||
{ | |||
out_FragColor = float4(0.7, 0.2, 0.5, 1.0); | |||
} | |||
@@ -0,0 +1,68 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
<ItemGroup Label="ProjectConfigurations"> | |||
<ProjectConfiguration Include="Debug|PS3"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>PS3</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|Win32"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>Win32</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|x64"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>x64</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|Xbox 360"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>Xbox 360</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|PS3"> | |||
<Configuration>Release</Configuration> | |||
<Platform>PS3</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|Win32"> | |||
<Configuration>Release</Configuration> | |||
<Platform>Win32</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|x64"> | |||
<Configuration>Release</Configuration> | |||
<Platform>x64</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|Xbox 360"> | |||
<Configuration>Release</Configuration> | |||
<Platform>Xbox 360</Platform> | |||
</ProjectConfiguration> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ClCompile Include="03_noise.cpp" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<LolFxCompile Include="03_noise.lolfx" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="$(SolutionDir)\..\..\src\lolcore.vcxproj"> | |||
<Project>{9e62f2fe-3408-4eae-8238-fd84238ceeda}</Project> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<PropertyGroup Label="Globals"> | |||
<ProjectGuid>{b0a53d75-cbb4-4fdf-93ac-2d12a79ada0e}</ProjectGuid> | |||
<ConfigurationType>Application</ConfigurationType> | |||
<Keyword>Win32Proj</Keyword> | |||
</PropertyGroup> | |||
<Import Project="$(SolutionDir)\Lol.Core.Config.props" /> | |||
<ImportGroup Label="ExtensionSettings"> | |||
<Import Project="$(SolutionDir)\Lol.Fx.props" /> | |||
</ImportGroup> | |||
<ImportGroup Label="PropertySheets"> | |||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | |||
<Import Project="$(SolutionDir)\Lol.Core.Vars.props" /> | |||
</ImportGroup> | |||
<PropertyGroup Label="UserMacros" /> | |||
<Import Project="$(SolutionDir)\Lol.Core.Rules.props" /> | |||
<ItemDefinitionGroup /> | |||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | |||
<ImportGroup Label="ExtensionTargets"> | |||
<Import Project="$(SolutionDir)\Lol.Fx.targets" /> | |||
</ImportGroup> | |||
</Project> |
@@ -14,7 +14,7 @@ SUFFIXES = .lolfx | |||
.lolfx.o: | |||
$(LOLFX_BUILD) | |||
noinst_PROGRAMS = 01_triangle 02_cube 05_easymesh 08_fbo 11_fractal | |||
noinst_PROGRAMS = 01_triangle 02_cube 03_noise 05_easymesh 08_fbo 11_fractal | |||
01_triangle_SOURCES = 01_triangle.cpp 01_triangle.lolfx | |||
01_triangle_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | |||
@@ -26,6 +26,11 @@ noinst_PROGRAMS = 01_triangle 02_cube 05_easymesh 08_fbo 11_fractal | |||
02_cube_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | |||
02_cube_DEPENDENCIES = $(top_builddir)/src/liblol.a | |||
03_noise_SOURCES = 03_noise.cpp 03_noise.lolfx | |||
03_noise_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | |||
03_noise_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | |||
03_noise_DEPENDENCIES = $(top_builddir)/src/liblol.a | |||
05_easymesh_SOURCES = 05_easymesh.cpp | |||
05_easymesh_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@ | |||
05_easymesh_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@ | |||