Compare commits

...

3 Commits

Author SHA1 Message Date
bf04c70f50 Set SMAA antialiasing 2018-01-06 00:51:05 +03:00
f2e238ed5e Making antialiasing test 2017-12-04 14:14:14 +03:00
Vladislav Khorev Dev
ed4a0178da SSAA 4X demo 2017-12-02 15:25:02 +05:00
80 changed files with 1291 additions and 1006 deletions

19
assets/SSAA_4X.frag Executable file
View File

@ -0,0 +1,19 @@
precision mediump float;
uniform sampler2D Texture;
uniform vec2 samplesOffset[4];
varying vec2 texCoord;
void main()
{
vec3 color = vec3(0, 0, 0);
for (int i = 0; i < 4; ++i)
{
color += texture2D(Texture, texCoord + samplesOffset[i]).rgb;
}
color /= 4;
//gl_FragColor = vec4(texture2D(Texture, texCoord ), 1.0);
gl_FragColor = vec4(color, 1.0);
}

11
assets/SSAA_4X.vertex Executable file
View File

@ -0,0 +1,11 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
varying vec2 texCoord;
uniform mat4 ProjectionMatrix;
void main()
{
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
texCoord = vTexCoord;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 759 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1022 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

7
assets/color_fragment.txt Executable file
View File

@ -0,0 +1,7 @@
precision mediump float;
varying vec4 color;
void main()
{
gl_FragColor = color;
}

11
assets/color_vertex.txt Executable file
View File

@ -0,0 +1,11 @@
attribute vec3 vPosition;
attribute vec4 vColor;
varying vec4 color;
uniform mat4 ProjectionMatrix;
void main()
{
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
color = vColor;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,33 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
255, 0, 0, 255
255, 40, 40, 255
255, 128, 128, 255
Colormap
111111111111
111111111111
111111111111
222222222222
222222222222
222222222222
222222222222
333333333333
333333333333
333333333333
000000000000
000000000000
000000000000
Brickmap
111111111111
111111111111
111111111111
000000000000
111111111111
111111111111
000000000000
111111111111
111111111111
000000000000
000000000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
255, 0, 190, 255
255, 0, 255, 255
Colormap
002222222200
002222222200
000222222000
000022220000
111002200111
111100001111
011110011110
001111111100
000111111000
000011110000
000001100000
000000000000
000000000000
Brickmap
002111111200
002211112200
000221122000
000022220000
111002200111
221100001122
022110011220
002211112200
000221122000
000022220000
000002200000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 255, 255, 255
0, 0, 0, 255
0, 237, 255, 255
0, 144, 255, 255
0, 59, 255, 255
Colormap
333333333333
333333333333
333333333333
000000000000
222220022222
222220022222
222220022222
000000000000
111110011111
111110011111
111110011111
000000000000
000000000000
Brickmap
111111111111
111111111111
222222222222
000000000000
111110011111
111110011111
222220022222
000000000000
111110011111
111110011111
333330033333
000000000000
000000000000

View File

@ -1,32 +0,0 @@
255, 128, 128, 255
0, 0, 0, 255
159, 240, 255, 255
0, 148, 255, 255
Colormap
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
Brickmap
000311113000
000311113000
333311113333
111111111111
111111111111
222221122222
333321123333
000321123000
000321123000
000322223000
000333333000
000000000000
000000000000

Binary file not shown.

View File

@ -1,32 +0,0 @@
255, 0, 0, 255
0, 0, 0, 255
0, 255, 255, 255
7, 255, 189, 255
Colormap
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
111111111111
222222222222
000000000000
Brickmap
111011110111
111011110111
222022220222
000000000000
111011110111
222022220222
000000000000
111000000111
222000000222
000000000000
222222222222
000000000000
000000000000

View File

@ -1,33 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
0, 151, 113, 255
7, 255, 189, 255
128, 143, 128, 255
Colormap
000000000000
033333333330
031111111130
031111111130
033333333330
000000000000
033330033330
032230032230
032230032230
033330033330
000000000000
000000000000
000000000000
Brickmap
000000000000
022222222220
021111111120
021111111120
022222222220
000000000000
022220022220
021120021120
021120021120
022220022220
000000000000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 0, 0, 255
0, 0, 0, 255
101, 97, 255, 255
5, 186, 255, 255
105, 201, 255, 255
Colormap
000000333333
000003333333
000033311111
333333133333
333331333333
333313333333
111133311111
333333100000
333331000000
333310000000
111100000000
000000000000
000000000000
Brickmap
000000111111
000001111111
000011133333
111111311111
111113111111
111131111111
333311133333
111111300000
111113000000
111130000000
333300000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
255, 0, 255, 255
0, 0, 0, 255
163, 255, 198, 255
0, 255, 182, 255
Colormap
000022220000
000222222000
000022220000
111000000111
111100001111
111110011111
111111111111
111111111111
111111111111
111111111111
000000000000
000000000000
000000000000
Brickmap
000033330000
000311113000
000033330000
111000000111
111100001111
111110011111
111111111111
111111111111
111111111111
222222222222
000000000000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 255, 255, 255
0, 0, 0, 255
255, 200, 5, 255
255, 153, 0, 255
255, 97, 0, 255
Colormap
000000000000
000333000333
000333000333
000333000333
222000222000
222000222000
222000222000
000111000111
000111000111
000111000111
000000000000
000000000000
000000000000
Brickmap
000000000000
000222000222
000212000212
000222000222
222000222000
212000212000
222000222000
000222000222
000212000212
000222000222
000000000000
000000000000
000000000000

View File

@ -1,33 +0,0 @@
255, 255, 0, 255
0, 0, 0, 255
230, 230, 230, 255
195, 195, 195, 255
150, 150, 150, 255
Colormap
333333333333
030030030030
030030030030
030030030030
222222222222
020020020020
020020020020
010010010010
010010010010
020020020020
000000000000
000000000000
000000000000
Brickmap
111111111111
010010010010
010010010010
010010010010
222222222222
010010010010
010010010010
010010010010
010010010010
020020020020
000000000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
0, 255, 255, 255
0, 0, 0, 255
217, 56, 62, 255
132, 56, 62, 255
Colormap
111111111111
111111111111
222211112222
000211112000
000211112000
022211112220
021111111120
021111111120
021111111120
022222222220
000000000000
000000000000
000000000000
Brickmap
111111111111
111111111111
222211112222
000211112000
000211112000
022211112220
021111111120
021111111120
021111111120
033333333330
000000000000
000000000000
000000000000

View File

@ -1,32 +0,0 @@
0, 255, 0, 255
0, 0, 0, 255
255, 221, 0, 255
255, 0, 0, 255
Colormap
222220022222
222220022222
222220022222
222220022222
000000000000
111111111111
111111111111
000000000000
111111111111
111111111111
000000000000
000000000000
000000000000
Brickmap
111110011111
111110011111
111110011111
222220022222
000000000000
111111111111
333333333333
000000000000
111111111111
222222222222
000000000000
000000000000
000000000000

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -7,7 +7,7 @@ void main()
{ {
vec4 color = texture2D(Texture,texCoord).rgba; vec4 color = texture2D(Texture,texCoord).rgba;
gl_FragColor = vec4(color.rgb, color.a * Transparency); gl_FragColor = vec4(color.rgb, 1.0);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 433 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 553 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

422
assets/smaa/blend_fragment.txt Executable file
View File

@ -0,0 +1,422 @@
#version 410 compatibility
#define SMAA_PIXEL_SIZE vec2(1.0 / 512.0, 1.0 / 512.0)
#define SMAA_THRESHOLD 0.05
#define SMAA_MAX_SEARCH_STEPS 32
#define SMAA_MAX_SEARCH_STEPS_DIAG 16
#define SMAA_CORNER_ROUNDING 25
#ifndef SMAA_DEPTH_THRESHOLD
#define SMAA_DEPTH_THRESHOLD (0.1 * SMAA_THRESHOLD)
#endif
#ifndef SMAA_REPROJECTION
#define SMAA_REPROJECTION 0
#endif
#define SMAA_REPROJECTION_WEIGHT_SCALE 30.0
#ifndef SMAA_AREATEX_MAX_DISTANCE
#define SMAA_AREATEX_MAX_DISTANCE 16
#endif
#ifndef SMAA_AREATEX_MAX_DISTANCE_DIAG
#define SMAA_AREATEX_MAX_DISTANCE_DIAG 20
#endif
#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
/* --- Define section is over ---- */
//-----------------------------------------------------------------------------
// Diagonal Search Functions
/**
* These functions allows to perform diagonal pattern searches.
*/
float SMAASearchDiag1(sampler2D edgesTex, vec2 texcoord, vec2 dir, float c) {
texcoord += dir * SMAA_PIXEL_SIZE;
vec2 e = vec2(0.0, 0.0);
float i;
for (i = 0.0; i < float(SMAA_MAX_SEARCH_STEPS_DIAG); i++) {
e.rg = textureLod(edgesTex, texcoord, 0.0).rg;
//SMAA_FLATTEN
if (dot(e, vec2(1.0, 1.0)) < 1.9) break;
texcoord += dir * SMAA_PIXEL_SIZE;
}
return i + float(e.g > 0.9) * c;
}
float SMAASearchDiag2(sampler2D edgesTex, vec2 texcoord, vec2 dir, float c) {
texcoord += dir * SMAA_PIXEL_SIZE;
vec2 e = vec2(0.0, 0.0);
float i;
for (i = 0.0; i < float(SMAA_MAX_SEARCH_STEPS_DIAG); i++) {
e.g = textureLod(edgesTex, texcoord, 0.0).g;
e.r = textureLodOffset(edgesTex, texcoord, 0.0, ivec2(1, 0)).r;
//SMAA_FLATTEN
if (dot(e, vec2(1.0, 1.0)) < 1.9) break;
texcoord += dir * SMAA_PIXEL_SIZE;
}
return i + float(e.g > 0.9) * c;
}
/**
* Similar to SMAAArea, this calculates the area corresponding to a certain
* diagonal distance and crossing edges 'e'.
*/
vec2 SMAAAreaDiag(sampler2D areaTex, vec2 dist, vec2 e, float offset) {
vec2 texcoord = float(SMAA_AREATEX_MAX_DISTANCE_DIAG) * e + dist;
// We do a scale and bias for mapping to texel space:
texcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + (0.5 * SMAA_AREATEX_PIXEL_SIZE);
// Diagonal areas are on the second half of the texture:
texcoord.x += 0.5;
// Move to proper place, according to the subpixel offset:
texcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;
return textureLod(areaTex, texcoord, 0.0).rg;
}
/**
* This searches for diagonal patterns and returns the corresponding weights.
*/
vec2 SMAACalculateDiagWeights(sampler2D edgesTex, sampler2D areaTex, vec2 texcoord, vec2 e, ivec4 subsampleIndices) {
vec2 weights = vec2(0.0, 0.0);
vec2 d;
d.x = e.r > 0.0? SMAASearchDiag1(edgesTex, texcoord, vec2(-1.0, 1.0), 1.0) : 0.0;
d.y = SMAASearchDiag1(edgesTex, texcoord, vec2(1.0, -1.0), 0.0);
//SMAA_BRANCH
if (d.r + d.g > 2.0) { // d.r + d.g + 1 > 3
vec4 coords = fma(vec4(-d.r, d.r, d.g, -d.g), SMAA_PIXEL_SIZE.xyxy, texcoord.xyxy);
vec4 c;
c.x = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2(-1, 0)).g;
c.y = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2( 0, 0)).r;
c.z = textureLodOffset(edgesTex, coords.zw, 0.0, ivec2( 1, 0)).g;
c.w = textureLodOffset(edgesTex, coords.zw, 0.0, ivec2( 1, -1)).r;
vec2 e = 2.0 * c.xz + c.yw;
float t = float(SMAA_MAX_SEARCH_STEPS_DIAG) - 1.0;
e *= step(d.rg, vec2(t, t));
weights += SMAAAreaDiag(areaTex, d, e, float(subsampleIndices.z));
}
d.x = SMAASearchDiag2(edgesTex, texcoord, vec2(-1.0, -1.0), 0.0);
float right = textureLodOffset(edgesTex, texcoord, 0.0, ivec2(1, 0)).r;
d.y = right > 0.0? SMAASearchDiag2(edgesTex, texcoord, vec2(1.0, 1.0), 1.0) : 0.0;
//SMAA_BRANCH
if (d.r + d.g > 2.0) { // d.r + d.g + 1 > 3
vec4 coords = fma(vec4(-d.r, -d.r, d.g, d.g), SMAA_PIXEL_SIZE.xyxy, texcoord.xyxy);
vec4 c;
c.x = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2(-1, 0)).g;
c.y = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2( 0, -1)).r;
c.zw = textureLodOffset(edgesTex, coords.zw, 0.0, ivec2( 1, 0)).gr;
vec2 e = 2.0 * c.xz + c.yw;
float t = float(SMAA_MAX_SEARCH_STEPS_DIAG) - 1.0;
e *= step(d.rg, vec2(t, t));
weights += SMAAAreaDiag(areaTex, d, e, float(subsampleIndices.w)).gr;
}
return weights;
}
//-----------------------------------------------------------------------------
// Horizontal/Vertical Search Functions
/**
* This allows to determine how much length should we add in the last step
* of the searches. It takes the bilinearly interpolated edge (see
* @PSEUDO_GATHER4), and adds 0, 1 or 2, depending on which edges and
* crossing edges are active.
*/
float SMAASearchLength(sampler2D searchTex, vec2 e, float bias, float scale) {
// Not required if searchTex accesses are set to point:
// vec2 SEARCH_TEX_PIXEL_SIZE = 1.0 / vec2(66.0, 33.0);
// e = vec2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +
// e * vec2(scale, 1.0) * vec2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;
e.r = bias + e.r * scale;
e.g = -e.g;
return 255.0 * textureLod(searchTex, e, 0.0).r;
}
/**
* Horizontal/vertical search functions for the 2nd pass.
*/
float SMAASearchXLeft(sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end) {
/**
* @PSEUDO_GATHER4
* This texcoord has been offset by (-0.25, -0.125) in the vertex shader to
* sample between edge, thus fetching four edges in a row.
* Sampling with different offsets in each direction allows to disambiguate
* which edges are active from the four fetched ones.
*/
vec2 e = vec2(0.0, 1.0);
while (texcoord.x > end &&
e.g > 0.8281 && // Is there some edge not activated?
e.r == 0.0) { // Or is there a crossing edge that breaks the line?
e = textureLod(edgesTex, texcoord, 0.0).rg;
texcoord -= vec2(2.0, 0.0) * SMAA_PIXEL_SIZE;
}
// We correct the previous (-0.25, -0.125) offset we applied:
texcoord.x += 0.25 * SMAA_PIXEL_SIZE.x;
// The searches are bias by 1, so adjust the coords accordingly:
texcoord.x += SMAA_PIXEL_SIZE.x;
// Disambiguate the length added by the last step:
texcoord.x += 2.0 * SMAA_PIXEL_SIZE.x; // Undo last step
texcoord.x -= SMAA_PIXEL_SIZE.x * SMAASearchLength(searchTex, e, 0.0, 0.5);
return texcoord.x;
}
float SMAASearchXRight(sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end) {
vec2 e = vec2(0.0, 1.0);
while (texcoord.x < end &&
e.g > 0.8281 && // Is there some edge not activated?
e.r == 0.0) { // Or is there a crossing edge that breaks the line?
e = textureLod(edgesTex, texcoord, 0.0).rg;
texcoord += vec2(2.0, 0.0) * SMAA_PIXEL_SIZE;
}
texcoord.x -= 0.25 * SMAA_PIXEL_SIZE.x;
texcoord.x -= SMAA_PIXEL_SIZE.x;
texcoord.x -= 2.0 * SMAA_PIXEL_SIZE.x;
texcoord.x += SMAA_PIXEL_SIZE.x * SMAASearchLength(searchTex, e, 0.5, 0.5);
return texcoord.x;
}
float SMAASearchYUp(sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end) {
vec2 e = vec2(1.0, 0.0);
while (texcoord.y > end &&
e.r > 0.8281 && // Is there some edge not activated?
e.g == 0.0) { // Or is there a crossing edge that breaks the line?
e = textureLod(edgesTex, texcoord, 0.0).rg;
texcoord -= vec2(0.0, 2.0) * SMAA_PIXEL_SIZE;
}
texcoord.y += 0.25 * SMAA_PIXEL_SIZE.y;
texcoord.y += SMAA_PIXEL_SIZE.y;
texcoord.y += 2.0 * SMAA_PIXEL_SIZE.y;
texcoord.y -= SMAA_PIXEL_SIZE.y * SMAASearchLength(searchTex, e.gr, 0.0, 0.5);
return texcoord.y;
}
float SMAASearchYDown(sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end) {
vec2 e = vec2(1.0, 0.0);
while (texcoord.y < end &&
e.r > 0.8281 && // Is there some edge not activated?
e.g == 0.0) { // Or is there a crossing edge that breaks the line?
e = textureLod(edgesTex, texcoord, 0.0).rg;
texcoord += vec2(0.0, 2.0) * SMAA_PIXEL_SIZE;
}
texcoord.y -= 0.25 * SMAA_PIXEL_SIZE.y;
texcoord.y -= SMAA_PIXEL_SIZE.y;
texcoord.y -= 2.0 * SMAA_PIXEL_SIZE.y;
texcoord.y += SMAA_PIXEL_SIZE.y * SMAASearchLength(searchTex, e.gr, 0.5, 0.5);
return texcoord.y;
}
/**
* Ok, we have the distance and both crossing edges. So, what are the areas
* at each side of current edge?
*/
vec2 SMAAArea(sampler2D areaTex, vec2 dist, float e1, float e2, float offset) {
// Rounding prevents precision errors of bilinear filtering:
vec2 texcoord = float(SMAA_AREATEX_MAX_DISTANCE) * round(4.0 * vec2(e1, e2)) + dist;
// We do a scale and bias for mapping to texel space:
texcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + (0.5 * SMAA_AREATEX_PIXEL_SIZE);
// Move to proper place, according to the subpixel offset:
texcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;
return textureLod(areaTex, texcoord, 0.0).rg;
}
//-----------------------------------------------------------------------------
// Corner Detection Functions
void SMAADetectHorizontalCornerPattern(sampler2D edgesTex, inout vec2 weights, vec2 texcoord, vec2 d) {
#if SMAA_CORNER_ROUNDING < 100 || SMAA_FORCE_CORNER_DETECTION == 1
vec4 coords = fma(vec4(d.x, 0.0, d.y, 0.0),
SMAA_PIXEL_SIZE.xyxy, texcoord.xyxy);
vec2 e;
e.r = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2(0.0, 1.0)).r;
bool left = abs(d.x) < abs(d.y);
e.g = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2(0.0, -2.0)).r;
if (left) weights *= clamp(float(SMAA_CORNER_ROUNDING) / 100.0 + 1.0 - e, 0.0, 1.0);
e.r = textureLodOffset(edgesTex, coords.zw, 0.0, ivec2(1.0, 1.0)).r;
e.g = textureLodOffset(edgesTex, coords.zw, 0.0, ivec2(1.0, -2.0)).r;
if (!left) weights *= clamp(float(SMAA_CORNER_ROUNDING) / 100.0 + 1.0 - e, 0.0, 1.0);
#endif
}
void SMAADetectVerticalCornerPattern(sampler2D edgesTex, inout vec2 weights, vec2 texcoord, vec2 d) {
#if SMAA_CORNER_ROUNDING < 100 || SMAA_FORCE_CORNER_DETECTION == 1
vec4 coords = fma(vec4(0.0, d.x, 0.0, d.y),
SMAA_PIXEL_SIZE.xyxy, texcoord.xyxy);
vec2 e;
e.r = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2( 1.0, 0.0)).g;
bool left = abs(d.x) < abs(d.y);
e.g = textureLodOffset(edgesTex, coords.xy, 0.0, ivec2(-2.0, 0.0)).g;
if (left) weights *= clamp(float(SMAA_CORNER_ROUNDING) / 100.0 + 1.0 - e, 0.0, 1.0);
e.r = textureLodOffset(edgesTex, coords.zw, 0.0, ivec2( 1.0, 1.0)).g;
e.g = textureLodOffset(edgesTex, coords.zw, 0.0, ivec2(-2.0, 1.0)).g;
if (!left) weights *= clamp(float(SMAA_CORNER_ROUNDING) / 100.0 + 1.0 - e, 0.0, 1.0);
#endif
}
//-----------------------------------------------------------------------------
// Blending Weight Calculation Pixel Shader (Second Pass)
vec4 SMAABlendingWeightCalculationPS(vec2 texcoord,
vec2 pixcoord,
vec4 offset[3],
sampler2D edgesTex,
sampler2D areaTex,
sampler2D searchTex,
ivec4 subsampleIndices) { // Just pass zero for SMAA 1x, see @SUBSAMPLE_INDICES.
vec4 weights = vec4(0.0, 0.0, 0.0, 0.0);
vec2 e = texture(edgesTex, texcoord).rg;
//SMAA_BRANCH
if (e.g > 0.0) { // Edge at north
#if SMAA_MAX_SEARCH_STEPS_DIAG > 0 || SMAA_FORCE_DIAGONAL_DETECTION == 1
// Diagonals have both north and west edges, so searching for them in
// one of the boundaries is enough.
weights.rg = SMAACalculateDiagWeights(edgesTex, areaTex, texcoord, e, subsampleIndices);
// We give priority to diagonals, so if we find a diagonal we skip
// horizontal/vertical processing.
//SMAA_BRANCH
if (dot(weights.rg, vec2(1.0, 1.0)) == 0.0) {
#endif
vec2 d;
// Find the distance to the left:
vec2 coords;
coords.x = SMAASearchXLeft(edgesTex, searchTex, offset[0].xy, offset[2].x);
coords.y = offset[1].y; // offset[1].y = texcoord.y - 0.25 * SMAA_PIXEL_SIZE.y (@CROSSING_OFFSET)
d.x = coords.x;
// Now fetch the left crossing edges, two at a time using bilinear
// filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to
// discern what value each edge has:
float e1 = textureLod(edgesTex, coords, 0.0).r;
// Find the distance to the right:
coords.x = SMAASearchXRight(edgesTex, searchTex, offset[0].zw, offset[2].y);
d.y = coords.x;
// We want the distances to be in pixel units (doing this here allow to
// better interleave arithmetic and memory accesses):
d = d / SMAA_PIXEL_SIZE.x - pixcoord.x;
// SMAAArea below needs a sqrt, as the areas texture is compressed
// quadratically:
vec2 sqrt_d = sqrt(abs(d));
// Fetch the right crossing edges:
float e2 = textureLodOffset(edgesTex, coords, 0.0, ivec2(1, 0)).r;
// Ok, we know how this pattern looks like, now it is time for getting
// the actual area:
weights.rg = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.y));
// Fix corners:
SMAADetectHorizontalCornerPattern(edgesTex, weights.rg, texcoord, d);
#if SMAA_MAX_SEARCH_STEPS_DIAG > 0 || SMAA_FORCE_DIAGONAL_DETECTION == 1
} else
e.r = 0.0; // Skip vertical processing.
#endif
}
//SMAA_BRANCH
if (e.r > 0.0) { // Edge at west
vec2 d;
// Find the distance to the top:
vec2 coords;
coords.y = SMAASearchYUp(edgesTex, searchTex, offset[1].xy, offset[2].z);
coords.x = offset[0].x; // offset[1].x = texcoord.x - 0.25 * SMAA_PIXEL_SIZE.x;
d.x = coords.y;
// Fetch the top crossing edges:
float e1 = textureLod(edgesTex, coords, 0.0).g;
// Find the distance to the bottom:
coords.y = SMAASearchYDown(edgesTex, searchTex, offset[1].zw, offset[2].w);
d.y = coords.y;
// We want the distances to be in pixel units:
d = d / SMAA_PIXEL_SIZE.y - pixcoord.y;
// SMAAArea below needs a sqrt, as the areas texture is compressed
// quadratically:
vec2 sqrt_d = sqrt(abs(d));
// Fetch the bottom crossing edges:
float e2 = textureLodOffset(edgesTex, coords, 0.0, ivec2(0, 1)).g;
// Get the area for this direction:
weights.ba = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.x));
// Fix corners:
SMAADetectVerticalCornerPattern(edgesTex, weights.ba, texcoord, d);
//return vec4(weights.ba, 0.0, 1.0);
}
return weights;
}
/* ------------- Header is over -------------- */
uniform sampler2D edge_tex;
uniform sampler2D area_tex;
uniform sampler2D search_tex;
in vec2 texcoord;
in vec2 pixcoord;
in vec4 offset[3];
in vec4 dummy2;
void main()
{
gl_FragColor = SMAABlendingWeightCalculationPS(texcoord, pixcoord, offset, edge_tex, area_tex, search_tex, ivec4(0));
}

