Reduces memory usage for fancy water by merging two textures.
Two textures were added in 9ce51f4357
.
Reviewed By: wraitii
Tested By: Angen, Freagarach
Differential Revision: https://code.wildfiregames.com/D2983
This was SVN commit r24046.
This commit is contained in:
parent
a330d4c7d7
commit
92cbf5ead0
@ -48,8 +48,7 @@ uniform sampler2D normalMap;
|
||||
uniform sampler2D normalMap2;
|
||||
|
||||
#if USE_FANCY_EFFECTS
|
||||
uniform sampler2D waterEffectsTexNorm;
|
||||
uniform sampler2D waterEffectsTexOther;
|
||||
uniform sampler2D waterEffectsTex;
|
||||
#endif
|
||||
|
||||
uniform vec4 waveParams1; // wavyEffect, BaseScale, Flattenism, Basebump
|
||||
@ -164,7 +163,7 @@ void main()
|
||||
vec3 normal = normalize(mix(vec3(0.0, 1.0, 0.0), ww1, clamp(baseBump + fwaviness / flattenism, 0.0, 1.0)));
|
||||
|
||||
#if USE_FANCY_EFFECTS
|
||||
vec4 fancyeffects = texture2D(waterEffectsTexNorm, gl_FragCoord.xy / screenSize);
|
||||
vec4 fancyeffects = texture2D(waterEffectsTex, gl_FragCoord.xy / screenSize);
|
||||
normal = mix(vec3(0.0, 1.0, 0.0), normal, 0.5 + waterInfo.r / 2.0);
|
||||
normal.xz = mix(normal.xz, fancyeffects.rb, fancyeffects.a / 2.0);
|
||||
#else
|
||||
@ -339,8 +338,6 @@ void main()
|
||||
#endif
|
||||
|
||||
#if USE_FANCY_EFFECTS
|
||||
vec4 FoamEffects = texture2D(waterEffectsTexOther, gl_FragCoord.xy / screenSize);
|
||||
|
||||
vec3 foam1 = texture2D(normalMap, (normalCoords.st + normalCoords.zw * BigMovement * waviness / 10.0) * (baseScale - waviness / wavyEffect)).aaa;
|
||||
vec3 foam2 = texture2D(normalMap2, (normalCoords.st + normalCoords.zw * BigMovement * waviness / 10.0) * (baseScale - waviness / wavyEffect)).aaa;
|
||||
vec3 foam3 = texture2D(normalMap, normalCoords.st / 6.0 - normalCoords.zw * 0.02).aaa;
|
||||
@ -350,7 +347,7 @@ void main()
|
||||
|
||||
foam1.x = abs(foaminterp.x * WindCosSin.x) + abs(foaminterp.z * WindCosSin.y);
|
||||
|
||||
color += FoamEffects.r * FoamEffects.a * 0.4 + pow(foam1.x * (3.0 + waviness), 2.6 - waviness / 5.5);
|
||||
color += fancyeffects.g + pow(foam1.x * (3.0 + waviness), 2.6 - waviness / 5.5);
|
||||
#endif
|
||||
|
||||
float alpha = clamp(depth, 0.0, 1.0);
|
||||
|
@ -36,8 +36,7 @@ void main()
|
||||
|
||||
vec3 foam = texture2D(foamTex, -gl_TexCoord[0].xy/vec2(2.5,7.0) + vec2(0.05,-0.3)*-cos(ttime/2.0)).rbg;
|
||||
foam *= texture2D(foamTex, -gl_TexCoord[0].xy/5.0 + vec2(0.8,-0.8) + vec2(-0.05,-0.25)*-cos(ttime/2.0)*1.2).rbg;
|
||||
Tex.g = foamAlpha * clamp(foam.r * 3.0, 0.0, 1.0) * 0.4;
|
||||
|
||||
gl_FragData[0] = vec4(Tex);
|
||||
gl_FragData[1] = vec4(foam*3.0,foamAlpha);
|
||||
return;
|
||||
gl_FragColor = Tex;
|
||||
}
|
||||
|
@ -150,8 +150,7 @@ X(time)
|
||||
X(tint)
|
||||
X(transform)
|
||||
X(translation)
|
||||
X(waterEffectsTexNorm)
|
||||
X(waterEffectsTexOther)
|
||||
X(waterEffectsTex)
|
||||
X(waterTex)
|
||||
X(waveTex)
|
||||
X(waviness)
|
||||
|
@ -747,8 +747,7 @@ bool TerrainRenderer::RenderFancyWater(const CShaderDefines& context, int cullGr
|
||||
|
||||
if (WaterMgr->m_WaterFancyEffects)
|
||||
{
|
||||
m->fancyWaterShader->BindTexture(str_waterEffectsTexNorm, WaterMgr->m_FancyTextureNormal);
|
||||
m->fancyWaterShader->BindTexture(str_waterEffectsTexOther, WaterMgr->m_FancyTextureOther);
|
||||
m->fancyWaterShader->BindTexture(str_waterEffectsTex, WaterMgr->m_FancyTexture);
|
||||
}
|
||||
|
||||
if (WaterMgr->m_WaterRealDepth)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2019 Wildfire Games.
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -125,8 +125,7 @@ WaterManager::WaterManager()
|
||||
m_NeedInfoUpdate = true;
|
||||
|
||||
m_depthTT = 0;
|
||||
m_FancyTextureNormal = 0;
|
||||
m_FancyTextureOther = 0;
|
||||
m_FancyTexture = 0;
|
||||
m_FancyTextureDepth = 0;
|
||||
m_ReflFboDepthTexture = 0;
|
||||
m_RefrFboDepthTexture = 0;
|
||||
@ -162,8 +161,7 @@ WaterManager::~WaterManager()
|
||||
return;
|
||||
|
||||
glDeleteTextures(1, &m_depthTT);
|
||||
glDeleteTextures(1, &m_FancyTextureNormal);
|
||||
glDeleteTextures(1, &m_FancyTextureOther);
|
||||
glDeleteTextures(1, &m_FancyTexture);
|
||||
glDeleteTextures(1, &m_FancyTextureDepth);
|
||||
glDeleteTextures(1, &m_ReflFboDepthTexture);
|
||||
glDeleteTextures(1, &m_RefrFboDepthTexture);
|
||||
@ -267,15 +265,8 @@ int WaterManager::LoadWaterTextures()
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, (GLsizei)m_RefTextureSize, (GLsizei)m_RefTextureSize, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
|
||||
|
||||
// Create the Fancy Effects texture
|
||||
glGenTextures(1, &m_FancyTextureNormal);
|
||||
glBindTexture(GL_TEXTURE_2D, m_FancyTextureNormal);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
|
||||
glGenTextures(1, &m_FancyTextureOther);
|
||||
glBindTexture(GL_TEXTURE_2D, m_FancyTextureOther);
|
||||
glGenTextures(1, &m_FancyTexture);
|
||||
glBindTexture(GL_TEXTURE_2D, m_FancyTexture);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
@ -331,8 +322,7 @@ int WaterManager::LoadWaterTextures()
|
||||
|
||||
pglGenFramebuffersEXT(1, &m_FancyEffectsFBO);
|
||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_FancyEffectsFBO);
|
||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_FancyTextureNormal, 0);
|
||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, m_FancyTextureOther, 0);
|
||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_FancyTexture, 0);
|
||||
pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_FancyTextureDepth, 0);
|
||||
|
||||
ogl_WarnIfError();
|
||||
@ -358,10 +348,7 @@ int WaterManager::LoadWaterTextures()
|
||||
// Resize: Updates the fancy water textures.
|
||||
void WaterManager::Resize()
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, m_FancyTextureNormal);
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT, NULL);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, m_FancyTextureOther);
|
||||
glBindTexture(GL_TEXTURE_2D, m_FancyTexture);
|
||||
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0, GL_RGBA, GL_UNSIGNED_SHORT, NULL);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, m_FancyTextureDepth);
|
||||
@ -878,8 +865,8 @@ void WaterManager::RenderWaves(const CFrustum& frustrum)
|
||||
|
||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_FancyEffectsFBO);
|
||||
|
||||
GLuint attachments[2] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT };
|
||||
pglDrawBuffers(2, attachments);
|
||||
GLuint attachments[1] = { GL_COLOR_ATTACHMENT0_EXT };
|
||||
pglDrawBuffers(1, attachments);
|
||||
|
||||
glClearColor(0.0f,0.0f, 0.0f,0.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2019 Wildfire Games.
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -62,8 +62,7 @@ public:
|
||||
CTexturePtr m_FoamTex;
|
||||
|
||||
GLuint m_depthTT;
|
||||
GLuint m_FancyTextureNormal;
|
||||
GLuint m_FancyTextureOther;
|
||||
GLuint m_FancyTexture;
|
||||
GLuint m_FancyTextureDepth;
|
||||
GLuint m_ReflFboDepthTexture;
|
||||
GLuint m_RefrFboDepthTexture;
|
||||
|
Loading…
Reference in New Issue
Block a user