summaryrefslogtreecommitdiff
path: root/sample/opengl/ocean_surface.h
diff options
context:
space:
mode:
authorJason Maskell <[email protected]>2016-05-12 10:58:15 +0200
committerJason Maskell <[email protected]>2016-05-12 10:58:15 +0200
commit72b21c69e32c73abf3a18b0e962746e64faebba4 (patch)
treecd22b1b298bc865c3ae6037e8eb89a64a94203ea /sample/opengl/ocean_surface.h
parentMerge branch 'master' of https://github.com/NVIDIAGameWorks/WaveWorks (diff)
downloadwaveworks_archive-72b21c69e32c73abf3a18b0e962746e64faebba4.tar.xz
waveworks_archive-72b21c69e32c73abf3a18b0e962746e64faebba4.zip
Restructuring starts. Got some initial CMake problems sorted. Need to extend.
Diffstat (limited to 'sample/opengl/ocean_surface.h')
-rw-r--r--sample/opengl/ocean_surface.h345
1 files changed, 0 insertions, 345 deletions
diff --git a/sample/opengl/ocean_surface.h b/sample/opengl/ocean_surface.h
deleted file mode 100644
index 945d2d7..0000000
--- a/sample/opengl/ocean_surface.h
+++ /dev/null
@@ -1,345 +0,0 @@
-// Copyright (c) 2011 NVIDIA Corporation. All rights reserved.
-//
-// TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
-// *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
-// OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT,IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA
-// OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT, OR
-// CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
-// OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY
-// OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
-// EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-//
-// Please direct any bugs or questions to [email protected]
-
-#include <GFSDK_WaveWorks.h>
-#include <windows.h>
-#include <stdio.h>
-#include <GL/gl.h>
-
-// types for GL functoins not defined in WaveWorks
-typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
-typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
-typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
-
-// GL constants
-#define GL_FRAMEBUFFER 0x8D40
-#define GL_TEXTURE0 0x84C0
-#define GL_COLOR_ATTACHMENT0 0x8CE0
-#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
-#define GL_COMPILE_STATUS 0x8B81
-#define GL_LINK_STATUS 0x8B82
-#define GL_FRAGMENT_SHADER 0x8B30
-#define GL_VERTEX_SHADER 0x8B31
-#define GL_TESS_EVALUATION_SHADER 0x8E87
-#define GL_TESS_CONTROL_SHADER 0x8E88
-#define GL_GEOMETRY_SHADER 0x8DD9
-#define GL_ARRAY_BUFFER 0x8892
-#define GL_ELEMENT_ARRAY_BUFFER 0x8893
-#define GL_STATIC_DRAW 0x88E4
-#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
-#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
-#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
-#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
-#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
-#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
-#define GL_ACTIVE_ATTRIBUTES 0x8B89
-
-// DDS file reading related structures
-typedef struct
-{
- GLsizei width;
- GLsizei height;
- GLint components;
- GLenum format;
- GLint numMipmaps;
- GLubyte *pixels;
-} gliGenericImage;
-
-#ifndef _DDSURFACEDESC2
- // following structs & defines are copied from ddraw.h
-
- #ifndef DUMMYUNIONNAMEN
- #if defined(__cplusplus) || !defined(NONAMELESSUNION)
- #define DUMMYUNIONNAMEN(n)
- #else
- #define DUMMYUNIONNAMEN(n) u##n
- #endif
- #endif
-
- #ifndef MAKEFOURCC
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
- ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
- #endif //defined(MAKEFOURCC)
-
- #define DDSD_PIXELFORMAT 0x00001000l
- #define DDSD_CAPS 0x00000001l
- #define DDSD_HEIGHT 0x00000002l
- #define DDSD_WIDTH 0x00000004l
- #define DDSD_PITCH 0x00000008l
- #define DDSD_MIPMAPCOUNT 0x00020000l
- #define DDPF_FOURCC 0x00000004l
- #define DDPF_RGB 0x00000040l
- #define FOURCC_DXT1 (MAKEFOURCC('D','X','T','1'))
- #define FOURCC_DXT2 (MAKEFOURCC('D','X','T','2'))
- #define FOURCC_DXT3 (MAKEFOURCC('D','X','T','3'))
- #define FOURCC_DXT4 (MAKEFOURCC('D','X','T','4'))
- #define FOURCC_DXT5 (MAKEFOURCC('D','X','T','5'))
-
- typedef struct _DDCOLORKEY
- {
- DWORD dwColorSpaceLowValue; // low boundary of color space that is to
- // be treated as Color Key, inclusive
- DWORD dwColorSpaceHighValue; // high boundary of color space that is
- // to be treated as Color Key, inclusive
- } DDCOLORKEY;
-
- typedef struct _DDPIXELFORMAT
- {
- DWORD dwSize; // size of structure
- DWORD dwFlags; // pixel format flags
- DWORD dwFourCC; // (FOURCC code)
- union
- {
- DWORD dwRGBBitCount; // how many bits per pixel
- DWORD dwYUVBitCount; // how many bits per pixel
- DWORD dwZBufferBitDepth; // how many total bits/pixel in z buffer (including any stencil bits)
- DWORD dwAlphaBitDepth; // how many bits for alpha channels
- DWORD dwLuminanceBitCount; // how many bits per pixel
- DWORD dwBumpBitCount; // how many bits per "buxel", total
- DWORD dwPrivateFormatBitCount;// Bits per pixel of private driver formats. Only valid in texture
- // format list and if DDPF_D3DFORMAT is set
- } DUMMYUNIONNAMEN(1);
- union
- {
- DWORD dwRBitMask; // mask for red bit
- DWORD dwYBitMask; // mask for Y bits
- DWORD dwStencilBitDepth; // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits)
- DWORD dwLuminanceBitMask; // mask for luminance bits
- DWORD dwBumpDuBitMask; // mask for bump map U delta bits
- DWORD dwOperations; // DDPF_D3DFORMAT Operations
- } DUMMYUNIONNAMEN(2);
- union
- {
- DWORD dwGBitMask; // mask for green bits
- DWORD dwUBitMask; // mask for U bits
- DWORD dwZBitMask; // mask for Z bits
- DWORD dwBumpDvBitMask; // mask for bump map V delta bits
- struct
- {
- WORD wFlipMSTypes; // Multisample methods supported via flip for this D3DFORMAT
- WORD wBltMSTypes; // Multisample methods supported via blt for this D3DFORMAT
- } MultiSampleCaps;
-
- } DUMMYUNIONNAMEN(3);
- union
- {
- DWORD dwBBitMask; // mask for blue bits
- DWORD dwVBitMask; // mask for V bits
- DWORD dwStencilBitMask; // mask for stencil bits
- DWORD dwBumpLuminanceBitMask; // mask for luminance in bump map
- } DUMMYUNIONNAMEN(4);
- union
- {
- DWORD dwRGBAlphaBitMask; // mask for alpha channel
- DWORD dwYUVAlphaBitMask; // mask for alpha channel
- DWORD dwLuminanceAlphaBitMask;// mask for alpha channel
- DWORD dwRGBZBitMask; // mask for Z channel
- DWORD dwYUVZBitMask; // mask for Z channel
- } DUMMYUNIONNAMEN(5);
- } DDPIXELFORMAT;
-
- typedef struct _DDSCAPS2
- {
- DWORD dwCaps; // capabilities of surface wanted
- DWORD dwCaps2;
- DWORD dwCaps3;
- union
- {
- DWORD dwCaps4;
- DWORD dwVolumeDepth;
- } DUMMYUNIONNAMEN(1);
- } DDSCAPS2;
-
- typedef struct _DDSURFACEDESC2
- {
- DWORD dwSize; // size of the DDSURFACEDESC structure
- DWORD dwFlags; // determines what fields are valid
- DWORD dwHeight; // height of surface to be created
- DWORD dwWidth; // width of input surface
- union
- {
- LONG lPitch; // distance to start of next line (return value only)
- DWORD dwLinearSize; // Formless late-allocated optimized surface size
- } DUMMYUNIONNAMEN(1);
- union
- {
- DWORD dwBackBufferCount; // number of back buffers requested
- DWORD dwDepth; // the depth if this is a volume texture
- } DUMMYUNIONNAMEN(5);
- union
- {
- DWORD dwMipMapCount; // number of mip-map levels requestde
- // dwZBufferBitDepth removed, use ddpfPixelFormat one instead
- DWORD dwRefreshRate; // refresh rate (used when display mode is described)
- DWORD dwSrcVBHandle; // The source used in VB::Optimize
- } DUMMYUNIONNAMEN(2);
- DWORD dwAlphaBitDepth; // depth of alpha buffer requested
- DWORD dwReserved; // reserved
- DWORD lpSurface; // pointer to the associated surface memory
- union
- {
- DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use
- DWORD dwEmptyFaceColor; // Physical color for empty cubemap faces
- } DUMMYUNIONNAMEN(3);
- DDCOLORKEY ddckCKDestBlt; // color key for destination blt use
- DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use
- DDCOLORKEY ddckCKSrcBlt; // color key for source blt use
- union
- {
- DDPIXELFORMAT ddpfPixelFormat; // pixel format description of the surface
- DWORD dwFVF; // vertex format description of vertex buffers
- } DUMMYUNIONNAMEN(4);
- DDSCAPS2 ddsCaps; // direct draw surface capabilities
- DWORD dwTextureStage; // stage in multitexture cascade
- } DDSURFACEDESC2;
-#endif
-
-
-class OceanSurface
-{
- public:
- OceanSurface(bool use_texture_arrays);
- ~OceanSurface();
-
- // Quadtree handle and shader mappings
- GFSDK_WaveWorks_QuadtreeHandle hOceanQuadTree;
- UINT* pQuadTreeShaderInputMappings;
- UINT* pSimulationShaderInputMappings;
-
- // Quadtree initialization
- gfsdk_waveworks_result InitQuadTree(const GFSDK_WaveWorks_Quadtree_Params& params);
-
-
- // Initializing OpenGL functions addresses
- HRESULT InitGLFunctions(void);
-
- // Creating OpenGL programs
- GLuint LoadProgram(char *);
- GLuint CompileShader(char *text, GLenum type);
-
- // Texture loading related methods
- int LoadTexture(char * filename, GLuint * texID);
- void CreateTextures(void);
-
- // Rendering related methods
- void SetupNormalView(void);
- void Render(GFSDK_WaveWorks_SimulationHandle hSim, GFSDK_WaveWorks_Simulation_Settings settings, bool Wireframe);
-
- // Constants
- UINT ScreenWidth;
- UINT ScreenHeight;
- UINT MultiSampleCount;
- UINT MultiSampleQuality;
-
- // Programs
- GLuint WaterProgram;
-
- // Textures
- GLuint FoamIntensityTextureID;
- GLuint FoamIntensityTextureBindLocation;
- GLuint FoamDiffuseTextureID;
- GLuint FoamDiffuseTextureBindLocation;
-
- // GL resources allocated for WaveWorks during ocean surface rendering
- GFSDK_WaveWorks_Simulation_GL_Pool glPool;
-
- // Camera reated variables
- float CameraPosition[3];
- float LookAtPosition[3];
-
- float NormalViewMatrix[4][4];
- float NormalProjMatrix[4][4];
- float NormalViewProjMatrix[4][4];
-
- // Counters
- double total_time;
- float delta_time;
-
- // Input
- int MouseX,MouseY;
- float MouseDX,MouseDY;
- float Alpha;
- float Beta;
-
- // GL functions
- PFNGLACTIVETEXTUREPROC glActiveTexture;
- PFNGLATTACHSHADERPROC glAttachShader;
- PFNGLBINDBUFFERPROC glBindBuffer;
- PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
- PFNGLBINDTEXTUREPROC glBindTexture;
- PFNGLBUFFERDATAPROC glBufferData;
- PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
- PFNGLCLEARCOLORPROC glClearColor;
- PFNGLCLEARDEPTHFPROC glClearDepthf;
- PFNGLCLEARPROC glClear;
- PFNGLCOLORMASKPROC glColorMask;
- PFNGLCOMPILESHADERPROC glCompileShader;
- PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
- PFNGLCREATEPROGRAMPROC glCreateProgram;
- PFNGLCREATESHADERPROC glCreateShader;
- PFNGLDELETEBUFFERSPROC glDeleteBuffers;
- PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
- PFNGLDELETEPROGRAMPROC glDeleteProgram;
- PFNGLDELETESHADERPROC glDeleteShader;
- PFNGLDELETETEXTURESPROC glDeleteTextures;
- PFNGLDISABLEPROC glDisable;
- PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
- PFNGLDRAWELEMENTSPROC glDrawElements;
- PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
- PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
- PFNGLGENBUFFERSPROC glGenBuffers;
- PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
- PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
- PFNGLGENTEXTURESPROC glGenTextures;
- PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
- PFNGLGETERRORPROC glGetError;
- PFNGLGETINTEGERVPROC glGetIntegerv;
- PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
- PFNGLGETPROGRAMIVPROC glGetProgramiv;
- PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
- PFNGLGETSHADERIVPROC glGetShaderiv;
- PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
- PFNGLLINKPROGRAMPROC glLinkProgram;
- PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
- PFNGLPATCHPARAMETERIPROC glPatchParameteri;
- PFNGLSHADERSOURCEPROC glShaderSource;
- PFNGLTEXIMAGE2DPROC glTexImage2D;
- PFNGLTEXPARAMETERFPROC glTexParameterf;
- PFNGLTEXPARAMETERIPROC glTexParameteri;
- PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D;
- PFNGLUNIFORM1FPROC glUniform1f;
- PFNGLUNIFORM1IPROC glUniform1i;
- PFNGLUNIFORM3FVPROC glUniform3fv;
- PFNGLUNIFORM4FVPROC glUniform4fv;
- PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
- PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
- PFNGLUNMAPBUFFERPROC glUnmapBuffer;
- PFNGLUSEPROGRAMPROC glUseProgram;
- PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
- PFNGLVIEWPORTPROC glViewport;
- PFNGLGENQUERIESPROC glGenQueries;
- PFNGLDELETEQUERIESPROC glDeleteQueries;
- PFNGLQUERYCOUNTERPROC glQueryCounter;
- PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
- PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
- PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
- PFNGLTEXIMAGE3DPROC glTexImage3D;
- PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
- PFNGLREADBUFFERPROC glReadBuffer;
- PFNGLDRAWBUFFERSPROC glDrawBuffers;
-};
-
-void checkError(const char *);
-