Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
edge-of-space
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dario Seyb
edge-of-space
Commits
c7f68f6a
Commit
c7f68f6a
authored
Jan 06, 2016
by
David Gilbert
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Transform Feedback uncleaned
parent
c7b8a418
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
645 additions
and
72 deletions
+645
-72
data/shader/DispMapping.fsh
data/shader/DispMapping.fsh
+48
-3
data/shader/DispMapping.gsh
data/shader/DispMapping.gsh
+16
-16
data/shader/DispMapping.tcsh
data/shader/DispMapping.tcsh
+15
-13
data/shader/DispMapping.tesh
data/shader/DispMapping.tesh
+6
-1
data/shader/DispMapping.vsh
data/shader/DispMapping.vsh
+26
-9
data/shader/TerrainTransformFeedback.gsh
data/shader/TerrainTransformFeedback.gsh
+54
-0
data/shader/TerrainTransformFeedback.tcsh
data/shader/TerrainTransformFeedback.tcsh
+96
-0
data/shader/TerrainTransformFeedback.tesh
data/shader/TerrainTransformFeedback.tesh
+220
-0
data/shader/TerrainTransformFeedback.vsh
data/shader/TerrainTransformFeedback.vsh
+13
-0
src/game/include/engine/graphics/DrawCall.hpp
src/game/include/engine/graphics/DrawCall.hpp
+1
-0
src/game/include/engine/graphics/RendererSystem.hpp
src/game/include/engine/graphics/RendererSystem.hpp
+14
-1
src/game/include/engine/scene/Drawable.hpp
src/game/include/engine/scene/Drawable.hpp
+2
-1
src/game/include/engine/scene/OrbitalSimulationSystem.hpp
src/game/include/engine/scene/OrbitalSimulationSystem.hpp
+1
-0
src/game/src/engine/graphics/RendererSystem.cpp
src/game/src/engine/graphics/RendererSystem.cpp
+129
-23
src/game/src/engine/scene/OrbitalSimulationSystem.cpp
src/game/src/engine/scene/OrbitalSimulationSystem.cpp
+3
-4
src/game/src/engine/scene/SceneGraphSystem.cpp
src/game/src/engine/scene/SceneGraphSystem.cpp
+1
-1
No files found.
data/shader/DispMapping.fsh
View file @
c7f68f6a
#pragma import "CommonDeferredFrag.glsl"
#version 410 core
in vec3 gNormal;
in vec2 gTexCoord;
in vec3 gPosition;
in vec3 gPatchDistance;
in vec3 gTriDistance;
uniform sampler2D uTexture;
uniform vec4 uEmissiveColor;
uniform vec4 uTintColor;
uniform float uTime;
uniform mat4 uModelMatrix;
uniform mat4 uViewProjectionMatrix;
uniform mat4 uPrevModelMatrix;
uniform mat4 uPrevViewProjectionMatrix;
out vec4 oColor;
out vec4 oEmissive;
out vec3 oNormal;
out vec3 oMotion;
float rand(vec2 co){
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
float amplify(float d, float scale, float offset){
d = scale * d + offset;
d = clamp(d, 0, 1);
...
...
@@ -12,7 +36,7 @@ float amplify(float d, float scale, float offset){
vec4 color() {
vec4 color = texture(uTexture,
te
TexCoord).rgba * uTintColor;
vec4 color = texture(uTexture,
g
TexCoord).rgba * uTintColor;
float d1 = min(min(gTriDistance.x, gTriDistance.y), gTriDistance.z);
float d2 = min(min(gPatchDistance.x, gPatchDistance.y), gPatchDistance.z);
...
...
@@ -26,5 +50,26 @@ vec4 emissive() {
}
vec3 normal() {
return teNormal;
return gNormal;
}
void main()
{
vec4 color = color();
float sampl = rand(gl_FragCoord.xy + vec2(mod(uTime,1)));
if(sampl > color.a) discard;
vec4 thisPosition = uViewProjectionMatrix * vec4(gPosition, 1);
vec4 prevPosition = uPrevViewProjectionMatrix * uPrevModelMatrix * inverse(uModelMatrix) * vec4(gPosition, 1);
vec3 prevFragCoord = prevPosition.xyz/prevPosition.w;
vec3 thisFragCoord = thisPosition.xyz/thisPosition.w;
oMotion = (thisFragCoord-prevFragCoord)*0.5;
oMotion.z = thisPosition.z;
oColor = color;
oEmissive = emissive();
oNormal = normalize(normal());
}
\ No newline at end of file
data/shader/DispMapping.gsh
View file @
c7f68f6a
...
...
@@ -3,15 +3,15 @@
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
in vec3 tPosition[3];
in vec3 tPatchDistance[3];
precise
in vec3 tPosition[3];
precise
in vec3 tPatchDistance[3];
in vec3 tNormal[3];
precise
in vec3 tNormal[3];
in vec2 tTexCoord[3];
out vec3 te
Normal;
out vec3 te
Position;
out vec2 te
TexCoord;
precise out vec3 g
Normal;
precise out vec3 g
Position;
precise out vec2 g
TexCoord;
out vec3 gPatchDistance;
out vec3 gTriDistance;
...
...
@@ -23,28 +23,28 @@ void main()
{
vec3 A = tPosition[2] - tPosition[0];
vec3 B = tPosition[1] - tPosition[0];
te
Normal = -normalize(cross(A, B));
g
Normal = -normalize(cross(A, B));
gPatchDistance = tPatchDistance[0];
//
te
Normal = tNormal[0];
te
TexCoord = tTexCoord[0];
te
Position = tPosition[0];
//
g
Normal = tNormal[0];
g
TexCoord = tTexCoord[0];
g
Position = tPosition[0];
gTriDistance = vec3(1, 0, 0);
gl_Position = gl_in[0].gl_Position; EmitVertex();
//
te
Normal = tNormal[1];
te
TexCoord = tTexCoord[1];
te
Position = tPosition[1];
//
g
Normal = tNormal[1];
g
TexCoord = tTexCoord[1];
g
Position = tPosition[1];
gPatchDistance = tPatchDistance[1];
gTriDistance = vec3(0, 1, 0);
gl_Position = gl_in[1].gl_Position; EmitVertex();
//
te
Normal = tNormal[2];
te
TexCoord = tTexCoord[2];
te
Position = tPosition[2];
//
g
Normal = tNormal[2];
g
TexCoord = tTexCoord[2];
g
Position = tPosition[2];
gPatchDistance = tPatchDistance[2];
gTriDistance = vec3(0, 0, 1);
...
...
data/shader/DispMapping.tcsh
View file @
c7f68f6a
...
...
@@ -2,15 +2,17 @@
layout(vertices = 3) out;
in vec3 vPosition[];
in vec2 vTexCoord[];
in vec3 vNormal[];
in vec3 vLocal[];
precise in vec3 vNormal[];
precise in vec3 vPosition[];
precise in vec2 vTexCoord[];
precise out vec3 tcNormal[];
precise out vec2 tcTexCoord[];
precise out vec3 tcPosition[];
in vec3 tcPatchDistance[];
in vec3 tcTriDistance[];
uniform mat4 uViewProjectionMatrix;
uniform mat4 uModelMatrix;
...
...
@@ -20,31 +22,31 @@ uniform vec3 cameraPosition;
float getTessLevel(float d0, float d1){
//return 1;
float avg = (d0 + d1) / 2.0;
if(avg >=
2
500){
if(avg >= 500){
return 1;
}
if(avg >=
15
00){
if(avg >=
4
00){
return 2;
}
if(avg >=
10
00){
if(avg >=
3
00){
return 4;
}
if(avg >=
50
0){
if(avg >=
25
0){
return 8;
}
if(avg >= 200){
return 16;
}
if(avg >= 1
0
0){
if(avg >= 1
5
0){
return 32;
}
if(avg >=
5
0){
if(avg >=
10
0){
return 64;
}
else if(avg <
= 0){
return
0
;
if(avg >
= 0){
return
64
;
}
else return 1;
}
...
...
data/shader/DispMapping.tesh
View file @
c7f68f6a
...
...
@@ -6,9 +6,13 @@ precise in vec2 tcTexCoord[];
precise in vec3 tcNormal[];
precise in vec3 tcPosition[];
in vec3 tcPatchDistance[];
in vec3 tcTriDistance[];
precise out vec3 tNormal;
precise out vec2 tTexCoord;
precise out vec3 tPosition;
out vec3 tPatchDistance;
uniform mat4 uViewProjectionMatrix;
...
...
@@ -210,9 +214,10 @@ void main(){
//vec4 camWorld = uModelMatrix * vec4(tPosition, 1.0);
tPosition += tNormal * fBM( tPosition , 8,
32, 0.007
) ;
tPosition += tNormal * fBM( tPosition , 8,
64, 0.007
) ;
tNormal = inverse(transpose(mat3(uModelMatrix))) * normalize(tNormal);
tPosition = (uModelMatrix * vec4(tPosition, 1)).xyz;
gl_Position = uViewProjectionMatrix * vec4(tPosition, 1);
...
...
data/shader/DispMapping.vsh
View file @
c7f68f6a
#
pragma import "CommonDeferredVert.glsl"
#
version 410 core
vec3 normal() {
return aNormal
;
}
precise in vec3 gNormal;
precise in vec3 gPosition
;
precise in vec2 gTexCoord;
vec2 texCoord() {
return aTexCoord;
}
in vec3 gPatchDistance;
in vec3 gTriDistance;
vec3 position() {
return aPosition;
precise out vec3 vNormal;
precise out vec3 vPosition;
precise out vec2 vTexCoord;
out vec3 vPatchDistance;
out vec3 vTriDistance;
uniform mat4 uModelMatrix;
uniform mat4 uViewProjectionMatrix;
void main(){
vNormal = gNormal;
vPosition = gPosition;
vTexCoord = gTexCoord;
vPatchDistance = gPatchDistance;
vTriDistance = gTriDistance;
//gl_Position = uViewProjectionMatrix * vec4(gPosition, 1);// vec4(0, 0, 0, 1);
}
\ No newline at end of file
data/shader/TerrainTransformFeedback.gsh
0 → 100644
View file @
c7f68f6a
#version 410 core
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
precise in vec3 tPosition[3];
precise in vec3 tPatchDistance[3];
precise in vec3 tNormal[3];
precise in vec2 tTexCoord[3];
precise out vec3 gNormal;
precise out vec3 gPosition;
precise out vec2 gTexCoord;
precise out vec3 gPatchDistance;
precise out vec3 gTriDistance;
uniform mat4 uViewProjectionMatrix;
uniform mat4 uModelMatrix;
void main()
{
vec3 A = tPosition[2] - tPosition[0];
vec3 B = tPosition[1] - tPosition[0];
gNormal = -normalize(cross(A, B));
//gNormal = vec3(1.11, 1.11, 1.11);
gPatchDistance = tPatchDistance[0];
//gNormal = tNormal[0];
gTexCoord = tTexCoord[0];
gPosition = tPosition[0];
gTriDistance = vec3(1, 0, 0);
gl_Position = gl_in[0].gl_Position; EmitVertex();
//gNormal = tNormal[1];
gTexCoord = tTexCoord[1];
gPosition = tPosition[1];
gPatchDistance = tPatchDistance[1];
gTriDistance = vec3(0, 1, 0);
gl_Position = gl_in[1].gl_Position; EmitVertex();
//gNormal = tNormal[2];
gTexCoord = tTexCoord[2];
gPosition = tPosition[2];
gPatchDistance = tPatchDistance[2];
gTriDistance = vec3(0, 0, 1);
gl_Position = gl_in[2].gl_Position; EmitVertex();
EndPrimitive();
}
data/shader/TerrainTransformFeedback.tcsh
0 → 100644
View file @
c7f68f6a
#version 410 core
layout(vertices = 3) out;
in vec3 vPosition[];
in vec2 vTexCoord[];
in vec3 vNormal[];
in vec3 vLocal[];
precise out vec3 tcNormal[];
precise out vec2 tcTexCoord[];
precise out vec3 tcPosition[];
uniform mat4 uViewProjectionMatrix;
uniform mat4 uModelMatrix;
uniform vec3 cameraPosition;
#define ID gl_InvocationID
float getTessLevel(float d0, float d1){
float avg = (d0 + d1) / 2.0;
if(avg >= 2500){
return 1;
}
if(avg >= 1500){
return 2;
}
if(avg >= 1000){
return 4;
}
if(avg >= 500){
return 8;
}
if(avg >= 200){
return 16;
}
if(avg >= 100){
return 32;
}
if(avg >= 50){
return 64;
}
if(avg >= 0){
return 64;
}
else return 1;
}
void main(){
tcNormal[ID] = vNormal[ID];
tcTexCoord[ID] = vTexCoord[ID];
tcPosition[ID] = vPosition[ID];
if (ID == 0) {
float d0 = distance(cameraPosition, (uModelMatrix * vec4(tcPosition[0], 1)).xyz );
float d1 = distance(cameraPosition, (uModelMatrix * vec4(tcPosition[1], 1)).xyz );
float d2 = distance(cameraPosition, (uModelMatrix * vec4(tcPosition[2], 1)).xyz );
gl_TessLevelOuter[0] = getTessLevel(d1, d2);
gl_TessLevelOuter[1] = getTessLevel(d2, d0);
gl_TessLevelOuter[2] = getTessLevel(d0, d1);
gl_TessLevelInner[0] = 0.5 * gl_TessLevelOuter[2];
/*
float avgDist = (d0 + d1 + d2)/3.0;
vec3 midPoint;
float fDistance;
midPoint = (tcPosition[2] + tcPosition[0] / 2.0);
fDistance = distance(midPoint, cameraPosition) * 1;
gl_TessLevelOuter[0] = getTessLevel(fDistance, fDistance);
midPoint = (tcPosition[2] + tcPosition[0] / 2.0);
fDistance = distance(midPoint, cameraPosition) * 1;
gl_TessLevelOuter[1] = getTessLevel(fDistance, fDistance);
midPoint = (tcPosition[2] + tcPosition[0] / 2.0);
fDistance = distance(midPoint, cameraPosition) * 1;
gl_TessLevelOuter[2] = getTessLevel(fDistance, fDistance);
gl_TessLevelInner[0] = (gl_TessLevelOuter[0] + gl_TessLevelOuter[1] +gl_TessLevelOuter[2]) /3;
*/
}
}
data/shader/TerrainTransformFeedback.tesh
0 → 100644
View file @
c7f68f6a
#version 410 core
layout(triangles, equal_spacing, ccw) in;
precise in vec2 tcTexCoord[];
precise in vec3 tcNormal[];
precise in vec3 tcPosition[];
precise out vec3 tNormal;
precise out vec2 tTexCoord;
precise out vec3 tPosition;
out vec3 tPatchDistance;
uniform mat4 uViewProjectionMatrix;
uniform mat4 uModelMatrix;
uniform vec3 cameraPostion;
vec3 mod289(vec3 x)
{
return x - floor(x * (1.0 / 289.0)) * 289.0;
}
vec4 mod289(vec4 x)
{
return x - floor(x * (1.0 / 289.0)) * 289.0;
}
vec4 permute(vec4 x)
{
return mod289(((x*34.0)+1.0)*x);
}
vec4 taylorInvSqrt(vec4 r)
{
return 1.79284291400159 - 0.85373472095314 * r;
}
vec3 fade(vec3 t) {
return t*t*t*(t*(t*6.0-15.0)+10.0);
}
// Classic Perlin noise
float cnoise(vec3 P)
{
vec3 Pi0 = floor(P); // Integer part for indexing
vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1
Pi0 = mod289(Pi0);
Pi1 = mod289(Pi1);
vec3 Pf0 = fract(P); // Fractional part for interpolation
vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0
vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
vec4 iy = vec4(Pi0.yy, Pi1.yy);
vec4 iz0 = Pi0.zzzz;
vec4 iz1 = Pi1.zzzz;
vec4 ixy = permute(permute(ix) + iy);
vec4 ixy0 = permute(ixy + iz0);
vec4 ixy1 = permute(ixy + iz1);
vec4 gx0 = ixy0 * (1.0 / 7.0);
vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;
gx0 = fract(gx0);
vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
vec4 sz0 = step(gz0, vec4(0.0));
gx0 -= sz0 * (step(0.0, gx0) - 0.5);
gy0 -= sz0 * (step(0.0, gy0) - 0.5);
vec4 gx1 = ixy1 * (1.0 / 7.0);
vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;
gx1 = fract(gx1);
vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
vec4 sz1 = step(gz1, vec4(0.0));
gx1 -= sz1 * (step(0.0, gx1) - 0.5);
gy1 -= sz1 * (step(0.0, gy1) - 0.5);
vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);
vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
g000 *= norm0.x;
g010 *= norm0.y;
g100 *= norm0.z;
g110 *= norm0.w;
vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
g001 *= norm1.x;
g011 *= norm1.y;
g101 *= norm1.z;
g111 *= norm1.w;
float n000 = dot(g000, Pf0);
float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
float n111 = dot(g111, Pf1);
vec3 fade_xyz = fade(Pf0);
vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
return 2.2 * n_xyz;
}
// Classic Perlin noise, periodic variant
float pnoise(vec3 P, vec3 rep)
{
vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period
vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period
Pi0 = mod289(Pi0);
Pi1 = mod289(Pi1);
vec3 Pf0 = fract(P); // Fractional part for interpolation
vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0
vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
vec4 iy = vec4(Pi0.yy, Pi1.yy);
vec4 iz0 = Pi0.zzzz;
vec4 iz1 = Pi1.zzzz;
vec4 ixy = permute(permute(ix) + iy);
vec4 ixy0 = permute(ixy + iz0);
vec4 ixy1 = permute(ixy + iz1);
vec4 gx0 = ixy0 * (1.0 / 7.0);
vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;
gx0 = fract(gx0);
vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
vec4 sz0 = step(gz0, vec4(0.0));
gx0 -= sz0 * (step(0.0, gx0) - 0.5);
gy0 -= sz0 * (step(0.0, gy0) - 0.5);
vec4 gx1 = ixy1 * (1.0 / 7.0);
vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;
gx1 = fract(gx1);
vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
vec4 sz1 = step(gz1, vec4(0.0));
gx1 -= sz1 * (step(0.0, gx1) - 0.5);
gy1 -= sz1 * (step(0.0, gy1) - 0.5);
vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);
vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
g000 *= norm0.x;
g010 *= norm0.y;
g100 *= norm0.z;
g110 *= norm0.w;
vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
g001 *= norm1.x;
g011 *= norm1.y;
g101 *= norm1.z;
g111 *= norm1.w;
float n000 = dot(g000, Pf0);
float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
float n111 = dot(g111, Pf1);
vec3 fade_xyz = fade(Pf0);
vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
return 2.2 * n_xyz;
}
float fBM(vec3 p, int fOct, float freq, float weight){
float fValue = 0.0;
for(int i = 0; i <= fOct; i++){
fValue += cnoise(freq * p) * weight;
weight *= 0.5;
freq *= 2.0;
}
return fValue;
}
vec2 interpolate2D(vec2 v0, vec2 v1, vec2 v2){
return vec2(gl_TessCoord.x) * v0 + vec2(gl_TessCoord.y) * v1 + vec2(gl_TessCoord.z) * v2;
}
vec3 interpolate3D(vec3 v0, vec3 v1, vec3 v2){
return vec3(gl_TessCoord.x ) * v0 + vec3(gl_TessCoord.y) * v1 + vec3(gl_TessCoord.z) * v2;
}
void main(){
tNormal = interpolate3D(tcNormal[0], tcNormal[1], tcNormal[2]);
tTexCoord = interpolate2D(tcTexCoord[0], tcTexCoord[1], tcTexCoord[2]);
tPatchDistance = gl_TessCoord;
tPosition = interpolate3D(tcPosition[0], tcPosition[1], tcPosition[2]);
//vec4 camWorld = uModelMatrix * vec4(tPosition, 1.0);
//tPosition += tNormal * fBM( tPosition , 8, 32, 0.005 ) ;
tNormal = inverse(transpose(mat3(uModelMatrix))) * normalize(tNormal);
//tPosition = (uModelMatrix * vec4(tPosition, 1)).xyz;
//gl_Position = uViewProjectionMatrix * vec4(tPosition, 1);
}
data/shader/TerrainTransformFeedback.vsh
0 → 100644
View file @
c7f68f6a
#pragma import "CommonDeferredVert.glsl"
vec3 normal() {
return aNormal;
}
vec2 texCoord() {
return aTexCoord;
}
vec3 position() {
return aPosition;
}
\ No newline at end of file
src/game/include/engine/graphics/DrawCall.hpp
View file @
c7f68f6a
...
...
@@ -14,4 +14,5 @@ struct DrawCall {
Geometry
geometry
;
glm
::
mat4
lastRenderTransform
;
glm
::
mat4
thisRenderTransform
;
bool
renderToBuffer
;
};
\ No newline at end of file
src/game/include/engine/graphics/RendererSystem.hpp
View file @
c7f68f6a
...
...
@@ -58,7 +58,17 @@ private:
ACGL
::
OpenGL
::
SharedFrameBufferObject
m_primaryCompositingBuffer
;
ACGL
::
OpenGL
::
SharedFrameBufferObject
m_postfxTargetBuffer
;
ACGL
::
OpenGL
::
SharedFrameBufferObject
m_txaaHistoryBuffer
;
ACGL
::
OpenGL
::
SharedVertexArrayObject
m_transformFeedbackVAO
;
ACGL
::
OpenGL
::
SharedArrayBuffer
m_transformFeedbackBuffer
;
ACGL
::
OpenGL
::
SharedVertexArrayObject
m_transformFeedbackVAO2
;
ACGL
::
OpenGL
::
SharedArrayBuffer
m_transformFeedbackBuffer2
;
GLuint
Feedback
;