1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef DYN_WATER_H
#define DYN_WATER_H
#include "IWater.h"
#include "Rendering/GL/FBO.h"
#include "Rendering/GL/myGL.h"
#include <vector>
class CCamera;
class CDynWater : public IWater
{
public:
CDynWater();
~CDynWater();
void Draw();
void UpdateWater(CGame* game);
void Update();
void AddExplosion(const float3& pos, float strength, float size);
int GetID() const { return WATER_RENDERER_DYNAMIC; }
const char* GetName() const { return "dynamic"; }
private:
void DrawReflection(CGame* game);
void DrawRefraction(CGame* game);
void DrawWaves();
void DrawHeightTex();
void DrawWaterSurface();
void DrawDetailNormalTex();
void AddShipWakes();
void AddExplosions();
void DrawUpdateSquare(float dx,float dy, int* resetTexs);
void DrawSingleUpdateSquare(float startx, float starty,float endx,float endy);
int refractSize;
GLuint reflectTexture;
GLuint refractTexture;
GLuint rawBumpTexture[3];
GLuint detailNormalTex;
GLuint foamTex;
float3 waterSurfaceColor;
GLuint waveHeight32;
GLuint waveTex1;
GLuint waveTex2;
GLuint waveTex3;
GLuint frameBuffer;
GLuint zeroTex;
GLuint fixedUpTex;
unsigned int waveFP;
unsigned int waveVP;
unsigned int waveFP2;
unsigned int waveVP2;
unsigned int waveNormalFP;
unsigned int waveNormalVP;
unsigned int waveCopyHeightFP;
unsigned int waveCopyHeightVP;
unsigned int dwDetailNormalVP;
unsigned int dwDetailNormalFP;
unsigned int dwAddSplashVP;
unsigned int dwAddSplashFP;
GLuint splashTex;
GLuint boatShape;
GLuint hoverShape;
int lastWaveFrame;
bool firstDraw;
unsigned int waterFP;
unsigned int waterVP;
FBO reflectFBO;
FBO refractFBO;
float3 reflectForward;
float3 reflectRight;
float3 reflectUp;
float3 refractForward;
float3 refractRight;
float3 refractUp;
float3 camPosBig;
float3 oldCamPosBig;
float3 camPosBig2;
int camPosX;
int camPosZ;
struct Explosion {
Explosion(const float3& pos, float strength, float radius)
: pos(pos)
, strength(strength)
, radius(radius)
{}
float3 pos;
float strength;
float radius;
};
std::vector<Explosion> explosions;
void DrawOuterSurface();
};
#endif // DYN_WATER_H
|