74
assets/smaa/blend_vertex.txt Executable file
View File

@ -0,0 +1,74 @@
#version 410 compatibility
#define SMAA_PIXEL_SIZE vec2(1.0 / 512.0, 1.0 / 512.0)
#define SMAA_THRESHOLD 0.05
#define SMAA_MAX_SEARCH_STEPS 32
#define SMAA_MAX_SEARCH_STEPS_DIAG 16
#define SMAA_CORNER_ROUNDING 25
#ifndef SMAA_DEPTH_THRESHOLD
#define SMAA_DEPTH_THRESHOLD (0.1 * SMAA_THRESHOLD)
#endif
#ifndef SMAA_REPROJECTION
#define SMAA_REPROJECTION 0
#endif
#define SMAA_REPROJECTION_WEIGHT_SCALE 30.0
#ifndef SMAA_AREATEX_MAX_DISTANCE
#define SMAA_AREATEX_MAX_DISTANCE 16
#endif
#ifndef SMAA_AREATEX_MAX_DISTANCE_DIAG
#define SMAA_AREATEX_MAX_DISTANCE_DIAG 20
#endif
#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
/* --- Define section is over ---- */
/**
* Blend Weight Calculation Vertex Shader
*/
void SMAABlendingWeightCalculationVS(vec4 position,
out vec4 svPosition,
inout vec2 texcoord,
out vec2 pixcoord,
out vec4 offset[3]) {
svPosition = position;
pixcoord = texcoord / SMAA_PIXEL_SIZE;
// We will use these offsets for the searches later on (see @PSEUDO_GATHER4):
offset[0] = texcoord.xyxy + SMAA_PIXEL_SIZE.xyxy * vec4(-0.25, -0.125, 1.25, -0.125);
offset[1] = texcoord.xyxy + SMAA_PIXEL_SIZE.xyxy * vec4(-0.125, -0.25, -0.125, 1.25);
// And these for the searches, they indicate the ends of the loops:
offset[2] = vec4(offset[0].xz, offset[1].yw) +
vec4(-2.0, 2.0, -2.0, 2.0) *
SMAA_PIXEL_SIZE.xxyy * float(SMAA_MAX_SEARCH_STEPS);
}
/* ------------- Header is over -------------- */
out vec2 texcoord;
out vec2 pixcoord;
out vec4 offset[3];
out vec4 dummy2;
attribute vec3 vPosition;
attribute vec2 vTexCoord;
uniform mat4 ProjectionMatrix;
void main()
{
texcoord = vTexCoord;
vec4 dummy1 = vec4(0);
SMAABlendingWeightCalculationVS(dummy1, dummy2, texcoord, pixcoord, offset);
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
}

105
assets/smaa/edge_fragment.txt Executable file
View File

@ -0,0 +1,105 @@
#version 410 compatibility
#define SMAA_THRESHOLD 0.05
#define SMAA_MAX_SEARCH_STEPS 32
#define SMAA_MAX_SEARCH_STEPS_DIAG 16
#define SMAA_CORNER_ROUNDING 25
#ifndef SMAA_DEPTH_THRESHOLD
#define SMAA_DEPTH_THRESHOLD (0.1 * SMAA_THRESHOLD)
#endif
#ifndef SMAA_REPROJECTION
#define SMAA_REPROJECTION 0
#endif
#define SMAA_REPROJECTION_WEIGHT_SCALE 30.0
#ifndef SMAA_AREATEX_MAX_DISTANCE
#define SMAA_AREATEX_MAX_DISTANCE 16
#endif
#ifndef SMAA_AREATEX_MAX_DISTANCE_DIAG
#define SMAA_AREATEX_MAX_DISTANCE_DIAG 20
#endif
#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
/* --- Define section is over ---- */
/**
* Color Edge Detection
*
* IMPORTANT NOTICE: color edge detection requires gamma-corrected colors, and
* thus 'colorTex' should be a non-sRGB texture.
*/
vec4 SMAAColorEdgeDetectionPS(vec2 texcoord,
vec4 offset[3],
sampler2D colorTex
) {
vec2 threshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD);
// Calculate color deltas:
vec4 delta;
vec3 C = texture(colorTex, texcoord).rgb;
vec3 Cleft = texture(colorTex, offset[0].xy).rgb;
vec3 t = abs(C - Cleft);
delta.x = max(max(t.r, t.g), t.b);
vec3 Ctop = texture(colorTex, offset[0].zw).rgb;
t = abs(C - Ctop);
delta.y = max(max(t.r, t.g), t.b);
// We do the usual threshold:
vec2 edges = step(threshold, delta.xy);
// Then discard if there is no edge:
if (dot(edges, vec2(1.0, 1.0)) == 0.0)
discard;
// Calculate right and bottom deltas:
vec3 Cright = texture(colorTex, offset[1].xy).rgb;
t = abs(C - Cright);
delta.z = max(max(t.r, t.g), t.b);
vec3 Cbottom = texture(colorTex, offset[1].zw).rgb;
t = abs(C - Cbottom);
delta.w = max(max(t.r, t.g), t.b);
// Calculate the maximum delta in the direct neighborhood:
float maxDelta = max(max(max(delta.x, delta.y), delta.z), delta.w);
// Calculate left-left and top-top deltas:
vec3 Cleftleft = texture(colorTex, offset[2].xy).rgb;
t = abs(C - Cleftleft);
delta.z = max(max(t.r, t.g), t.b);
vec3 Ctoptop = texture(colorTex, offset[2].zw).rgb;
t = abs(C - Ctoptop);
delta.w = max(max(t.r, t.g), t.b);
// Calculate the final maximum delta:
maxDelta = max(max(maxDelta, delta.z), delta.w);
// Local contrast adaptation in action:
edges.xy *= step(0.5 * maxDelta, delta.xy);
return vec4(edges, 0.0, 0.0);
}
/* ------------- Header is over -------------- */
uniform sampler2D albedo_tex;
in vec2 texcoord;
in vec4 offset[3];
in vec4 dummy2;
void main()
{
gl_FragColor = SMAAColorEdgeDetectionPS(texcoord, offset, albedo_tex);
}

67
assets/smaa/edge_vertex.txt Executable file
View File

@ -0,0 +1,67 @@
#version 410 compatibility
#define SMAA_PIXEL_SIZE vec2(1.0/512.0, 1.0/512.0)
#define SMAA_THRESHOLD 0.05
#define SMAA_MAX_SEARCH_STEPS 32
#define SMAA_MAX_SEARCH_STEPS_DIAG 16
#define SMAA_CORNER_ROUNDING 25
#ifndef SMAA_DEPTH_THRESHOLD
#define SMAA_DEPTH_THRESHOLD (0.1 * SMAA_THRESHOLD)
#endif
#ifndef SMAA_REPROJECTION
#define SMAA_REPROJECTION 0
#endif
#define SMAA_REPROJECTION_WEIGHT_SCALE 30.0
#ifndef SMAA_AREATEX_MAX_DISTANCE
#define SMAA_AREATEX_MAX_DISTANCE 16
#endif
#ifndef SMAA_AREATEX_MAX_DISTANCE_DIAG
#define SMAA_AREATEX_MAX_DISTANCE_DIAG 20
#endif
#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
/* --- Define section is over ---- */
/**
* Edge Detection Vertex Shader
*/
void SMAAEdgeDetectionVS(vec4 position,
out vec4 svPosition,
inout vec2 texcoord,
out vec4 offset[3]) {
svPosition = position;
offset[0] = texcoord.xyxy + SMAA_PIXEL_SIZE.xyxy * vec4(-1.0, 0.0, 0.0, -1.0);
offset[1] = texcoord.xyxy + SMAA_PIXEL_SIZE.xyxy * vec4( 1.0, 0.0, 0.0, 1.0);
offset[2] = texcoord.xyxy + SMAA_PIXEL_SIZE.xyxy * vec4(-2.0, 0.0, 0.0, -2.0);
}
/* ------------- Header is over -------------- */
out vec2 texcoord;
out vec4 offset[3];
out vec4 dummy2;
attribute vec3 vPosition;
attribute vec2 vTexCoord;
uniform mat4 ProjectionMatrix;
void main()
{
texcoord = vTexCoord;
vec4 dummy1 = vec4(0);
SMAAEdgeDetectionVS(dummy1, dummy2, texcoord, offset);
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
}

View File

@ -0,0 +1,102 @@
#version 410 compatibility
#define SMAA_PIXEL_SIZE vec2(1.0 / 512.0, 1.0 / 512.0)
#define SMAA_THRESHOLD 0.05
#define SMAA_MAX_SEARCH_STEPS 32
#define SMAA_MAX_SEARCH_STEPS_DIAG 16
#define SMAA_CORNER_ROUNDING 25
#ifndef SMAA_DEPTH_THRESHOLD
#define SMAA_DEPTH_THRESHOLD (0.1 * SMAA_THRESHOLD)
#endif
#ifndef SMAA_REPROJECTION
#define SMAA_REPROJECTION 0
#endif
#define SMAA_REPROJECTION_WEIGHT_SCALE 30.0
#ifndef SMAA_AREATEX_MAX_DISTANCE
#define SMAA_AREATEX_MAX_DISTANCE 16
#endif
#ifndef SMAA_AREATEX_MAX_DISTANCE_DIAG
#define SMAA_AREATEX_MAX_DISTANCE_DIAG 20
#endif
#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
/* --- Define section is over ---- */
vec4 SMAANeighborhoodBlendingPS(vec2 texcoord,
vec4 offset[2],
sampler2D colorTex,
sampler2D blendTex) {
// Fetch the blending weights for current pixel:
vec4 a;
a.xz = texture(blendTex, texcoord).xz;
a.y = texture(blendTex, offset[1].zw).g;
a.w = texture(blendTex, offset[1].xy).a;
// Is there any blending weight with a value greater than 0.0?
//SMAA_BRANCH
if (dot(a, vec4(1.0, 1.0, 1.0, 1.0)) < 1e-5)
return textureLod(colorTex, texcoord, 0.0);
else {
vec4 color = vec4(0.0, 0.0, 0.0, 0.0);
// Up to 4 lines can be crossing a pixel (one through each edge). We
// favor blending by choosing the line with the maximum weight for each
// direction:
vec2 offset;
offset.x = a.a > a.b? a.a : -a.b; // left vs. right
offset.y = a.g > a.r? a.g : -a.r; // top vs. bottom
// Then we go in the direction that has the maximum weight:
if (abs(offset.x) > abs(offset.y)) // horizontal vs. vertical
offset.y = 0.0;
else
offset.x = 0.0;
#if SMAA_REPROJECTION == 1
// Fetch the opposite color and lerp by hand:
vec4 C = textureLod(colorTex, texcoord, 0.0);
texcoord += sign(offset) * SMAA_PIXEL_SIZE;
vec4 Cop = textureLod(colorTex, texcoord, 0.0);
float s = abs(offset.x) > abs(offset.y)? abs(offset.x) : abs(offset.y);
// Unpack the velocity values:
C.a *= C.a;
Cop.a *= Cop.a;
// Lerp the colors:
vec4 Caa = mix(C, Cop, s);
// Unpack velocity and return the resulting value:
Caa.a = sqrt(Caa.a);
return Caa;
#else
// Fetch the opposite color and lerp by hand:
vec4 C = textureLod(colorTex, texcoord, 0.0);
texcoord += sign(offset) * SMAA_PIXEL_SIZE;
vec4 Cop = textureLod(colorTex, texcoord, 0.0);
float s = abs(offset.x) > abs(offset.y)? abs(offset.x) : abs(offset.y);
return mix(C, Cop, s);
#endif
}
}
/* ------------- Header is over -------------- */
uniform sampler2D albedo_tex;
uniform sampler2D blend_tex;
in vec2 texcoord;
in vec4 offset[2];
in vec4 dummy2;
void main()
{
gl_FragColor = SMAANeighborhoodBlendingPS(texcoord, offset, albedo_tex, blend_tex);
}

View File

@ -0,0 +1,65 @@
#version 410 compatibility
#define SMAA_PIXEL_SIZE vec2(1.0 / 512.0, 1.0 / 512.0)
#define SMAA_THRESHOLD 0.05
#define SMAA_MAX_SEARCH_STEPS 32
#define SMAA_MAX_SEARCH_STEPS_DIAG 16
#define SMAA_CORNER_ROUNDING 25
#ifndef SMAA_DEPTH_THRESHOLD
#define SMAA_DEPTH_THRESHOLD (0.1 * SMAA_THRESHOLD)
#endif
#ifndef SMAA_REPROJECTION
#define SMAA_REPROJECTION 0
#endif
#define SMAA_REPROJECTION_WEIGHT_SCALE 30.0
#ifndef SMAA_AREATEX_MAX_DISTANCE
#define SMAA_AREATEX_MAX_DISTANCE 16
#endif
#ifndef SMAA_AREATEX_MAX_DISTANCE_DIAG
#define SMAA_AREATEX_MAX_DISTANCE_DIAG 20
#endif
#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0))
#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0)
/* --- Define section is over ---- */
/**
* Neighborhood Blending Vertex Shader
*/
void SMAANeighborhoodBlendingVS(vec4 position,
out vec4 svPosition,
inout vec2 texcoord,
out vec4 offset[2]) {
svPosition = position;
offset[0] = texcoord.xyxy + SMAA_PIXEL_SIZE.xyxy * vec4(-1.0, 0.0, 0.0, -1.0);
offset[1] = texcoord.xyxy + SMAA_PIXEL_SIZE.xyxy * vec4( 1.0, 0.0, 0.0, 1.0);
}
/* ------------- Header is over -------------- */
out vec2 texcoord;
out vec4 offset[2];
out vec4 dummy2;
attribute vec3 vPosition;
attribute vec2 vTexCoord;
uniform mat4 ProjectionMatrix;
void main()
{
texcoord = vTexCoord;
vec4 dummy1 = vec4(0);
SMAANeighborhoodBlendingVS(dummy1, dummy2, texcoord, offset);
gl_Position = ProjectionMatrix * vec4(vPosition.xyz, 1.0);
}

BIN
assets/smaa/smaa_area.raw Executable file

Binary file not shown.

BIN
assets/smaa/smaa_search.raw Executable file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -426,6 +426,8 @@ void TBall::Update(size_t dt)
//=========================================== //===========================================
//=========================================== //===========================================
TRenderPair pair;
TRenderPair rect;
TGameLevel::TGameLevel() TGameLevel::TGameLevel()
{ {
@ -446,6 +448,44 @@ TGameLevel::TGameLevel()
BonusFloorPosY = 0.f; BonusFloorPosY = 0.f;
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 320, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 320, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 320, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 0, 0));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 1, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 1, 0, 1));
pair.first.ShaderName = "ColorShader";
pair.second.RefreshBuffer();
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 320, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 320, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 320, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(480, 0, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.first.ShaderName = "ColorShader";
rect.second.RefreshBuffer();
} }
TGameLevel::~TGameLevel() TGameLevel::~TGameLevel()
@ -735,10 +775,9 @@ void TGameLevel::Draw()
bool mustShowButtons = ((LevelState == CONST_LEVELSTATE_PAUSE) || (LevelState == CONST_LEVELSTATE_GO_TO_PAUSE)); bool mustShowButtons = ((LevelState == CONST_LEVELSTATE_PAUSE) || (LevelState == CONST_LEVELSTATE_GO_TO_PAUSE));
bool pause = (mustShowButtons || (LevelState == CONST_LEVELSTATE_FINISHED));
bool renderBufferReady = RenderBufferReady; bool renderBufferReady = RenderBufferReady;
bool pause = true || (mustShowButtons || (LevelState == CONST_LEVELSTATE_FINISHED));
if (pause && renderBufferReady) if (pause && renderBufferReady)
{ {
@ -764,89 +803,96 @@ void TGameLevel::Draw()
Renderer->SwitchToFrameBuffer("LevelBuffer"); Renderer->SwitchToFrameBuffer("LevelBuffer");
Renderer->SetProjectionMatrix(480.f, 320.f); Renderer->SetProjectionMatrix(480.f, 320.f);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
CheckGlError(); CheckGlError();
} }
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[BkgTexture]); // glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[BkgTexture]);
Renderer->DrawRect(Vector2f(0, 0), Vector2f(480.f, 320.f)); //Renderer->DrawRect(Vector2f(0, 0), Vector2f(480.f, 320.f));
//
std::list<TBall>::iterator iBall; //std::list<TBall>::iterator iBall;
//
Renderer->PushShader("BrickShader"); //Renderer->PushShader("BrickShader");
//
//
for (int i=0; i<CONST_BRICKMATRIX_WIDTH; i++) //for (int i=0; i<CONST_BRICKMATRIX_WIDTH; i++)
{ // {
for (int j=0; j<CONST_BRICKMATRIX_HEIGHT; j++) // for (int j=0; j<CONST_BRICKMATRIX_HEIGHT; j++)
{ // {
BlockMatrix[i][j].TryDrawAppear(i,j); //Draws only appearing/disappearing blocks // BlockMatrix[i][j].TryDrawAppear(i,j); //Draws only appearing/disappearing blocks
} // }
} // }
//
RenderUniform1f("Transparency", 1.f); // RenderUniform1f("Transparency", 1.f);
std::list<std::pair<PairColorTexture, TTriangleList>>::iterator colorBlockIterator; // std::list<std::pair<PairColorTexture, TTriangleList>>::iterator colorBlockIterator;
for (colorBlockIterator = BlockInstansingList.ColorBlockList.begin(); colorBlockIterator != BlockInstansingList.ColorBlockList.end(); ++colorBlockIterator) // for (colorBlockIterator = BlockInstansingList.ColorBlockList.begin(); colorBlockIterator != BlockInstansingList.ColorBlockList.end(); ++colorBlockIterator)
{ // {
RenderUniform4fv("BrickColor", colorBlockIterator->first.first.data()); // RenderUniform4fv("BrickColor", colorBlockIterator->first.first.data());
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[colorBlockIterator->first.second]); // glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[colorBlockIterator->first.second]);
//
Renderer->DrawTriangleList(colorBlockIterator->second); // Renderer->DrawTriangleList(colorBlockIterator->second);
} // }
//
std::list<TBonusFalling>::iterator iBonus; // std::list<TBonusFalling>::iterator iBonus;
//
for (iBonus = BonusFallingList.begin(); iBonus != BonusFallingList.end(); ++iBonus) // for (iBonus = BonusFallingList.begin(); iBonus != BonusFallingList.end(); ++iBonus)
{ // {
iBonus->Draw(); // iBonus->Draw();
} // }
//
DrawBallInstancingList(); // DrawBallInstancingList();
//
Renderer->PopShader(); // Renderer->PopShader();
//
//
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_REFLECTOR_TEXTURE]); // glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_REFLECTOR_TEXTURE]);
Renderer->DrawRect(Vector2f(-128.f, -16.f)+ReflectorPos, Vector2f(128.f, 16.f)+ReflectorPos); //Renderer->DrawRect(Vector2f(-128.f, -16.f)+ReflectorPos, Vector2f(128.f, 16.f)+ReflectorPos);
//
//
const Vector2f wallUpPos1(240.f-256.f, 320.f-64.f); // const Vector2f wallUpPos1(240.f-256.f, 320.f-64.f);
const Vector2f wallUpPos2(240.f+256.f, 320.f); // const Vector2f wallUpPos2(240.f+256.f, 320.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_UP_TEXTURE]); //glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_UP_TEXTURE]);
Renderer->DrawRect(wallUpPos1, wallUpPos2); //Renderer->DrawRect(wallUpPos1, wallUpPos2);
//
const Vector2f wallLeftPos1(0.f, 320.f - 512.f); //const Vector2f wallLeftPos1(0.f, 320.f - 512.f);
const Vector2f wallLeftPos2(32.f, 320.f); //const Vector2f wallLeftPos2(32.f, 320.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_LEFT_TEXTURE]); //glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_LEFT_TEXTURE]);
Renderer->DrawRect(wallLeftPos1, wallLeftPos2); //Renderer->DrawRect(wallLeftPos1, wallLeftPos2);
//
const Vector2f wallRightPos1(480.f-32.f, 320.f - 512.f); //const Vector2f wallRightPos1(480.f-32.f, 320.f - 512.f);
const Vector2f wallRightPos2(480.f, 320.f); //const Vector2f wallRightPos2(480.f, 320.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_RIGHT_TEXTURE]); //glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_RIGHT_TEXTURE]);
Renderer->DrawRect(wallRightPos1, wallRightPos2); //Renderer->DrawRect(wallRightPos1, wallRightPos2);
//
//if (BonusFloorTimer>0.f)
//{
//
// const Vector2f wallDownPos(240.f, BonusFloorPosY);
//
// glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_BONUS_TEXTURE]);
//
// Renderer->DrawRect(Vector2f(-256.f, -16.f)+wallDownPos, Vector2f(256.f, 16.f)+wallDownPos);
// }
//
//
// if (!pause)
// {
// RenderUniform1f("Transparency", 1.f);
// glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_BACK_BTN_TEXTURE]);
// const Vector2f BackBtnPos(240.f, 320.f - 32.f - 20.f);
// Renderer->DrawRect(Vector2f(-128.f, -32.f)+BackBtnPos, Vector2f(128.f, 32.f)+BackBtnPos);
// }
if (BonusFloorTimer>0.f)
{ {
TRenderParamsSetter params(pair.first);
const Vector2f wallDownPos(240.f, BonusFloorPosY); Renderer->DrawTriangleList(pair.second);
}
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_WALL_BONUS_TEXTURE]);
CheckGlError();
Renderer->DrawRect(Vector2f(-256.f, -16.f)+wallDownPos, Vector2f(256.f, 16.f)+wallDownPos);
}
if (!pause)
{
RenderUniform1f("Transparency", 1.f);
glBindTexture(GL_TEXTURE_2D,ResourceManager->TexList[CONST_BACK_BTN_TEXTURE]);
const Vector2f BackBtnPos(240.f, 320.f - 32.f - 20.f);
Renderer->DrawRect(Vector2f(-128.f, -32.f)+BackBtnPos, Vector2f(128.f, 32.f)+BackBtnPos);
}
if (pause && !renderBufferReady) if (pause && !renderBufferReady)
{ {
@ -905,29 +951,37 @@ void TGameLevel::DrawBallInstancingList()
void TGameLevel::DrawBuffer() void TGameLevel::DrawBuffer()
{ {
*SE::Console << "TGameLevel::DrawBuffer"; *SE::Console << "TGameLevel::DrawBuffer";
Renderer->PushShader("FrameShader"); // Renderer->PushShader("FrameShader");
float brightness; // float brightness;
if (CONST_LEVELSTATE_GO_TO_PAUSE) // if (CONST_LEVELSTATE_GO_TO_PAUSE)
{ // {
brightness = 0.3f + 0.7f * StateTimer / CONST_PAUSE_APPEAR_TIME; // brightness = 0.3f + 0.7f * StateTimer / CONST_PAUSE_APPEAR_TIME;
} // }
else // else
{ // {
brightness = 0.3f; // brightness = 0.3f;
} // }
//
RenderUniform1f("Brightness", brightness); // RenderUniform1f("Brightness", brightness);
glBindTexture(GL_TEXTURE_2D,ResourceManager->FrameManager.GetFrameTexture("LevelBuffer")); // glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("LevelBuffer"));
//
//Matrix switched to identity ////Matrix switched to identity
//Vector2f RectPos = Vector2f(-1, -1); // //Vector2f RectPos = Vector2f(-1, -1);
//Vector2f RectSize = Vector2f(2, 2); // //Vector2f RectSize = Vector2f(2, 2);
Vector2f RectPos = Vector2f(240.f, 160.f); //Vector2f RectPos = Vector2f(240.f, 160.f);
Vector2f RectSize = Vector2f(240.f, 160.f); //Vector2f RectSize = Vector2f(240.f, 160.f);
Renderer->DrawRect(RectPos-RectSize, RectPos+RectSize); // Renderer->DrawRect(RectPos-RectSize, RectPos+RectSize);
Renderer->PopShader(); // Renderer->PopShader();
{
TRenderParamsSetter params(rect.first);
glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("LevelBuffer"));
Renderer->DrawTriangleList(rect.second);
}
CheckGlError(); CheckGlError();
} }

View File

@ -7,50 +7,21 @@
#include "include/Engine.h" #include "include/Engine.h"
#include "menucode.h"
#include "main_code.h" #include "main_code.h"
boost::signals2::signal<void (Vector2f)> OnTapUpSignal;
boost::signals2::signal<void (Vector2f)> OnTapUpAfterMoveSignal;
boost::signals2::signal<void (Vector2f)> OnTapDownSignal;
boost::signals2::signal<void (Vector2f)> OnFlingSignal;
boost::signals2::signal<void (Vector2f)> OnScrollSignal;
boost::signals2::signal<void ()> OnDrawSignal;
const std::string CONST_BLOCK_TEXTURE1 = "block1";
const std::string CONST_BLOCK_TEXTURE2 = "block2";
const std::string CONST_BLOCK_TEXTURE3 = "block3";
const std::string CONST_BONUS_GOTHROUGH_TEXTURE = "bonus_gothrough";
const std::string CONST_BONUS_MULTIPLIER_TEXTURE = "bonus_multiplier";
const std::string CONST_BONUS_FLOOR_TEXTURE = "bonus_floor";
const std::string CONST_BALL_TEXTURE = "ball";
const std::string CONST_BALLGLOW_TEXTURE = "ball_glow";
const std::string CONST_REFLECTOR_TEXTURE = "reflector";
const std::string CONST_WALL_LEFT_TEXTURE = "wall_left";
const std::string CONST_WALL_RIGHT_TEXTURE = "wall_right";
const std::string CONST_WALL_UP_TEXTURE = "wall_up";
const std::string CONST_WALL_BONUS_TEXTURE = "wall_bonus";
const std::string CONST_BACK_BTN_TEXTURE = "back_btn";
const std::string CONST_SLIDE_UP_BTN_TEXTURE = "slide_up_btn";
const std::string CONST_TAP_TO_CONTINUE_BTN_TEXTURE = "tap_to_continue_btn";
const std::string CONST_LOADING_TEXTURE = "loading";
const std::string CONST_LOGO_SMALL_TEXTURE = "logo_small";
const std::string CONST_LOADING_BACKGROUND_BLACK = "loading_background_black";
const std::string CONST_CREDITS_TEXTURE = "credits";
const float CONST_CREDITS_SHOW_TIME = 150.f;
TMyApplication* Application; TMyApplication* Application;
#define AREATEX_WIDTH 160
#define AREATEX_HEIGHT 560
#define SEARCHTEX_WIDTH 66
#define SEARCHTEX_HEIGHT 33
GLuint area_tex;
GLuint search_tex;
void TMyApplication::InnerInit() void TMyApplication::InnerInit()
{ {
@ -73,30 +44,135 @@ void TMyApplication::InnerInit()
*Console<<"APP INIT\n"; *Console<<"APP INIT\n";
} }
srand (static_cast<size_t>(time(NULL))); srand (static_cast<size_t>(time(NULL)));
GameState = CONST_GAMESTATE_PRELOADING;
StateTimer = 0.f;
ResourceManager->ShaderManager.AddShader("DefaultShader", "shader1vertex.txt", "shader1fragment.txt"); ResourceManager->ShaderManager.AddShader("DefaultShader", "shader1vertex.txt", "shader1fragment.txt");
ResourceManager->ShaderManager.AddShader("FrameShader", "frameshader_vertex.txt", "frameshader_fragment.txt"); ResourceManager->ShaderManager.AddShader("FrameShader", "frameshader_vertex.txt", "frameshader_fragment.txt");
ResourceManager->ShaderManager.AddShader("BrickShader", "brickshader_vertex.txt", "brickshader_fragment.txt"); ResourceManager->ShaderManager.AddShader("ColorShader", "color_vertex.txt", "color_fragment.txt");
Renderer->PushShader("DefaultShader");
ResourceManager->TexList.AddTexture(CONST_LOADING_BACKGROUND_BLACK + ".png", CONST_LOADING_BACKGROUND_BLACK);
ResourceManager->TexList.AddTexture(CONST_LOADING_TEXTURE + ".png", CONST_LOADING_TEXTURE); ResourceManager->ShaderManager.AddShader("SmaaEdge", "smaa/edge_vertex.txt", "smaa/edge_fragment.txt");
ResourceManager->TexList.AddTexture(CONST_LOGO_SMALL_TEXTURE + ".png", CONST_LOGO_SMALL_TEXTURE); ResourceManager->ShaderManager.AddShader("SmaaBlend", "smaa/blend_vertex.txt", "smaa/blend_fragment.txt");
ResourceManager->ShaderManager.AddShader("SmaaNeighborhood", "smaa/neighborhood_vertex.txt", "smaa/neighborhood_fragment.txt");
Renderer->PushShader("DefaultShader");
ResourceManager->TexList.AddTexture("console_bkg.bmp"); ResourceManager->TexList.AddTexture("console_bkg.bmp");
ResourceManager->FrameManager.AddFrameRenderBuffer("LevelBuffer", 512, 512); ResourceManager->FrameManager.AddFrameRenderBuffer("AlbedoBuffer", 512, 512);
ResourceManager->FrameManager.AddFrameRenderBuffer("EdgeBuffer", 512, 512);
ResourceManager->FrameManager.AddFrameRenderBuffer("BlendBuffer", 512, 512);
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 512, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(512, 512, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(512, 512, 0));
pair.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(512, 0, 0));
OnDrawSignal.connect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading))); //Choose colored or black and white -- Vladislav Khorev vladislav.khorev@fishrungames.com
Inited = true; #if 1
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 1, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 1, 0, 1));
#else
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 1, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 1, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(1, 1, 1, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 0, 1));
pair.second.Data.Vec4CoordArr[CONST_STRING_COLOR_ATTRIB].push_back(Vector4f(0, 0, 0, 1));
#endif
pair.first.ShaderName = "ColorShader";
pair.second.RefreshBuffer();
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 512, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(512, 512, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(512, 512, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(512, 0, 0));
rect.second.Data.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].push_back(Vector3f(0, 0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 1));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(1, 0));
rect.second.Data.Vec2CoordArr[CONST_STRING_TEXCOORD_ATTRIB].push_back(Vector2f(0, 0));
rect.second.RefreshBuffer();
Renderer->SetOrthoProjection(); Renderer->SetOrthoProjection();
Renderer->SetFullScreenViewport(); Renderer->SetFullScreenViewport();
glDisable(GL_BLEND); //Don't forget to disable blending or whole thing will not work!!! -- Vladislav Khorev vladislav.khorev@fishrungames.com
Inited = true;
//This is stuff from original https://github.com/scrawl/smaa-opengl
//We must have these textures to be used for pattern matching or something -- Vladislav Khorev vladislav.khorev@fishrungames.com
unsigned char* buffer = 0;
FILE* f = 0;
buffer = new unsigned char[1024 * 1024];
f = fopen((ST::PathToResources + "smaa/smaa_area.raw").c_str(), "rb"); //rb stands for "read binary file"
if (!f)
{
std::cerr << "Couldn't open smaa_area.raw.\n";
}
fread(buffer, AREATEX_WIDTH * AREATEX_HEIGHT * 2, 1, f);
fclose(f);
f = 0;
glGenTextures(1, &area_tex);
glBindTexture(GL_TEXTURE_2D, area_tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RG8, (GLsizei)AREATEX_WIDTH, (GLsizei)AREATEX_HEIGHT, 0, GL_RG, GL_UNSIGNED_BYTE, buffer);
f = fopen((ST::PathToResources + "smaa/smaa_search.raw").c_str(), "rb");
if (!f)
{
std::cerr << "Couldn't open smaa_search.raw.\n";
}
fread(buffer, SEARCHTEX_WIDTH * SEARCHTEX_HEIGHT, 1, f);
fclose(f);
f = 0;
glGenTextures(1, &search_tex);
glBindTexture(GL_TEXTURE_2D, search_tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, (GLsizei)SEARCHTEX_WIDTH, (GLsizei)SEARCHTEX_HEIGHT, 0, GL_RED, GL_UNSIGNED_BYTE, buffer);
delete[] buffer;
} }
void TMyApplication::InnerDeinit() void TMyApplication::InnerDeinit()
@ -108,378 +184,161 @@ void TMyApplication::InnerDeinit()
*Console<<"APP DEINIT\n"; *Console<<"APP DEINIT\n";
} }
OnTapUpSignal.disconnect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1)); glDeleteTextures(1, &search_tex);
OnTapUpSignal.disconnect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1)); glDeleteTextures(1, &area_tex);
OnTapUpAfterMoveSignal.disconnect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.disconnect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnFlingSignal.disconnect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.disconnect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
OnScrollSignal.disconnect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
OnDrawSignal.disconnect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading)));
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
OnDrawSignal.disconnect(boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
OnDrawSignal.disconnect(boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
} }
void TMyApplication::InnerOnTapDown(Vector2f p) void TMyApplication::InnerOnTapDown(Vector2f p)
{ {
//-OnTapDownSignal(Vector2f(p.v[0], p.v[1]));
OnTapDownSignal(Vector2f(p(0), p(1)));
} }
void TMyApplication::InnerOnTapUp(Vector2f p) void TMyApplication::InnerOnTapUp(Vector2f p)
{ {
OnTapUpSignal(Vector2f(p(0), p(1)));
} }
void TMyApplication::InnerOnTapUpAfterMove(Vector2f p) void TMyApplication::InnerOnTapUpAfterMove(Vector2f p)
{ {
OnTapUpAfterMoveSignal(Vector2f(p(0), p(1)));
} }
void TMyApplication::InnerOnMove(Vector2f p, Vector2f shift) void TMyApplication::InnerOnMove(Vector2f p, Vector2f shift)
{ {
OnScrollSignal(Vector2f(shift(0), shift(1)));
} }
void TMyApplication::OnFling(Vector2f v) void TMyApplication::OnFling(Vector2f v)
{ {
} }
void TMyApplication::ApplySignalsToMenu()
{
OnTapUpSignal.connect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.connect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.connect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.connect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.connect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
}
void TMyApplication::DisapplySignalsToMenu()
{
OnTapUpSignal.disconnect(boost::bind(&TGameMenu::OnTapUp, boost::ref(Menu), _1));
OnTapUpAfterMoveSignal.disconnect(boost::bind(&TGameMenu::OnTapUpAfterMove, boost::ref(Menu), _1));
OnFlingSignal.disconnect(boost::bind(&TGameMenu::OnFling, boost::ref(Menu), _1));
OnScrollSignal.disconnect(boost::bind(&TGameMenu::OnScroll, boost::ref(Menu), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameMenu::OnTapDown, boost::ref(Menu), _1));
}
void TMyApplication::ApplySignalsToGame()
{
OnTapUpSignal.connect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnFlingSignal.connect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnScrollSignal.connect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
OnTapDownSignal.connect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
}
void TMyApplication::DisapplySignalsToGame()
{
OnTapUpSignal.disconnect(boost::bind(&TGameLevel::OnTapUp, boost::ref(GameLevel), _1));
OnFlingSignal.disconnect(boost::bind(&TGameLevel::OnFling, boost::ref(GameLevel), _1));
OnScrollSignal.disconnect(boost::bind(&TGameLevel::OnScroll, boost::ref(GameLevel), _1));
OnTapDownSignal.disconnect(boost::bind(&TGameLevel::OnTapDown, boost::ref(GameLevel), _1));
}
void TMyApplication::ApplySignalsToCredits()
{
OnTapDownSignal.connect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
}
void TMyApplication::DisapplySignalsToCredits()
{
OnTapDownSignal.disconnect(boost::bind(&TGameCredits::OnTapDown, boost::ref(GameCredits), _1));
}
void TMyApplication::LoadResources()
{
TextureNamesToLoad.clear();
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("main_menu_bkg_left.png", "main_menu_bkg_left"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("main_menu_bkg_right.png", "main_menu_bkg_right"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("select_level.png", "select_level"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock1.png", "shutterstock1"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock2.png", "shutterstock2"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock3.png", "shutterstock3"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock4.png", "shutterstock4"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock5.png", "shutterstock5"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock6.png", "shutterstock6"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock7.png", "shutterstock7"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock8.png", "shutterstock8"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock9.png", "shutterstock9"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock10.png", "shutterstock10"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock11.png", "shutterstock11"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("shutterstock12.png", "shutterstock12"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot1.png", "levelshot1"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot2.png", "levelshot2"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot3.png", "levelshot3"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot4.png", "levelshot4"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot5.png", "levelshot5"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot6.png", "levelshot6"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot7.png", "levelshot7"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot8.png", "levelshot8"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot9.png", "levelshot9"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot10.png", "levelshot10"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot11.png", "levelshot11"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot12.png", "levelshot12"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>("game_end.png", "game_end"));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE1 + ".png", CONST_BLOCK_TEXTURE1));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE2 + ".png", CONST_BLOCK_TEXTURE2));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BLOCK_TEXTURE3 + ".png", CONST_BLOCK_TEXTURE3));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_GOTHROUGH_TEXTURE + ".png", CONST_BONUS_GOTHROUGH_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_MULTIPLIER_TEXTURE + ".png", CONST_BONUS_MULTIPLIER_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BONUS_FLOOR_TEXTURE + ".png", CONST_BONUS_FLOOR_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BALL_TEXTURE + ".png", CONST_BALL_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BALLGLOW_TEXTURE + ".png", CONST_BALLGLOW_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_LEFT_TEXTURE + ".png", CONST_WALL_LEFT_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_RIGHT_TEXTURE + ".png", CONST_WALL_RIGHT_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_UP_TEXTURE + ".png", CONST_WALL_UP_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_WALL_BONUS_TEXTURE + ".png", CONST_WALL_BONUS_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_REFLECTOR_TEXTURE + ".png", CONST_REFLECTOR_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_BACK_BTN_TEXTURE + ".png", CONST_BACK_BTN_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_SLIDE_UP_BTN_TEXTURE + ".png", CONST_SLIDE_UP_BTN_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_TAP_TO_CONTINUE_BTN_TEXTURE + ".png", CONST_TAP_TO_CONTINUE_BTN_TEXTURE));
TextureNamesToLoad.push_back(std::pair<std::string, std::string>(CONST_CREDITS_TEXTURE + ".png", CONST_CREDITS_TEXTURE));
#ifdef TARGET_IOS
ResourceManager->SoundManager.LoadMusicLooped("level1ogg.ogg");
#else
//ResourceManager->SoundManager.LoadMusic("level1ogg.ogg");
#endif
ResourceManager->FontManager.AddFont("droid_sans14", "droid_sans14_font_bitmap.png", "droid_sans14_font_charmap.txt");
ResourceManager->FontManager.PushFont("droid_sans14");
TryLoadSavedGame();
}
void TMyApplication::TryLoadSavedGame()
{
std::string fileName = GetFilePathUserData("progress.txt");
FILE* file = fopen(fileName.c_str(), "r");
if (file != NULL)
{
char line[100];
char* r;
r = fgets(line, 100, file);
if (r != NULL)
{
Menu.SetMenuItemCount(toint(r));
}
fclose(file);
}
}
void TMyApplication::TrySaveGame()
{
std::string fileName = GetFilePathUserData("progress.txt");
std::string s = tostr(Menu.GetMenuItemCount());
FILE* file = fopen(fileName.c_str(), "w");
if (file != NULL)
{
fputs(s.c_str(), file);
fflush(file);
fclose(file);
}
}
void TMyApplication::InnerDraw() void TMyApplication::InnerDraw()
{ {
glDisable(GL_DEPTH_TEST);
//Render the frame
Renderer->SwitchToFrameBuffer("AlbedoBuffer");
Renderer->SetProjectionMatrix(512.f, 512.f);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
CheckGlError("");
OnDrawSignal(); {
//Render here all objects that you want to have -- Vladislav Khorev vladislav.khorev@fishrungames.com
TRenderParamsSetter params(pair.first);
Renderer->DrawTriangleList(pair.second);
}
CheckGlError("");
//-------------------------
//First pass - edge detection
Renderer->PushShader("SmaaEdge");
Renderer->SwitchToFrameBuffer("EdgeBuffer");
Renderer->SetProjectionMatrix(512.f, 512.f);
RenderUniform1i("albedo_tex", 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("AlbedoBuffer"));
Renderer->DrawTriangleList(rect.second);
Renderer->PopShader();
CheckGlError("");
//-------------------------
//Second pass - blend plus pattern matching
Renderer->PushShader("SmaaBlend");
Renderer->SwitchToFrameBuffer("BlendBuffer");
Renderer->SetProjectionMatrix(512.f, 512.f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
RenderUniform1i("edge_tex", 0);
RenderUniform1i("area_tex", 1);
RenderUniform1i("search_tex", 2);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("EdgeBuffer"));
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, area_tex);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, search_tex);
Renderer->DrawTriangleList(rect.second);
Renderer->PopShader();
CheckGlError("");
#if 1
//-------------------------
//Last pass - neightborhood
Renderer->PushShader("SmaaNeighborhood");
Renderer->SwitchToScreen();
Renderer->SetFullScreenViewport();
Renderer->SetProjectionMatrix(512.f, 512.f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
RenderUniform1i("albedo_tex", 0);
RenderUniform1i("blend_tex", 1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("BlendBuffer"));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("AlbedoBuffer"));
Renderer->DrawTriangleList(rect.second);
Renderer->PopShader();
CheckGlError("");
#else
//... or just render intermediate buffers to see what is going on
Renderer->PushShader("DefaultShader");
Renderer->SwitchToScreen();
Renderer->SetFullScreenViewport();
Renderer->SetProjectionMatrix(512.f, 512.f);
glActiveTexture(GL_TEXTURE0);
//Choose any to render for debug:
//glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("AlbedoBuffer"));
//glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("EdgeBuffer"));
glBindTexture(GL_TEXTURE_2D, ResourceManager->FrameManager.GetFrameTexture("BlendBuffer"));
Renderer->DrawTriangleList(rect.second);
Renderer->PopShader();
CheckGlError("");
#endif
} }
void TMyApplication::InnerUpdate(size_t dt) void TMyApplication::InnerUpdate(size_t dt)
{ {
if (GameState == CONST_GAMESTATE_PRELOADING)
{
*SE::Console << "1CONST_GAMESTATE_PRELOADING";
StateTimer += dt/1000.f;
if (StateTimer >= 1.f)
{
LoadResources();
GameState = CONST_GAMESTATE_LOADING;
StateTimer = 0.f;
}
}
else if (GameState == CONST_GAMESTATE_LOADING)
{
*SE::Console << "2CONST_GAMESTATE_LOADING";
StateTimer += dt/1000.f;
if (StateTimer >= 1.f)
{
StateTimer -= 1.f;
}
if (TextureNamesToLoad.size() != 0)
{
ResourceManager->TexList.AddTexture(TextureNamesToLoad.begin()->first, TextureNamesToLoad.begin()->second);
TextureNamesToLoad.erase(TextureNamesToLoad.begin());
}
else
{
GameState = CONST_GAMESTATE_MENU;
ApplySignalsToMenu();
OnDrawSignal.disconnect(boost::bind(&TGameLoading::Draw, boost::ref(GameLoading)));
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
StateTimer = 0.f;
Loaded = true;
}
}
else if (GameState == CONST_GAMESTATE_LEVEL)
{
*SE::Console << "3CONST_GAMESTATE_LEVEL";
GameLevel.Update(dt);
}
else if (GameState == CONST_GAMESTATE_MENU)
{
//*SE::Console << "4CONST_GAMESTATE_MENU";
Menu.Update(dt);
}
else if (GameState == CONST_GAMESTATE_FROM_MENU_TO_LEVEL)
{
*SE::Console << "5CONST_GAMESTATE_FROM_MENU_TO_LEVEL";
GameLevel.Update(dt);
if (GameLevel.IsLoaded())
{
//*SE::Console << "5CONST_GAMESTATE_FROM_MENU_TO_LEVEL";
GameState = CONST_GAMESTATE_LEVEL;
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
//CONNECT SLOT
DisapplySignalsToMenu();
ApplySignalsToGame();
}
}
else if (GameState == CONST_GAMESTATE_FROM_MENU_TO_CREDITS)
{
*SE::Console << "6CONST_GAMESTATE_FROM_MENU_TO_CREDITS";
Menu.Update(dt);
GameCredits.Update(dt);
StateTimer -= dt;
if (StateTimer <= 0.f)
{
GameState = CONST_GAMESTATE_CREDITS;
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
ApplySignalsToCredits();
StateTimer = 0.f;
}
}
else if (GameState == CONST_GAMESTATE_CREDITS)
{
//*SE::Console << "7CONST_GAMESTATE_CREDITS";
GameCredits.Update(dt);
}
else if (GameState == CONST_GAMESTATE_FROM_CREDITS_TO_MENU)
{
Menu.Update(dt);
GameCredits.Update(dt);
StateTimer -= dt;
if (StateTimer <= 0.f)
{
GameState = CONST_GAMESTATE_MENU;
StateTimer = 0.f;
ApplySignalsToMenu();
OnDrawSignal.disconnect(boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
}
}
}
void TMyApplication::GoFromMenuToGame(int level)
{
//#ifndef TARGET_IOS
// ResourceManager->SoundManager.PlayMusicLooped("level1ogg.ogg");
//#endif
GameLevel.FillWithFile(ST::PathToResources + "level"+tostr(level+1)+".txt");
GameLevel.SetLoading("shutterstock" + tostr(level+1), "levelshot"+tostr(level+1));
GameState = CONST_GAMESTATE_FROM_MENU_TO_LEVEL;
OnDrawSignal.connect(1, boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
DisapplySignalsToMenu();
}
void TMyApplication::GoFromGameToMenu()
{
//#ifndef TARGET_IOS
// ResourceManager->SoundManager.StopMusic("level1ogg.ogg");
//#endif
TrySaveGame();
DisapplySignalsToGame();
ApplySignalsToMenu();
GameState = CONST_GAMESTATE_MENU;
OnDrawSignal.disconnect(boost::bind(&TGameLevel::Draw, boost::ref(GameLevel)));
}
void TMyApplication::GoFromMenuToCredits()
{
GameState = CONST_GAMESTATE_FROM_MENU_TO_CREDITS;
StateTimer = CONST_CREDITS_SHOW_TIME;
GameCredits.StartAppear();
OnDrawSignal.connect(1, boost::bind(&TGameCredits::Draw, boost::ref(GameCredits)));
DisapplySignalsToMenu();
}
void TMyApplication::GoFromCreditsToMenu()
{
GameState = CONST_GAMESTATE_FROM_CREDITS_TO_MENU;
StateTimer = CONST_CREDITS_SHOW_TIME;
GameCredits.StartDisappear();
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
DisapplySignalsToCredits();
}
void TMyApplication::MarkSetGameLevelPause()
{
OnDrawSignal.connect(0, boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
}
void TMyApplication::MarkReleaseGameLevelPause()
{
OnDrawSignal.disconnect(boost::bind(&TGameMenu::Draw, boost::ref(Menu)));
}
void TMyApplication::OpenNextLevel()
{
Menu.OpenNextLevel();
} }
bool TMyApplication::IsLoaded() bool TMyApplication::IsLoaded()

View File

@ -24,93 +24,18 @@
#include "boost/signals2.hpp"//Signal must be included after asio #include "boost/signals2.hpp"//Signal must be included after asio
#include "gamecode.h"
#include "menucode.h"
#include "creditscode.h"
#include "loadingcode.h"
using namespace SE; using namespace SE;
extern boost::signals2::signal<void(Vector2f)> OnTapUpSignal;
extern boost::signals2::signal<void(Vector2f)> OnTapUpAfterMoveSignal;
extern boost::signals2::signal<void(Vector2f)> OnTapDownSignal;
extern boost::signals2::signal<void(Vector2f)> OnFlingSignal;
extern boost::signals2::signal<void(Vector2f)> OnScrollSignal;
extern boost::signals2::signal<void()> OnDrawSignal;
extern const std::string CONST_BLOCK_TEXTURE1;
extern const std::string CONST_BLOCK_TEXTURE2;
extern const std::string CONST_BLOCK_TEXTURE3;
extern const std::string CONST_BONUS_GOTHROUGH_TEXTURE;
extern const std::string CONST_BONUS_MULTIPLIER_TEXTURE;
extern const std::string CONST_BONUS_FLOOR_TEXTURE;
extern const std::string CONST_BALL_TEXTURE;
extern const std::string CONST_BALLGLOW_TEXTURE;
extern const std::string CONST_WALL_LEFT_TEXTURE;
extern const std::string CONST_WALL_RIGHT_TEXTURE;
extern const std::string CONST_WALL_UP_TEXTURE;
extern const std::string CONST_WALL_BONUS_TEXTURE;
extern const std::string CONST_REFLECTOR_TEXTURE;
extern const std::string CONST_BACK_BTN_TEXTURE;
extern const std::string CONST_SLIDE_UP_BTN_TEXTURE;
extern const std::string CONST_TAP_TO_CONTINUE_BTN_TEXTURE;
extern const std::string CONST_BACK_BTN_TEXTURE;
extern const std::string CONST_SLIDE_UP_BTN_TEXTURE;
extern const std::string CONST_TAP_TO_CONTINUE_BTN_TEXTURE;
extern const std::string CONST_LOADING_TEXTURE;
extern const std::string CONST_LOGO_SMALL_TEXTURE;
extern const std::string CONST_LOADING_BACKGROUND_BLACK;
extern const std::string CONST_CREDITS_TEXTURE;
const int CONST_GAMESTATE_LEVEL = 1;
const int CONST_GAMESTATE_MENU = 0;
const int CONST_GAMESTATE_FROM_MENU_TO_LEVEL = 2;
const int CONST_GAMESTATE_FROM_MENU_TO_CREDITS = 3;
const int CONST_GAMESTATE_CREDITS = 4;
const int CONST_GAMESTATE_FROM_CREDITS_TO_MENU = 5;
const int CONST_GAMESTATE_LOADING = 6;
const int CONST_GAMESTATE_PRELOADING = 7;
class TMyApplication : public TApplication class TMyApplication : public TApplication
{ {
protected: protected:
TGameMenu Menu;
TGameLevel GameLevel;
TGameCredits GameCredits;
TGameLoading GameLoading;
int GameState;
float StateTimer;
void TryLoadSavedGame();
void TrySaveGame();
bool Inited; bool Inited;
std::vector<std::pair<std::string, std::string> > TextureNamesToLoad;
void ApplySignalsToMenu();
void DisapplySignalsToMenu();
void ApplySignalsToGame();
void DisapplySignalsToGame();
void ApplySignalsToCredits();
void DisapplySignalsToCredits();
public: public:
TRenderPair pair;
TRenderPair rect;
bool Loaded; bool Loaded;
TMyApplication() : TApplication(), Loaded(false), Inited(false) { } TMyApplication() : TApplication(), Loaded(false), Inited(false) { }
@ -123,20 +48,10 @@ public:
virtual void InnerUpdate(size_t dt); virtual void InnerUpdate(size_t dt);
void GoFromMenuToGame(int level);
void GoFromGameToMenu();
void GoFromMenuToCredits();
void GoFromCreditsToMenu();
void MarkSetGameLevelPause();
void MarkReleaseGameLevelPause();
void OpenNextLevel();
bool IsLoaded(); bool IsLoaded();
bool IsInited(); bool IsInited();
void LoadResources();
virtual void InnerOnTapDown(Vector2f p); virtual void InnerOnTapDown(Vector2f p);

View File

@ -116,7 +116,7 @@
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/debug/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Debug</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/stage/x64/lib;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/debug/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/debug/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Debug</AdditionalLibraryDirectories>
<AdditionalDependencies>libjpeg.lib;libpng.lib;Engine.lib;opengl32.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>libjpeg.lib;libpng.lib;Engine.lib;opengl32.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
@ -158,25 +158,16 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/release/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Release</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>../../../game;../../../../tes-engine;../../../../eigen;../../../../boost_1_63_0/stage/x64/lib;../../../../boost_1_63_0/bin.v2/libs/system/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/date_time/build/msvc-14.0/release/address-model-64/link-static/threading-multi/;../../../../boost_1_63_0/bin.v2/libs/regex/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/thread/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/chrono/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../boost_1_63_0/bin.v2/libs/signals/build/msvc-14.0/release/address-model-64/link-static/threading-multi;../../../../libs/boost-gil-extension;../../../../libs/jpeg-9;../../../../libs/jpeg-9/vc10;../../../../libs/lpng1510;../x64/Release</AdditionalLibraryDirectories>
<AdditionalDependencies>libjpeg.lib;libpng.lib;Engine.lib;opengl32.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>libjpeg.lib;libpng.lib;Engine.lib;opengl32.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\..\game\creditscode.cpp" />
<ClCompile Include="..\..\..\game\gamecode.cpp" />
<ClCompile Include="..\..\..\game\loadingcode.cpp" />
<ClCompile Include="..\..\..\game\main_code.cpp" /> <ClCompile Include="..\..\..\game\main_code.cpp" />
<ClCompile Include="..\..\..\game\menucode.cpp" />
<ClCompile Include="main.cpp" /> <ClCompile Include="main.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\..\game\creditscode.h" />
<ClInclude Include="..\..\..\game\gamecode.h" />
<ClInclude Include="..\..\..\game\game_area_interface.h" />
<ClInclude Include="..\..\..\game\loadingcode.h" />
<ClInclude Include="..\..\..\game\main_code.h" /> <ClInclude Include="..\..\..\game\main_code.h" />
<ClInclude Include="..\..\..\game\menucode.h" />
<ClInclude Include="main.h" /> <ClInclude Include="main.h" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -21,18 +21,6 @@
<ClCompile Include="..\..\..\game\main_code.cpp"> <ClCompile Include="..\..\..\game\main_code.cpp">
<Filter>Файлы исходного кода</Filter> <Filter>Файлы исходного кода</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\game\menucode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\creditscode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\gamecode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
<ClCompile Include="..\..\..\game\loadingcode.cpp">
<Filter>Файлы исходного кода</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="main.h"> <ClInclude Include="main.h">
@ -41,20 +29,5 @@
<ClInclude Include="..\..\..\game\main_code.h"> <ClInclude Include="..\..\..\game\main_code.h">
<Filter>Заголовочные файлы</Filter> <Filter>Заголовочные файлы</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\game\menucode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\creditscode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\game_area_interface.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\gamecode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
<ClInclude Include="..\..\..\game\loadingcode.h">
<Filter>Заголовочные файлы</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -8,8 +8,8 @@ int APIENTRY WinMain(HINSTANCE hCurrentInst, HINSTANCE hPreviousInst,
LPSTR lpszCmdLine, int nCmdShow) LPSTR lpszCmdLine, int nCmdShow)
{ {
int width = 480; int width = 512;
int height = 320; int height = 512;
if (CreateEngine(width, height)) if (CreateEngine(width, height))